aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2020-10-22 23:16:58 +0200
committerEven Rouault <even.rouault@spatialys.com>2020-10-23 00:03:29 +0200
commit9a112931555aa324ed9caa3c261a4fd11551d615 (patch)
treef2693f56d020a23ca169963304b153eac3f77732 /src
parent82cd218a7ab44eafef92445f2caaec0fb6ec799a (diff)
downloadPROJ-9a112931555aa324ed9caa3c261a4fd11551d615.tar.gz
PROJ-9a112931555aa324ed9caa3c261a4fd11551d615.zip
WKT1_ESRI export: generate VERTCS[...,DATUM[...,SPHEROID[]] syntax when ellipsoidal height is found
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/crs.cpp31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/iso19111/crs.cpp b/src/iso19111/crs.cpp
index 1a17ac67..4f9098f2 100644
--- a/src/iso19111/crs.cpp
+++ b/src/iso19111/crs.cpp
@@ -2853,9 +2853,9 @@ void VerticalCRS::_exportToWKT(io::WKTFormatter *formatter) const {
!identifiers().empty());
auto l_name = nameStr();
+ const auto &dbContext = formatter->databaseContext();
if (formatter->useESRIDialect()) {
bool aliasFound = false;
- const auto &dbContext = formatter->databaseContext();
if (dbContext) {
auto l_alias = dbContext->getAliasFromOfficialName(
l_name, "vertical_crs", "ESRI");
@@ -2870,7 +2870,34 @@ void VerticalCRS::_exportToWKT(io::WKTFormatter *formatter) const {
}
formatter->addQuotedString(l_name);
- exportDatumOrDatumEnsembleToWkt(formatter);
+
+ const auto l_datum = datum();
+ if (formatter->useESRIDialect() && l_datum &&
+ l_datum->getWKT1DatumType() == "2002") {
+ bool foundMatch = false;
+ if (dbContext) {
+ auto authFactory = io::AuthorityFactory::create(
+ NN_NO_CHECK(dbContext), std::string());
+ auto list = authFactory->createObjectsFromName(
+ l_datum->nameStr(),
+ {io::AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME},
+ false /* approximate=false*/);
+ if (!list.empty()) {
+ auto gdatum =
+ util::nn_dynamic_pointer_cast<datum::Datum>(list.front());
+ if (gdatum) {
+ gdatum->_exportToWKT(formatter);
+ foundMatch = true;
+ }
+ }
+ }
+ if (!foundMatch) {
+ // We should export a geodetic datum, but we cannot really do better
+ l_datum->_exportToWKT(formatter);
+ }
+ } else {
+ exportDatumOrDatumEnsembleToWkt(formatter);
+ }
const auto &cs = SingleCRS::getPrivate()->coordinateSystem;
const auto &axisList = cs->axisList();