I'm trying to understand the math behind this transformation. I should note that I've been able to perform the transformation using GeoPandas, but I'd like to understand what is going on under the hood.

I've got this dataset of ZIP code polygons from NYC open data, that appears to be using NAD83 / New York Long Island (ftUS) (EPSG:2263), and I'm trying to transform it to WGS84 (EPSG:4326).

How do I turn, for example, 986038.6614370644, 213051.06312088 tuple into -73.99354429600449, 40.75145227487899?

  • 1
    Use the available modules.. the math is quite complicated. OGR as a part of GDAL contains OSR which is an open source suite of utilities and APIs available for various languages. From memory NAD83 needs a geographic transformation to get to WGS84 (but I'm not an expert on Northern Hemisphere datums) read a bit more here: gis.stackexchange.com/questions/88262/… . If you have Esri software you will need to specify the datum transformation which could be mathematical or a grid of displacement vectors (eg: NTv2). Mar 13 '19 at 3:45
  • Some of the conversion methods are listed in proj.4 folder on git OSGeo/proj.4/src/conversions/ which can be found on Wikipedia article Geographic coordinate conversion.
    – Taras
    Mar 13 '19 at 5:39

There are two atomic procedures here.

  1. Convert the projected coordinates from the State Plane zone (in US survey feet) to latitude-longitude on NAD83. (specifically, Lambert conformal conic)
  2. Convert the NAD83-based latitude-longitude values to WGS84 latitude-longitude values.

As commenters have said, try using existing software like GDAL, PROJ.4. National Geodetic Survey also has programs to do this.

For a very good document on map projections and their equations, see John P. Snyder's Map Projections: A Working Manual. (PDF)

Another document is the IOGP Guidance Note 7.2: Coordinate Conversions and Transformations including Formulas (PDF). It also talks about geographic/datum transformations like what you would need to do for step 2.

You should be aware of how any package or program you use handles geographic/datum transformations. Some hard-code a transformation directly to a geographic coordinate reference system (CRS)/datum object, others have a default, and still others have you specify it during the transformation step.

NAD83 and WGS84 were originally considered equivalent back when they were defined, but they aren't any more. There are also multiple realizations / re-adjustments for both CRS. Today they're about a meter apart in the contiguous US. Your data could really be on the original NAD83, but is more likely to be on a re-adjustment like the current NAD83 (2011) or the earlier NAD83 (HARN), etc. There are file-based methods like the US NGS NADCON and GEOCON that convert between the US realizations. There are more methods that use equations directly rather than calculating offsets from an on-disk file.

Part of deciding which transformation and method to use depends on how accurate the input data is, and how accurate you want the output data to be.

Disclosure: I work for Esri and I am on the subcommittee that maintains the EPSG Geodetic Parameter Registry.

  • Thank you, this is very helpful. I know I can use proj.4, etc. Before your (very good) answer I had already reverse engineered proj.4 with gdb to figure out what it was doing to transform. Thank you for the references! Exactly what I was hoping for in an answer.
    – Alex Launi
    Mar 14 '19 at 12:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.