aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111
diff options
context:
space:
mode:
Diffstat (limited to 'src/iso19111')
-rw-r--r--src/iso19111/common.cpp3
-rw-r--r--src/iso19111/crs.cpp66
-rw-r--r--src/iso19111/io.cpp2
-rw-r--r--src/iso19111/operation/coordinateoperationfactory.cpp9
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()));