diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2018-12-08 22:55:51 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2018-12-08 22:55:51 +0100 |
| commit | 70f4c31d617f55fcd78a8e6401229f41d6e5884c (patch) | |
| tree | 54e15fb491d1eb3255c930bb81d224f2183efbee /src/coordinateoperation.cpp | |
| parent | 29b522b4b80b43fe03cb1a955789676eec8051e7 (diff) | |
| download | PROJ-70f4c31d617f55fcd78a8e6401229f41d6e5884c.tar.gz PROJ-70f4c31d617f55fcd78a8e6401229f41d6e5884c.zip | |
Speed up hasPerfectAccuracyResult()
Diffstat (limited to 'src/coordinateoperation.cpp')
| -rw-r--r-- | src/coordinateoperation.cpp | 13 |
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) { |
