3

I'm trying to use NOAA's VDatum to verify the NAVD88 -> WGS84 datum conversion in a c++ datum conversion library that I've written.

The answers didn't agree, so I attempted to check a simple ITRF2008 -> ITRF2005 conversion, which should just use a single helmert transformation, and again the results don't agree.

Our helmert transform in question was written using the 7 parameter method in EPSG guidance 7.2 (using the position vector transform notation, the same as IERS), and tested against the GIGS dataset.

Using the (7 parameter) 2008 to 2000 Parameters from IERS Conventions (2010) page 41 yields the following transform*:

  • X: 1513460.90425574 -> 1513460.90372061
  • Y: -4463118.57366578 -> -4463118.58057589
  • Z: 4283412.81104103 -> 4283412.81065335

(* small angle approximation, position vector rotation)

but the VDatum results are several centimeters offset in Z and several millimeters offset in X/Y, which I wouldn't expect if we were using the same transform and parameters:

enter image description here

So my question is, does anyone know whether VDatum uses the IERS specified transformation parameters for ITRFXX to ITRFYY conversions, or even better, what parameters at what epochs are being used?

NOTE: I realize the precision shown here is substantially greater than the accuracy in the parameters themselves, but I'm just trying to verify the math is done correctly, not that the results are accurate to the given number of decimal places. The same transform with the same parameters should match much closer than the second decimal place.

  • If it's anything like HTDP, it's actually running through a third system (aka there are two transformations), so yeah, it'll never match. The latest version doesn't seem to have source code and earlier versions that I have didn't include ITRF2008, so I can't confirm what it's doing. – mkennedy Apr 12 '16 at 23:28
  • @mkennedy interesting. I'm surprised they wouldn't use an ITRF for their intermediate system, since they seem to be the only ones which have helmert parameters readily available. – Nicolas Holthaus Apr 13 '16 at 14:21
  • 2
    Nicolas, I spoke with some of the people responsible for it a few weeks ago and they were quite responsive. You might ask about it via the website contact information.. – mkennedy Apr 13 '16 at 16:18
  • @mkennedy good to know. I've put in a request for information. – Nicolas Holthaus Apr 13 '16 at 16:24
1

Here is the answer I got back from NOAA. It's in the form of java code, and the order of parameters has to be inferred, but in case it proves useful to someone else here it is:

public static final HTDP NAD83 = new HTDP(0.9910, -1.9072, -0.5129, 0, 0, 0, 1.25033e-7, 0.46785e-7, 0.56529e-7, 0.00258e-7, -0.03599e-7, -0.00153e-7, 0, 0, 1997);
public static final HTDP ITRF88 = new HTDP(0.018, 0, -0.092, 0, 0, 0, -0.0001 / rhosec, 0, 0, 0, 0, 0, 0.74e-8, 0, 1988);
public static final HTDP ITRF89 = new HTDP(0.023, 0.036, -0.068, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.43e-8, 0, 1988);
public static final HTDP ITRF90 = new HTDP(0.018, 0.012, -0.030, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.09e-8, 0, 1988);
public static final HTDP ITRF91 = new HTDP(0.020, 0.016, -0.014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.06e-8, 0, 1988);
public static final HTDP ITRF92 = new HTDP(0.008, 0.002, -0.008, 0, 0, 0, 0, 0, 0, 0, 0, 0, -0.08e-8, 0, 1988);
public static final HTDP ITRF93 = new HTDP(0.006, -0.005, -0.015, -0.0029, 0.0004, 0.0008, 0.00039 / rhosec, -0.0008 / rhosec, 0.00096 / rhosec, 0.00011 / rhosec, 0.00019 / rhosec, -0.00005 / rhosec, 0.04e-8, 0, 1988);
public static final HTDP ITRF96 = new HTDP(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1996);
public static final HTDP ITRF97 = new HTDP(0.00207, 0.00021, -0.00995, -0.00069, 0.00010, -0.00186, -0.00012467 / rhosec, 0.00022355 / rhosec, 0.00006065 / rhosec, -0.00001347 / rhosec, 0.00001514 / rhosec, -0.00000027 / rhosec, 0.93496e-9, 0.19201e-9, 1997);
public static final HTDP ITRF2000 = new HTDP(-0.00463, -0.00589, 0.00855, -0.00069, 0.00070, -0.00046, -0.00012467 / rhosec, 0.00022355 / rhosec, 0.00006065 / rhosec, -0.00001347 / rhosec, 0.00001514 / rhosec, 0.00001973 / rhosec, -0.61504e-9, 0.18201e-9, 1997);
public static final HTDP PACP00 = new HTDP(0.9056, -2.0200, -0.5516, -0.00069, 0.00070, -0.00046, 0.027616 / rhosec, 0.013692 / rhosec, 0.002773 / rhosec, -0.000397 / rhosec, 0.001022 / rhosec, -0.002166 / rhosec, -0.61504e-9, 0.18201e-9, 1997);
public static final HTDP MARP00 = new HTDP(0.9056, -2.0200, -0.5516, -0.00069, 0.00070, -0.00046, 0.28847 / rhosec, 0.010644 / rhosec, 0.008989 / rhosec, -0.000033 / rhosec, 0.000120 / rhosec, -0.000327 / rhosec, -0.61504e-9, 0.18201e-9, 1997);
public static final HTDP ITRF2005 = new HTDP(-0.00533, -0.00479, 0.00895, -0.00049, 0.00060, 0.00134, -0.00012467 / rhosec, 0.00022355 / rhosec, 0.00006065 / rhosec, -0.00001347 / rhosec, 0.00001514 / rhosec, 0.00001973 / rhosec, -0.77504e-9, 0.10201e-9, 1997);
public static final HTDP ITRF2008 = new HTDP(-0.00243, -0.00389, 0.01365, -0.00079, 0.0006, 0.00134, -0.00012467 / rhosec, 0.00022355 / rhosec, 0.00006065 / rhosec, -0.00001347 / rhosec, 0.00001514 / rhosec, 0.00001973 / rhosec, -1.71504e-9, 0.10201e-9, 1997);

The order of parameters seems to be:

tx, ty, tz, rx, ry, rz, s, dtx, dty, dtx, drx, dry, drz, ds, ?, epoch.

The discrepencies seem to arise since the latest IERS standard defines all transformations in terms of the ITRF2008 frame, while VDatum uses ITRF94 as its base-frame.

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.