diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2018-11-21 21:49:52 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2018-11-21 21:49:52 +0100 |
| commit | afb37da0535186c6909d4410efc0a20c4a88c8c9 (patch) | |
| tree | e679c91e1641eb54e966eb640f2ee652795bb32f /src/io.cpp | |
| parent | f96af5b4e6c49efc386a061cd92d5dbb7fc3f441 (diff) | |
| download | PROJ-afb37da0535186c6909d4410efc0a20c4a88c8c9.tar.gz PROJ-afb37da0535186c6909d4410efc0a20c4a88c8c9.zip | |
createFromUserInput("authname:code"): make it case insensitive regarding authname
Diffstat (limited to 'src/io.cpp')
| -rw-r--r-- | src/io.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
@@ -4093,9 +4093,23 @@ BaseObjectNNPtr createFromUserInput(const std::string &text, if (!dbContext) { throw ParsingException("no database context specified"); } - auto factory = - AuthorityFactory::create(NN_NO_CHECK(dbContext), tokens[0]); - return factory->createCoordinateReferenceSystem(tokens[1]); + DatabaseContextNNPtr dbContextNNPtr(NN_NO_CHECK(dbContext)); + const auto &authName = tokens[0]; + const auto &code = tokens[1]; + auto factory = AuthorityFactory::create(dbContextNNPtr, authName); + try { + return factory->createCoordinateReferenceSystem(code); + } catch (...) { + const auto authorities = dbContextNNPtr->getAuthorities(); + for (const auto &authCandidate : authorities) { + if (ci_equal(authCandidate, authName)) { + return AuthorityFactory::create(dbContextNNPtr, + authCandidate) + ->createCoordinateReferenceSystem(code); + } + } + throw; + } } // urn:ogc:def:crs:EPSG::4326 |
