aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-11-14 14:26:31 +0100
committerEven Rouault <even.rouault@spatialys.com>2019-11-14 14:41:05 +0100
commit2305dec4384365524cef76db4f84214746c4bd95 (patch)
treef5f8ff41bbeb32e0b1b67c31017d219ccf814570 /src
parent541ace23427371975a5aa6506120b41ef6c16aae (diff)
downloadPROJ-2305dec4384365524cef76db4f84214746c4bd95.tar.gz
PROJ-2305dec4384365524cef76db4f84214746c4bd95.zip
import/export PROJJSON: support a interpolation_crs key to geoid_model for faithful serialization of the geoid_geog_crs parameter of proj_create_vertical_crs_ex()
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/c_api.cpp3
-rw-r--r--src/iso19111/crs.cpp9
-rw-r--r--src/iso19111/io.cpp10
3 files changed, 20 insertions, 2 deletions
diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp
index fdfcdf7a..fd661cf8 100644
--- a/src/iso19111/c_api.cpp
+++ b/src/iso19111/c_api.cpp
@@ -3029,7 +3029,8 @@ PJ *proj_create_vertical_crs_ex(
? std::dynamic_pointer_cast<CRS>(geoid_geog_crs->iso_obj)
: nullptr;
const auto model(Transformation::create(
- propsModel, vertCRSWithoutGeoid, GeographicCRS::EPSG_4979,
+ propsModel, vertCRSWithoutGeoid,
+ GeographicCRS::EPSG_4979, // arbitrarily chosen. Ignored
interpCRS,
OperationMethod::create(PropertyMap(),
std::vector<OperationParameterNNPtr>()),
diff --git a/src/iso19111/crs.cpp b/src/iso19111/crs.cpp
index a55b701a..cf533bd3 100644
--- a/src/iso19111/crs.cpp
+++ b/src/iso19111/crs.cpp
@@ -2584,6 +2584,15 @@ void VerticalCRS::_exportToJSON(
auto objectContext2(formatter->MakeObjectContext(nullptr, false));
writer.AddObjKey("name");
writer.Add(model->nameStr());
+
+ if (model->identifiers().empty()) {
+ const auto &interpCRS = model->interpolationCRS();
+ if (interpCRS) {
+ writer.AddObjKey("interpolation_crs");
+ interpCRS->_exportToJSON(formatter);
+ }
+ }
+
model->formatID(formatter);
}
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp
index a0a87f65..4d9e8633 100644
--- a/src/iso19111/io.cpp
+++ b/src/iso19111/io.cpp
@@ -5129,8 +5129,16 @@ VerticalCRSNNPtr JSONParser::buildVerticalCRS(const json &j) {
auto propsModel = buildProperties(geoidModelJ);
const auto dummyCRS = VerticalCRS::create(
PropertyMap(), datum, datumEnsemble, NN_NO_CHECK(verticalCS));
+ CRSPtr interpolationCRS;
+ if (geoidModelJ.contains("interpolation_crs")) {
+ auto interpolationCRSJ =
+ getObject(geoidModelJ, "interpolation_crs");
+ interpolationCRS = buildCRS(interpolationCRSJ).as_nullable();
+ }
const auto model(Transformation::create(
- propsModel, dummyCRS, dummyCRS, nullptr,
+ propsModel, dummyCRS,
+ GeographicCRS::EPSG_4979, // arbitrarily chosen. Ignored,
+ interpolationCRS,
OperationMethod::create(PropertyMap(),
std::vector<OperationParameterNNPtr>()),
{}, {}));