aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKristian Evers <kristianevers@gmail.com>2019-12-09 11:11:38 +0100
committerGitHub <noreply@github.com>2019-12-09 11:11:38 +0100
commit9b66a948fe6e408b76d641fe96833616d6d6926f (patch)
tree4902d61a143abbc82ac373963cc6e8b339da8630 /src
parent9750c044740692f757bfd7c6760f69a8683c330a (diff)
parent5cc1095970127f8df5c4f636b1ce782829510fa0 (diff)
downloadPROJ-9b66a948fe6e408b76d641fe96833616d6d6926f.tar.gz
PROJ-9b66a948fe6e408b76d641fe96833616d6d6926f.zip
Merge pull request #1780 from rouault/fix_1779
CRS identification: use case insensitive comparison for authority name (fixes #1779)
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/factory.cpp14
-rw-r--r--src/iso19111/io.cpp5
2 files changed, 12 insertions, 7 deletions
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp
index 57850303..0ef07337 100644
--- a/src/iso19111/factory.cpp
+++ b/src/iso19111/factory.cpp
@@ -1433,9 +1433,17 @@ AuthorityFactory::AuthorityFactory(const DatabaseContextNNPtr &context,
AuthorityFactoryNNPtr
AuthorityFactory::create(const DatabaseContextNNPtr &context,
const std::string &authorityName) {
-
- auto factory = AuthorityFactory::nn_make_shared<AuthorityFactory>(
- context, authorityName);
+ const auto getFactory = [&context, &authorityName]() {
+ for (const auto &knownName : {"EPSG", "ESRI", "PROJ"}) {
+ if (ci_equal(authorityName, knownName)) {
+ return AuthorityFactory::nn_make_shared<AuthorityFactory>(
+ context, knownName);
+ }
+ }
+ return AuthorityFactory::nn_make_shared<AuthorityFactory>(
+ context, authorityName);
+ };
+ auto factory = getFactory();
factory->d->setThis(factory);
return factory;
}
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp
index 2aec5fac..e0e6152a 100644
--- a/src/iso19111/io.cpp
+++ b/src/iso19111/io.cpp
@@ -5669,10 +5669,7 @@ static BaseObjectNNPtr createFromUserInput(const std::string &text,
DatabaseContextNNPtr dbContextNNPtr(NN_NO_CHECK(dbContext));
const auto &authName = tokens[0];
const auto &code = tokens[1];
- static const std::string epsg_lowercase("epsg");
- auto factory = AuthorityFactory::create(
- dbContextNNPtr,
- authName == epsg_lowercase ? Identifier::EPSG : authName);
+ auto factory = AuthorityFactory::create(dbContextNNPtr, authName);
try {
return factory->createCoordinateReferenceSystem(code);
} catch (...) {