aboutsummaryrefslogtreecommitdiff
path: root/src/iso19111/coordinateoperation.cpp
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2020-04-22 19:25:07 +0200
committerEven Rouault <even.rouault@spatialys.com>2020-04-22 19:54:45 +0200
commit34a6fef7deb4260b4dabdd71a76f8d2aa262406c (patch)
tree311a514d986f197eeb9857fe372e8ccacf6d9cd1 /src/iso19111/coordinateoperation.cpp
parentd9934eb07fb38ad57f40eb6c308fcbbf0f713d86 (diff)
downloadPROJ-34a6fef7deb4260b4dabdd71a76f8d2aa262406c.tar.gz
PROJ-34a6fef7deb4260b4dabdd71a76f8d2aa262406c.zip
PROJ4 string import: take into correctly non-metre unit when the string looks like the one for WGS 84 / Pseudo Mercator (fixes https://github.com/OSGeo/gdal/issues/2433) (#2174)
Diffstat (limited to 'src/iso19111/coordinateoperation.cpp')
-rw-r--r--src/iso19111/coordinateoperation.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/iso19111/coordinateoperation.cpp b/src/iso19111/coordinateoperation.cpp
index f61215d0..883e2f32 100644
--- a/src/iso19111/coordinateoperation.cpp
+++ b/src/iso19111/coordinateoperation.cpp
@@ -5821,6 +5821,24 @@ static bool createPROJ4WebMercator(const Conversion *conv,
return false;
}
+ std::string units("m");
+ auto targetCRS = conv->targetCRS();
+ auto targetProjCRS =
+ dynamic_cast<const crs::ProjectedCRS *>(targetCRS.get());
+ if (targetProjCRS) {
+ const auto &axisList = targetProjCRS->coordinateSystem()->axisList();
+ const auto &unit = axisList[0]->unit();
+ if (!unit._isEquivalentTo(common::UnitOfMeasure::METRE,
+ util::IComparable::Criterion::EQUIVALENT)) {
+ auto projUnit = unit.exportToPROJString();
+ if (!projUnit.empty()) {
+ units = projUnit;
+ } else {
+ return false;
+ }
+ }
+ }
+
formatter->addStep("merc");
const double a = geogCRS->ellipsoid()->semiMajorAxis().getSIValue();
formatter->addParam("a", a);
@@ -5830,7 +5848,7 @@ static bool createPROJ4WebMercator(const Conversion *conv,
formatter->addParam("x_0", falseEasting);
formatter->addParam("y_0", falseNorthing);
formatter->addParam("k", 1.0);
- formatter->addParam("units", "m");
+ formatter->addParam("units", units);
formatter->addParam("nadgrids", "@null");
formatter->addParam("wktext");
formatter->addParam("no_defs");