------------------------------------------------------------------------------- =============================================================================== Test the 4D API handling of cs2cs style transformation options. These tests are mostly based on the same material as those in more_builtins.gie, since we are testing the same kinds of things, but provided through a different interface. =============================================================================== <gie> ------------------------------------------------------------------------------- Test the handling of the +towgs84 parameter. ------------------------------------------------------------------------------- (additional tests of the towgs84 handling can be found in DHDN_ETRS89.gie) ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- This example is from Lotti Jivall: "Simplified transformations from ITRF2008/IGS08 to ETRS89 for maritime applications" (see also more_builtins.gie) ------------------------------------------------------------------------------- operation proj=geocent towgs84 = 0.676780, 0.654950, -0.528270, -0.022742, 0.012667, 0.022704, -0.01070 ------------------------------------------------------------------------------- tolerance 1 um direction inverse accept 3565285.00000000 855949.00000000 5201383.00000000 expect 3565285.41342351 855948.67986759 5201382.72939791 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- This example is a random point, transformed from ED50 to ETRS89 using KMStrans2. ------------------------------------------------------------------------------- operation proj=latlong ellps=intl towgs84 = -081.07030, -089.36030, -115.75260, 000.48488, 000.02436, 000.41321, -0.540645 ------------------------------------------------------------------------------- tolerance 25 mm accept 16.82 55.17 61.0 expect 16.8210462130 55.1705688946 29.0317 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation proj=latlong nadgrids=nzgd2kgrid0005.gsb ellps=GRS80 ------------------------------------------------------------------------------- This functionality is also tested in DHDN_ETRS89.gie ------------------------------------------------------------------------------- tolerance 1 mm ignore pjd_err_failed_to_load_grid accept 173 -45 expect 172.999892181021551 -45.001620431954613 direction inverse accept 172.999892181021551 -45.001620431954613 expect 173 -45 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- operation proj=latlong geoidgrids=egm96_15.gtx ellps=GRS80 ------------------------------------------------------------------------------- tolerance 15 cm # lax tolerance due to widespread bad egm96 file ignore pjd_err_failed_to_load_grid accept 12.5 55.5 0 expect 12.5 55.5 -36.0213 direction inverse accept 12.5 55.5 -36.0213 expect 12.5 55.5 0 ------------------------------------------------------------------------------- operation proj=merc geoidgrids=egm96_15.gtx ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm ignore pjd_err_failed_to_load_grid accept 12.5 55.5 0 expect 1391493.63492 7424275.19462 -36.0213 direction inverse accept 1391493.63492 7424275.19462 -36.0213 expect 12.5 55.5 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Same as the two above, but also do axis swapping. ------------------------------------------------------------------------------- NOTE: A number of the tests below are commented out. The actually do the right thing, but the gie distance computation is not yet able to cope with "unusual" axis orders ------------------------------------------------------------------------------- operation proj=latlong geoidgrids=egm96_15.gtx axis=neu ellps=GRS80 ------------------------------------------------------------------------------- tolerance 15 cm # lax tolerance due to widely distributed, bad egm96 file ignore pjd_err_failed_to_load_grid accept 12.5 55.5 0 expect 55.5 12.5 -36.0213 direction inverse accept 55.5 12.5 -36.0213 expect 12.5 55.5 0 ------------------------------------------------------------------------------- operation proj=latlong geoidgrids=egm96_15.gtx axis=dne ellps=GRS80 ------------------------------------------------------------------------------- tolerance 15 cm # lax tolerance due to widely distributed, bad egm96 file ignore pjd_err_failed_to_load_grid # accept 12.5 55.5 0 # expect 36.0213 55.5 12.5 # direction inverse # accept 36.0213 55.5 12.5 # expect 12.5 55.5 0 ------------------------------------------------------------------------------- operation proj=merc geoidgrids=egm96_15.gtx ellps=GRS80 ------------------------------------------------------------------------------- tolerance 0.1 mm ignore pjd_err_failed_to_load_grid accept 12.5 55.5 0 expect 1391493.63492 7424275.19462 -36.0213 direction inverse accept 1391493.63492 7424275.19462 -36.0213 expect 12.5 55.5 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Some more complex axis swapping. ------------------------------------------------------------------------------- operation proj=latlong geoidgrids=egm96_15.gtx axis=nue ellps=GRS80 ------------------------------------------------------------------------------- tolerance 15 cm # lax tolerance due to widely distributed, bad egm96 file ignore pjd_err_failed_to_load_grid accept 12.5 55.5 0 expect 55.5 -36.0213 12.5 # direction inverse # accept 55.5 -36.0213 12.5 # expect 12.5 55.5 0 ------------------------------------------------------------------------------- operation proj=merc geoidgrids=egm96_15.gtx axis=sue ellps=GRS80 ------------------------------------------------------------------------------- tolerance 15 cm ignore pjd_err_failed_to_load_grid accept 12.5 55.5 0 expect -7424275.1946 -36.0213 1391493.6349 0.0000 # direction inverse # accept -7424275.1946 -36.0213 1391493.6349 0.0000 # expect 12.5 55.5 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- A test case from a comment by Github user c0nk ------------------------------------------------------------------------------- operation proj=somerc lat_0=46.95240555555556 lon_0=7.439583333333333 k_0=1 x_0=2600000 y_0=1200000 ellps=bessel towgs84=674.374,15.056,405.346 no_defs ------------------------------------------------------------------------------- tolerance 20 cm accept 7.438632495 46.951082877 expect 2600000.0 1200000.0 ------------------------------------------------------------------------------- Same test, but now implemented as a pipeline. This is for testing a nasty bug, where, at the end of pipeline creation, a false warning about missing ellps was left behind from the creation of the Helmert step (now repaired in pj_init). ------------------------------------------------------------------------------- operation proj=pipeline step proj=cart ellps=WGS84 no_defs step proj=helmert x=674.37400 y=15.05600 z=405.34600 inv no_defs step proj=cart ellps=bessel no_defs inv step proj=somerc lat_0=46.95240555555556 lon_0=7.439583333333333 k_0=1 x_0=2600000 y_0=1200000 ellps=bessel units=m no_defs ------------------------------------------------------------------------------- tolerance 20 cm accept 7.438632495 46.951082877 expect 2600000.0 1200000.0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Make sure that transient errors are returned correctly. ------------------------------------------------------------------------------- operation +proj=geos +lon_0=0.00 +lat_0=0.00 +a=6378169.00 +b=6356583.80 +h=35785831.0 ------------------------------------------------------------------------------- accept 85.05493299 46.5261074 expect failure accept 85.05493299 46.5261074 0 expect failure accept 85.05493299 46.5261074 0 0 expect failure ------------------------------------------------------------------------------- Test that Google's Web Mercator works as intended (see #834 for details). ------------------------------------------------------------------------------- operation proj=pipeline step init=epsg:26915 inv step init=epsg:3857 ------------------------------------------------------------------------------- tolerance 20 cm accept 487147.594520173 4934316.46263998 expect -10370728.80 5552839.74 accept 487147.594520173 4934316.46263998 0 expect -10370728.80 5552839.74 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Test Google's Web Mercator with +proj=webmerc ------------------------------------------------------------------------------- operation proj=pipeline step init=epsg:26915 inv step proj=webmerc datum=WGS84 ------------------------------------------------------------------------------- tolerance 20 cm accept 487147.594520173 4934316.46263998 expect -10370728.80 5552839.74 accept 487147.594520173 4934316.46263998 0 expect -10370728.80 5552839.74 0 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Web Mercator test data from EPSG Guidance Note 7-2, p. 44. ------------------------------------------------------------------------------- operation proj=webmerc tolerance 1 cm accept -100.33333333 24.46358028 expect -11169055.58 2810000.00 accept -100.33333333 24.38178694 expect -11169055.58 2800000.00 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Test that +datum parameters are handled correctly in pipelines. See #872 for details. ------------------------------------------------------------------------------- operation +proj=pipeline +step +proj=longlat +datum=GGRS87 +inv +step +proj=longlat +datum=WGS84 ------------------------------------------------------------------------------- tolerance 20 cm accept 23.7275 37.9838 0 expect 23.729194873180 37.986398897578 31.289740102 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Test that +towgs84=0,0,0 parameter is handled as still implying cart transformation ------------------------------------------------------------------------------- operation +proj=pipeline +step +proj=utm +zone=11 +ellps=clrk66 +towgs84=0,0,0 +inv +step +proj=utm +zone=11 +datum=WGS84 ------------------------------------------------------------------------------- tolerance 20 cm accept 440720 3751320 0 expect 440719.958709357 3751294.2109841 -4.44340920541435 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Test that pipelines with unit mismatch between steps can't be constructed. ------------------------------------------------------------------------------- operation +proj=pipeline +step +proj=merc +step +proj=merc expect failure pjd_err_malformed_pipeline operation +proj=pipeline +step +proj=latlong +step +proj=merc +step +proj=helmert +x=200 +y=100 expect failure pjd_err_malformed_pipeline operation +proj=pipeline +step +proj=merc +step +proj=unitconvert +xy_in=m +xy_out=km accept 12 56 expect 1335.8339 7522.963 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Test bugfix of https://github.com/OSGeo/proj.4/issues/1002 (do not interpolate nodata values) ------------------------------------------------------------------------------- operation +proj=latlong +ellps=WGS84 +geoidgrids=tests/test_nodata.gtx ------------------------------------------------------------------------------- ignore pjd_err_failed_to_load_grid accept 4.05 52.1 0 expect 4.05 52.1 -10 ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Test bug fix of https://github.com/OSGeo/proj.4/issues/1025. Using geocent in the new API with a custom ellipsoid should return coordinates that correspond to that particular ellipsoid and not WGS84 as demonstrated in the bug report. ------------------------------------------------------------------------------- operation +proj=pipeline +step +proj=longlat +a=3396190 +b=3376200 +inv +step +proj=geocent +a=3396190 +b=3376200 +lon_0=0 +units=m accept 0.0 0.0 0.0 expect 3396190.0 0.0 0.0 roundtrip 1 operation +proj=geocent +a=3396190 +b=3376200 +lon_0=0 +units=m accept 0.0 0.0 0.00 expect 3396190.0 0.0 0.0 roundtrip 1 ------------------------------------------------------------------------------- Check that geocent and cart take into account to_meter (#1053) ------------------------------------------------------------------------------- operation +proj=geocent +a=1000 +b=1000 +to_meter=1000 accept 90 0 0 expect 0 1 0 roundtrip 1 operation +proj=cart +a=1000 +b=1000 +to_meter=1000 accept 90 0 0 expect 0 1 0 roundtrip 1 ------------------------------------------------------------------------------- Check that vunits / vto_meter is honored ------------------------------------------------------------------------------- operation +proj=longlat +a=1 +b=1 +vto_meter=1000 accept 0 0 1000 expect 0 0 1 roundtrip 1 operation +proj=longlat +a=1 +b=1 +vto_meter=1000 +geoc accept 0 0 1000 expect 0 0 1 roundtrip 1 operation +proj=longlat +a=1 +b=1 +vunits=km accept 0 0 1000 expect 0 0 1 roundtrip 1 operation +proj=merc +a=1 +b=1 +vto_meter=1000 accept 0 0 1000 expect 0 0 1 roundtrip 1 operation +proj=merc +a=1 +b=1 +vunits=km accept 0 0 1000 expect 0 0 1 roundtrip 1 </gie>