aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2021-03-27 20:23:40 +0100
committerGitHub <noreply@github.com>2021-03-27 20:23:40 +0100
commit752cb2a162e74235d7fac534aeec37894e024de0 (patch)
tree93bd8a4ea08e4980481976531212e2f58ade7adc
parent38e507c34194d67b14afb758c2141be732cfd40c (diff)
parent08c522c210af1d6cb10e9a36aa274bd5d3a00e21 (diff)
downloadPROJ-752cb2a162e74235d7fac534aeec37894e024de0.tar.gz
PROJ-752cb2a162e74235d7fac534aeec37894e024de0.zip
Merge pull request #2612 from OSGeo/backport-2611-to-8.0
[Backport 8.0] Add mapping of ESRI Equal_Area projection method to EPSG (fixes #2610)
-rw-r--r--data/sql/esri.sql24
-rwxr-xr-xscripts/build_db_from_esri.py32
-rw-r--r--scripts/build_esri_projection_mapping.py7
-rw-r--r--src/iso19111/operation/esriparammappings.cpp11
-rw-r--r--test/unit/test_io.cpp9
5 files changed, 77 insertions, 6 deletions
diff --git a/data/sql/esri.sql b/data/sql/esri.sql
index 1e46585c..4ca3ca29 100644
--- a/data/sql/esri.sql
+++ b/data/sql/esri.sql
@@ -8131,11 +8131,17 @@ INSERT INTO "projected_crs" VALUES('ESRI','53032','Sphere_Azimuthal_Equidistant'
INSERT INTO "usage" VALUES('ESRI', 'PCRS_53032_USAGE','projected_crs','ESRI','53032','EPSG','1262','EPSG','1024');
INSERT INTO "projected_crs" VALUES('ESRI','53034','Sphere_Cylindrical_Equal_Area',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Cylindrical_Equal_Area",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Cylindrical_Equal_Area"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],UNIT["Meter",1.0]]',0);
INSERT INTO "usage" VALUES('ESRI', 'PCRS_53034_USAGE','projected_crs','ESRI','53034','EPSG','1262','EPSG','1024');
-INSERT INTO "projected_crs" VALUES('ESRI','53035','Sphere_Equal_Earth_Greenwich',NULL,NULL,NULL,'ESRI','104047',NULL,NULL,'PROJCS["Sphere_Equal_Earth_Greenwich",GEOGCS["GCS_Sphere_GRS_1980_Mean_Radius",DATUM["D_Sphere_GRS_1980_Mean_Radius",SPHEROID["Sphere_GRS_1980_Mean_Radius",6371008.7714,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equal_Earth"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',0);
+INSERT INTO "conversion" VALUES('ESRI','53035','unnamed',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
+INSERT INTO "usage" VALUES('ESRI', 'CONV_53035_USAGE','conversion','ESRI','53035','EPSG','1262','EPSG','1024');
+INSERT INTO "projected_crs" VALUES('ESRI','53035','Sphere_Equal_Earth_Greenwich',NULL,'EPSG','4400','ESRI','104047','ESRI','53035',NULL,0);
INSERT INTO "usage" VALUES('ESRI', 'PCRS_53035_USAGE','projected_crs','ESRI','53035','EPSG','1262','EPSG','1024');
-INSERT INTO "projected_crs" VALUES('ESRI','53036','Sphere_Equal_Earth_Americas',NULL,NULL,NULL,'ESRI','104047',NULL,NULL,'PROJCS["Sphere_Equal_Earth_Americas",GEOGCS["GCS_Sphere_GRS_1980_Mean_Radius",DATUM["D_Sphere_GRS_1980_Mean_Radius",SPHEROID["Sphere_GRS_1980_Mean_Radius",6371008.7714,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equal_Earth"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-90.0],UNIT["Meter",1.0]]',0);
+INSERT INTO "conversion" VALUES('ESRI','53036','unnamed',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
+INSERT INTO "usage" VALUES('ESRI', 'CONV_53036_USAGE','conversion','ESRI','53036','EPSG','1262','EPSG','1024');
+INSERT INTO "projected_crs" VALUES('ESRI','53036','Sphere_Equal_Earth_Americas',NULL,'EPSG','4400','ESRI','104047','ESRI','53036',NULL,0);
INSERT INTO "usage" VALUES('ESRI', 'PCRS_53036_USAGE','projected_crs','ESRI','53036','EPSG','1262','EPSG','1024');
-INSERT INTO "projected_crs" VALUES('ESRI','53037','Sphere_Equal_Earth_Asia_Pacific',NULL,NULL,NULL,'ESRI','104047',NULL,NULL,'PROJCS["Sphere_Equal_Earth_Asia_Pacific",GEOGCS["GCS_Sphere_GRS_1980_Mean_Radius",DATUM["D_Sphere_GRS_1980_Mean_Radius",SPHEROID["Sphere_GRS_1980_Mean_Radius",6371008.7714,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equal_Earth"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",150.0],UNIT["Meter",1.0]]',0);
+INSERT INTO "conversion" VALUES('ESRI','53037','unnamed',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',150.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
+INSERT INTO "usage" VALUES('ESRI', 'CONV_53037_USAGE','conversion','ESRI','53037','EPSG','1262','EPSG','1024');
+INSERT INTO "projected_crs" VALUES('ESRI','53037','Sphere_Equal_Earth_Asia_Pacific',NULL,'EPSG','4400','ESRI','104047','ESRI','53037',NULL,0);
INSERT INTO "usage" VALUES('ESRI', 'PCRS_53037_USAGE','projected_crs','ESRI','53037','EPSG','1262','EPSG','1024');
INSERT INTO "projected_crs" VALUES('ESRI','53042','Sphere_Winkel_Tripel_NGS',NULL,NULL,NULL,'EPSG','4035',NULL,NULL,'PROJCS["Sphere_Winkel_Tripel_NGS",GEOGCS["GCS_Sphere",DATUM["D_Sphere",SPHEROID["Sphere",6371000.0,0.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Winkel_Tripel"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",50.467],UNIT["Meter",1.0]]',0);
INSERT INTO "usage" VALUES('ESRI', 'PCRS_53042_USAGE','projected_crs','ESRI','53042','EPSG','1262','EPSG','1024');
@@ -8223,11 +8229,17 @@ INSERT INTO "projected_crs" VALUES('ESRI','54032','World_Azimuthal_Equidistant',
INSERT INTO "usage" VALUES('ESRI', 'PCRS_54032_USAGE','projected_crs','ESRI','54032','EPSG','1262','EPSG','1024');
INSERT INTO "projected_crs" VALUES('ESRI','54034','World_Cylindrical_Equal_Area',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Cylindrical_Equal_Area",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Cylindrical_Equal_Area"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],UNIT["Meter",1.0]]',0);
INSERT INTO "usage" VALUES('ESRI', 'PCRS_54034_USAGE','projected_crs','ESRI','54034','EPSG','1262','EPSG','1024');
-INSERT INTO "projected_crs" VALUES('ESRI','54035','WGS_1984_Equal_Earth_Greenwich',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Equal_Earth_Greenwich",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equal_Earth"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],UNIT["Meter",1.0]]',1);
+INSERT INTO "conversion" VALUES('ESRI','54035','unnamed',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1);
+INSERT INTO "usage" VALUES('ESRI', 'CONV_54035_USAGE','conversion','ESRI','54035','EPSG','1262','EPSG','1024');
+INSERT INTO "projected_crs" VALUES('ESRI','54035','WGS_1984_Equal_Earth_Greenwich',NULL,'EPSG','4400','EPSG','4326','ESRI','54035',NULL,1);
INSERT INTO "usage" VALUES('ESRI', 'PCRS_54035_USAGE','projected_crs','ESRI','54035','EPSG','1262','EPSG','1024');
-INSERT INTO "projected_crs" VALUES('ESRI','54036','WGS_1984_Equal_Earth_Americas',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Equal_Earth_Americas",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equal_Earth"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-90.0],UNIT["Meter",1.0]]',1);
+INSERT INTO "conversion" VALUES('ESRI','54036','unnamed',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',-90.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1);
+INSERT INTO "usage" VALUES('ESRI', 'CONV_54036_USAGE','conversion','ESRI','54036','EPSG','1262','EPSG','1024');
+INSERT INTO "projected_crs" VALUES('ESRI','54036','WGS_1984_Equal_Earth_Americas',NULL,'EPSG','4400','EPSG','4326','ESRI','54036',NULL,1);
INSERT INTO "usage" VALUES('ESRI', 'PCRS_54036_USAGE','projected_crs','ESRI','54036','EPSG','1262','EPSG','1024');
-INSERT INTO "projected_crs" VALUES('ESRI','54037','WGS_1984_Equal_Earth_Asia_Pacific',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["WGS_1984_Equal_Earth_Asia_Pacific",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Equal_Earth"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",150.0],UNIT["Meter",1.0]]',1);
+INSERT INTO "conversion" VALUES('ESRI','54037','unnamed',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',150.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,1);
+INSERT INTO "usage" VALUES('ESRI', 'CONV_54037_USAGE','conversion','ESRI','54037','EPSG','1262','EPSG','1024');
+INSERT INTO "projected_crs" VALUES('ESRI','54037','WGS_1984_Equal_Earth_Asia_Pacific',NULL,'EPSG','4400','EPSG','4326','ESRI','54037',NULL,1);
INSERT INTO "usage" VALUES('ESRI', 'PCRS_54037_USAGE','projected_crs','ESRI','54037','EPSG','1262','EPSG','1024');
INSERT INTO "projected_crs" VALUES('ESRI','54042','World_Winkel_Tripel_NGS',NULL,NULL,NULL,'EPSG','4326',NULL,NULL,'PROJCS["World_Winkel_Tripel_NGS",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Winkel_Tripel"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",50.467],UNIT["Meter",1.0]]',0);
INSERT INTO "usage" VALUES('ESRI', 'PCRS_54042_USAGE','projected_crs','ESRI','54042','EPSG','1262','EPSG','1024');
diff --git a/scripts/build_db_from_esri.py b/scripts/build_db_from_esri.py
index b55a1411..bcc252be 100755
--- a/scripts/build_db_from_esri.py
+++ b/scripts/build_db_from_esri.py
@@ -1045,6 +1045,38 @@ def import_projcs():
sql = """INSERT INTO "usage" VALUES('ESRI', 'PCRS_%s_USAGE','projected_crs','ESRI','%s','%s','%s','%s','%s');""" % (code, code, extent_auth_name, extent_code, 'EPSG', '1024')
all_sql.append(sql)
+ elif method == 'Equal_Earth':
+ assert len(parsed_conv_wkt) == 1 + 3 + 2
+ False_Easting = parsed_conv_wkt['False_Easting']
+ False_Northing = parsed_conv_wkt['False_Northing']
+ Central_Meridian = parsed_conv_wkt['Central_Meridian']
+
+ cs_auth_name, cs_code, uom_code = get_cs(parsed_conv_wkt)
+
+ conv_name = 'unnamed'
+ conv_auth_name = 'ESRI'
+ conv_code = code
+
+ sql = """INSERT INTO "conversion" VALUES('ESRI','%s','%s',NULL,'EPSG','1078','Equal Earth','EPSG','8802','Longitude of natural origin',%s,'EPSG','%s','EPSG','8806','False easting',%s,'EPSG','%s','EPSG','8807','False northing',%s,'EPSG','%s',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,%d);""" % (
+ code, conv_name, Central_Meridian, ang_uom_code, False_Easting, uom_code, False_Northing, uom_code, deprecated)
+
+ sql_extract = sql[sql.find('NULL'):]
+ if conv_name != 'unnamed' or sql_extract not in map_conversion_sql_to_code:
+ all_sql.append(sql)
+
+ sql = """INSERT INTO "usage" VALUES('ESRI', 'CONV_%s_USAGE','conversion','ESRI','%s','%s','%s','%s','%s');""" % (code, code, extent_auth_name, extent_code, 'EPSG', '1024')
+ all_sql.append(sql)
+
+ map_conversion_sql_to_code[sql_extract] = conv_code
+ else:
+ conv_code = map_conversion_sql_to_code[sql_extract]
+
+ sql = """INSERT INTO "projected_crs" VALUES('ESRI','%s','%s',NULL,'%s','%s','%s','%s','%s','%s',NULL,%d);""" % (
+ code, esri_name, cs_auth_name, cs_code, geogcs_auth_name, geogcs_code, conv_auth_name, conv_code, deprecated)
+ all_sql.append(sql)
+ sql = """INSERT INTO "usage" VALUES('ESRI', 'PCRS_%s_USAGE','projected_crs','ESRI','%s','%s','%s','%s','%s');""" % (code, code, extent_auth_name, extent_code, 'EPSG', '1024')
+ all_sql.append(sql)
+
else:
sql = """INSERT INTO "projected_crs" VALUES('ESRI','%s','%s',NULL,NULL,NULL,'%s','%s',NULL,NULL,'%s',%d);""" % (
diff --git a/scripts/build_esri_projection_mapping.py b/scripts/build_esri_projection_mapping.py
index 752f9850..3f3d4667 100644
--- a/scripts/build_esri_projection_mapping.py
+++ b/scripts/build_esri_projection_mapping.py
@@ -696,6 +696,13 @@ config_str = """
- Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN
- Height: EPSG_NAME_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT
+- Equal_Earth:
+ WKT2_name: EPSG_NAME_METHOD_EQUAL_EARTH
+ Params:
+ - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING
+ - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING
+ - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN
+
# Missing/unclear mappings
diff --git a/src/iso19111/operation/esriparammappings.cpp b/src/iso19111/operation/esriparammappings.cpp
index 44886e95..aea4b3d3 100644
--- a/src/iso19111/operation/esriparammappings.cpp
+++ b/src/iso19111/operation/esriparammappings.cpp
@@ -929,6 +929,15 @@ static const ESRIParamMapping paramsESRI_IGAC_Plano_Cartesiano[] = {
EPSG_CODE_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT, "0.0", false},
{nullptr, nullptr, 0, "0.0", false}};
+static const ESRIParamMapping paramsESRI_Equal_Earth[] = {
+ {"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},
+ {nullptr, nullptr, 0, "0.0", false}};
+
static const ESRIMethodMapping esriMappings[] = {
{"Plate_Carree", EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL,
EPSG_CODE_METHOD_EQUIDISTANT_CYLINDRICAL, paramsESRI_Plate_Carree},
@@ -1093,6 +1102,8 @@ static const ESRIMethodMapping esriMappings[] = {
0, paramsESRI_Transverse_Cylindrical_Equal_Area},
{"IGAC_Plano_Cartesiano", EPSG_NAME_METHOD_COLOMBIA_URBAN,
EPSG_CODE_METHOD_COLOMBIA_URBAN, paramsESRI_IGAC_Plano_Cartesiano},
+ {"Equal_Earth", EPSG_NAME_METHOD_EQUAL_EARTH, EPSG_CODE_METHOD_EQUAL_EARTH,
+ paramsESRI_Equal_Earth},
};
// ---------------------------------------------------------------------------
diff --git a/test/unit/test_io.cpp b/test/unit/test_io.cpp
index f97e6618..2d035e43 100644
--- a/test/unit/test_io.cpp
+++ b/test/unit/test_io.cpp
@@ -5903,6 +5903,15 @@ static const struct {
{"False northing", 2},
}},
+ {"Equal_Earth",
+ {{"False_Easting", 1}, {"False_Northing", 2}, {"Central_Meridian", 3}},
+ "Equal Earth",
+ {
+ {"Longitude of natural origin", 3},
+ {"False easting", 1},
+ {"False northing", 2},
+ }},
+
{
"Unknown_Method",
{{"False_Easting", 1},