aboutsummaryrefslogtreecommitdiff
path: root/src/coordinateoperation.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2018-12-08 22:55:51 +0100
committerEven Rouault <even.rouault@spatialys.com>2018-12-08 22:55:51 +0100
commit70f4c31d617f55fcd78a8e6401229f41d6e5884c (patch)
tree54e15fb491d1eb3255c930bb81d224f2183efbee /src/coordinateoperation.cpp
parent29b522b4b80b43fe03cb1a955789676eec8051e7 (diff)
downloadPROJ-70f4c31d617f55fcd78a8e6401229f41d6e5884c.tar.gz
PROJ-70f4c31d617f55fcd78a8e6401229f41d6e5884c.zip
Speed up hasPerfectAccuracyResult()
Diffstat (limited to 'src/coordinateoperation.cpp')
-rw-r--r--src/coordinateoperation.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/coordinateoperation.cpp b/src/coordinateoperation.cpp
index 8f75864e..4ada57fb 100644
--- a/src/coordinateoperation.cpp
+++ b/src/coordinateoperation.cpp
@@ -9206,9 +9206,9 @@ static size_t getStepCount(const CoordinateOperationNNPtr &op) {
// ---------------------------------------------------------------------------
-struct FilterAndSort {
+struct FilterResults {
- FilterAndSort(const std::vector<CoordinateOperationNNPtr> &sourceListIn,
+ FilterResults(const std::vector<CoordinateOperationNNPtr> &sourceListIn,
const CoordinateOperationContextNNPtr &contextIn,
const crs::CRSNNPtr &sourceCRSIn,
const crs::CRSNNPtr &targetCRSIn,
@@ -9223,6 +9223,9 @@ struct FilterAndSort {
computeAreaOfIntest();
filterOut(forceStrictContainmentTest);
+ }
+
+ FilterResults &andSort() {
sort();
// And now that we have a sorted list, we can remove uninteresting
@@ -9232,6 +9235,7 @@ struct FilterAndSort {
removeUninterestingOps();
removeDuplicateOps();
removeSyntheticNullTransforms();
+ return *this;
}
// ----------------------------------------------------------------------
@@ -9646,7 +9650,8 @@ static std::vector<CoordinateOperationNNPtr>
filterAndSort(const std::vector<CoordinateOperationNNPtr> &sourceList,
const CoordinateOperationContextNNPtr &context,
const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS) {
- return FilterAndSort(sourceList, context, sourceCRS, targetCRS, false)
+ return FilterResults(sourceList, context, sourceCRS, targetCRS, false)
+ .andSort()
.getRes();
}
//! @endcond
@@ -10449,7 +10454,7 @@ createNullGeocentricTranslation(const crs::CRSNNPtr &sourceCRS,
bool CoordinateOperationFactory::Private::hasPerfectAccuracyResult(
const std::vector<CoordinateOperationNNPtr> &res, const Context &context) {
- auto resTmp = FilterAndSort(res, context.context, context.sourceCRS,
+ auto resTmp = FilterResults(res, context.context, context.sourceCRS,
context.targetCRS, true)
.getRes();
for (const auto &op : resTmp) {