aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/sql/customizations.sql9
-rw-r--r--data/sql/proj_db_table_defs.sql13
-rw-r--r--include/proj/io.hpp4
-rw-r--r--src/iso19111/coordinateoperation.cpp129
-rw-r--r--src/iso19111/factory.cpp23
5 files changed, 0 insertions, 178 deletions
diff --git a/data/sql/customizations.sql b/data/sql/customizations.sql
index 6301bda9..8003c921 100644
--- a/data/sql/customizations.sql
+++ b/data/sql/customizations.sql
@@ -66,15 +66,6 @@ INSERT INTO "axis" VALUES('PROJ','1','Easting','E','east','PROJ','ENh',1,'EPSG',
INSERT INTO "axis" VALUES('PROJ','2','Northing','N','north','PROJ','ENh',2,'EPSG','9001');
INSERT INTO "axis" VALUES('PROJ','3','Ellipsoidal height','h','up','PROJ','ENh',2,'EPSG','9001');
----- Preferred hub for geodetic datum -----
-
-INSERT INTO "geodetic_datum_preferred_hub" VALUES('EPSG','1152','EPSG','6326'); -- WGS84 (G730) to WGS84
-INSERT INTO "geodetic_datum_preferred_hub" VALUES('EPSG','1153','EPSG','6326'); -- WGS84 (G873) to WGS84
-INSERT INTO "geodetic_datum_preferred_hub" VALUES('EPSG','1154','EPSG','6326'); -- WGS84 (G1150) to WGS84
-INSERT INTO "geodetic_datum_preferred_hub" VALUES('EPSG','1155','EPSG','6326'); -- WGS84 (G1674) to WGS84
-INSERT INTO "geodetic_datum_preferred_hub" VALUES('EPSG','1156','EPSG','6326'); -- WGS84 (G1762) to WGS84
-INSERT INTO "geodetic_datum_preferred_hub" VALUES('EPSG','1166','EPSG','6326'); -- WGS84 (Transit) to WGS84
-
-- Consider all WGS84 related CRS are equivalent with an accuracy of 2m
INSERT INTO "helmert_transformation" VALUES('PROJ','WGS84_TO_WGS84_G730','WGS 84 to WGS 84 (G730)','','Accuracy 2m','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4326','EPSG','9053','EPSG','1262',2.0,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0);
INSERT INTO "helmert_transformation" VALUES('PROJ','WGS84_TO_WGS84_G873','WGS 84 to WGS 84 (G873)','','Accuracy 2m','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4326','EPSG','9054','EPSG','1262',2.0,0,0,0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'',0);
diff --git a/data/sql/proj_db_table_defs.sql b/data/sql/proj_db_table_defs.sql
index a97e75a8..ee91aa3d 100644
--- a/data/sql/proj_db_table_defs.sql
+++ b/data/sql/proj_db_table_defs.sql
@@ -126,19 +126,6 @@ FOR EACH ROW BEGIN
WHERE EXISTS(SELECT 1 FROM area WHERE area.auth_name = NEW.area_of_use_auth_name AND area.code = NEW.area_of_use_code AND area.deprecated != 0) AND NEW.deprecated = 0;
END;
--- indicates that if there is no transformation from/into (src_auth_name, src_code),
--- a research going through (hub_auth_name, hub_code) should be made
-CREATE TABLE geodetic_datum_preferred_hub(
- src_auth_name TEXT NOT NULL CHECK (length(src_auth_name) >= 1),
- src_code TEXT NOT NULL CHECK (length(src_code) >= 1),
- hub_auth_name TEXT NOT NULL CHECK (length(hub_auth_name) >= 1),
- hub_code TEXT NOT NULL CHECK (length(hub_code) >= 1),
-
- CONSTRAINT unique_geodetic_datum_preferred_hub UNIQUE (src_auth_name, src_code, hub_auth_name, hub_code),
- CONSTRAINT fk_geodetic_datum_preferred_hub_src FOREIGN KEY (src_auth_name, src_code) REFERENCES geodetic_datum(auth_name, code),
- CONSTRAINT fk_geodetic_datum_preferred_hub_src FOREIGN KEY (hub_auth_name, hub_code) REFERENCES geodetic_datum(auth_name, code)
-);
-
CREATE TABLE vertical_datum (
auth_name TEXT NOT NULL CHECK (length(auth_name) >= 1),
code TEXT NOT NULL CHECK (length(code) >= 1),
diff --git a/include/proj/io.hpp b/include/proj/io.hpp
index 060ab128..52ffebad 100644
--- a/include/proj/io.hpp
+++ b/include/proj/io.hpp
@@ -1116,10 +1116,6 @@ class PROJ_GCC_DLL AuthorityFactory {
createCoordinateReferenceSystem(const std::string &code,
bool allowCompound) const;
- PROJ_INTERNAL std::list<datum::GeodeticReferenceFrameNNPtr>
- getPreferredHubGeodeticReferenceFrames(
- const std::string &geodeticReferenceFrameCode) const;
-
PROJ_INTERNAL std::vector<operation::CoordinateOperationNNPtr>
getTransformationsForGeoid(const std::string &geoidName,
bool usePROJAlternativeGridNames) const;
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 {