aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2020-10-22 23:20:25 +0200
committerEven Rouault <even.rouault@spatialys.com>2020-10-23 00:03:40 +0200
commit4969076c15f73371401ee65f2e4617439239cd8b (patch)
treec21bb3da042c1f7fdf5434021171fd56894b2bba /src
parent9a112931555aa324ed9caa3c261a4fd11551d615 (diff)
downloadPROJ-4969076c15f73371401ee65f2e4617439239cd8b.tar.gz
PROJ-4969076c15f73371401ee65f2e4617439239cd8b.zip
Database: import ESRI VERTCS that uses a (geodetic) datum to express ellipsoidal height
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/factory.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp
index ef5c6e02..211eb586 100644
--- a/src/iso19111/factory.cpp
+++ b/src/iso19111/factory.cpp
@@ -2100,6 +2100,9 @@ AuthorityFactory::createVerticalDatum(const std::string &code) const {
if (!publication_date.empty()) {
props.set("PUBLICATION_DATE", publication_date);
}
+ if (d->authority() == "ESRI" && starts_with(code, "from_geogdatum_")) {
+ props.set("VERT_DATUM_TYPE", "2002");
+ }
auto anchor = util::optional<std::string>();
if (frame_reference_epoch.empty()) {
return datum::VerticalReferenceFrame::create(props, anchor);
@@ -5719,9 +5722,12 @@ AuthorityFactory::createObjectsFromNameEx(
"SELECT table_name, auth_name, code, name, deprecated, is_alias "
"FROM (");
- const auto getTableAndTypeConstraints = [&allowedObjectTypes]() {
+ const auto getTableAndTypeConstraints = [&allowedObjectTypes,
+ &searchedName]() {
typedef std::pair<std::string, std::string> TableType;
std::list<TableType> res;
+ // Hide ESRI D_ vertical datums
+ const bool startsWithDUnderscore = starts_with(searchedName, "D_");
if (allowedObjectTypes.empty()) {
for (const auto &tableName :
{"prime_meridian", "ellipsoid", "geodetic_datum",
@@ -5729,7 +5735,10 @@ AuthorityFactory::createObjectsFromNameEx(
"vertical_crs", "compound_crs", "conversion",
"helmert_transformation", "grid_transformation",
"other_transformation", "concatenated_operation"}) {
- res.emplace_back(TableType(tableName, std::string()));
+ if (!(startsWithDUnderscore &&
+ strcmp(tableName, "vertical_datum") == 0)) {
+ res.emplace_back(TableType(tableName, std::string()));
+ }
}
} else {
for (const auto type : allowedObjectTypes) {
@@ -5744,8 +5753,10 @@ AuthorityFactory::createObjectsFromNameEx(
case ObjectType::DATUM:
res.emplace_back(
TableType("geodetic_datum", std::string()));
- res.emplace_back(
- TableType("vertical_datum", std::string()));
+ if (!startsWithDUnderscore) {
+ res.emplace_back(
+ TableType("vertical_datum", std::string()));
+ }
break;
case ObjectType::GEODETIC_REFERENCE_FRAME:
res.emplace_back(