aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-10-25 19:45:39 +0200
committerGitHub <noreply@github.com>2019-10-25 19:45:39 +0200
commit9e1e248cbb46f6f5dbc41f759ebbfc792738d010 (patch)
tree70e9d565dea768cc40da4ed5b0a88054f34f4443
parent6976050e23683adf07c4688352d8d283a13e6b37 (diff)
parentf96f8ef4ffc0002219799cc5b0b2364c94a4ed49 (diff)
downloadPROJ-9e1e248cbb46f6f5dbc41f759ebbfc792738d010.tar.gz
PROJ-9e1e248cbb46f6f5dbc41f759ebbfc792738d010.zip
Merge pull request #1692 from OSGeo/backport-1691-to-6.2
[Backport 6.2] importFromWkt(): fix axis orientation for non-standard ESRI WKT (fixes #1690)
-rw-r--r--src/iso19111/io.cpp11
-rw-r--r--test/unit/test_io.cpp73
2 files changed, 83 insertions, 1 deletions
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp
index a9607247..2a6d8a5e 100644
--- a/src/iso19111/io.cpp
+++ b/src/iso19111/io.cpp
@@ -3185,7 +3185,16 @@ ConversionNNPtr WKTParser::Private::buildProjectionFromESRI(
}
}
- const auto *wkt2_mapping = getMapping(esriMapping->wkt2_name);
+ const char *projectionMethodWkt2Name = esriMapping->wkt2_name;
+ if (ci_equal(esriProjectionName, "Krovak")) {
+ const std::string projCRSName =
+ stripQuotes(projCRSNode->GP()->children()[0]);
+ if (projCRSName.find("_East_North") != std::string::npos) {
+ projectionMethodWkt2Name = EPSG_NAME_METHOD_KROVAK_NORTH_ORIENTED;
+ }
+ }
+
+ const auto *wkt2_mapping = getMapping(projectionMethodWkt2Name);
if (ci_equal(esriProjectionName, "Stereographic")) {
try {
if (std::fabs(io::asDouble(
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp
index 0eed2d15..488638a4 100644
--- a/test/unit/test_io.cpp
+++ b/test/unit/test_io.cpp
@@ -5096,6 +5096,79 @@ TEST(wkt_parse, wkt1_esri_krovak_south_west) {
// ---------------------------------------------------------------------------
+TEST(wkt_parse,
+ wkt1_esri_krovak_east_north_non_standard_likely_from_GDAL_wkt1) {
+ auto wkt = "PROJCS[\"S_JTSK_Krovak_East_North\",GEOGCS[\"GCS_S-JTSK\","
+ "DATUM[\"D_S_JTSK\",SPHEROID[\"Bessel_1841\","
+ "6377397.155,299.1528128]],PRIMEM[\"Greenwich\",0],"
+ "UNIT[\"Degree\",0.017453292519943295]],PROJECTION[\"Krovak\"],"
+ "PARAMETER[\"latitude_of_center\",49.5],"
+ "PARAMETER[\"longitude_of_center\",24.83333333333333],"
+ "PARAMETER[\"azimuth\",30.28813972222222],"
+ "PARAMETER[\"pseudo_standard_parallel_1\",78.5],"
+ "PARAMETER[\"scale_factor\",0.9999],"
+ "PARAMETER[\"false_easting\",0],"
+ "PARAMETER[\"false_northing\",0],UNIT[\"Meter\",1]]";
+
+ auto obj = WKTParser()
+ .attachDatabaseContext(DatabaseContext::create())
+ .createFromWKT(wkt);
+ auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+
+ EXPECT_EQ(crs->derivingConversion()->method()->nameStr(),
+ "Krovak (North Orientated)");
+
+ auto expected_wkt2 =
+ "PROJCRS[\"S_JTSK_Krovak_East_North\",\n"
+ " BASEGEODCRS[\"GCS_S-JTSK\",\n"
+ " DATUM[\"System of the Unified Trigonometrical Cadastral "
+ "Network\",\n"
+ " ELLIPSOID[\"Bessel 1841\",6377397.155,299.1528128,\n"
+ " LENGTHUNIT[\"metre\",1]],\n"
+ " ID[\"EPSG\",6156]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"Degree\",0.0174532925199433]]],\n"
+ " CONVERSION[\"unnamed\",\n"
+ " METHOD[\"Krovak (North Orientated)\",\n"
+ " ID[\"EPSG\",1041]],\n"
+ " PARAMETER[\"Latitude of projection centre\",49.5,\n"
+ " ANGLEUNIT[\"Degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8811]],\n"
+ " PARAMETER[\"Longitude of origin\",24.8333333333333,\n"
+ " ANGLEUNIT[\"Degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8833]],\n"
+ " PARAMETER[\"Co-latitude of cone axis\",30.2881397222222,\n"
+ " ANGLEUNIT[\"Degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",1036]],\n"
+ " PARAMETER[\"Latitude of pseudo standard parallel\",78.5,\n"
+ " ANGLEUNIT[\"Degree\",0.0174532925199433],\n"
+ " ID[\"EPSG\",8818]],\n"
+ " PARAMETER[\"Scale factor on pseudo standard "
+ "parallel\",0.9999,\n"
+ " SCALEUNIT[\"unity\",1],\n"
+ " ID[\"EPSG\",8819]],\n"
+ " PARAMETER[\"False easting\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8806]],\n"
+ " PARAMETER[\"False northing\",0,\n"
+ " LENGTHUNIT[\"metre\",1],\n"
+ " ID[\"EPSG\",8807]]],\n"
+ " CS[Cartesian,2],\n"
+ " AXIS[\"(E)\",east,\n"
+ " ORDER[1],\n"
+ " LENGTHUNIT[\"metre\",1,\n"
+ " ID[\"EPSG\",9001]]],\n"
+ " AXIS[\"(N)\",north,\n"
+ " ORDER[2],\n"
+ " LENGTHUNIT[\"metre\",1,\n"
+ " ID[\"EPSG\",9001]]]]";
+
+ EXPECT_EQ(crs->exportToWKT(WKTFormatter::create().get()), expected_wkt2);
+}
+
+// ---------------------------------------------------------------------------
+
TEST(wkt_parse, wkt1_esri_normalize_unit) {
auto wkt = "PROJCS[\"Accra_Ghana_Grid\",GEOGCS[\"GCS_Accra\","
"DATUM[\"D_Accra\",SPHEROID[\"War_Office\",6378300.0,296.0]],"