aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-11-18 23:47:17 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-11-18 23:47:17 +0100
commit360657d16d1974e096d8d3bb61e18fee35598d1a (patch)
treee37a7c3437b90715e3695e43c8ff2a3cf1deaf52 /src
parentdf339795a8af5487cbff234083a8151c1b3eb181 (diff)
downloadPROJ-360657d16d1974e096d8d3bb61e18fee35598d1a.tar.gz
PROJ-360657d16d1974e096d8d3bb61e18fee35598d1a.zip
createGeodeticDatum(): query and set publicationDate
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/common.cpp9
-rw-r--r--src/iso19111/datum.cpp13
-rw-r--r--src/iso19111/factory.cpp9
3 files changed, 29 insertions, 2 deletions
diff --git a/src/iso19111/common.cpp b/src/iso19111/common.cpp
index d7960ee9..97900bda 100644
--- a/src/iso19111/common.cpp
+++ b/src/iso19111/common.cpp
@@ -552,6 +552,15 @@ DateTime::DateTime(const DateTime &other)
// ---------------------------------------------------------------------------
//! @cond Doxygen_Suppress
+DateTime &DateTime::operator=(const DateTime &other) {
+ d->str_ = other.d->str_;
+ return *this;
+}
+//! @endcond
+
+// ---------------------------------------------------------------------------
+
+//! @cond Doxygen_Suppress
DateTime::~DateTime() = default;
//! @endcond
diff --git a/src/iso19111/datum.cpp b/src/iso19111/datum.cpp
index 95754a8d..321fe93f 100644
--- a/src/iso19111/datum.cpp
+++ b/src/iso19111/datum.cpp
@@ -200,6 +200,19 @@ void Datum::setAnchor(const util::optional<std::string> &anchor) {
// ---------------------------------------------------------------------------
+void Datum::setProperties(
+ const util::PropertyMap &properties) // throw(InvalidValueTypeException)
+{
+ std::string publicationDate;
+ properties.getStringValue("PUBLICATION_DATE", publicationDate);
+ if (!publicationDate.empty()) {
+ d->publicationDate = common::DateTime::create(publicationDate);
+ }
+ ObjectUsage::setProperties(properties);
+}
+
+// ---------------------------------------------------------------------------
+
bool Datum::__isEquivalentTo(const util::IComparable *other,
util::IComparable::Criterion criterion) const {
auto otherDatum = dynamic_cast<const Datum *>(other);
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp
index 309e778a..98b05317 100644
--- a/src/iso19111/factory.cpp
+++ b/src/iso19111/factory.cpp
@@ -1887,7 +1887,8 @@ AuthorityFactory::createGeodeticDatum(const std::string &code) const {
auto res = d->runWithCodeParam(
"SELECT name, ellipsoid_auth_name, ellipsoid_code, "
"prime_meridian_auth_name, prime_meridian_code, area_of_use_auth_name, "
- "area_of_use_code, deprecated FROM geodetic_datum WHERE "
+ "area_of_use_code, publication_date, deprecated FROM geodetic_datum "
+ "WHERE "
"auth_name = ? AND code = ?",
code);
if (res.empty()) {
@@ -1903,7 +1904,8 @@ AuthorityFactory::createGeodeticDatum(const std::string &code) const {
const auto &prime_meridian_code = row[4];
const auto &area_of_use_auth_name = row[5];
const auto &area_of_use_code = row[6];
- const bool deprecated = row[7] == "1";
+ const auto &publication_date = row[7];
+ const bool deprecated = row[8] == "1";
auto ellipsoid = d->createFactory(ellipsoid_auth_name)
->createEllipsoid(ellipsoid_code);
auto pm = d->createFactory(prime_meridian_auth_name)
@@ -1911,6 +1913,9 @@ AuthorityFactory::createGeodeticDatum(const std::string &code) const {
auto props = d->createProperties(
code, name, deprecated, area_of_use_auth_name, area_of_use_code);
auto anchor = util::optional<std::string>();
+ if (!publication_date.empty()) {
+ props.set("PUBLICATION_DATE", publication_date);
+ }
auto datum =
datum::GeodeticReferenceFrame::create(props, ellipsoid, anchor, pm);
d->context()->d->cache(cacheKey, datum);