aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-11-17 20:11:17 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-11-17 20:13:28 +0100
commita8c1588d43fccdbc3b65448f2c7af6472fa6519b (patch)
tree1a678f146a94d1a3d859dcde291b29c40e447f33 /src
parent940bb7447647631676b90b03431aa88cb88fdd2d (diff)
downloadPROJ-a8c1588d43fccdbc3b65448f2c7af6472fa6519b.tar.gz
PROJ-a8c1588d43fccdbc3b65448f2c7af6472fa6519b.zip
createOperations(): remove the concept of geodetic_datum_preferred_hub
This was introduced in 63857c92b271bbcd10df0a032304982011acb2a9. Due to the fix done in the previous commit, we can mostly revert the above commit. We just keep the added tests and the custom WGS 84<-->WGS 84 (Gxxxx) null transformations.
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/coordinateoperation.cpp129
-rw-r--r--src/iso19111/factory.cpp23
2 files changed, 0 insertions, 152 deletions
diff --git a/src/iso19111/coordinateoperation.cpp b/src/iso19111/coordinateoperation.cpp
index 872ef047..937ba34f 100644
--- a/src/iso19111/coordinateoperation.cpp
+++ b/src/iso19111/coordinateoperation.cpp
@@ -10428,7 +10428,6 @@ struct CoordinateOperationFactory::Private {
const metadata::ExtentPtr &extent2;
const CoordinateOperationContextNNPtr &context;
bool inCreateOperationsWithDatumPivotAntiRecursion = false;
- bool inCreateOperationsThroughPreferredHub = false;
bool inCreateOperationsGeogToVertWithAlternativeGeog = false;
bool inCreateOperationsGeogToVertWithIntermediateVert = false;
bool skipHorizontalTransformation = false;
@@ -10579,12 +10578,6 @@ struct CoordinateOperationFactory::Private {
const crs::GeodeticCRS *geodSrc, const crs::GeodeticCRS *geodDst,
Context &context);
- static void createOperationsThroughPreferredHub(
- std::vector<CoordinateOperationNNPtr> &res,
- const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS,
- const crs::GeodeticCRS *geodSrc, const crs::GeodeticCRS *geodDst,
- Context &context);
-
static bool
hasPerfectAccuracyResult(const std::vector<CoordinateOperationNNPtr> &res,
const Context &context);
@@ -12451,118 +12444,6 @@ void CoordinateOperationFactory::Private::createOperationsWithDatumPivot(
// ---------------------------------------------------------------------------
-void CoordinateOperationFactory::Private::createOperationsThroughPreferredHub(
- std::vector<CoordinateOperationNNPtr> &res, const crs::CRSNNPtr &sourceCRS,
- const crs::CRSNNPtr &targetCRS, const crs::GeodeticCRS *geodSrc,
- const crs::GeodeticCRS *geodDst, Private::Context &context) {
-
- const auto &srcDatum = geodSrc->datum();
- const auto &dstDatum = geodDst->datum();
-
- if (!srcDatum || !dstDatum)
- return;
- const auto &srcDatumIds = srcDatum->identifiers();
- const auto &dstDatumIds = dstDatum->identifiers();
- if (srcDatumIds.empty() || dstDatumIds.empty())
- return;
-
- const auto &authFactory = context.context->getAuthorityFactory();
-
- const auto srcAuthFactory = io::AuthorityFactory::create(
- authFactory->databaseContext(), *(srcDatumIds.front()->codeSpace()));
- const auto srcPreferredHubs =
- srcAuthFactory->getPreferredHubGeodeticReferenceFrames(
- srcDatumIds.front()->code());
-
- const auto dstAuthFactory = io::AuthorityFactory::create(
- authFactory->databaseContext(), *(dstDatumIds.front()->codeSpace()));
- const auto dstPreferredHubs =
- dstAuthFactory->getPreferredHubGeodeticReferenceFrames(
- dstDatumIds.front()->code());
- if (srcPreferredHubs.empty() && dstPreferredHubs.empty())
- return;
-
- // Currently if we have prefered hubs for both source and target, we
- // will use only the one for target, arbitrarily... We could use boths
- // but that would complicate things.
- if (!srcPreferredHubs.empty() && dstPreferredHubs.empty()) {
- std::vector<CoordinateOperationNNPtr> resTmp;
- createOperationsThroughPreferredHub(resTmp, targetCRS, sourceCRS,
- geodDst, geodSrc, context);
- if (!resTmp.empty()) {
- resTmp = applyInverse(resTmp);
- res.insert(res.end(), resTmp.begin(), resTmp.end());
- }
- return;
- }
- assert(!dstPreferredHubs.empty());
-
-#ifdef TRACE_CREATE_OPERATIONS
- ENTER_BLOCK("createOperationsThroughPreferredHub(" +
- objectAsStr(sourceCRS.get()) + " --> " +
- objectAsStr(targetCRS.get()) + ")");
-#endif
-
- struct AntiRecursionGuard {
- Context &context;
-
- explicit AntiRecursionGuard(Context &contextIn) : context(contextIn) {
- assert(!context.inCreateOperationsThroughPreferredHub);
- context.inCreateOperationsThroughPreferredHub = true;
- }
-
- ~AntiRecursionGuard() {
- context.inCreateOperationsThroughPreferredHub = false;
- }
- };
- AntiRecursionGuard guard(context);
-
- std::vector<crs::CRSNNPtr> candidatesIntermCRS;
- for (const auto &datumHub : dstPreferredHubs) {
- auto candidates =
- findCandidateGeodCRSForDatum(authFactory, geodDst, datumHub.get());
- bool addedGeog2D = false;
- for (const auto &intermCRS : candidates) {
- auto geogCRS = dynamic_cast<crs::GeographicCRS *>(intermCRS.get());
- if (geogCRS &&
- geogCRS->coordinateSystem()->axisList().size() == 2) {
- candidatesIntermCRS.emplace_back(intermCRS);
- addedGeog2D = true;
- break;
- }
- }
- if (!addedGeog2D) {
- candidatesIntermCRS.insert(candidatesIntermCRS.end(),
- candidates.begin(), candidates.end());
- }
- }
-
- for (const auto &intermCRS : candidatesIntermCRS) {
-#ifdef TRACE_CREATE_OPERATIONS
- ENTER_BLOCK("try " + objectAsStr(sourceCRS.get()) + "->" +
- objectAsStr(intermCRS.get()) + "->" +
- objectAsStr(targetCRS.get()) + ")");
-#endif
- const auto opsFirst = createOperations(sourceCRS, intermCRS, context);
- const auto opsLast = createOperations(intermCRS, targetCRS, context);
- for (const auto &opFirst : opsFirst) {
- for (const auto &opLast : opsLast) {
- if (!opFirst->hasBallparkTransformation() ||
- !opLast->hasBallparkTransformation()) {
- try {
- res.emplace_back(
- ConcatenatedOperation::createComputeMetadata(
- {opFirst, opLast}, !allowEmptyIntersection));
- } catch (const InvalidOperationEmptyIntersection &) {
- }
- }
- }
- }
- }
-}
-
-// ---------------------------------------------------------------------------
-
static CoordinateOperationNNPtr
createBallparkGeocentricTranslation(const crs::CRSNNPtr &sourceCRS,
const crs::CRSNNPtr &targetCRS) {
@@ -12895,16 +12776,6 @@ bool CoordinateOperationFactory::Private::createOperationsFromDatabase(
res.insert(res.end(), resWithIntermediate.begin(),
resWithIntermediate.end());
doFilterAndCheckPerfectOp = !res.empty();
-
- // If transforming from/to WGS84 (Gxxxx), try through 'neutral'
- // WGS84
- if (res.empty() && geodSrc && geodDst &&
- !context.inCreateOperationsThroughPreferredHub &&
- !context.inCreateOperationsWithDatumPivotAntiRecursion) {
- createOperationsThroughPreferredHub(res, sourceCRS, targetCRS,
- geodSrc, geodDst, context);
- doFilterAndCheckPerfectOp = !res.empty();
- }
}
if (doFilterAndCheckPerfectOp) {
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp
index b55efb3c..309e778a 100644
--- a/src/iso19111/factory.cpp
+++ b/src/iso19111/factory.cpp
@@ -5384,29 +5384,6 @@ AuthorityFactory::createCompoundCRSFromExisting(
// ---------------------------------------------------------------------------
//! @cond Doxygen_Suppress
-std::list<datum::GeodeticReferenceFrameNNPtr>
-AuthorityFactory::getPreferredHubGeodeticReferenceFrames(
- const std::string &geodeticReferenceFrameCode) const {
- std::list<datum::GeodeticReferenceFrameNNPtr> res;
-
- const std::string sql("SELECT hub_auth_name, hub_code FROM "
- "geodetic_datum_preferred_hub WHERE "
- "src_auth_name = ? AND src_code = ?");
- auto sqlRes = d->run(sql, {d->authority(), geodeticReferenceFrameCode});
- for (const auto &row : sqlRes) {
- const auto &auth_name = row[0];
- const auto &code = row[1];
- res.emplace_back(
- d->createFactory(auth_name)->createGeodeticDatum(code));
- }
-
- return res;
-}
-//! @endcond
-
-// ---------------------------------------------------------------------------
-
-//! @cond Doxygen_Suppress
std::vector<operation::CoordinateOperationNNPtr>
AuthorityFactory::getTransformationsForGeoid(
const std::string &geoidName, bool usePROJAlternativeGridNames) const {