aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2020-04-15 23:49:54 +0200
committerEven Rouault <even.rouault@spatialys.com>2020-04-16 12:09:54 +0200
commita8fdadfa3f726d110bdb964b3952d8c50a8d2f28 (patch)
tree0076d86fd05fca2b6d410a7e552ae554327e4157 /src
parentc91966953d9ad327cbb3b9d80842cc0d3957df42 (diff)
downloadPROJ-a8fdadfa3f726d110bdb964b3952d8c50a8d2f28.tar.gz
PROJ-a8fdadfa3f726d110bdb964b3952d8c50a8d2f28.zip
Map ESRI WKT for Adams_Square_II to +proj=adams_ws2
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/coordinateoperation.cpp36
-rw-r--r--src/iso19111/io.cpp3
2 files changed, 38 insertions, 1 deletions
diff --git a/src/iso19111/coordinateoperation.cpp b/src/iso19111/coordinateoperation.cpp
index 822d09ac..d8b7f5e8 100644
--- a/src/iso19111/coordinateoperation.cpp
+++ b/src/iso19111/coordinateoperation.cpp
@@ -6183,6 +6183,42 @@ void Conversion::_exportToPROJString(
formatter->addParam("o_lat_p", -southPoleLat);
formatter->addParam("lon_0", southPoleLon);
bConversionDone = true;
+ } else if (ci_equal(methodName, "Adams_Square_II")) {
+ // Look for ESRI method and parameter names (to be opposed
+ // to the OGC WKT2 names we use elsewhere, because there's no mapping
+ // of those parameters to OGC WKT2)
+ // We also reject non-default values for a number of parameters,
+ // because they are not implemented on PROJ side. The subset we
+ // support can handle ESRI:54098 WGS_1984_Adams_Square_II, but not
+ // ESRI:54099 WGS_1984_Spilhaus_Ocean_Map_in_Square
+ const double falseEasting = parameterValueNumeric(
+ "False_Easting", common::UnitOfMeasure::METRE);
+ const double falseNorthing = parameterValueNumeric(
+ "False_Northing", common::UnitOfMeasure::METRE);
+ const double scaleFactor =
+ parameterValue("Scale_Factor", 0)
+ ? parameterValueNumeric("Scale_Factor",
+ common::UnitOfMeasure::SCALE_UNITY)
+ : 1.0;
+ const double azimuth =
+ parameterValueNumeric("Azimuth", common::UnitOfMeasure::DEGREE);
+ const double longitudeOfCenter = parameterValueNumeric(
+ "Longitude_Of_Center", common::UnitOfMeasure::DEGREE);
+ const double latitudeOfCenter = parameterValueNumeric(
+ "Latitude_Of_Center", common::UnitOfMeasure::DEGREE);
+ const double XYPlaneRotation = parameterValueNumeric(
+ "XY_Plane_Rotation", common::UnitOfMeasure::DEGREE);
+ if (scaleFactor != 1.0 || azimuth != 0.0 || latitudeOfCenter != 0.0 ||
+ XYPlaneRotation != 0.0) {
+ throw io::FormattingException("Unsupported value for one or "
+ "several parameters of "
+ "Adams_Square_II");
+ }
+ formatter->addStep("adams_ws2");
+ formatter->addParam("lon_0", longitudeOfCenter);
+ formatter->addParam("x_0", falseEasting);
+ formatter->addParam("y_0", falseNorthing);
+ bConversionDone = true;
} else if (formatter->convention() ==
io::PROJStringFormatter::Convention::PROJ_5 &&
isZUnitConversion) {
diff --git a/src/iso19111/io.cpp b/src/iso19111/io.cpp
index 07620864..8968b70e 100644
--- a/src/iso19111/io.cpp
+++ b/src/iso19111/io.cpp
@@ -2899,7 +2899,8 @@ UnitOfMeasure WKTParser::Private::guessUnitForParameter(
ci_find(paramName, "parallel") != std::string::npos ||
ci_find(paramName, "azimuth") != std::string::npos ||
ci_find(paramName, "angle") != std::string::npos ||
- ci_find(paramName, "heading") != std::string::npos) {
+ ci_find(paramName, "heading") != std::string::npos ||
+ ci_find(paramName, "rotation") != std::string::npos) {
unit = defaultAngularUnit;
} else if (ci_find(paramName, "easting") != std::string::npos ||
ci_find(paramName, "northing") != std::string::npos ||