aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-03-13 13:17:48 +0100
committerEven Rouault <even.rouault@spatialys.com>2021-03-15 16:16:32 +0100
commitd618dcc33b5a0783565e15ad36a9fa0b8839fb7b (patch)
treef0861e8ab5b32ab32e19412a0e7157fd740b958f /src
parent8a67a3fb96ffdb29887b2954dd4bb8af92f6960d (diff)
downloadPROJ-d618dcc33b5a0783565e15ad36a9fa0b8839fb7b.tar.gz
PROJ-d618dcc33b5a0783565e15ad36a9fa0b8839fb7b.zip
SQL export: add publication_date and frame_reference_epoch to datums
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/factory.cpp44
1 files changed, 36 insertions, 8 deletions
diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp
index d7050bce..a4c5dcba 100644
--- a/src/iso19111/factory.cpp
+++ b/src/iso19111/factory.cpp
@@ -1825,13 +1825,27 @@ std::vector<std::string> DatabaseContext::Private::getInsertStatementsFor(
}
// Insert new record in geodetic_datum table
+ std::string publicationDate("NULL");
+ if (datum->publicationDate().has_value()) {
+ publicationDate = '\'';
+ publicationDate +=
+ replaceAll(datum->publicationDate()->toString(), "'", "''");
+ publicationDate += '\'';
+ }
+ std::string frameReferenceEpoch("NULL");
+ const auto dynamicDatum =
+ dynamic_cast<const datum::DynamicGeodeticReferenceFrame *>(datum.get());
+ if (dynamicDatum) {
+ frameReferenceEpoch =
+ toString(dynamicDatum->frameReferenceEpoch().value());
+ }
const auto sql = formatStatement(
"INSERT INTO geodetic_datum VALUES("
- "'%q','%q','%q','%q','%q','%q','%q','%q',NULL,NULL,NULL,0);",
+ "'%q','%q','%q','%q','%q','%q','%q','%q',%s,%s,NULL,0);",
authName.c_str(), code.c_str(), datum->nameStr().c_str(),
"", // description
ellipsoidAuthName.c_str(), ellipsoidCode.c_str(), pmAuthName.c_str(),
- pmCode.c_str());
+ pmCode.c_str(), publicationDate.c_str(), frameReferenceEpoch.c_str());
appendSql(sqlStatements, sql);
identifyOrInsertUsages(datum, "geodetic_datum", authName, code,
@@ -2066,12 +2080,26 @@ std::vector<std::string> DatabaseContext::Private::getInsertStatementsFor(
}
// Insert new record in vertical_datum table
- const auto sql = formatStatement("INSERT INTO vertical_datum VALUES("
- "'%q','%q','%q','%q',NULL,NULL,NULL,0);",
- authName.c_str(), code.c_str(),
- datum->nameStr().c_str(),
- "" // description
- );
+ std::string publicationDate("NULL");
+ if (datum->publicationDate().has_value()) {
+ publicationDate = '\'';
+ publicationDate +=
+ replaceAll(datum->publicationDate()->toString(), "'", "''");
+ publicationDate += '\'';
+ }
+ std::string frameReferenceEpoch("NULL");
+ const auto dynamicDatum =
+ dynamic_cast<const datum::DynamicVerticalReferenceFrame *>(datum.get());
+ if (dynamicDatum) {
+ frameReferenceEpoch =
+ toString(dynamicDatum->frameReferenceEpoch().value());
+ }
+ const auto sql = formatStatement(
+ "INSERT INTO vertical_datum VALUES("
+ "'%q','%q','%q','%q',%s,%s,NULL,0);",
+ authName.c_str(), code.c_str(), datum->nameStr().c_str(),
+ "", // description
+ publicationDate.c_str(), frameReferenceEpoch.c_str());
appendSql(sqlStatements, sql);
identifyOrInsertUsages(datum, "vertical_datum", authName, code,