Select to view content in your preferred language

Projection problem with GeoTIFFs and Mercator

5191
2
03-01-2011 11:20 PM
AnttiCastrén
Deactivated User
Hello all,

I work with navigational charts, which by industrial standard are made in Mercator projection. Each chart has individual latitude of true scale depending on the geographical area covered. Therefore I constantly need to use GeoTIFFs which are in Mercator projection(s).

Problem is that it seems that for some reason ArcGIS does not follow the GeoTIFF specification on this issue. If I read valid GeoTIFF made by another software, ArcGIS Desktop doesn't recognize the coordinate system info correctly. If I then (re)assign the coordinate system in ArcCatalog other softwares are not anymore able to align the data correctly.

The specification of Mercator projection used by GeoTIFF (CT_Mercator) is at:
http://geotiff.maptools.org/proj_list/mercator_1sp.html
It is identical to EPSG::9804/Mercator (1SP)/Mercator (variant A)



Example:
A navigational chart with 63d58m as latitude of true scale, GCS=ETRS89 (EPSG::4258)

Latitude of origin: 0
Longitude of origin: 0
False northing: 0
False easting: 0
Scale factor at origin: 0.440084879 (value which gives scale=1 at 63d58m)

If the GeoTIFF specification for CT_Mercator is followed, GeoTIFF tags would look like this:
Keyed_Information:
      GTModelTypeGeoKey (Short,1): ModelTypeProjected
      GTRasterTypeGeoKey (Short,1): RasterPixelIsArea
      GeographicTypeGeoKey (Short,1): GCS_EUREF89
      ProjectedCSTypeGeoKey (Short,1): User-Defined
      ProjectionGeoKey (Short,1): User-Defined
      ProjCoordTransGeoKey (Short,1): CT_Mercator
      ProjNatOriginLongGeoKey (Double,1): 0               
      ProjNatOriginLatGeoKey (Double,1): 0
      ProjScaleAtNatOriginGeoKey (Double,1): 0.440084879                  
      ProjFalseEastingGeoKey (Double,1): 0               
      ProjFalseNorthingGeoKey (Double,1): 0          
      ProjLinearUnitsGeoKey (Short,1): Linear_Meter
End_Of_Keys.

Unfortunately ArcGIS does not use the scale information at all. It projects the GeoTIFF as having scale=1 at the Equator. The Spatial Reference information at Layer Properties looks like this:

Spatial Reference: Mercator_1SP
Linear unit: Meter (1.000000)
Angular unit: Degree (0.01745.....)
false_easting: 0
false_northing: 0
central_meridian: 0
standard_parallel: 0
Datum: D_ETRS_1989

As result the data is shown around latitude 34.75 instead of the correct area aroung 64. Of course the longitude is affected also, its around 10 instead of 23.

On the other hand if I assign the raster with following custom coordinate system information in ArcGIS, I get the data aligned correctly - but only in ArcGIS.

Projection: Mercator
Linear unit: Meter (1.000000)
Angular unit: Degree (0.01745.....)
false_easting: 0
false_northing: 0
central_meridian: 0
standard_parallel: 63.96666666666667
Datum: D_ETRS_1989

The ArcGIS writes following information into GeoTIFF header:
Keyed_Information:
      GTModelTypeGeoKey (Short,1): ModelTypeProjected
      GTRasterTypeGeoKey (Short,1): RasterPixelIsArea
      GTCitationGeoKey (Ascii,34): "PCS Name = Mercator_63d58m_ETRS89"
      GeographicTypeGeoKey (Short,1): User-Defined
      GeogCitationGeoKey (Ascii,66): "GCS Name = GCS_ETRS_1989|Ellipsoid = GRS_1980|Primem = Greenwich|"
      GeogGeodeticDatumGeoKey (Short,1): Datum_European_Reference_System_1989
      GeogAngularUnitsGeoKey (Short,1): Angular_Degree
      GeogSemiMajorAxisGeoKey (Double,1): 6378137         
      GeogInvFlatteningGeoKey (Double,1): 298.257222      
      GeogPrimeMeridianLongGeoKey (Double,1): 0               
      ProjectedCSTypeGeoKey (Short,1): User-Defined
      ProjectionGeoKey (Short,1): User-Defined
      ProjCoordTransGeoKey (Short,1): CT_Mercator
      ProjLinearUnitsGeoKey (Short,1): Linear_Meter
      ProjNatOriginLongGeoKey (Double,1): 0               
      ProjNatOriginLatGeoKey (Double,1): 63.9666667      
      ProjFalseEastingGeoKey (Double,1): 0               
      ProjFalseNorthingGeoKey (Double,1): 0               
      ProjScaleAtNatOriginGeoKey (Double,1): 1               
End_Of_Keys.

When we look at the GeoTIFF keys it seems that ArcGIS would use latitude of true scale as origin which it actually does not do since the projected coordinate values are not 0 at that latitude. In other words ArcGIS writes Mercator (2SP) parameters in GeoTIFF's Mercator (1SP) fields. That causes major misalignment in softwares which interpret the GeoTIFF headers following the specification. My data ends up in latitude around 75.

Any suggestions how I can end up with a solution where I can read same true Mercator GeoTIFF-file in ArcGIS and other software (Geomedia for example) without changing the coordinate system metadata every time? Is the only feasible solution to create two versions every time when new GeoTIFF is created?
0 Kudos
2 Replies
AnttiCastrén
Deactivated User
Hi again,

I want to correct one detail in my original post. I wrote that...


When we look at the GeoTIFF keys it seems that ArcGIS would use latitude of true scale as origin which it actually does not do since the projected coordinate values are not 0 at that latitude. In other words ArcGIS writes Mercator (2SP) parameters in GeoTIFF's Mercator (1SP) fields. That causes major misalignment in softwares which interpret the GeoTIFF headers following the specification. My data ends up in latitude around 75.


Strictly speaking behavior with coordinate values 0 at the latitude other than the Equator would not be Mercator (2SP)/EPSG::9805 but Mercator (Variant C).

See: www.epsg.org/guides/docs/G7-2.pdf
0 Kudos
RobertRaphael
Deactivated User
Have you tried the link below:

http://arcscripts.esri.com/details.asp?dbid=16185

Rob
0 Kudos