diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-12-09 09:08:13 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-12-09 09:08:13 +0100 |
| commit | 5cc1095970127f8df5c4f636b1ce782829510fa0 (patch) | |
| tree | 3635584127530c730223f1b1aec2ee91be9aae73 /src | |
| parent | b6f0153e5aa27dc11d2c879dc4a62a0f35a122cb (diff) | |
| download | PROJ-5cc1095970127f8df5c4f636b1ce782829510fa0.tar.gz PROJ-5cc1095970127f8df5c4f636b1ce782829510fa0.zip | |
CRS identification: use case insensitive comparison for authority name (fixes #1779)
Diffstat (limited to 'src')
| -rw-r--r-- | src/iso19111/factory.cpp | 14 | ||||
| -rw-r--r-- | src/iso19111/io.cpp | 5 |
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 (...) { |
