aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2018-12-29 23:11:51 +0100
committerEven Rouault <even.rouault@spatialys.com>2018-12-29 23:11:51 +0100
commitb5910bb07cf5db052705affe82a5a2267c732ce9 (patch)
tree963bbd5cd88d3c5f8b0bc1de760b400491cf60fc
parent0ee297eaef992265e8ccbf2cd4f8bde9a217a9fe (diff)
downloadPROJ-b5910bb07cf5db052705affe82a5a2267c732ce9.tar.gz
PROJ-b5910bb07cf5db052705affe82a5a2267c732ce9.zip
Operation filtering: do not remove Null transformation that may be useful
-rw-r--r--src/iso19111/coordinateoperation.cpp16
-rw-r--r--test/unit/test_operation.cpp5
2 files changed, 17 insertions, 4 deletions
diff --git a/src/iso19111/coordinateoperation.cpp b/src/iso19111/coordinateoperation.cpp
index 6a3062c5..e9a9f434 100644
--- a/src/iso19111/coordinateoperation.cpp
+++ b/src/iso19111/coordinateoperation.cpp
@@ -9693,7 +9693,13 @@ struct FilterResults {
bool extentContains =
extent->contains(NN_NO_CHECK(areaOfInterest));
if (extentContains) {
- hasOpThatContainsAreaOfInterest = true;
+ const auto &name = op->nameStr();
+ if (name.find(NULL_GEOGRAPHIC_OFFSET) ==
+ std::string::npos &&
+ name.find(NULL_GEOCENTRIC_TRANSLATION) ==
+ std::string::npos) {
+ hasOpThatContainsAreaOfInterest = true;
+ }
}
if (spatialCriterion ==
CoordinateOperationContext::SpatialCriterion::
@@ -9722,7 +9728,13 @@ struct FilterResults {
!targetCRSExtent ||
extent->contains(NN_NO_CHECK(targetCRSExtent));
if (extentContainsSource && extentContainsTarget) {
- hasOpThatContainsAreaOfInterest = true;
+ const auto &name = op->nameStr();
+ if (name.find(NULL_GEOGRAPHIC_OFFSET) ==
+ std::string::npos &&
+ name.find(NULL_GEOCENTRIC_TRANSLATION) ==
+ std::string::npos) {
+ hasOpThatContainsAreaOfInterest = true;
+ }
}
if (spatialCriterion ==
CoordinateOperationContext::SpatialCriterion::
diff --git a/test/unit/test_operation.cpp b/test/unit/test_operation.cpp
index 71ef666c..b406227c 100644
--- a/test/unit/test_operation.cpp
+++ b/test/unit/test_operation.cpp
@@ -4220,10 +4220,11 @@ TEST(operation, geogCRS_to_geogCRS_context_default) {
authFactory->createCoordinateReferenceSystem("4179"), // Pulkovo 42
authFactory->createCoordinateReferenceSystem("4258"), // ETRS89
ctxt);
- ASSERT_EQ(list.size(), 2);
+ ASSERT_EQ(list.size(), 3);
// Romania has a larger area than Poland (given our approx formula)
EXPECT_EQ(list[0]->getEPSGCode(), 15994); // Romania - 3m
EXPECT_EQ(list[1]->getEPSGCode(), 1644); // Poland - 1m
+ EXPECT_EQ(list[2]->nameStr(), "Null geographic offset from Pulkovo 1942(58) to ETRS89");
EXPECT_EQ(
list[0]->exportToPROJString(PROJStringFormatter::create().get()),
@@ -4241,7 +4242,7 @@ TEST(operation, geogCRS_to_geogCRS_context_default) {
auto list = CoordinateOperationFactory::create()->createOperations(
authFactory->createCoordinateReferenceSystem("4258"),
authFactory->createCoordinateReferenceSystem("4179"), ctxt);
- ASSERT_EQ(list.size(), 2);
+ ASSERT_EQ(list.size(), 3);
// Romania has a larger area than Poland (given our approx formula)
EXPECT_EQ(list[0]->nameStr(),
"Inverse of Pulkovo 1942(58) to ETRS89 (4)"); // Romania - 3m