-
Notifications
You must be signed in to change notification settings - Fork 865
Description
Kumul 34 height (EPSG:7651) is defined as:
Kumul 34 height = WGS 84 ellipsoid height - value of geoid undulation derived by bilinear interpolation of EGM96 geoid model - 0.87m = EGM96 height - 0.87m.
This works as expected when combined with EPSG:32754 (WGS 84 / UTM zone 54S). For example, you can see the 0.87m offset being applied here:
$ ./projinfo -s EPSG:32754+EPSG:7651 -t EPSG:9754 -o proj
Candidate operations found: 2
-------------------------------------
Operation No. 1:
unknown id, Inverse of UTM zone 54S + WGS 84 to WGS 84 (G2139) + Inverse of EGM96 height to Kumul 34 height (1) + Inverse of WGS 84 to EGM96 height (1), 3 m,
Papua New Guinea - Papuan fold and thrust belt.
PROJ string:
+proj=pipeline
+step +inv +proj=utm +zone=54 +south +ellps=WGS84
+step +proj=geogoffset +dh=0.87
+step +proj=vgridshift +grids=us_nga_egm96_15.tif +multiplier=1
+step +proj=unitconvert +xy_in=rad +xy_out=deg
+step +proj=axisswap +order=2,1
Example of problem
However, this height is not applied when it is combined with EPSG:5550 (PNG94 / PNGMG94 zone 54).
Specifically:
$ ./projinfo -s EPSG:5550+EPSG:7651 -t EPSG:9754 -o proj
Candidate operations found: 2
-------------------------------------
Operation No. 1:
unknown id, Inverse of Papua New Guinea Map Grid 1994 zone 54 + PNG94 to WGS 84 (1) + WGS 84 to WGS 84 (G2139) + Transformation from Kumul 34 height to WGS 84 (G2139) (ballpark vertical transformation, without ellipsoid height to vertical height correction), unknown accuracy, Papua New Guinea - onshore and offshore. Includes Bismark archipelago, Louisade archipelago, Admiralty Islands, d'Entrecasteaux Islands, northern Solomon Islands, Trobriand Islands, New Britain, New Ireland, Woodlark, and associated islands., has ballpark transformation
PROJ string:
+proj=pipeline
+step +inv +proj=utm +zone=54 +south +ellps=GRS80
+step +proj=unitconvert +xy_in=rad +xy_out=deg
+step +proj=axisswap +order=2,1
Notice how the +proj=geogoffset +dh=0.87 step is missing? This causes the output heights to be incorrect.
Inconsistent behaviour
Furthermore, converting from EPSG:5550+EPSG:7651 to EPSG:32754+EPSG:7651 does work as expected (the heights cancel out):
$ ./projinfo -s EPSG:5550+EPSG:7651 -t EPSG:32754+EPSG:7651 -o proj
Candidate operations found: 1
-------------------------------------
Operation No. 1:
unknown id, Inverse of Papua New Guinea Map Grid 1994 zone 54 + PNG94 to WGS 84 (1) + UTM zone 54S, 2 m, Papua New Guinea - onshore and offshore. Includes Bismark archipelago, Louisade archipelago, Admiralty Islands, d'Entrecasteaux Islands, northern Solomon Islands, Trobriand Islands, New Britain, New Ireland, Woodlark, and associated islands.
PROJ string:
+proj=pipeline
+step +inv +proj=utm +zone=54 +south +ellps=GRS80
+step +proj=utm +zone=54 +south +ellps=WGS84
This suggests the problem has something to do specifically with the EPSG:5550+EPSG:7651 combination.
ChatGPT concurs with this conclusion:
The 0.87 m shift is required by the Kumul 34 definition and is correctly present in the 32754+7651 → 9754 pipeline.
The 5550+7651 → 32754+7651 pipeline needs no 0.87 m because the vertical CRS is the same on both sides.
The 5550+7651 → 9754 pipeline is missing the Kumul → EGM96 → ellipsoidal vertical steps, most likely because PROJ doesn’t automatically compose that full 3D path for PNG94 + Kumul.
Any ideas how to fix this?
Environment Information
- PROJ version: 9.7.0 (built from source)
- Operation System Information: Ubuntu-20.24