-
Notifications
You must be signed in to change notification settings - Fork 802
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Suboptimal (?) result when going from "WGS 84" to "GDA2020 + AHD height" #2348
Comments
Hum, actually this is tricky ! Looking at:
So using the route through AGD66 and GDA94 has actually a 1.14 m accuracy, whether the more direct route has only 2.23m accuracy ! However, if using the deprecated +init=epsg:XXXX syntax,
one gets
that is the result using AUSGeoid2020. This is presumably due to internally the EPSG CRS codes being lost when using the +init=epsg:XXXX syntax (the CRS definition is derived from the EPSG one, but with the axis order altered), and thus the complicated logic of createOperations() goes through the datum codes to find CRS -> CRS transformations, whereas when using plain EPSG:4326 it will start by using it first, after trying through datum codes... Here I'm a bit at a loss to do. Seems that PROJ is too smart for that case. Or more precisely, that the EPSG database has non consistent advertized accuracies, which cause PROJ to take potential suboptimal decisions |
Without fully understanding, this strikes me as likely a bug in the EPSG database. I have a hard time believing that using a 1966 datum as an intermediary actually has better accuracy. It may be that with proj's new ability to search that this is only now becoming apparent. It is also hard to fully understand what these accuracies mean when WGS84 is involved, given that it is a family of datums with internal consistency no better than the values being discussed. |
@gdt Actually, you make good point. Digging more, I can see: Route using GDA2020 and AUSGeoid2020 (2.23m total accuracy): Route using AGD66, GDA94 (1.14m total accuracy): So the more straightforward road is not taken because it takes the PROJ entry "WGS 84 to WGS 84 (G1762)": 2m . But actually, this is not PROJ's fault. This PROJ entry is preferred because the "GDA2020 to WGS 84 (2)" (EPSG:8450), 3.0 m (which is also a no-op) exposes an even worse accuracy. So in all in all, the data in EPSG is what makes PROJ take surprising roads. Mostly the "AGD66 to WGS 84 (17)" transformation which advertizes a 1m accuracy is the main culprit... |
Are you (or the OP) going to file a bug with EPSG? My understanding is that the EPSG license is non-free so it can't really be patched in proj. On the proj side, I can see the point of having the WGS84 to WGS84(G1762) transform and that 2m is reasonable. But having done that, I would suggest considering the impact of a rule that any transform including an unqualified WGS84 have its accuracy brought up to somewhat more than 2m. I would also suggest that it's a bug in datum datasets to not clearly have WGS84(unspecified) vs the various realizations. And likely an error to say one's data is in WGS84(unqualified), in many cases. |
Just reported that to feedback@epsg.org: The PROJ software strongly leverages the EPSG database to determine which In #2348, I came to a case where the accuracies lead Particularly "AGD66 to WGS 84 (17)" (EPSG:15786) reports a 1m accuracy, This seems to be quite surprising. Looking at the comment of "AGD66 to WGS 84 (17)" (EPSG:15786), it mentions |
This is complicated issue to comment upon. There are several interweaving elements within the theme. The route WGS 84 geographic 3D > compound GDA2020 + AHD height via 2D AGD66 is seriously flawed. If you have a requirement for a 3D transformation that includes changing to a compound pseudo3D (2D + 1D) CRS, the logic should be:
In the EPSG Dataset, the Operation Accuracy is provided by the Information Source. There is no consistency in what has been and is being provided, even from within the same agency as it seems to be dependent upon the individual providing the information. Although we suggest that a 1-sigma accuracy is provided, in practice we have some RMS, a few 1-sigma, a few 2-sigma and many where we have no idea what statistic is given. We have suspicions that a majority are actually the internal precision of an adjustment, which is always likely to be much lower than the actual accuracy. A couple of years ago we investigated harmonising all of the values we carry to 1-sigma. We abandoned it as the provenance of over 60% of accuracy values was uncertain. As such, to be using Operation Accuracy for a general routing between CRS A and CRS B is not sound, from both a geodetic perspective in principle and especially when the variable values of this parameter in the EPSG Dataset is understood. @gdt said
But do not assume that newer always means more accurate. "AGD66 to WGS 84 (1)" (EPSG::1108) had an RMS error of 6m. It has been superseded by its information source by "AGD66 to WGS 84 (20)" (EPSG::6905) which is better because more points are included in its derivation. But EPSG::6905 accuracy is given as 9m RMS. And then we have a complex topic in its own right, the use of WGS 84 (EPSG::4326 or EPSG::4979). Transformations to WGS 84 with EPSG or IOGP as information source (as opposed transformations from other agencies such as US NGA) are copies of some other transformation or an artificial null transformation. These have been given a nominal accuracy of 1m. This caters for 30-40 years of tectonic plate movement in most of North America and Europe. But in Australia 1m was valid only for 15-20 years, hence EPSG::1150 ("GDA94 to WGS 84" had its accuracy changed from 1m to 3m a couple of years ago. If data has been geolocated using GPS in the past 7 years then it could be assumed to be referenced to the current WGS 84 (G1762) realization. Within a decimetre or so this is similar to ATRF2014, and EPSG::8448 can be used to transform coordinates directly to GDA2020. Bottom line is that the accuracy of "AGD66 to WGS 84 (17)" (EPSG::15786) should be totally irrelevant to a transformation from WGS 84 to GDA2020 as AGD66 should not be part of the path. |
@RogerLott Thanks a lot for those detailed explanations ! They make a lot of sense. Unfortunately your recommendations are not necessarily easy to implement with the PROJ logic without altering it considerably, although perhaps in "simple" cases like the one that triggers this ticket, one could probably improve things along the directions you give. I'm pretty sure that PROJ can be triggered in situations where it must compare added accuracies of things that aren't comparable. Like if doing CRS A to CRS B, and having to go through intermediary datums I1 or I2 if there's no direct route. In that case you'll have to compare the set of result (candidate transformation for A -> I1 + candidate transformation I1 -> B) to the set of result (candidate transformation A -> I2 + candidate transformation I2 -> B) |
While I can appreciate that the "Operation Accuracies" in the database for various operations come from various sources and are therefore not comparable, I think what proj is trying to do fundamentally needs comparable accuracies. Setting aside where that will be done and by who, it also doesn't seem easy. It also seems that there are two separate concepts which currently aren't being separated. One is the intrinsic accuracy of a datum. That is perhaps some measure of the variance between distances and angles in that datum, compared to those in ITRF2014 for the same points - but that's a difficult definition. For something like NAD27, this is considerable, due to distortions within the datum. For a modern GNSS-derived datum, much less so. That's a separate issue, perhaps, from the error in the transform -- although it seems somewhat difficult to talk about these concepts separately and rigorously. Perhaps proj's pipeline cost estimate should include not only costs for transforms, but for the intrinsic accuracy of intermediate datums. I am tentatively arriving at the notion that someone needs to assign accuracies to datums and transforms, and if EPSG isn't doing this, perhaps because it is wisely declining to bite off too much, then perhaps proj does. We have to be careful about the non-Free license, so perhaps can maintain a lookaside table of codes and accuracies. (There's a much larger issue about "WGS84", which I won't drag into this.) |
…4/GDA2020 Prior to this change, transforming to WGS 84 to GDA2020 used in priority transformation EPGS:9690 ("WGS 84 to GDA2020 (3)"), which is a Helmert transformation assuming WGS 84 ~= GDA94. But transforming from GDA2020 to WGS 84 used EPSG:8450 "GDA2020 to WGS 84 (2)" which is a no-op. Both have the same advertized accuracy 3m Similar case for WGS 84 <--> GDA94. This non symetric behaviour is clearly non-desirable in scenarios where data is transformed back and forth. I believe it is preferable to use in that situation of transformations with the same accuracy to use the one that involves the less transformation steps, ie the no-op one. Seen when checking OSGeo#2348 again (whose bulk issues happens to have been fixed by other previous commits)
Testing again with latest PROJ master, the bulk of this issue has been fixed in between. Now the pipeline just involves GDA2020 and with #3248 that further tune behaviour,
consistently with:
|
…4/GDA2020 Prior to this change, transforming to WGS 84 to GDA2020 used in priority transformation EPSG:9690 ("WGS 84 to GDA2020 (3)"), which is a Helmert transformation assuming WGS 84 ~= GDA94. But transforming from GDA2020 to WGS 84 used EPSG:8450 "GDA2020 to WGS 84 (2)" which is a no-op. Both have the same advertized accuracy 3m Similar case for WGS 84 <--> GDA94. This non symetric behaviour is clearly non-desirable in scenarios where data is transformed back and forth. I believe it is preferable to use in that situation of transformations with the same accuracy to use the one that involves the less transformation steps, ie the no-op one. Seen when checking OSGeo#2348 again (whose bulk issues happens to have been fixed by other previous commits)
returns
and takes the "Using coordinate operation Inverse of Null geographic offset from WGS 84 (geog2D) to WGS 84 (geog3D) + Inverse of AGD66 to WGS 84 (17) + AGD66 to GDA94 (11) + Inverse of Null geographic offset from GDA94 (geog3D) to GDA94 (geog2D) + GDA94 to AHD height (49) + GDA94 to GDA2020 (1)" root, using au_ga_AUSGeoid09_V1.01.tif
whereas
returns
using
au_ga_AUSGeoid2020_20180201.tif
The later should ideally also be the result of "WGS 84" to "GDA2020 + AHD height" since there is a (null) WGS 84 to GDA2020 transformation available, and there is a geoid transformation for AHD height to GDA2020 (using AUSGeoid2020). Going through older AGD66, GDA94 and AUSGeoid09 is clearly suboptimal
The text was updated successfully, but these errors were encountered: