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 | |
| parent | f96af5b4e6c49efc386a061cd92d5dbb7fc3f441 (diff) | |
| download | PROJ-afb37da0535186c6909d4410efc0a20c4a88c8c9.tar.gz PROJ-afb37da0535186c6909d4410efc0a20c4a88c8c9.zip | |
createFromUserInput("authname:code"): make it case insensitive regarding authname
| -rw-r--r-- | src/io.cpp | 20 | ||||
| -rw-r--r-- | test/unit/test_io.cpp | 1 |
2 files changed, 18 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 diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp index 26597f09..00da162c 100644 --- a/test/unit/test_io.cpp +++ b/test/unit/test_io.cpp @@ -7607,6 +7607,7 @@ TEST(io, createFromUserInput) { EXPECT_NO_THROW(createFromUserInput("+proj=longlat", nullptr)); EXPECT_NO_THROW(createFromUserInput("EPSG:4326", dbContext)); + EXPECT_NO_THROW(createFromUserInput("epsg:4326", dbContext)); EXPECT_NO_THROW( createFromUserInput("urn:ogc:def:crs:EPSG::4326", dbContext)); EXPECT_NO_THROW(createFromUserInput( |
