aboutsummaryrefslogtreecommitdiff
path: root/test/unit/test_io.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-02-13 17:26:22 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-02-13 17:26:22 +0100
commitb60b9e88ec2a5494062370f5346ecf1e0880b169 (patch)
treedfeaf174c1a9d31d973a68aa9d6ce37f45d06c6f /test/unit/test_io.cpp
parent4d1f5486f6453300bdb35c2607e126f6c526c243 (diff)
downloadPROJ-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.cpp271
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 "