diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-10-22 23:16:58 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2020-10-23 00:03:29 +0200 |
| commit | 9a112931555aa324ed9caa3c261a4fd11551d615 (patch) | |
| tree | f2693f56d020a23ca169963304b153eac3f77732 /src | |
| parent | 82cd218a7ab44eafef92445f2caaec0fb6ec799a (diff) | |
| download | PROJ-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.cpp | 31 |
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(); |
