[gdal-dev] +proj=etmerc in ogr2ogr

Even Rouault even.rouault at mines-paris.org
Mon Oct 8 13:07:10 PDT 2012


> However, if I try to run ogr2ogr like:
> 
>  ogr2ogr -s_srs "EPSG:25832" -t_srs "+proj=etmerc +lat_0=0 +lon_0=9
> +k=0.9996
>  +units=m +x_0=500000 +datum=WGS84 +nodefs" C:\DHM\analysis\bakke2.shp
> C:\DHM\analysis\shape\
> bakke.shp
> 
> I get the following error:
> 
> Failed to process SRS definition: +proj=etmerc +lat_0=0 +lon_0=9 +k=0.9996
> +unit
> s=m +x_0=500000 +datum=WGS84 +nodefs
> 
> It works fine if I change +proj=etmerc to +proj=tmerc. Seems to me, that
> somehow +proj=etmerc is not build into the "metadata system" of gdal/ogr,
> so that it is not translatable to e.g. a ESRI-wkt definition. Might this be
> that case, and if so, what should I update in order to get this to work?

Simon,

When passing a proj.4 string to GDAL/OGR, it will try to construct a 
OGRSpatialReference object, which is a model of the WKT representation of the 
SRS. To be able to do that, it must recognize projection methods, and this is 
consequently hard-coded in ogr/ogr_srs_proj4.cpp.

There's no code currently to recognized +proj=etmerc, hence the failure.

However, there's a workaround. In GDAL 2.0dev, you could just add "+wktext" in 
the proj.4 string :

$ testepsg "+proj=etmerc +lat_0=0 +lon_0=9 +k=0.9996 +units=m +x_0=500000 
+datum=WGS84 +nodefs +wktext"
Validate Fails.
WKT[+proj=etmerc +lat_0=0 +lon_0=9 +k=0.9996 +units=m +x_0=500000 +datum=WGS84 
+nodefs +wktext] =

PROJCS["unnamed",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            TOWGS84[0,0,0,0,0,0,0],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9108"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["custom_proj4"],
    UNIT["Meter",1],
    EXTENSION["PROJ4","+proj=etmerc +lat_0=0 +lon_0=9 +k=0.9996 +units=m 
+x_0=500000 +datum=WGS84 +nodefs +wktext"]]

The WKT representation built is somewhat invalid (see the "custom_proj4" 
PROJECTION), but it has a PROJ4 EXTENSION with the correct proj.4 string, 
hence the reprojection computations will work as expected.

That syntaxic sugar is new to GDAL 2.0dev and doesn't work in previous 
versions. So for GDAL 1.9, you would have to put the above WKT into a file and 
use it as the -t_srs argument.

The drawback of this is that the "custom_proj4" projection cannot be 
translated into something useful in a ESRI .PRJ file.

The best is then to use a more standard WKT of a TM projection, but with the 
appropriate proj.4 extension with etmerc :

PROJCS["unnamed",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            TOWGS84[0,0,0,0,0,0,0],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0,
            AUTHORITY["EPSG","8901"]],
        UNIT["degree",0.0174532925199433,
            AUTHORITY["EPSG","9108"]],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",9],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",0],
    UNIT["Meter",1],
    EXTENSION["PROJ4","+proj=etmerc +lat_0=0 +lon_0=9 +k=0.9996 +units=m 
+x_0=500000 +datum=WGS84 +nodefs +wktext"]]

Let's suppose you put it into etmerc.wkt, then you can use :

ogr2ogr -t_srs etmerc.wkt destination.shp source.shp

Note that ogrinfo on the destination.shp will report standard TM, and will not 
have any more the etmerc method, so if you need to reproject afterwards, you 
will need to specify explicitely the etmerc.wkt again.

I've opened the http://trac.osgeo.org/gdal/ticket/4853 ticket with a proposed 
patch to make things more user friendly. I haven't applied it yet, because I 
would appreciate FrankW's opinion to know if this is the right way of dealing 
with that. etmerc is something particular, since it isn't per se a projection, 
but rather a projection computation algorithm. I don't think that GDAL has 
already dealt with that kind of situation.

Best regards,

Even


More information about the gdal-dev mailing list