diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2021-10-05 19:21:05 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-05 19:21:05 +0200 |
| commit | c50ba1b1a7ecde946544c03ab0951727dd87264d (patch) | |
| tree | 2be4d809980ba1450d6e8a2af29c4e9822c9f2d1 /src/iso19111/metadata.cpp | |
| parent | 6b58adb4b7396b9c2aff2fa26aae2340d5a62d21 (diff) | |
| parent | 5d6bdadfca419c1d54d455e240743791e6cea44e (diff) | |
| download | PROJ-c50ba1b1a7ecde946544c03ab0951727dd87264d.tar.gz PROJ-c50ba1b1a7ecde946544c03ab0951727dd87264d.zip | |
Merge pull request #2876 from rouault/iau
Add IAU_2015 CRS definitions
Diffstat (limited to 'src/iso19111/metadata.cpp')
| -rw-r--r-- | src/iso19111/metadata.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/iso19111/metadata.cpp b/src/iso19111/metadata.cpp index fc1b103f..6c168152 100644 --- a/src/iso19111/metadata.cpp +++ b/src/iso19111/metadata.cpp @@ -1058,7 +1058,12 @@ const optional<std::string> &Identifier::uri() PROJ_PURE_DEFN { void Identifier::_exportToWKT(WKTFormatter *formatter) const { const bool isWKT2 = formatter->version() == WKTFormatter::Version::WKT2; const std::string &l_code = code(); - const std::string &l_codeSpace = *codeSpace(); + std::string l_codeSpace = *codeSpace(); + std::string l_version = *version(); + const auto &dbContext = formatter->databaseContext(); + if (dbContext) { + dbContext->getAuthorityAndVersion(*codeSpace(), l_codeSpace, l_version); + } if (!l_codeSpace.empty() && !l_code.empty()) { if (isWKT2) { formatter->startNode(WKTConstants::ID, false); @@ -1069,8 +1074,7 @@ void Identifier::_exportToWKT(WKTFormatter *formatter) const { } catch (const std::exception &) { formatter->addQuotedString(l_code); } - if (version().has_value()) { - auto l_version = *(version()); + if (!l_version.empty()) { try { (void)c_locale_stod(l_version); formatter->add(l_version); @@ -1079,7 +1083,7 @@ void Identifier::_exportToWKT(WKTFormatter *formatter) const { } } if (authority().has_value() && - *(authority()->title()) != l_codeSpace) { + *(authority()->title()) != *codeSpace()) { formatter->startNode(WKTConstants::CITATION, false); formatter->addQuotedString(*(authority()->title())); formatter->endNode(); @@ -1103,7 +1107,12 @@ void Identifier::_exportToWKT(WKTFormatter *formatter) const { void Identifier::_exportToJSON(JSONFormatter *formatter) const { const std::string &l_code = code(); - const std::string &l_codeSpace = *codeSpace(); + std::string l_codeSpace = *codeSpace(); + std::string l_version = *version(); + const auto &dbContext = formatter->databaseContext(); + if (dbContext) { + dbContext->getAuthorityAndVersion(*codeSpace(), l_codeSpace, l_version); + } if (!l_codeSpace.empty() && !l_code.empty()) { auto writer = formatter->writer(); auto objContext(formatter->MakeObjectContext(nullptr, false)); @@ -1116,8 +1125,7 @@ void Identifier::_exportToJSON(JSONFormatter *formatter) const { writer->Add(l_code); } - if (version().has_value()) { - const auto l_version = *(version()); + if (!l_version.empty()) { writer->AddObjKey("version"); try { const double dblVersion = c_locale_stod(l_version); @@ -1132,7 +1140,8 @@ void Identifier::_exportToJSON(JSONFormatter *formatter) const { writer->Add(l_version); } } - if (authority().has_value() && *(authority()->title()) != l_codeSpace) { + if (authority().has_value() && + *(authority()->title()) != *codeSpace()) { writer->AddObjKey("authority_citation"); writer->Add(*(authority()->title())); } |
