aboutsummaryrefslogtreecommitdiff
path: root/test/unit/test_io.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-06-05 22:03:00 +0200
committerEven Rouault <even.rouault@spatialys.com>2019-06-06 15:02:58 +0200
commitcd28089a9984698b5557be1d9b868d30eaa3a893 (patch)
tree9d113dca2e00d8d8704adc6123d30c00593956de /test/unit/test_io.cpp
parent0383f7829792f896d233acc1676377d2fffc3cdc (diff)
downloadPROJ-cd28089a9984698b5557be1d9b868d30eaa3a893.tar.gz
PROJ-cd28089a9984698b5557be1d9b868d30eaa3a893.zip
createFromUserInput(): support OGC URN to create projectedCRS, for example to instanciate a projected 3D CRS
Diffstat (limited to 'test/unit/test_io.cpp')
-rw-r--r--test/unit/test_io.cpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp
index 294e765d..cea59460 100644
--- a/test/unit/test_io.cpp
+++ b/test/unit/test_io.cpp
@@ -8874,6 +8874,91 @@ TEST(io, createFromUserInput) {
EXPECT_EQ(crs->nameStr(),
"KKJ / Finland Uniform Coordinate System + N60 height");
}
+
+ {
+ auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::4979,"
+ "cs:PROJ::ENh,"
+ "coordinateOperation:EPSG::16031",
+ dbContext);
+ auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+ EXPECT_EQ(crs->nameStr(), "UTM zone 31N / WGS 84 (3D)");
+ EXPECT_EQ(crs->baseCRS()->getEPSGCode(), 4979);
+ EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U);
+ EXPECT_EQ(crs->derivingConversion()->getEPSGCode(), 16031);
+ }
+
+ EXPECT_THROW(createFromUserInput(
+ "urn:ogc:def:crs,crs:EPSG::4979,"
+ "cs:PROJ::ENh,"
+ "coordinateOperation:EPSG::1024", // not a conversion
+ dbContext),
+ ParsingException);
+ EXPECT_THROW(createFromUserInput("urn:ogc:def:crs,crs:,"
+ "cs:PROJ::ENh,"
+ "coordinateOperation:EPSG::16031",
+ dbContext),
+ ParsingException);
+ EXPECT_THROW(createFromUserInput("urn:ogc:def:crs,crs:EPSG::4979,"
+ "cs:,"
+ "coordinateOperation:EPSG::16031",
+ dbContext),
+ ParsingException);
+ EXPECT_THROW(createFromUserInput("urn:ogc:def:crs,crs:EPSG::4979,"
+ "cs:PROJ::ENh,"
+ "coordinateOperation:",
+ dbContext),
+ ParsingException);
+
+ {
+ // Completely non-sensical from a geodesic point of view...
+ auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::4978,"
+ "cs:EPSG::6500,"
+ "coordinateOperation:EPSG::16031",
+ dbContext);
+ auto crs = nn_dynamic_pointer_cast<DerivedGeodeticCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+ EXPECT_EQ(crs->baseCRS()->getEPSGCode(), 4978);
+ EXPECT_EQ(crs->coordinateSystem()->getEPSGCode(), 6500);
+ EXPECT_EQ(crs->derivingConversion()->getEPSGCode(), 16031);
+ }
+ {
+ // Completely non-sensical from a geodesic point of view...
+ auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::4979,"
+ "cs:EPSG::6423,"
+ "coordinateOperation:EPSG::16031",
+ dbContext);
+ auto crs = nn_dynamic_pointer_cast<DerivedGeographicCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+ EXPECT_EQ(crs->baseCRS()->getEPSGCode(), 4979);
+ EXPECT_EQ(crs->coordinateSystem()->getEPSGCode(), 6423);
+ EXPECT_EQ(crs->derivingConversion()->getEPSGCode(), 16031);
+ }
+ {
+ // Completely non-sensical from a geodesic point of view...
+ auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::32631,"
+ "cs:EPSG::4400,"
+ "coordinateOperation:EPSG::16031",
+ dbContext);
+ auto crs = nn_dynamic_pointer_cast<DerivedProjectedCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+ EXPECT_EQ(crs->baseCRS()->getEPSGCode(), 32631);
+ EXPECT_EQ(crs->coordinateSystem()->getEPSGCode(), 4400);
+ EXPECT_EQ(crs->derivingConversion()->getEPSGCode(), 16031);
+ }
+ {
+ // Completely non-sensical from a geodesic point of view...
+ auto obj = createFromUserInput("urn:ogc:def:crs,crs:EPSG::3855,"
+ "cs:EPSG::6499,"
+ "coordinateOperation:EPSG::16031",
+ dbContext);
+ auto crs = nn_dynamic_pointer_cast<DerivedVerticalCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+ EXPECT_EQ(crs->baseCRS()->getEPSGCode(), 3855);
+ EXPECT_EQ(crs->coordinateSystem()->getEPSGCode(), 6499);
+ EXPECT_EQ(crs->derivingConversion()->getEPSGCode(), 16031);
+ }
+
{
auto obj = createFromUserInput("urn:ogc:def:coordinateOperation,"
"coordinateOperation:EPSG::3895,"