aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-02-06 14:26:06 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-02-06 14:26:06 +0100
commit457b173cbe8fdb790b011d1828a0fd9f8f6221a4 (patch)
treee077da59252a134097e64b54ba66b174725650b4
parent149bd81691e309d4ab22bed944ea69fbeaec450f (diff)
downloadPROJ-457b173cbe8fdb790b011d1828a0fd9f8f6221a4.tar.gz
PROJ-457b173cbe8fdb790b011d1828a0fd9f8f6221a4.zip
ISO19111: Handle database area objects with no bounding box
-rw-r--r--src/iso19111/factory.cpp6
-rw-r--r--test/unit/test_factory.cpp21
2 files changed, 27 insertions, 0 deletions
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp
index c862cc5b..a3047f8b 100644
--- a/src/iso19111/factory.cpp
+++ b/src/iso19111/factory.cpp
@@ -1485,6 +1485,12 @@ AuthorityFactory::createExtent(const std::string &code) const {
try {
const auto &row = res.front();
const auto &name = row[0];
+ if (row[1].empty()) {
+ auto extent = metadata::Extent::create(
+ util::optional<std::string>(name), {}, {}, {});
+ d->context()->d->cache(code, extent);
+ return extent;
+ }
double south_lat = c_locale_stod(row[1]);
double north_lat = c_locale_stod(row[2]);
double west_lon = c_locale_stod(row[3]);
diff --git a/test/unit/test_factory.cpp b/test/unit/test_factory.cpp
index 81f745f5..95436c75 100644
--- a/test/unit/test_factory.cpp
+++ b/test/unit/test_factory.cpp
@@ -222,6 +222,16 @@ TEST(factory, AuthorityFactory_createExtent) {
// ---------------------------------------------------------------------------
+TEST(factory, AuthorityFactory_createExtent_no_bbox) {
+ auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG");
+ auto extent = factory->createExtent("1361"); // Sudan - south. Deprecated
+ EXPECT_EQ(*(extent->description()), "Sudan - south");
+ const auto &geogElts = extent->geographicElements();
+ EXPECT_TRUE(geogElts.empty());
+}
+
+// ---------------------------------------------------------------------------
+
TEST(factory, AuthorityFactory_createGeodeticDatum) {
auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG");
EXPECT_THROW(factory->createGeodeticDatum("-1"),
@@ -414,6 +424,17 @@ TEST(factory, AuthorityFactory_createGeodeticCRS_geographic2D) {
// ---------------------------------------------------------------------------
+TEST(factory, AuthorityFactory_createGeodeticCRS_geographic2D_area_no_bbox) {
+ auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG");
+ auto crs = factory->createGeodeticCRS("4296"); // Sudan - deprecated
+ auto domain = crs->domains()[0];
+ auto extent = domain->domainOfValidity();
+ ASSERT_TRUE(extent != nullptr);
+ EXPECT_TRUE(extent->isEquivalentTo(factory->createExtent("1361").get()));
+}
+
+// ---------------------------------------------------------------------------
+
TEST(factory, AuthorityFactory_createGeodeticCRS_geographic3D) {
auto factory = AuthorityFactory::create(DatabaseContext::create(), "EPSG");
auto crs = factory->createGeodeticCRS("4979");