aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2020-05-19 12:42:50 +0200
committerEven Rouault <even.rouault@spatialys.com>2020-05-19 14:20:55 +0200
commitec3fdd00f133736560f807765dd73367c85f4bdc (patch)
tree619de908565fbb03e18d90da94b88a3eb5fef76b /test
parent1a715234754146ebe224fb849a87ca6575fdc88f (diff)
downloadPROJ-ec3fdd00f133736560f807765dd73367c85f4bdc.tar.gz
PROJ-ec3fdd00f133736560f807765dd73367c85f4bdc.zip
WKT1 ingestion: fix ingestion of COMPD_CS with ellipsoidal vertical datum and non metre units (contributes to fixes #2232)
Diffstat (limited to 'test')
-rw-r--r--test/unit/test_io.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp
index d62e5c59..17fddaaf 100644
--- a/test/unit/test_io.cpp
+++ b/test/unit/test_io.cpp
@@ -2614,6 +2614,44 @@ TEST(wkt_parse,
// ---------------------------------------------------------------------------
+TEST(wkt_parse,
+ COMPD_CS_horizontal_geog_plus_vertical_ellipsoidal_height_non_metre) {
+ // See https://github.com/OSGeo/PROJ/issues/2232
+ const char *wkt =
+ "COMPD_CS[\"NAD83 + Ellipsoid (US Feet)\",\n"
+ " GEOGCS[\"NAD83\",\n"
+ " DATUM[\"North_American_Datum_1983\",\n"
+ " SPHEROID[\"GRS 1980\",6378137,298.257222101,\n"
+ " AUTHORITY[\"EPSG\",\"7019\"]],\n"
+ " AUTHORITY[\"EPSG\",\"6269\"]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " AUTHORITY[\"EPSG\",\"8901\"]],\n"
+ " UNIT[\"degree\",0.0174532925199433,\n"
+ " AUTHORITY[\"EPSG\",\"9122\"]],\n"
+ " AUTHORITY[\"EPSG\",\"4269\"]],\n"
+ " VERT_CS[\"Ellipsoid (US Feet)\",\n"
+ " VERT_DATUM[\"Ellipsoid\",2002],\n"
+ " UNIT[\"US survey foot\",0.304800609601219,\n"
+ " AUTHORITY[\"EPSG\",\"9003\"]],\n"
+ " AXIS[\"Up\",UP]]]";
+ auto dbContext = DatabaseContext::create();
+ auto obj = WKTParser().attachDatabaseContext(dbContext).createFromWKT(wkt);
+ auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+ EXPECT_EQ(crs->nameStr(), "NAD83 (Ellipsoid (US Feet))");
+ EXPECT_EQ(crs->coordinateSystem()->axisList().size(), 3U);
+ EXPECT_NEAR(crs->coordinateSystem()->axisList()[2]->unit().conversionToSI(),
+ 0.304800609601219, 1e-15);
+
+ EXPECT_EQ(
+ crs->exportToWKT(
+ WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL, dbContext)
+ .get()),
+ wkt);
+}
+
+// ---------------------------------------------------------------------------
+
TEST(wkt_parse, COORDINATEOPERATION) {
std::string src_wkt;