aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/crs.cpp20
-rw-r--r--src/iso19111/datum.cpp17
-rw-r--r--src/iso19111/io.cpp41
3 files changed, 76 insertions, 2 deletions
diff --git a/src/iso19111/crs.cpp b/src/iso19111/crs.cpp
index dbe3b211..52b10119 100644
--- a/src/iso19111/crs.cpp
+++ b/src/iso19111/crs.cpp
@@ -2851,7 +2851,25 @@ void VerticalCRS::_exportToWKT(io::WKTFormatter *formatter) const {
? io::WKTConstants::VERTCS
: io::WKTConstants::VERT_CS,
!identifiers().empty());
- formatter->addQuotedString(nameStr());
+
+ auto l_name = nameStr();
+ if (formatter->useESRIDialect()) {
+ bool aliasFound = false;
+ const auto &dbContext = formatter->databaseContext();
+ if (dbContext) {
+ auto l_alias = dbContext->getAliasFromOfficialName(
+ l_name, "vertical_crs", "ESRI");
+ if (!l_alias.empty()) {
+ l_name = l_alias;
+ aliasFound = true;
+ }
+ }
+ if (!aliasFound) {
+ l_name = io::WKTFormatter::morphNameToESRI(l_name);
+ }
+ }
+
+ formatter->addQuotedString(l_name);
exportDatumOrDatumEnsembleToWkt(formatter);
const auto &cs = SingleCRS::getPrivate()->coordinateSystem;
const auto &axisList = cs->axisList();
diff --git a/src/iso19111/datum.cpp b/src/iso19111/datum.cpp
index 7d42fd13..5bc8074c 100644
--- a/src/iso19111/datum.cpp
+++ b/src/iso19111/datum.cpp
@@ -1933,8 +1933,23 @@ void VerticalReferenceFrame::_exportToWKT(
? io::WKTConstants::VDATUM
: io::WKTConstants::VERT_DATUM,
!identifiers().empty());
- const auto &l_name = nameStr();
+ auto l_name = nameStr();
if (!l_name.empty()) {
+ if (!isWKT2 && formatter->useESRIDialect()) {
+ bool aliasFound = false;
+ const auto &dbContext = formatter->databaseContext();
+ if (dbContext) {
+ auto l_alias = dbContext->getAliasFromOfficialName(
+ l_name, "vertical_datum", "ESRI");
+ if (!l_alias.empty()) {
+ l_name = l_alias;
+ aliasFound = true;
+ }
+ }
+ if (!aliasFound) {
+ l_name = io::WKTFormatter::morphNameToESRI(l_name);
+ }
+ }
formatter->addQuotedString(l_name);
} else {
formatter->addQuotedString("unnamed");
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp
index 7a107f96..99fc6046 100644
--- a/src/iso19111/io.cpp
+++ b/src/iso19111/io.cpp
@@ -4006,6 +4006,22 @@ VerticalReferenceFrameNNPtr WKTParser::Private::buildVerticalReferenceFrame(
const auto *nodeP = node->GP();
const std::string &name(nodeP->value());
auto &props = buildProperties(node);
+
+ if (esriStyle_ && dbContext_) {
+ std::string outTableName;
+ std::string authNameFromAlias;
+ std::string codeFromAlias;
+ auto authFactory =
+ AuthorityFactory::create(NN_NO_CHECK(dbContext_), std::string());
+ const std::string datumName = stripQuotes(nodeP->children()[0]);
+ auto officialName = authFactory->getOfficialNameFromAlias(
+ datumName, "vertical_datum", "ESRI", false, outTableName,
+ authNameFromAlias, codeFromAlias);
+ if (!officialName.empty()) {
+ props.set(IdentifiedObject::NAME_KEY, officialName);
+ }
+ }
+
if (ci_equal(name, WKTConstants::VERT_DATUM)) {
const auto &children = nodeP->children();
if (children.size() >= 2) {
@@ -4137,6 +4153,16 @@ CRSNNPtr WKTParser::Private::buildVerticalCRS(const WKTNodeNNPtr &node) {
throw ParsingException("Missing VDATUM or ENSEMBLE node");
}
+ for (const auto &childNode : nodeP->children()) {
+ const auto &childNodeChildren = childNode->GP()->children();
+ if (childNodeChildren.size() == 2 &&
+ ci_equal(childNode->GP()->value(), WKTConstants::PARAMETER) &&
+ childNodeChildren[0]->GP()->value() == "\"Vertical_Shift\"") {
+ esriStyle_ = true;
+ break;
+ }
+ }
+
auto &dynamicNode = nodeP->lookForChild(WKTConstants::DYNAMIC);
auto datum =
!isNull(datumNode)
@@ -4162,6 +4188,21 @@ CRSNNPtr WKTParser::Private::buildVerticalCRS(const WKTNodeNNPtr &node) {
auto &props = buildProperties(node);
+ if (esriStyle_ && dbContext_) {
+ std::string outTableName;
+ std::string authNameFromAlias;
+ std::string codeFromAlias;
+ auto authFactory =
+ AuthorityFactory::create(NN_NO_CHECK(dbContext_), std::string());
+ const std::string vertCRSName = stripQuotes(nodeP->children()[0]);
+ auto officialName = authFactory->getOfficialNameFromAlias(
+ vertCRSName, "vertical_crs", "ESRI", false, outTableName,
+ authNameFromAlias, codeFromAlias);
+ if (!officialName.empty()) {
+ props.set(IdentifiedObject::NAME_KEY, officialName);
+ }
+ }
+
// Deal with Lidar WKT1 VertCRS that embeds geoid model in CRS name,
// following conventions from
// https://pubs.usgs.gov/tm/11b4/pdf/tm11-B4.pdf