aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111/operation/singleoperation.cpp
diff options
context:
space:
mode:
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
// ---------------------------------------------------------------------------