aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-05-12 09:03:48 +0200
committerEven Rouault <even.rouault@spatialys.com>2019-05-12 09:03:48 +0200
commit004e26293e258a9144e6e1d33049eb1753b82b89 (patch)
tree85d32c33798a6a944e70699c972185a9fab90d9d
parentcd2f5b38046b7775feae08dfc8d8b1e59c1689f2 (diff)
downloadPROJ-004e26293e258a9144e6e1d33049eb1753b82b89.tar.gz
PROJ-004e26293e258a9144e6e1d33049eb1753b82b89.zip
Fix identification of GeodeticCRS expressed by PROJ string for EPSG authority
-rw-r--r--src/iso19111/io.cpp3
-rw-r--r--test/unit/test_crs.cpp13
2 files changed, 16 insertions, 0 deletions
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp
index c84ea2f3..7329758a 100644
--- a/src/iso19111/io.cpp
+++ b/src/iso19111/io.cpp
@@ -6899,6 +6899,7 @@ PROJStringParser::Private::buildGeographicCRS(int iStep, int iUnitConvert,
getNumericValue(getParamValue(step, "lon_0")) != 0.0)) {
props.set("EXTENSION_PROJ4", projString_);
}
+ props.set("IMPLICIT_CS", true);
return GeographicCRS::create(props, datum, cs);
}
@@ -7389,6 +7390,8 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
props.set("EXTENSION_PROJ4", projString_);
}
+ props.set("IMPLICIT_CS", true);
+
CRSNNPtr crs = ProjectedCRS::create(props, geogCRS, NN_NO_CHECK(conv), cs);
if (!hasParamValue(step, "geoidgrids") &&
diff --git a/test/unit/test_crs.cpp b/test/unit/test_crs.cpp
index d7303df9..fbbd4f64 100644
--- a/test/unit/test_crs.cpp
+++ b/test/unit/test_crs.cpp
@@ -1498,6 +1498,19 @@ TEST(crs, geodeticcrs_identify_db) {
->identify(factory);
ASSERT_EQ(res.size(), 0U);
}
+ {
+ // Test identification from PROJ string
+ auto obj = PROJStringParser().createFromPROJString(
+ "+proj=longlat +datum=WGS84 +type=crs");
+ auto crs = nn_dynamic_pointer_cast<GeographicCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+ auto res = crs->identify(factory);
+ ASSERT_EQ(res.size(), 1U);
+ ASSERT_TRUE(!res.front().first->identifiers().empty());
+ EXPECT_EQ(*res.front().first->identifiers()[0]->codeSpace(), "EPSG");
+ EXPECT_EQ(res.front().first->identifiers()[0]->code(), "4326");
+ EXPECT_EQ(res.front().second, 70);
+ }
}
// ---------------------------------------------------------------------------