aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2018-11-29 02:52:22 +0100
committerEven Rouault <even.rouault@spatialys.com>2018-11-29 02:52:38 +0100
commit6d9a1a909886762cc99e1d8f289e2b60ea787bf7 (patch)
tree96719a4aeb76892404a03e33a087b2e3598a2175
parentd87573cf62b339f22b24595fd05714f1b4e3bda3 (diff)
downloadPROJ-6d9a1a909886762cc99e1d8f289e2b60ea787bf7.tar.gz
PROJ-6d9a1a909886762cc99e1d8f289e2b60ea787bf7.zip
Preserve EPSG code when importFromWKT WKT1_GDAL of EPSG:3857
-rw-r--r--src/io.cpp11
-rw-r--r--test/unit/test_operation.cpp23
2 files changed, 29 insertions, 5 deletions
diff --git a/src/io.cpp b/src/io.cpp
index 749b3e14..90732a32 100644
--- a/src/io.cpp
+++ b/src/io.cpp
@@ -2829,7 +2829,7 @@ bool WKTParser::Private::hasWebMercPROJ4String(
projCRSNode->countChildrenOfName("center_latitude") == 0) {
// Hack to detect the hacky way of encodign webmerc in GDAL WKT1
- // with a EXTENSION["PROJ", "+proj=merc +a=6378137 +b=6378137
+ // with a EXTENSION["PROJ4", "+proj=merc +a=6378137 +b=6378137
// +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m
// +nadgrids=@null +wktext +no_defs"] node
if (extensionNode && extensionNode->GP()->childrenSize() == 2 &&
@@ -3274,14 +3274,16 @@ WKTParser::Private::buildProjectedCRS(const WKTNodeNNPtr &node) {
if (isNull(conversionNode) && isNull(projectionNode)) {
ThrowMissing(WKTConstants::CONVERSION);
}
+
+ auto props = buildProperties(node);
+
if (isNull(conversionNode) && hasWebMercPROJ4String(node, projectionNode)) {
auto conversion = Conversion::createPopularVisualisationPseudoMercator(
PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"), Angle(0),
Angle(0), Length(0), Length(0));
+ props.set(IdentifiedObject::NAME_KEY, "WGS 84 / Pseudo-Mercator");
return ProjectedCRS::create(
- PropertyMap().set(IdentifiedObject::NAME_KEY,
- "WGS 84 / Pseudo-Mercator"),
- GeographicCRS::EPSG_4326, conversion,
+ props, GeographicCRS::EPSG_4326, conversion,
CartesianCS::createEastingNorthing(UnitOfMeasure::METRE));
}
@@ -3377,7 +3379,6 @@ WKTParser::Private::buildProjectedCRS(const WKTNodeNNPtr &node) {
ThrowNotExpectedCSType("Cartesian");
}
- auto props = buildProperties(node);
if (esriStyle_ && dbContext_) {
auto projCRSName = stripQuotes(nodeP->children()[0]);
diff --git a/test/unit/test_operation.cpp b/test/unit/test_operation.cpp
index 818c10ec..c2e35e89 100644
--- a/test/unit/test_operation.cpp
+++ b/test/unit/test_operation.cpp
@@ -3016,6 +3016,29 @@ TEST(operation, webmerc_import_from_GDAL_wkt1) {
// ---------------------------------------------------------------------------
+TEST(operation, webmerc_import_from_GDAL_wkt1_with_EPSG_code) {
+
+ auto projCRS = ProjectedCRS::create(
+ PropertyMap()
+ .set(IdentifiedObject::NAME_KEY, "Pseudo-Mercator")
+ .set(Identifier::CODESPACE_KEY, "EPSG")
+ .set(Identifier::CODE_KEY, "3857"),
+ GeographicCRS::EPSG_4326,
+ Conversion::createPopularVisualisationPseudoMercator(
+ PropertyMap(), Angle(0), Angle(0), Length(0), Length(0)),
+ CartesianCS::createEastingNorthing(UnitOfMeasure::METRE));
+
+ auto wkt1 = projCRS->exportToWKT(
+ WKTFormatter::create(WKTFormatter::Convention::WKT1_GDAL).get());
+ EXPECT_TRUE(wkt1.find("3857") != std::string::npos) << wkt1;
+ auto obj = WKTParser().createFromWKT(wkt1);
+ auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+ EXPECT_EQ(crs->identifiers().size(), 1);
+}
+
+// ---------------------------------------------------------------------------
+
TEST(operation, webmerc_import_from_GDAL_wkt1_EPSG_3785_deprecated) {
auto wkt1 =