diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2021-03-13 13:17:48 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2021-03-15 16:16:32 +0100 |
| commit | d618dcc33b5a0783565e15ad36a9fa0b8839fb7b (patch) | |
| tree | f0861e8ab5b32ab32e19412a0e7157fd740b958f /src | |
| parent | 8a67a3fb96ffdb29887b2954dd4bb8af92f6960d (diff) | |
| download | PROJ-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.cpp | 44 |
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, |
