aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111/datum.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/iso19111/datum.cpp')
-rw-r--r--src/iso19111/datum.cpp33
1 files changed, 24 insertions, 9 deletions
diff --git a/src/iso19111/datum.cpp b/src/iso19111/datum.cpp
index 96952866..ebef94a2 100644
--- a/src/iso19111/datum.cpp
+++ b/src/iso19111/datum.cpp
@@ -1401,17 +1401,32 @@ bool GeodeticReferenceFrame::hasEquivalentNameToUsingAlias(
if (dbContext) {
if (!identifiers().empty()) {
const auto &id = identifiers().front();
- auto aliasesResult =
+
+ const std::string officialNameFromId = dbContext->getName(
+ "geodetic_datum", *(id->codeSpace()), id->code());
+ const auto aliasesResult =
dbContext->getAliases(*(id->codeSpace()), id->code(), nameStr(),
"geodetic_datum", std::string());
- const char *otherName = other->nameStr().c_str();
- for (const auto &aliasResult : aliasesResult) {
- if (metadata::Identifier::isEquivalentName(
- otherName, aliasResult.c_str())) {
- return true;
- }
- }
- return false;
+
+ const auto isNameMatching =
+ [&aliasesResult, &officialNameFromId](const std::string &name) {
+ const char *nameCstr = name.c_str();
+ if (metadata::Identifier::isEquivalentName(
+ nameCstr, officialNameFromId.c_str())) {
+ return true;
+ } else {
+ for (const auto &aliasResult : aliasesResult) {
+ if (metadata::Identifier::isEquivalentName(
+ nameCstr, aliasResult.c_str())) {
+ return true;
+ }
+ }
+ }
+ return false;
+ };
+
+ return isNameMatching(nameStr()) &&
+ isNameMatching(other->nameStr());
} else if (!other->identifiers().empty()) {
auto otherGRF = dynamic_cast<const GeodeticReferenceFrame *>(other);
if (otherGRF) {