# Converting between wgs84 and nad83

This is a newbie question that is about converting between wgs84 and nad83. I have aerial photos that I am trying to compute lat long coordinates for as closely as possible. There are several factors that make the usual types of corrections tricky, e.g. questionable parameters, ... so there is some trial and error involved.

Thus I need a way to check my progress as I make corrections. At first just checking against google earth was fine, but at this point the 2.5 foot or so difference between my data (nad83) and google earth(wgs84) has become a limiting factor. So I need to transform nad83 to wgs84.

I have been using rgdal in R and dotspatial in C# to do projections, but I think changing between nad83 and wgs84 isn't considered a "projection" (am I right?). Attempting to call project with "+proj=NAD83 ellps=WGS84" just throws an error.

I am fine with writing a 7 parameter coordinate change myself, except I am not sure how to convert either one to (X,Y,Z) coordinates (which I assume means converting from lat long to the surface of the ellipsoids they are based on). The existing questions on nad83 and wgs84 seem to be about which method to use, rather than answering a very basic question like mine, i.e. how does one do it at all?

• Have you applied a transformation? See blogs.esri.com/esri/arcgis/2009/05/06/… Apr 24, 2015 at 12:50
• I find that Google Earth can be off by several meters. When I flip between years in the historical images, the buildings shift in position, which leads me to think it isn't very accurate. Jul 25, 2018 at 14:08

Typically, NAD83 and WGS84 are within one meter of each other. Your concerns about differences of 2.5 feet, which are less than a meter, indicate you do need to perform this datum transformation.

Briefly, this calculation requires knowledge of when the coordinates were collected so that their movement over time can be accounted for (primarily due to the movements of underlying tectonic plates and partly due to "episodic motion associated with earthquakes"). You first convert the raw data to equivalent coordinates referenced to specific standard dates, such as 1997.0 or 2002.0. Then you look up 14 parameters describing (a) the offset, rotation, and rescaling (i.e., a seven-parameter transformation) needed to change datums at a given date together with (b) the first derivatives of those parameters with respect to time. Multiplying (b) by the elapsed time and adding to (a) gives a first-order approximation to the needed seven-parameter transformation, which you then apply.

Although the procedure is not mathematically difficult, it is rather involved and contingent on details of how your data were originally collected and processed. An NOAA paper, Transformations Between NAD83 and WGS84, provides a clear, readable explanation. It recommends you use interactive "Horizontal Time-Dependent Position" software, HTDP, available on the NOAA Website at http://www.ngs.noaa.gov/TOOLS/Htdp/Htdp.shtml. The Fortran source code consists primarily of the coefficients of the plate tectonic model plus some interface code, but I estimate around 3,000 lines actually do calculations. It could be a significant pain to port.

• It is a significant pain to port, but I did a C++ version while I was on parental leave in 2020. This is "Trans4D" which I got directly from Richard Snay who continues to work on this in his spare time in retirement. In my conversations with some geodesists at NOAA, they will be incorporating the new vertical data from this program into another version of HTDP. github.com/SonicScholar/trans4d-cpp Enjoy! Jan 25 at 23:18

I would not be sure about the accuracy of Google Earth aerial photos if it is down to 2.5 foot offset. It might just be a question of not exactly orthogonal photography.

What you might need is just an affine transformation to get your photos aligned with theirs.

• It may not be accurate to 2.5 feet, but if I can make the coordinate change then I have a means to check and see. But if google earth isn't accurate to within 2.5 feet, I don't need to be matched up to google earth. It is only useful for validation that my error corrections are headed in the right direction. Feb 10, 2015 at 19:02