aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111/operation/singleoperation.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-04-23 10:10:15 +0200
committerGitHub <noreply@github.com>2021-04-23 10:10:15 +0200
commit99939f327e91ba602843018af9bd4328b50821fe (patch)
tree6743cf5b5feab06004e85ff55f654cd1671a6dc9 /src/iso19111/operation/singleoperation.cpp
parent81899cee1197e7bbd4558e9c7208eff8293789b5 (diff)
parentf6abb7d75c647013dd83a82361b96c202e615d90 (diff)
downloadPROJ-99939f327e91ba602843018af9bd4328b50821fe.tar.gz
PROJ-99939f327e91ba602843018af9bd4328b50821fe.zip
Merge pull request #2683 from rouault/epsg_10_019
Database: update to EPSG v10.019
Diffstat (limited to 'src/iso19111/operation/singleoperation.cpp')
-rw-r--r--src/iso19111/operation/singleoperation.cpp44
1 files changed, 26 insertions, 18 deletions
diff --git a/src/iso19111/operation/singleoperation.cpp b/src/iso19111/operation/singleoperation.cpp
index 6812819c..2f60828e 100644
--- a/src/iso19111/operation/singleoperation.cpp
+++ b/src/iso19111/operation/singleoperation.cpp
@@ -1525,31 +1525,39 @@ std::list<std::string> SingleOperation::validateParameters() const {
const auto &l_method = method();
const auto &methodName = l_method->nameStr();
- const MethodMapping *methodMapping = nullptr;
const auto methodEPSGCode = l_method->getEPSGCode();
+
+ const auto findMapping = [methodEPSGCode, &methodName](
+ const MethodMapping *mappings,
+ size_t mappingCount) -> const MethodMapping * {
+ if (methodEPSGCode != 0) {
+ for (size_t i = 0; i < mappingCount; ++i) {
+ const auto &mapping = mappings[i];
+ if (methodEPSGCode == mapping.epsg_code) {
+ return &mapping;
+ }
+ }
+ }
+ for (size_t i = 0; i < mappingCount; ++i) {
+ const auto &mapping = mappings[i];
+ if (metadata::Identifier::isEquivalentName(mapping.wkt2_name,
+ methodName.c_str())) {
+ return &mapping;
+ }
+ }
+ return nullptr;
+ };
+
size_t nProjectionMethodMappings = 0;
const auto projectionMethodMappings =
getProjectionMethodMappings(nProjectionMethodMappings);
- for (size_t i = 0; i < nProjectionMethodMappings; ++i) {
- const auto &mapping = projectionMethodMappings[i];
- if (metadata::Identifier::isEquivalentName(mapping.wkt2_name,
- methodName.c_str()) ||
- (methodEPSGCode != 0 && methodEPSGCode == mapping.epsg_code)) {
- methodMapping = &mapping;
- }
- }
+ const MethodMapping *methodMapping =
+ findMapping(projectionMethodMappings, nProjectionMethodMappings);
if (methodMapping == nullptr) {
size_t nOtherMethodMappings = 0;
const auto otherMethodMappings =
getOtherMethodMappings(nOtherMethodMappings);
- for (size_t i = 0; i < nOtherMethodMappings; ++i) {
- const auto &mapping = otherMethodMappings[i];
- if (metadata::Identifier::isEquivalentName(mapping.wkt2_name,
- methodName.c_str()) ||
- (methodEPSGCode != 0 && methodEPSGCode == mapping.epsg_code)) {
- methodMapping = &mapping;
- }
- }
+ methodMapping = findMapping(otherMethodMappings, nOtherMethodMappings);
}
if (!methodMapping) {
res.emplace_back("Unknown method " + methodName);
@@ -1661,7 +1669,7 @@ std::list<std::string> SingleOperation::validateParameters() const {
}
return res;
-}
+} // namespace operation
// ---------------------------------------------------------------------------