diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-02-13 17:26:22 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-02-13 17:26:22 +0100 |
| commit | b60b9e88ec2a5494062370f5346ecf1e0880b169 (patch) | |
| tree | dfeaf174c1a9d31d973a68aa9d6ce37f45d06c6f /test/unit/test_io.cpp | |
| parent | 4d1f5486f6453300bdb35c2607e126f6c526c243 (diff) | |
| download | PROJ-b60b9e88ec2a5494062370f5346ecf1e0880b169.tar.gz PROJ-b60b9e88ec2a5494062370f5346ecf1e0880b169.zip | |
PROJ string parsing: no longer attempt to build a CoordinateOperation object from +proj=helmert/molodensky since there are ambiguities
Diffstat (limited to 'test/unit/test_io.cpp')
| -rw-r--r-- | test/unit/test_io.cpp | 271 |
1 files changed, 3 insertions, 268 deletions
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index 3cb50352..d033508f 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -7659,15 +7659,14 @@ TEST(io, projparse_etmerc) { auto wkt1 = crs->exportToWKT( WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get()); - EXPECT_TRUE(wkt1.find("EXTENSION[\"PROJ4\"") == std::string::npos) - << wkt1; + EXPECT_TRUE(wkt1.find("EXTENSION[\"PROJ4\"") == std::string::npos) << wkt1; } // --------------------------------------------------------------------------- TEST(io, projparse_tmerc_approx) { - auto obj = - PROJStringParser().createFromPROJString("+proj=tmerc +approx +type=crs"); + auto obj = PROJStringParser().createFromPROJString( + "+proj=tmerc +approx +type=crs"); auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj); ASSERT_TRUE(crs != nullptr); auto wkt2 = crs->exportToWKT( @@ -8358,270 +8357,6 @@ TEST(io, projparse_ob_tran_longlat) { // --------------------------------------------------------------------------- -TEST(io, projparse_helmert_translation) { - std::string projString("+proj=pipeline +step +proj=unitconvert +xy_in=deg " - "+xy_out=rad +step +proj=cart +ellps=GRS80 +step " - "+proj=helmert +x=1 +y=2 +z=3 +step +inv +proj=cart " - "+ellps=GRS80 +step +proj=unitconvert +xy_in=rad " - "+xy_out=deg"); - auto obj = PROJStringParser().createFromPROJString(projString); - auto transf = nn_dynamic_pointer_cast<Transformation>(obj); - ASSERT_TRUE(transf != nullptr); - EXPECT_EQ( - transf->exportToPROJString( - PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5) - .get()), - projString); -} - -// --------------------------------------------------------------------------- - -TEST(io, projparse_helmert_translation_inv) { - std::string projString("+proj=pipeline +step +proj=unitconvert +xy_in=deg " - "+xy_out=rad +step +proj=cart +ellps=GRS80 +step " - "+inv +proj=helmert +x=1 +y=2 +z=3 +step +inv " - "+proj=cart +ellps=GRS80 +step +proj=unitconvert " - "+xy_in=rad +xy_out=deg"); - auto obj = PROJStringParser().createFromPROJString(projString); - auto transf = nn_dynamic_pointer_cast<Transformation>(obj); - ASSERT_TRUE(transf != nullptr); - EXPECT_EQ( - transf->exportToPROJString( - PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5) - .get()), - "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step " - "+proj=cart +ellps=GRS80 +step +proj=helmert +x=-1 +y=-2 +z=-3 +step " - "+inv +proj=cart +ellps=GRS80 +step +proj=unitconvert +xy_in=rad " - "+xy_out=deg"); -} - -// --------------------------------------------------------------------------- - -TEST(io, projparse_helmert_position_vector) { - std::string projString( - "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step " - "+proj=cart +ellps=GRS80 +step +proj=helmert +x=1 +y=2 +z=3 +rx=4 " - "+ry=5 +rz=6 +s=7 +convention=position_vector +step +inv +proj=cart " - "+ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg"); - auto obj = PROJStringParser().createFromPROJString(projString); - auto transf = nn_dynamic_pointer_cast<Transformation>(obj); - ASSERT_TRUE(transf != nullptr); - EXPECT_EQ( - transf->exportToPROJString( - PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5) - .get()), - projString); -} - -// --------------------------------------------------------------------------- - -TEST(io, projparse_helmert_position_vector_inv) { - std::string projString( - "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step " - "+proj=cart +ellps=GRS80 +step +inv +proj=helmert +x=1 +y=2 +z=3 +rx=4 " - "+ry=5 +rz=6 +s=7 +convention=position_vector +step +inv +proj=cart " - "+ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg"); - auto obj = PROJStringParser().createFromPROJString(projString); - auto transf = nn_dynamic_pointer_cast<CoordinateOperation>(obj); - ASSERT_TRUE(transf != nullptr); - EXPECT_EQ( - transf->exportToPROJString( - PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5) - .get()), - projString); -} - -// --------------------------------------------------------------------------- - -TEST(io, projparse_helmert_time_dependent_position_vector) { - std::string projString("+proj=pipeline +step +proj=unitconvert +xy_in=deg " - "+xy_out=rad +step +proj=cart +ellps=GRS80 +step " - "+proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 +rz=6 " - "+s=7 +dx=0.1 +dy=0.2 +dz=0.3 +drx=0.4 +dry=0.5 " - "+drz=0.6 +ds=0.7 +t_epoch=2018.5 " - "+convention=position_vector +step +inv +proj=cart " - "+ellps=GRS80 +step +proj=unitconvert +xy_in=rad " - "+xy_out=deg"); - auto obj = PROJStringParser().createFromPROJString(projString); - auto transf = nn_dynamic_pointer_cast<Transformation>(obj); - ASSERT_TRUE(transf != nullptr); - EXPECT_EQ( - transf->exportToPROJString( - PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5) - .get()), - projString); -} - -// --------------------------------------------------------------------------- - -TEST(io, projparse_helmert_coordinate_frame) { - std::string projString( - "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step " - "+proj=cart +ellps=GRS80 +step +proj=helmert +x=1 +y=2 +z=3 +rx=4 " - "+ry=5 +rz=6 +s=7 +convention=coordinate_frame +step +inv +proj=cart " - "+ellps=GRS80 +step +proj=unitconvert +xy_in=rad +xy_out=deg"); - auto obj = PROJStringParser().createFromPROJString(projString); - auto transf = nn_dynamic_pointer_cast<Transformation>(obj); - ASSERT_TRUE(transf != nullptr); - EXPECT_EQ( - transf->exportToPROJString( - PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5) - .get()), - projString); -} - -// --------------------------------------------------------------------------- - -TEST(io, projparse_helmert_time_dependent_coordinate_frame) { - std::string projString("+proj=pipeline +step +proj=unitconvert +xy_in=deg " - "+xy_out=rad +step +proj=cart +ellps=GRS80 +step " - "+proj=helmert +x=1 +y=2 +z=3 +rx=4 +ry=5 +rz=6 " - "+s=7 +dx=0.1 +dy=0.2 +dz=0.3 +drx=0.4 +dry=0.5 " - "+drz=0.6 +ds=0.7 +t_epoch=2018.5 " - "+convention=coordinate_frame +step +inv +proj=cart " - "+ellps=GRS80 +step +proj=unitconvert +xy_in=rad " - "+xy_out=deg"); - auto obj = PROJStringParser().createFromPROJString(projString); - auto transf = nn_dynamic_pointer_cast<Transformation>(obj); - ASSERT_TRUE(transf != nullptr); - EXPECT_EQ( - transf->exportToPROJString( - PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5) - .get()), - projString); -} - -// --------------------------------------------------------------------------- - -TEST(io, projparse_helmert_complex_pipeline) { - std::string projString( - "+proj=pipeline +step +proj=axisswap +order=2,1 +step " - "+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=cart " - "+ellps=WGS84 +step +proj=helmert +x=-1 +y=-2 +z=-3 +rx=-4 " - "+ry=-5 +rz=-6 +s=-7 +convention=position_vector +step +inv " - "+proj=cart +ellps=clrk80ign +step " - "+proj=longlat +ellps=clrk80ign +pm=paris +step " - "+proj=unitconvert +xy_in=rad +xy_out=grad +step +proj=axisswap " - "+order=2,1"); - auto obj = PROJStringParser().createFromPROJString(projString); - auto transf = nn_dynamic_pointer_cast<Transformation>(obj); - ASSERT_TRUE(transf != nullptr); - EXPECT_EQ( - transf->exportToPROJString( - PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5) - .get()), - projString); -} - -// --------------------------------------------------------------------------- - -TEST(io, projparse_helmert_errors) { - // Missing convention - EXPECT_THROW(PROJStringParser().createFromPROJString("+proj=helmert +rx=4"), - ParsingException); -} - -// --------------------------------------------------------------------------- - -TEST(io, projparse_molodensky) { - std::string projString( - "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " - "+proj=longlat +ellps=WGS84 +step +proj=molodensky +ellps=WGS84 " - "+dx=84.87 +dy=96.49 " - "+dz=116.95 +da=251 +df=1.41927e-05 +step +proj=longlat " - "+ellps=GRS80 +step +proj=unitconvert " - "+xy_in=rad +xy_out=deg"); - auto obj = PROJStringParser().createFromPROJString(projString); - auto transf = nn_dynamic_pointer_cast<Transformation>(obj); - ASSERT_TRUE(transf != nullptr); - - WKTFormatterNNPtr f(WKTFormatter::create()); - f->simulCurNodeHasId(); - f->setMultiLine(false); - transf->exportToWKT(f.get()); - auto wkt = f->toString(); - EXPECT_EQ( - wkt, - "COORDINATEOPERATION[\"unknown\",SOURCECRS[GEODCRS[\"unknown\",DATUM[" - "\"Unknown based on WGS84 ellipsoid\",ELLIPSOID[\"WGS " - "84\",6378137,298.257223563,LENGTHUNIT[\"metre\",1]]],PRIMEM[" - "\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],CS[" - "ellipsoidal,2],AXIS[\"longitude\",east,ORDER[1],ANGLEUNIT[\"degree\"," - "0.0174532925199433]],AXIS[\"latitude\",north,ORDER[2],ANGLEUNIT[" - "\"degree\",0.0174532925199433]]]],TARGETCRS[GEODCRS[\"unknown\",DATUM[" - "\"Unknown based on GRS80 ellipsoid\",ELLIPSOID[\"GRS " - "1980\",6378137,298.257222101,LENGTHUNIT[\"metre\",1]]],PRIMEM[" - "\"Greenwich\",0,ANGLEUNIT[\"degree\",0.0174532925199433]],CS[" - "ellipsoidal,2],AXIS[\"longitude\",east,ORDER[1],ANGLEUNIT[\"degree\"," - "0.0174532925199433]],AXIS[\"latitude\",north,ORDER[2],ANGLEUNIT[" - "\"degree\",0.0174532925199433]]]],METHOD[\"Molodensky\",ID[\"EPSG\"," - "9604]],PARAMETER[\"X-axis " - "translation\",84.87,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8605]]," - "PARAMETER[\"Y-axis " - "translation\",96.49,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8606]]," - "PARAMETER[\"Z-axis " - "translation\",116.95,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8607]]," - "PARAMETER[\"Semi-major axis length " - "difference\",251,LENGTHUNIT[\"metre\",1],ID[\"EPSG\",8654]],PARAMETER[" - "\"Flattening difference\",1.41927E-05,ID[\"EPSG\",8655]]]"); - - EXPECT_EQ( - transf->exportToPROJString( - PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5) - .get()), - "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step " - "+proj=molodensky +ellps=WGS84 +dx=84.87 +dy=96.49 +dz=116.95 +da=251 " - "+df=1.41927e-05 +step +proj=unitconvert +xy_in=rad +xy_out=deg"); -} - -// --------------------------------------------------------------------------- - -TEST(io, projparse_molodensky_inv) { - std::string projString( - "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " - "+proj=longlat +ellps=WGS84 +step +inv +proj=molodensky " - "+ellps=WGS84 +dx=84.87 +dy=96.49 " - "+dz=116.95 +da=251 +df=1.41927e-05 +step +proj=longlat " - "+ellps=GRS80 +step +proj=unitconvert " - "+xy_in=rad +xy_out=deg"); - auto obj = PROJStringParser().createFromPROJString(projString); - auto transf = nn_dynamic_pointer_cast<CoordinateOperation>(obj); - ASSERT_TRUE(transf != nullptr); - EXPECT_EQ( - transf->exportToPROJString( - PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5) - .get()), - "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step " - "+proj=molodensky +ellps=GRS80 +dx=-84.87 +dy=-96.49 +dz=-116.95 " - "+da=-251 +df=-1.41927e-05 +step +proj=unitconvert +xy_in=rad " - "+xy_out=deg"); -} - -// --------------------------------------------------------------------------- - -TEST(io, projparse_molodensky_abridged) { - std::string projString( - "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad " - "+proj=longlat +ellps=WGS84 +step +proj=molodensky +ellps=WGS84 " - "+dx=84.87 +dy=96.49 " - "+dz=116.95 +da=251 +df=1.41927e-05 +abridged +step +proj=longlat " - "+ellps=GRS80 +step +proj=unitconvert " - "+xy_in=rad +xy_out=deg"); - auto obj = PROJStringParser().createFromPROJString(projString); - auto transf = nn_dynamic_pointer_cast<Transformation>(obj); - ASSERT_TRUE(transf != nullptr); - EXPECT_EQ( - transf->exportToPROJString( - PROJStringFormatter::create(PROJStringFormatter::Convention::PROJ_5) - .get()), - "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step " - "+proj=molodensky +ellps=WGS84 +dx=84.87 +dy=96.49 +dz=116.95 +da=251 " - "+df=1.41927e-05 +abridged +step +proj=unitconvert +xy_in=rad " - "+xy_out=deg"); -} - -// --------------------------------------------------------------------------- - TEST(io, projparse_longlat_title) { std::string projString("+title=Ile d'Amsterdam 1963 +proj=longlat " "+towgs84=109.7530,-528.1330,-362.2440 " |
