[Proj] Converting Mercator Meters to Degrees

Christopher Portka cportka at newwireless.com
Thu Feb 1 12:42:39 EST 2007

I'm trying to convert a UTM easting value to an easting in mercator meters and
then to its correct longitude.  The conversion from UTM to mercator is fine and
defined in the following way using the OGR library (I'm given a proper UTM
easting, northing, and zone):

   OGRSpatialReference utm;
   OGRSpatialReference mm;
   OGRCoordinateTransformation *transform;

   utm.SetProjCS("UTM / WGS84");
   utm.SetUTM(UTMzone, TRUE);

   mm.SetMercator(0, 0, 1, 0, 0);

   transform = OGRCreateCoordinateTransformation(&utm, &mm);
   if (transform == NULL) ...

   double x = UTMEasting;
   double y = UTMNorthing;
   if (!transform->Transform(1, &x, &y))  ...

However, now I want to convert the easting (only the easting) to its appropriate
longitude value.  Looking up the conversion from mercator meters easting to
longitude I get the following conversion:

   longitude = (MMEasting / 6356752.3142) * 57.295779513082322;
   OR longitude = (easting / earthRadius) * RadToDeg;

But this gives me a slightly different value (about .1 degrees smaller) than if
did the conversion with OGR like this:

   OGRSpatialReference mm;
   OGRSpatialReference latlon;
   OGRCoordinateTransformation *transform;

   mm.SetMercator(0, 0, 1, 0, 0);

   transform = OGRCreateCoordinateTransformation(&mm, &latlon);
   if (transform == NULL) ...

   double x = MMEasting;
   double y = MMNorthing;
   if (!transform->Transform(1, &x, &y)) ...

I don't want to do this whole conversion though because I only need the
longitude.  Does anyone have an idea what I could be doing wrong in my longitude
conversion?  Is there some kind of false easting or something that gets set in
SetMercator that could be giving me differing values? I tried looking at the
source for SetMercator, but it doesn't look like it sets anything differently. 
Any help would be greatly appreciated.


More information about the Proj mailing list