aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/build_esri_projection_mapping.py7
-rw-r--r--src/iso19111/operation/esriparammappings.cpp17
-rw-r--r--test/unit/test_io.cpp37
3 files changed, 58 insertions, 3 deletions
diff --git a/scripts/build_esri_projection_mapping.py b/scripts/build_esri_projection_mapping.py
index 3f3d4667..30f4ad6c 100644
--- a/scripts/build_esri_projection_mapping.py
+++ b/scripts/build_esri_projection_mapping.py
@@ -553,6 +553,13 @@ config_str = """
- XY_Plane_Rotation: EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID
- Goode_Homolosine:
+ - WKT2_name: PROJ_WKT2_NAME_METHOD_GOODE_HOMOLOSINE
+ Params:
+ - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING
+ - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING
+ - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN
+ - Option: 0.0
+
- WKT2_name: PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE
Params:
- False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING
diff --git a/src/iso19111/operation/esriparammappings.cpp b/src/iso19111/operation/esriparammappings.cpp
index aea4b3d3..8021b95f 100644
--- a/src/iso19111/operation/esriparammappings.cpp
+++ b/src/iso19111/operation/esriparammappings.cpp
@@ -744,7 +744,7 @@ static const ESRIParamMapping paramsESRI_Goode_Homolosine_alt1[] = {
EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false},
{"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN,
EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false},
- {"Option", nullptr, 0, "1.0", false},
+ {"Option", nullptr, 0, "0.0", false},
{nullptr, nullptr, 0, "0.0", false}};
static const ESRIParamMapping paramsESRI_Goode_Homolosine_alt2[] = {
{"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING,
@@ -753,6 +753,15 @@ static const ESRIParamMapping paramsESRI_Goode_Homolosine_alt2[] = {
EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false},
{"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN,
EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false},
+ {"Option", nullptr, 0, "1.0", false},
+ {nullptr, nullptr, 0, "0.0", false}};
+static const ESRIParamMapping paramsESRI_Goode_Homolosine_alt3[] = {
+ {"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING,
+ EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false},
+ {"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING,
+ EPSG_CODE_PARAMETER_FALSE_NORTHING, "0.0", false},
+ {"Central_Meridian", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN,
+ EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false},
{"Option", nullptr, 0, "2.0", false},
{nullptr, nullptr, 0, "0.0", false}};
@@ -1063,11 +1072,13 @@ static const ESRIMethodMapping esriMappings[] = {
EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B,
EPSG_CODE_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B,
paramsESRI_Rectified_Skew_Orthomorphic_Center},
- {"Goode_Homolosine", PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE, 0,
+ {"Goode_Homolosine", PROJ_WKT2_NAME_METHOD_GOODE_HOMOLOSINE, 0,
paramsESRI_Goode_Homolosine_alt1},
+ {"Goode_Homolosine", PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE, 0,
+ paramsESRI_Goode_Homolosine_alt2},
{"Goode_Homolosine",
PROJ_WKT2_NAME_METHOD_INTERRUPTED_GOODE_HOMOLOSINE_OCEAN, 0,
- paramsESRI_Goode_Homolosine_alt2},
+ paramsESRI_Goode_Homolosine_alt3},
{"Equidistant_Cylindrical_Ellipsoidal",
EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL,
EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL,
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp
index a899482e..72ac1868 100644
--- a/test/unit/test_io.cpp
+++ b/test/unit/test_io.cpp
@@ -5722,6 +5722,18 @@ static const struct {
{{"False_Easting", 1},
{"False_Northing", 2},
{"Central_Meridian", 3},
+ {"Option", 0.0}},
+ "Goode Homolosine",
+ {
+ {"Longitude of natural origin", 3},
+ {"False easting", 1},
+ {"False northing", 2},
+ }},
+
+ {"Goode_Homolosine",
+ {{"False_Easting", 1},
+ {"False_Northing", 2},
+ {"Central_Meridian", 3},
{"Option", 1.0}},
"Interrupted Goode Homolosine",
{
@@ -6290,6 +6302,31 @@ TEST(wkt_parse, wkt1_esri_gauss_kruger) {
// ---------------------------------------------------------------------------
+TEST(wkt_parse, wkt1_esri_goode_homolosine_without_option_0) {
+ // Not sure if it is really valid to not have PARAMETER["Option",0.0]
+ // but it seems reasonable to check that we understand that as
+ // Goode Homolosine and not Interrupted Goode Homolosine (option 1)
+ auto wkt = "PROJCS[\"unknown\",GEOGCS[\"GCS_unknown\",DATUM[\"D_WGS_1984\","
+ "SPHEROID[\"WGS_1984\",6378137.0,298.257223563]],"
+ "PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],"
+ "PROJECTION[\"Goode_Homolosine\"],"
+ "PARAMETER[\"False_Easting\",0.0],"
+ "PARAMETER[\"False_Northing\",0.0],"
+ "PARAMETER[\"Central_Meridian\",0.0],"
+ "UNIT[\"Meter\",1.0]]";
+
+ auto obj = WKTParser()
+ .attachDatabaseContext(DatabaseContext::create())
+ .createFromWKT(wkt);
+ auto crs = nn_dynamic_pointer_cast<ProjectedCRS>(obj);
+ ASSERT_TRUE(crs != nullptr);
+
+ EXPECT_EQ(crs->derivingConversion()->method()->nameStr(),
+ "Goode Homolosine");
+}
+
+// ---------------------------------------------------------------------------
+
TEST(wkt_parse, wkt1_oracle) {
// WKT from mdsys.cs_srs Oracle table
auto wkt = "PROJCS[\"RGF93 / Lambert-93\", GEOGCS [ \"RGF93\", "