diff options
Diffstat (limited to 'src/iso19111/operation/singleoperation.cpp')
| -rw-r--r-- | src/iso19111/operation/singleoperation.cpp | 44 |
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 // --------------------------------------------------------------------------- |
