diff options
Diffstat (limited to 'src/iso19111')
| -rw-r--r-- | src/iso19111/common.cpp | 3 | ||||
| -rw-r--r-- | src/iso19111/crs.cpp | 66 | ||||
| -rw-r--r-- | src/iso19111/io.cpp | 2 | ||||
| -rw-r--r-- | src/iso19111/operation/coordinateoperationfactory.cpp | 9 |
4 files changed, 39 insertions, 41 deletions
diff --git a/src/iso19111/common.cpp b/src/iso19111/common.cpp index b70845ae..1d7e2030 100644 --- a/src/iso19111/common.cpp +++ b/src/iso19111/common.cpp @@ -120,8 +120,9 @@ UnitOfMeasure &UnitOfMeasure::operator=(const UnitOfMeasure &other) { //! @cond Doxygen_Suppress UnitOfMeasure &UnitOfMeasure::operator=(UnitOfMeasure &&other) { - BaseObject::operator=(std::move(static_cast<BaseObject &&>(other))); *d = std::move(*(other.d)); + other.d = nullptr; + BaseObject::operator=(std::move(static_cast<BaseObject &&>(other))); return *this; } //! @endcond diff --git a/src/iso19111/crs.cpp b/src/iso19111/crs.cpp index 4750896a..881aec0b 100644 --- a/src/iso19111/crs.cpp +++ b/src/iso19111/crs.cpp @@ -4059,50 +4059,50 @@ void ProjectedCRS::_exportToWKT(io::WKTFormatter *formatter) const { if (found) l_esri_name = l_name; } - } - if (!isWKT2 && formatter->useESRIDialect() && !l_identifiers.empty() && - *(l_identifiers[0]->codeSpace()) == "ESRI" && dbContext) { - try { - const auto definition = dbContext->getTextDefinition( - "projected_crs", "ESRI", l_identifiers[0]->code()); - if (starts_with(definition, "PROJCS")) { - auto crsFromFromDef = io::WKTParser() - .attachDatabaseContext(dbContext) - .createFromWKT(definition); - if (_isEquivalentTo( - dynamic_cast<IComparable *>(crsFromFromDef.get()), - util::IComparable::Criterion::EQUIVALENT)) { - formatter->ingestWKTNode( - io::WKTNode::createFrom(definition)); - return; - } - } - } catch (const std::exception &) { - } - } else if (!isWKT2 && formatter->useESRIDialect() && !l_esri_name.empty()) { - try { - auto res = - io::AuthorityFactory::create(NN_NO_CHECK(dbContext), "ESRI") - ->createObjectsFromName( - l_esri_name, - {io::AuthorityFactory::ObjectType::PROJECTED_CRS}, - false); - if (res.size() == 1) { + if (!isWKT2 && !l_identifiers.empty() && + *(l_identifiers[0]->codeSpace()) == "ESRI") { + try { const auto definition = dbContext->getTextDefinition( - "projected_crs", "ESRI", - res.front()->identifiers()[0]->code()); + "projected_crs", "ESRI", l_identifiers[0]->code()); if (starts_with(definition, "PROJCS")) { + auto crsFromFromDef = io::WKTParser() + .attachDatabaseContext(dbContext) + .createFromWKT(definition); if (_isEquivalentTo( - dynamic_cast<IComparable *>(res.front().get()), + dynamic_cast<IComparable *>(crsFromFromDef.get()), util::IComparable::Criterion::EQUIVALENT)) { formatter->ingestWKTNode( io::WKTNode::createFrom(definition)); return; } } + } catch (const std::exception &) { + } + } else if (!isWKT2 && !l_esri_name.empty()) { + try { + auto res = + io::AuthorityFactory::create(NN_NO_CHECK(dbContext), "ESRI") + ->createObjectsFromName( + l_esri_name, + {io::AuthorityFactory::ObjectType::PROJECTED_CRS}, + false); + if (res.size() == 1) { + const auto definition = dbContext->getTextDefinition( + "projected_crs", "ESRI", + res.front()->identifiers()[0]->code()); + if (starts_with(definition, "PROJCS")) { + if (_isEquivalentTo( + dynamic_cast<IComparable *>(res.front().get()), + util::IComparable::Criterion::EQUIVALENT)) { + formatter->ingestWKTNode( + io::WKTNode::createFrom(definition)); + return; + } + } + } + } catch (const std::exception &) { } - } catch (const std::exception &) { } } diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp index 02bcf3b0..b7f26fe5 100644 --- a/src/iso19111/io.cpp +++ b/src/iso19111/io.cpp @@ -4072,7 +4072,7 @@ WKTParser::Private::buildProjectedCRS(const WKTNodeNNPtr &node) { props.set(IdentifiedObject::NAME_KEY, "WGS 84 / UPS North (E,N)"); } else if (projCRSName == "UPS_South") { props.set(IdentifiedObject::NAME_KEY, "WGS 84 / UPS South (E,N)"); - } else { + } else if (cartesianCS) { std::string outTableName; std::string authNameFromAlias; std::string codeFromAlias; diff --git a/src/iso19111/operation/coordinateoperationfactory.cpp b/src/iso19111/operation/coordinateoperationfactory.cpp index 6b7d4d20..20042f22 100644 --- a/src/iso19111/operation/coordinateoperationfactory.cpp +++ b/src/iso19111/operation/coordinateoperationfactory.cpp @@ -3829,13 +3829,10 @@ void CoordinateOperationFactory::Private:: [&res, &context](const crs::GeographicCRS *geogSrcIn, const crs::VerticalCRS *vertDstIn, const crs::CRSNNPtr &targetCRSIn) { - if (res.empty() && geogSrcIn && vertDstIn && + const auto &authFactory = context.context->getAuthorityFactory(); + if (res.empty() && geogSrcIn && vertDstIn && authFactory && geogSrcIn->coordinateSystem()->axisList().size() == 3) { - const auto &authFactory = - context.context->getAuthorityFactory(); - const auto dbContext = - authFactory ? authFactory->databaseContext().as_nullable() - : nullptr; + const auto &dbContext = authFactory->databaseContext(); const auto candidatesSrcGeod(findCandidateGeodCRSForDatum( authFactory, geogSrcIn, geogSrcIn->datumNonNull(dbContext).get())); |
