aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111/metadata.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-10-05 19:21:05 +0200
committerGitHub <noreply@github.com>2021-10-05 19:21:05 +0200
commitc50ba1b1a7ecde946544c03ab0951727dd87264d (patch)
tree2be4d809980ba1450d6e8a2af29c4e9822c9f2d1 /src/iso19111/metadata.cpp
parent6b58adb4b7396b9c2aff2fa26aae2340d5a62d21 (diff)
parent5d6bdadfca419c1d54d455e240743791e6cea44e (diff)
downloadPROJ-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.cpp25
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()));
}