aboutsummaryrefslogtreecommitdiff
path: root/test/unit/test_io.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-06-06 21:34:49 +0200
committerGitHub <noreply@github.com>2019-06-06 21:34:49 +0200
commit6aab9a71395ca05ccf109ae979611eeff265cfaf (patch)
tree8dd723f95b1d54648d01212d97637c572aa2ac1d /test/unit/test_io.cpp
parent489ac4b2f4918b36185e01ec5c07e5251f92d11e (diff)
parentcd28089a9984698b5557be1d9b868d30eaa3a893 (diff)
downloadPROJ-6aab9a71395ca05ccf109ae979611eeff265cfaf.tar.gz
PROJ-6aab9a71395ca05ccf109ae979611eeff265cfaf.zip
Merge pull request #1505 from rouault/ogc_urn_projectedCRS
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 820e052a..62054f16 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,"