diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-10-08 16:10:55 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2020-10-08 17:31:57 +0200 |
| commit | acd1cf3278a532b56f3f621e27a8895b3db3cb75 (patch) | |
| tree | 6c9bf16250dd7ba58b6f2b9ea7462d857ec43e72 /src | |
| parent | 67af1d5741da08d9546b907e0da2c21c54c61b27 (diff) | |
| download | PROJ-acd1cf3278a532b56f3f621e27a8895b3db3cb75.tar.gz PROJ-acd1cf3278a532b56f3f621e27a8895b3db3cb75.zip | |
Make GeographicCRS::is2DPartOf3D() work with DatumEnsemble
Diffstat (limited to 'src')
| -rw-r--r-- | src/iso19111/coordinateoperation.cpp | 4 | ||||
| -rw-r--r-- | src/iso19111/crs.cpp | 26 |
2 files changed, 12 insertions, 18 deletions
diff --git a/src/iso19111/coordinateoperation.cpp b/src/iso19111/coordinateoperation.cpp index 30861be0..184ff435 100644 --- a/src/iso19111/coordinateoperation.cpp +++ b/src/iso19111/coordinateoperation.cpp @@ -14196,7 +14196,7 @@ void CoordinateOperationFactory::Private::createOperationsBoundToGeog( if (hubSrcGeog && geogCRSOfBaseOfBoundSrc && (hubSrcGeog->_isEquivalentTo( geogDst, util::IComparable::Criterion::EQUIVALENT) || - hubSrcGeog->is2DPartOf3D(NN_NO_CHECK(geogDst)))) { + hubSrcGeog->is2DPartOf3D(NN_NO_CHECK(geogDst), dbContext))) { triedBoundCrsToGeogCRSSameAsHubCRS = true; CoordinateOperationPtr opIntermediate; @@ -14976,7 +14976,7 @@ void CoordinateOperationFactory::Private::createOperationsCompoundToGeog( if (!foundRegisteredTransformWithAllGridsAvailable && srcGeogCRS && !srcGeogCRS->_isEquivalentTo( geogDst, util::IComparable::Criterion::EQUIVALENT) && - !srcGeogCRS->is2DPartOf3D(NN_NO_CHECK(geogDst))) { + !srcGeogCRS->is2DPartOf3D(NN_NO_CHECK(geogDst), dbContext)) { auto verticalTransformsTmp = createOperations( componentsSrc[1], NN_NO_CHECK(srcGeogCRS) diff --git a/src/iso19111/crs.cpp b/src/iso19111/crs.cpp index eb3918f7..134f6006 100644 --- a/src/iso19111/crs.cpp +++ b/src/iso19111/crs.cpp @@ -1006,7 +1006,8 @@ CRSNNPtr CRS::promoteTo3D(const std::string &newName, if (firstResAxisList[2]->_isEquivalentTo( verticalAxisIfNotAlreadyPresent.get(), util::IComparable::Criterion::EQUIVALENT) && - geogCRS->is2DPartOf3D(NN_NO_CHECK(firstResGeog))) { + geogCRS->is2DPartOf3D(NN_NO_CHECK(firstResGeog), + dbContext)) { return NN_NO_CHECK( util::nn_dynamic_pointer_cast<CRS>(firstRes)); } @@ -2371,7 +2372,8 @@ GeographicCRS::create(const util::PropertyMap &properties, /** \brief Return whether the current GeographicCRS is the 2D part of the * other 3D GeographicCRS. */ -bool GeographicCRS::is2DPartOf3D(util::nn<const GeographicCRS *> other) +bool GeographicCRS::is2DPartOf3D(util::nn<const GeographicCRS *> other, + const io::DatabaseContextPtr &dbContext) PROJ_PURE_DEFN { const auto &axis = d->coordinateSystem_->axisList(); const auto &otherAxis = other->d->coordinateSystem_->axisList(); @@ -2389,19 +2391,10 @@ bool GeographicCRS::is2DPartOf3D(util::nn<const GeographicCRS *> other) util::IComparable::Criterion::EQUIVALENT))) { return false; } - const auto &thisDatum = GeodeticCRS::getPrivate()->datum_; - const auto &otherDatum = other->GeodeticCRS::getPrivate()->datum_; - if (thisDatum && otherDatum) { - return thisDatum->_isEquivalentTo( - otherDatum.get(), util::IComparable::Criterion::EQUIVALENT); - } - const auto &thisDatumEnsemble = datumEnsemble(); - const auto &otherDatumEnsemble = other->datumEnsemble(); - if (thisDatumEnsemble && otherDatumEnsemble) { - return thisDatumEnsemble->_isEquivalentTo( - otherDatumEnsemble.get(), util::IComparable::Criterion::EQUIVALENT); - } - return false; + const auto thisDatum = datumNonNull(dbContext); + const auto otherDatum = other->datumNonNull(dbContext); + return thisDatum->_isEquivalentTo(otherDatum.get(), + util::IComparable::Criterion::EQUIVALENT); } //! @endcond @@ -2543,7 +2536,8 @@ GeographicCRS::demoteTo2D(const std::string &newName, auto firstResAsGeogCRS = util::nn_dynamic_pointer_cast<GeographicCRS>(firstRes); if (firstResAsGeogCRS && - firstResAsGeogCRS->is2DPartOf3D(NN_NO_CHECK(this))) { + firstResAsGeogCRS->is2DPartOf3D(NN_NO_CHECK(this), + dbContext)) { return NN_NO_CHECK(firstResAsGeogCRS); } } |
