aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111/crs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/iso19111/crs.cpp')
-rw-r--r--src/iso19111/crs.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/iso19111/crs.cpp b/src/iso19111/crs.cpp
index 2d589ad1..51317c18 100644
--- a/src/iso19111/crs.cpp
+++ b/src/iso19111/crs.cpp
@@ -6506,6 +6506,33 @@ DerivedVerticalCRSNNPtr DerivedVerticalCRS::create(
void DerivedVerticalCRS::_exportToWKT(io::WKTFormatter *formatter) const {
const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2;
if (!isWKT2) {
+
+ bool useBaseMethod = true;
+ const DerivedVerticalCRS *dvcrs = this;
+ while (true) {
+ // If the derived vertical CRS is obtained through simple conversion
+ // methods that just do unit change or height/depth reversal, export
+ // it as a regular VerticalCRS
+ const int methodCode =
+ dvcrs->derivingConversionRef()->method()->getEPSGCode();
+ if (methodCode == EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT ||
+ methodCode ==
+ EPSG_CODE_METHOD_CHANGE_VERTICAL_UNIT_NO_CONV_FACTOR ||
+ methodCode == EPSG_CODE_METHOD_HEIGHT_DEPTH_REVERSAL) {
+ dvcrs = dynamic_cast<DerivedVerticalCRS *>(baseCRS().get());
+ if (dvcrs == nullptr) {
+ break;
+ }
+ } else {
+ useBaseMethod = false;
+ break;
+ }
+ }
+ if (useBaseMethod) {
+ VerticalCRS::_exportToWKT(formatter);
+ return;
+ }
+
io::FormattingException::Throw(
"DerivedVerticalCRS can only be exported to WKT2");
}