diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-10-11 19:50:09 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2020-10-11 19:50:09 +0200 |
| commit | ad80dc88a70032e1d96812b574b2d4d22e223394 (patch) | |
| tree | be61efbce545fc2940861e218e2e1f448f1bb66f /src | |
| parent | acd1cf3278a532b56f3f621e27a8895b3db3cb75 (diff) | |
| download | PROJ-ad80dc88a70032e1d96812b574b2d4d22e223394.tar.gz PROJ-ad80dc88a70032e1d96812b574b2d4d22e223394.zip | |
Database: add a frame_reference_epoch column in vertical_datum to be able to handle dynamic vertical datums, and instanciate them properly from database
Diffstat (limited to 'src')
| -rw-r--r-- | src/iso19111/factory.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp index 5f12273d..473aa254 100644 --- a/src/iso19111/factory.cpp +++ b/src/iso19111/factory.cpp @@ -2081,7 +2081,8 @@ AuthorityFactory::createGeodeticDatum(const std::string &code) const { datum::VerticalReferenceFrameNNPtr AuthorityFactory::createVerticalDatum(const std::string &code) const { auto res = - d->runWithCodeParam("SELECT name, deprecated FROM " + d->runWithCodeParam("SELECT name, publication_date, " + "frame_reference_epoch, deprecated FROM " "vertical_datum WHERE auth_name = ? AND code = ?", code); if (res.empty()) { @@ -2091,11 +2092,23 @@ AuthorityFactory::createVerticalDatum(const std::string &code) const { try { const auto &row = res.front(); const auto &name = row[0]; - const bool deprecated = row[1] == "1"; + const auto &publication_date = row[1]; + const auto &frame_reference_epoch = row[2]; + const bool deprecated = row[3] == "1"; auto props = d->createPropertiesSearchUsages("vertical_datum", code, name, deprecated); + if (!publication_date.empty()) { + props.set("PUBLICATION_DATE", publication_date); + } auto anchor = util::optional<std::string>(); - return datum::VerticalReferenceFrame::create(props, anchor); + return frame_reference_epoch.empty() + ? datum::VerticalReferenceFrame::create(props, anchor) + : datum::DynamicVerticalReferenceFrame::create( + props, anchor, + util::optional<datum::RealizationMethod>(), + common::Measure(c_locale_stod(frame_reference_epoch), + common::UnitOfMeasure::YEAR), + util::optional<std::string>()); } catch (const std::exception &ex) { throw buildFactoryException("vertical reference frame", code, ex); } |
