aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-12-16 15:23:22 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-12-16 17:50:39 +0100
commitbd9ecbacf575a1926fb8e223c4add1a4cc45d7f3 (patch)
tree770cc59bf111f8b427d9bc14ea7548ff3edbc9b3 /test
parenta68c146d7f3c1efb0f42b46c708a0a195e51a2ff (diff)
downloadPROJ-bd9ecbacf575a1926fb8e223c4add1a4cc45d7f3.tar.gz
PROJ-bd9ecbacf575a1926fb8e223c4add1a4cc45d7f3.zip
identify(): take into datum name aliases (fixes #1800)
Diffstat (limited to 'test')
-rw-r--r--test/unit/test_c_api.cpp31
-rw-r--r--test/unit/test_crs.cpp72
-rw-r--r--test/unit/test_datum.cpp3
-rw-r--r--test/unit/test_operation.cpp3
4 files changed, 106 insertions, 3 deletions
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp
index 22e2ac11..78e6bced 100644
--- a/test/unit/test_c_api.cpp
+++ b/test/unit/test_c_api.cpp
@@ -4464,4 +4464,35 @@ TEST_F(CApi, proj_create_derived_geographic_crs) {
"+o_lat_p=-2 +lon_0=3 +datum=WGS84 +no_defs "
"+type=crs"));
}
+
+// ---------------------------------------------------------------------------
+
+TEST_F(CApi, proj_is_equivalent_to_with_ctx) {
+ auto from_epsg = proj_create_from_database(m_ctxt, "EPSG", "7844",
+ PJ_CATEGORY_CRS, false, nullptr);
+ ObjectKeeper keeper_from_epsg(from_epsg);
+ ASSERT_NE(from_epsg, nullptr);
+
+ auto wkt = "GEOGCRS[\"GDA2020\",\n"
+ " DATUM[\"GDA2020\",\n"
+ " ELLIPSOID[\"GRS_1980\",6378137,298.257222101,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"Degree\",0.0174532925199433]],\n"
+ " CS[ellipsoidal,2],\n"
+ " AXIS[\"geodetic latitude (Lat)\",north,\n"
+ " ORDER[1],\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " AXIS[\"geodetic longitude (Lon)\",east,\n"
+ " ORDER[2],\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]]]";
+ auto from_wkt =
+ proj_create_from_wkt(m_ctxt, wkt, nullptr, nullptr, nullptr);
+ ObjectKeeper keeper_from_wkt(from_wkt);
+ EXPECT_NE(from_wkt, nullptr);
+
+ EXPECT_TRUE(proj_is_equivalent_to_with_ctx(m_ctxt, from_epsg, from_wkt,
+ PJ_COMP_EQUIVALENT));
+}
+
} // namespace
diff --git a/test/unit/test_crs.cpp b/test/unit/test_crs.cpp
index df1c257d..88a7813a 100644
--- a/test/unit/test_crs.cpp
+++ b/test/unit/test_crs.cpp
@@ -57,7 +57,8 @@ namespace {
struct UnrelatedObject : public IComparable {
UnrelatedObject() = default;
- bool _isEquivalentTo(const IComparable *, Criterion) const override {
+ bool _isEquivalentTo(const IComparable *, Criterion,
+ const DatabaseContextPtr &) const override {
assert(false);
return false;
}
@@ -1551,6 +1552,75 @@ TEST(crs, geodeticcrs_identify_db) {
EXPECT_EQ(res.front().first->identifiers()[0]->code(), "4326");
EXPECT_EQ(res.front().second, 70);
}
+
+ {
+ // Identify by code, but datum name is an alias of the official one
+ auto wkt = "GEOGCRS[\"GDA2020\",\n"
+ " DATUM[\"GDA2020\",\n"
+ " ELLIPSOID[\"GRS_1980\",6378137,298.257222101,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"Degree\",0.0174532925199433]],\n"
+ " CS[ellipsoidal,2],\n"
+ " AXIS[\"geodetic latitude (Lat)\",north,\n"
+ " ORDER[1],\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " AXIS[\"geodetic longitude (Lon)\",east,\n"
+ " ORDER[2],\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " ID[\"EPSG\",7844]]";
+ auto obj = WKTParser().createFromWKT(wkt);
+ auto crs = nn_dynamic_pointer_cast<GeodeticCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+
+ auto allFactory = AuthorityFactory::create(dbContext, std::string());
+ auto res = crs->identify(allFactory);
+ 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(), "7844");
+ EXPECT_EQ(res.front().second, 100);
+
+ EXPECT_TRUE(crs->_isEquivalentTo(res.front().first.get(),
+ IComparable::Criterion::EQUIVALENT,
+ dbContext));
+ EXPECT_TRUE(res.front().first->_isEquivalentTo(
+ crs.get(), IComparable::Criterion::EQUIVALENT, dbContext));
+ }
+
+ {
+ // Identify by name, but datum name is an alias of the official one
+ auto wkt = "GEOGCRS[\"GDA2020\",\n"
+ " DATUM[\"GDA2020\",\n"
+ " ELLIPSOID[\"GRS_1980\",6378137,298.257222101,\n"
+ " LENGTHUNIT[\"metre\",1]]],\n"
+ " PRIMEM[\"Greenwich\",0,\n"
+ " ANGLEUNIT[\"Degree\",0.0174532925199433]],\n"
+ " CS[ellipsoidal,2],\n"
+ " AXIS[\"geodetic latitude (Lat)\",north,\n"
+ " ORDER[1],\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]],\n"
+ " AXIS[\"geodetic longitude (Lon)\",east,\n"
+ " ORDER[2],\n"
+ " ANGLEUNIT[\"degree\",0.0174532925199433]]]";
+ auto obj = WKTParser().createFromWKT(wkt);
+ auto crs = nn_dynamic_pointer_cast<GeodeticCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+
+ auto allFactory = AuthorityFactory::create(dbContext, std::string());
+ auto res = crs->identify(allFactory);
+ 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(), "7844");
+ EXPECT_EQ(res.front().second, 100);
+
+ EXPECT_TRUE(crs->_isEquivalentTo(res.front().first.get(),
+ IComparable::Criterion::EQUIVALENT,
+ dbContext));
+ EXPECT_TRUE(res.front().first->_isEquivalentTo(
+ crs.get(), IComparable::Criterion::EQUIVALENT, dbContext));
+ }
}
// ---------------------------------------------------------------------------
diff --git a/test/unit/test_datum.cpp b/test/unit/test_datum.cpp
index 8a5d67cf..adf0ae4b 100644
--- a/test/unit/test_datum.cpp
+++ b/test/unit/test_datum.cpp
@@ -44,7 +44,8 @@ namespace {
struct UnrelatedObject : public IComparable {
UnrelatedObject() = default;
- bool _isEquivalentTo(const IComparable *, Criterion) const override {
+ bool _isEquivalentTo(const IComparable *, Criterion,
+ const DatabaseContextPtr &) const override {
assert(false);
return false;
}
diff --git a/test/unit/test_operation.cpp b/test/unit/test_operation.cpp
index 9cf03555..d503034c 100644
--- a/test/unit/test_operation.cpp
+++ b/test/unit/test_operation.cpp
@@ -65,7 +65,8 @@ namespace {
struct UnrelatedObject : public IComparable {
UnrelatedObject() = default;
- bool _isEquivalentTo(const IComparable *, Criterion) const override {
+ bool _isEquivalentTo(const IComparable *, Criterion,
+ const DatabaseContextPtr &) const override {
assert(false);
return false;
}