Selon Trent Piepho <[email protected]>: Thanks. Would you mind attaching it in a ticket in GDAL trac : http://trac.osgeo.org/gdal/newticket ? I see you've created the ticket for the corresponding libgeotiff part. Before applying the GDAL part, I think we should wait for Frank having reviewed and applied the libgeotiff part, so that we can have round-tripping.
> Mercator_[12]SP are both the same projection in GeoTIFF. Lacking a > definition in the official specification, the intention appears to be that > for Mercator_2SP the latitude of true scale (lat_ts) should be specified in > ProjStdParallel1GeoKey and for Mercator_1SP the scale at origin (k) should > be specified in ProjScaleAtNatOriginGeoKey. As proposed here, > http://permalink.gmane.org/gmane.comp.gis.geotiff/387 > > Current behavior when creating a GTiff with 2SP is to drop lat_ts and create > a default k value of 1.0, which will product an incorrect projection. When > reading, 1SP is always used and lat_ts is ignored. It is expected that > libgeotiff will provide a default k of 1.0 if none was specified in the > file. > > This patches changes the behavior when writing to supply > ProjScaleAtNatOriginGeoKey for Mercator_1SP or ProjStdParallel1GeoKey for > Mercator_2SP. > > When reading, 2SP is used if ProjStdParallel1GeoKey is present and 1SP is > used otherwise. A warning is issued if both keys are present (and scale is > ignored). It is expected that libgeotiff's normalization will continue to > provide a default scale of 1.0 if neither parameter is present. > --- > v2 > Split out libgeotiff part. This patch does not need the libgeotiff > patch to be applied. Will write correctly without libgeotiff patch. > Reading will be unchanged unless libgeotiff is also patched. > > gdal/frmts/gtiff/gt_wkt_srs.cpp | 28 ++++++++++++++++++++++------ > 1 file changed, 22 insertions(+), 6 deletions(-) > > diff --git a/gdal/frmts/gtiff/gt_wkt_srs.cpp > b/gdal/frmts/gtiff/gt_wkt_srs.cpp > index 5934df5..0afb101 100644 > --- a/gdal/frmts/gtiff/gt_wkt_srs.cpp > +++ b/gdal/frmts/gtiff/gt_wkt_srs.cpp > @@ -737,9 +737,21 @@ char *GTIFGetOGISDefn( GTIF *hGTIF, GTIFDefn * psDefn ) > break; > > case CT_Mercator: > - oSRS.SetMercator( adfParm[0], adfParm[1], > - adfParm[4], > - adfParm[5], adfParm[6] ); > + /* If a lat_ts was specified use 2SP, otherwise use 1SP */ > + if (psDefn->ProjParmId[2] == ProjStdParallel1GeoKey) > + { > + if (psDefn->ProjParmId[4] == ProjScaleAtNatOriginGeoKey) > + CPLError( CE_Warning, CPLE_AppDefined, > + "Mercator projection should not define both > StdParallel1 and ScaleAtNatOrigin.\n" > + "Using StdParallel1 and ignoring > ScaleAtNatOrigin.\n" ); > + oSRS.SetMercator2SP( adfParm[2], > + adfParm[0], adfParm[1], > + adfParm[5], adfParm[6]); > + } > + else > + oSRS.SetMercator( adfParm[0], adfParm[1], > + adfParm[4], > + adfParm[5], adfParm[6] ); > > if (psDefn->Projection == 1024 || psDefn->Projection == 9841) // > override hack for google mercator. > { > @@ -1510,14 +1522,18 @@ int GTIFSetFromOGISDefn( GTIF * psGTIF, const char > *pszOGCWKT ) > GTIFKeySet(psGTIF, ProjNatOriginLongGeoKey, TYPE_DOUBLE, 1, > poSRS->GetNormProjParm( SRS_PP_CENTRAL_MERIDIAN, 0.0 ) ); > > - GTIFKeySet(psGTIF, ProjScaleAtNatOriginGeoKey, TYPE_DOUBLE, 1, > - poSRS->GetNormProjParm( SRS_PP_SCALE_FACTOR, 1.0 ) ); > - > GTIFKeySet(psGTIF, ProjFalseEastingGeoKey, TYPE_DOUBLE, 1, > poSRS->GetProjParm( SRS_PP_FALSE_EASTING, 0.0 ) ); > > GTIFKeySet(psGTIF, ProjFalseNorthingGeoKey, TYPE_DOUBLE, 1, > poSRS->GetProjParm( SRS_PP_FALSE_NORTHING, 0.0 ) ); > + > + if( EQUAL(pszProjection,SRS_PT_MERCATOR_2SP) ) > + GTIFKeySet(psGTIF, ProjStdParallel1GeoKey, TYPE_DOUBLE, 1, > + poSRS->GetNormProjParm( SRS_PP_STANDARD_PARALLEL_1, > 0.0 ) ); > + else > + GTIFKeySet(psGTIF, ProjScaleAtNatOriginGeoKey, TYPE_DOUBLE, 1, > + poSRS->GetNormProjParm( SRS_PP_SCALE_FACTOR, 1.0 ) ); > } > > else if( EQUAL(pszProjection,SRS_PT_OBLIQUE_STEREOGRAPHIC) ) > -- > 1.7.10.4 > > _______________________________________________ gdal-dev mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/gdal-dev
