diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-01-06 23:34:09 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2020-01-07 12:17:13 +0100 |
| commit | 699b92250a90e5c333572245cf3d09c9e00e50e5 (patch) | |
| tree | 613a0e59b73861a16fc21c7a41b70245e297452c /src/iso19111/io.cpp | |
| parent | 529eb50f5d7e817dd27674984050a9bf1a6dce55 (diff) | |
| download | PROJ-699b92250a90e5c333572245cf3d09c9e00e50e5.tar.gz PROJ-699b92250a90e5c333572245cf3d09c9e00e50e5.zip | |
createObjectsFromName(): make it look up in the alias_name table too (fixes #1823)
Diffstat (limited to 'src/iso19111/io.cpp')
| -rw-r--r-- | src/iso19111/io.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp index a67238d9..c013ce24 100644 --- a/src/iso19111/io.cpp +++ b/src/iso19111/io.cpp @@ -2051,12 +2051,27 @@ GeodeticReferenceFrameNNPtr WKTParser::Private::buildGeodeticReferenceFrame( auto res = authFactory->createObjectsFromName( name, {AuthorityFactory::ObjectType::GEODETIC_REFERENCE_FRAME}, true, 1); - bool foundDatumName = false; if (!res.empty()) { + bool foundDatumName = false; const auto &refDatum = res.front(); if (metadata::Identifier::isEquivalentName( name.c_str(), refDatum->nameStr().c_str())) { foundDatumName = true; + } else if (refDatum->identifiers().size() == 1) { + const auto &id = refDatum->identifiers()[0]; + const auto aliases = + authFactory->databaseContext()->getAliases( + *id->codeSpace(), id->code(), refDatum->nameStr(), + "geodetic_datum", std::string()); + for (const auto &alias : aliases) { + if (metadata::Identifier::isEquivalentName( + name.c_str(), alias.c_str())) { + foundDatumName = true; + break; + } + } + } + if (foundDatumName) { properties.set(IdentifiedObject::NAME_KEY, refDatum->nameStr()); if (!properties.get(Identifier::CODESPACE_KEY) && @@ -2083,25 +2098,12 @@ GeodeticReferenceFrameNNPtr WKTParser::Private::buildGeodeticReferenceFrame( NN_NO_CHECK(dbContext_), *id->codeSpace()); auto dbDatum = authFactory2->createGeodeticDatum(id->code()); - foundDatumName = true; properties.set(IdentifiedObject::NAME_KEY, dbDatum->nameStr()); } catch (const std::exception &) { } } } - - if (!foundDatumName) { - std::string outTableName; - std::string authNameFromAlias; - std::string codeFromAlias; - auto officialName = authFactory->getOfficialNameFromAlias( - name, "geodetic_datum", std::string(), true, outTableName, - authNameFromAlias, codeFromAlias); - if (!officialName.empty()) { - properties.set(IdentifiedObject::NAME_KEY, officialName); - } - } } } |
