diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2018-11-14 17:40:42 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2018-11-14 22:48:29 +0100 |
| commit | d928db15d53805d9b728b440079756081961c536 (patch) | |
| tree | e862a961d26bedb34c58e4f28ef0bdeedb5f3225 /scripts/build_esri_projection_mapping.py | |
| parent | 330e8bf686f9c4524075ca1ff50cbca6c9e091da (diff) | |
| download | PROJ-d928db15d53805d9b728b440079756081961c536.tar.gz PROJ-d928db15d53805d9b728b440079756081961c536.zip | |
Implement RFC 2: Initial integration of "GDAL SRS barn" work
This work mostly consists of:
- a C++ implementation of the ISO-19111:2018 / OGC Topic 2
"Referencing by coordinates" classes to represent Datums,
Coordinate systems, CRSs (Coordinate Reference Systems) and
Coordinate Operations.
- methods to convert between this C++ modeling and WKT1, WKT2
and PROJ string representations of those objects
- management and query of a SQLite3 database of CRS and Coordinate Operation definition
- a C API binding part of those capabilities
This is all-in-one squashed commit of the work of
https://github.com/OSGeo/proj.4/pull/1040
Diffstat (limited to 'scripts/build_esri_projection_mapping.py')
| -rw-r--r-- | scripts/build_esri_projection_mapping.py | 738 |
1 files changed, 738 insertions, 0 deletions
diff --git a/scripts/build_esri_projection_mapping.py b/scripts/build_esri_projection_mapping.py new file mode 100644 index 00000000..65e7d500 --- /dev/null +++ b/scripts/build_esri_projection_mapping.py @@ -0,0 +1,738 @@ +#!/usr/bin/env python +############################################################################### +# $Id$ +# +# Project: PROJ +# Purpose: Generate mappings between ESRI projection names and parameters and +# their EPSG equivalents. +# Author: Even Rouault <even.rouault at spatialys.com> +# +############################################################################### +# Copyright (c) 2018, Even Rouault <even.rouault at spatialys.com> +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +# DEALINGS IN THE SOFTWARE. +############################################################################### + +import yaml + +# Map methods from pe_list_projection.csv to WKT2 naming + +config_str = """ +- Plate_Carree: + WKT2_name: + - EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL + - EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL_SPHERICAL + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + Cond: + - EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL = 0 + +- Equidistant_Cylindrical: + WKT2_name: EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL + +- Miller_Cylindrical: + WKT2_name: PROJ_WKT2_NAME_METHOD_MILLER_CYLINDRICAL + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Mercator: # Mercator 2SP + WKT2_name: EPSG_NAME_METHOD_MERCATOR_VARIANT_B + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL + +- Gauss_Kruger: + WKT2_name: EPSG_NAME_METHOD_TRANSVERSE_MERCATOR + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Transverse_Mercator: + WKT2_name: EPSG_NAME_METHOD_TRANSVERSE_MERCATOR + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Albers: + WKT2_name: EPSG_NAME_METHOD_ALBERS_EQUAL_AREA + Params: + - False_Easting: EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN + - False_Northing: EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL + - Standard_Parallel_2: EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN + +- Sinusoidal: + WKT2_name: PROJ_WKT2_NAME_METHOD_SINUSOIDAL + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Mollweide: + WKT2_name: PROJ_WKT2_NAME_METHOD_MOLLWEIDE + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Eckert_I: + WKT2_name: PROJ_WKT2_NAME_METHOD_ECKERT_I + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Eckert_II: + WKT2_name: PROJ_WKT2_NAME_METHOD_ECKERT_II + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Eckert_III: + WKT2_name: PROJ_WKT2_NAME_METHOD_ECKERT_III + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Eckert_IV: + WKT2_name: PROJ_WKT2_NAME_METHOD_ECKERT_IV + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Eckert_V: + WKT2_name: PROJ_WKT2_NAME_METHOD_ECKERT_V + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Eckert_VI: + WKT2_name: PROJ_WKT2_NAME_METHOD_ECKERT_VI + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Gall_Stereographic: + WKT2_name: PROJ_WKT2_NAME_METHOD_GALL_STEREOGRAPHIC + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +# Behrmann: not handled + +- Winkel_I: + WKT2_name: "Winkel I" + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL + +- Winkel_II: + WKT2_name: "Winkel II" + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL + +- Lambert_Conformal_Conic: + - WKT2_name: EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_1SP + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN # should be the same as Standard_Parallel_1 + + - WKT2_name: EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP + Params: + - False_Easting: EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN + - False_Northing: EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL + - Standard_Parallel_2: EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN + + # From GDAL autotest + - WKT2_name: EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP + Params: + - False_Easting: EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN + - False_Northing: EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL + - Standard_Parallel_2: EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL + - Scale_Factor: 1.0 + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN + + # Tempative mapping. Did not find any example + - WKT2_name: EPSG_NAME_METHOD_LAMBERT_CONIC_CONFORMAL_2SP_MICHIGAN + Params: + - False_Easting: EPSG_NAME_PARAMETER_EASTING_FALSE_ORIGIN + - False_Northing: EPSG_NAME_PARAMETER_NORTHING_FALSE_ORIGIN + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_FALSE_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL + - Standard_Parallel_2: EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL + - Scale_Factor: EPSG_NAME_PARAMETER_ELLIPSOID_SCALE_FACTOR + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_FALSE_ORIGIN + +- Polyconic: + WKT2_name: EPSG_NAME_METHOD_AMERICAN_POLYCONIC + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Quartic_Authalic: + WKT2_name: "Quartic Authalic" + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Loximuthal: + WKT2_name: "Loximuthal" + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Central_Parallel: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Bonne: + WKT2_name: EPSG_NAME_METHOD_BONNE + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Hotine_Oblique_Mercator_Two_Point_Natural_Origin: + WKT2_name: PROJ_WKT2_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN + Params: + - False_Easting: EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE + - False_Northing: EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE + - Latitude_Of_1st_Point: "Latitude of 1st point" + - Latitude_Of_2nd_Point: "Latitude of 2nd point" + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE + - Longitude_Of_1st_Point: "Longitude of 1st point" + - Longitude_Of_2nd_Point: "Longitude of 2nd point" + - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE + +- Stereographic: + WKT2_name: PROJ_WKT2_NAME_METHOD_STEREOGRAPHIC + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Equidistant_Conic: + WKT2_name: PROJ_WKT2_NAME_METHOD_EQUIDISTANT_CONIC + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL + - Standard_Parallel_2: EPSG_NAME_PARAMETER_LATITUDE_2ND_STD_PARALLEL + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Cassini: + WKT2_name: EPSG_NAME_METHOD_CASSINI_SOLDNER + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Scale_Factor: 1.0 # fixed + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Van_der_Grinten_I: + WKT2_name: PROJ_WKT2_NAME_METHOD_VAN_DER_GRINTEN + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Robinson: + WKT2_name: PROJ_WKT2_NAME_METHOD_ROBINSON + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Two_Point_Equidistant: + WKT2_name: PROJ_WKT2_NAME_METHOD_TWO_POINT_EQUIDISTANT + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Latitude_Of_1st_Point: "Latitude of 1st point" + - Latitude_Of_2nd_Point: "Latitude of 2nd point" + - Longitude_Of_1st_Point: "Longitude of 1st point" + - Longitude_Of_2nd_Point: "Longitude of 2nd point" + +- Azimuthal_Equidistant: + WKT2_name: EPSG_NAME_METHOD_MODIFIED_AZIMUTHAL_EQUIDISTANT + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Lambert_Azimuthal_Equal_Area: + WKT2_name: EPSG_NAME_METHOD_LAMBERT_AZIMUTHAL_EQUAL_AREA + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Cylindrical_Equal_Area: + WKT2_name: EPSG_NAME_METHOD_LAMBERT_CYLINDRICAL_EQUAL_AREA_SPHERICAL + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL + +# No example in pe_list_projection.csv: temptative mapping ! +- Hotine_Oblique_Mercator_Two_Point_Center: + WKT2_name: PROJ_WKT2_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_TWO_POINT_NATURAL_ORIGIN + Params: + - False_Easting: EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE + - False_Northing: EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE + - Latitude_Of_1st_Point: "Latitude of 1st point" + - Latitude_Of_2nd_Point: "Latitude of 2nd point" + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE + - Longitude_Of_1st_Point: "Longitude of 1st point" + - Longitude_Of_2nd_Point: "Longitude of 2nd point" + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Hotine_Oblique_Mercator_Azimuth_Natural_Origin: + WKT2_name: EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE + - Azimuth: EPSG_NAME_PARAMETER_AZIMUTH_INITIAL_LINE + # No EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID + - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE + - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE + + +- Hotine_Oblique_Mercator_Azimuth_Center: + WKT2_name: EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B + Params: + - False_Easting: EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE + - False_Northing: EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE + - Azimuth: EPSG_NAME_PARAMETER_AZIMUTH_INITIAL_LINE + # No EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID + - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE + - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE + +- Double_Stereographic: + WKT2_name: EPSG_NAME_METHOD_OBLIQUE_STEREOGRAPHIC + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Krovak: + - WKT2_name: EPSG_NAME_METHOD_KROVAK + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Pseudo_Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL + - Azimuth: EPSG_NAME_PARAMETER_COLATITUDE_CONE_AXIS + - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN + - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE + - X_Scale: 1.0 + - Y_Scale: 1.0 + - XY_Plane_Rotation: 0.0 + + - WKT2_name: EPSG_NAME_METHOD_KROVAK_NORTH_ORIENTED + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Pseudo_Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_PSEUDO_STANDARD_PARALLEL + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_PSEUDO_STANDARD_PARALLEL + - Azimuth: EPSG_NAME_PARAMETER_COLATITUDE_CONE_AXIS + - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN + - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE + - X_Scale: -1.0 + - Y_Scale: 1.0 + - XY_Plane_Rotation: 90.0 + +- New_Zealand_Map_Grid: + WKT2_name: EPSG_NAME_METHOD_NZMG + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Longitude_Of_Origin: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Orthographic: + WKT2_name: EPSG_NAME_METHOD_ORTHOGRAPHIC + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +- Winkel_Tripel: + WKT2_name: "Winkel Tripel" + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL + +- Aitoff: + WKT2_name: "Aitoff" + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +# Hammer_Aitoff: not handled + +# Flat_Polar_Quartic: not handled + +- Craster_Parabolic: + WKT2_name: "Craster Parabolic" + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Gnomonic: + WKT2_name: PROJ_WKT2_NAME_METHOD_GNOMONIC + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +# Times: not handled, but present in PROJ + +# Vertical_Near_Side_Perspective: not handled, but present in PROJ + +- Stereographic_North_Pole: + WKT2_name: EPSG_NAME_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_STD_PARALLEL + Cond: + - EPSG_NAME_PARAMETER_LATITUDE_STD_PARALLEL > 0 + +- Stereographic_South_Pole: + WKT2_name: EPSG_NAME_METHOD_POLAR_STEREOGRAPHIC_VARIANT_B + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_STD_PARALLEL + Cond: + - EPSG_NAME_PARAMETER_LATITUDE_STD_PARALLEL < 0 + +# Fuller: not handled + +- Rectified_Skew_Orthomorphic_Natural_Origin: + WKT2_name: EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_A + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE + - Azimuth: EPSG_NAME_PARAMETER_AZIMUTH_INITIAL_LINE + - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE + - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE + - XY_Plane_Rotation: EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID + +# temptative mapping: no example +- Rectified_Skew_Orthomorphic_Center: + WKT2_name: EPSG_NAME_METHOD_HOTINE_OBLIQUE_MERCATOR_VARIANT_B + Params: + - False_Easting: EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE + - False_Northing: EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE + - Azimuth: EPSG_NAME_PARAMETER_AZIMUTH_INITIAL_LINE + - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE + - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE + - XY_Plane_Rotation: EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID + +# Cube: not handled + +# Transverse_Mercator_Complex: not handled + +# Robinson_ARC_INFO: not handled + +# Local: not handled + +- Goode_Homolosine: + WKT2_name: "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 + +# Berghaus_Star: not handled + +- Equidistant_Cylindrical_Ellipsoidal: + WKT2_name: EPSG_NAME_METHOD_EQUIDISTANT_CYLINDRICAL + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_1ST_STD_PARALLEL + +# Ney_Modified_Conic: not handled + +- Laborde_Oblique_Mercator: + WKT2_name: EPSG_NAME_METHOD_LABORDE_OBLIQUE_MERCATOR + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE + - Azimuth: EPSG_NAME_PARAMETER_AZIMUTH_INITIAL_LINE + - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE + - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE + +# IGAC_Plano_Cartesiano: not handled + +- Gnomonic_Ellipsoidal: + WKT2_name: PROJ_WKT2_NAME_METHOD_GNOMONIC + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Latitude_Of_Center: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + +# Polar_Stereographic_Variant_A: not handled, no example in .csv + +# Polar_Stereographic_Variant_B: not handled, no example in .csv + +# Polar_Stereographic_Variant_C: not handled + +# Mercator_Variant_A: not handled, no example in .csv + +# Mercator_Variant_C: not handled, no example in .csv + +# Hammer_Ellipsoidal: not handled + +# Quartic_Authalic_Ellipsoidal: not handled, no example in .csv + +# Eckert_Greifendorff: not handled + +- Wagner_IV: + WKT2_name: PROJ_WKT2_NAME_METHOD_WAGNER_IV + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Latitude_Of_Origin: 0 + +- Wagner_V: + WKT2_name: PROJ_WKT2_NAME_METHOD_WAGNER_V + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +- Wagner_VII: + WKT2_name: PROJ_WKT2_NAME_METHOD_WAGNER_VII + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + +# Natural_Earth: not handled + +# Natural_Earth_II: not handled + +# Patterson: not handled + +# Compact_Miller: not handled + +# Transverse_Mercator_NGA_2014: not handled + +# Transverse_Cylindrical_Equal_Area: not handled + +# Aspect_Adaptive_Cylindrical: not handled + +- Geostationary_Satellite: + WKT2_name: PROJ_WKT2_NAME_METHOD_GEOSTATIONARY_SATELLITE_SWEEP_Y + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Longitude_Of_Center: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Height: "Satellite Height" + - Option: 0.0 + +# Equidistant_Cylindrical_Auxiliary_Sphere: not handled + +- Mercator_Auxiliary_Sphere: + WKT2_name: EPSG_NAME_METHOD_POPULAR_VISUALISATION_PSEUDO_MERCATOR + Params: + - False_Easting: EPSG_NAME_PARAMETER_FALSE_EASTING + - False_Northing: EPSG_NAME_PARAMETER_FALSE_NORTHING + - Central_Meridian: EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN + - Standard_Parallel_1: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN + - Auxiliary_Sphere_Type: 0.0 + +# Mollweide_Auxiliary_Sphere: not handled + +# Eckert_VI_Auxiliary_Sphere: not handled + +# Eckert_IV_Auxiliary_Sphere: not handled + +# Stereographic_Auxiliary_Sphere: not handled + +# Van_der_Grinten_I_Auxiliary_Sphere: not handled + +# Azimuthal_Equidistant_Auxiliary_Sphere: not handled + +# Lambert_Azimuthal_Equal_Area_Auxiliary_Sphere: not handled + +# Orthographic_Auxiliary_Sphere: not handled + +# Gnomonic_Auxiliary_Sphere: not handled + +""" + +config = yaml.load(config_str) + +all_projs = [] + + +def generate_mapping(WKT2_name, esri_proj_name, Params, suffix=''): + + c_name = 'paramsESRI_%s%s' % (esri_proj_name, suffix) + if isinstance(WKT2_name, list): + for WKT2_name_s in WKT2_name: + all_projs.append([esri_proj_name, WKT2_name_s, c_name]) + else: + all_projs.append([esri_proj_name, WKT2_name, c_name]) + print('static const ESRIParamMapping %s[] = { ' % c_name) + for param in Params: + for param_name in param: + param_value = param[param_name] + if isinstance(param_value, str): + if param_value.startswith('EPSG_'): + print(' { "%s", %s, %s, 0.0 },' % (param_name, param_value, param_value.replace('_NAME_', '_CODE_'))) + else: + print(' { "%s", "%s", 0, 0.0 },' % (param_name, param_value)) + else: + print(' { "%s", nullptr, 0, %.1f },' % (param_name, param_value)) + print(' { nullptr, nullptr, 0, 0.0 }') + print('};') + + +print('// This file was generated by scripts/build_esri_projection_mapping.py. DO NOT EDIT !') +print('') +print(""" +#ifndef FROM_COORDINATE_OPERATION_CPP +#error This file should only be included from coordinateoperation.cpp +#endif + +#ifndef ESRI_PROJECTION_MAPPINGS_HH_INCLUDED +#define ESRI_PROJECTION_MAPPINGS_HH_INCLUDED + +#include "coordinateoperation_internal.hpp" + +//! @cond Doxygen_Suppress + +// --------------------------------------------------------------------------- + +// anonymous namespace +namespace { + +using namespace ::NS_PROJ; +using namespace ::NS_PROJ::operation; + +""") + +for item in config: + for esri_proj_name in item: + proj_config = item[esri_proj_name] + if isinstance(proj_config, dict): + WKT2_name = proj_config['WKT2_name'] + Params = proj_config['Params'] + generate_mapping(WKT2_name, esri_proj_name, Params) + else: + count = 1 + for subconfig in proj_config: + WKT2_name = subconfig['WKT2_name'] + Params = subconfig['Params'] + generate_mapping(WKT2_name, esri_proj_name, Params, + suffix='_alt%d' % count) + count += 1 + print('') + +print('static const ESRIMethodMapping esriMappings[] = {') +for esri_proj_name, WKT2_name, c_name in all_projs: + if WKT2_name.startswith('EPSG_'): + print(' { "%s", %s, %s, %s },' % (esri_proj_name, WKT2_name, WKT2_name.replace('_NAME_', '_CODE_'), c_name)) + elif WKT2_name.startswith('PROJ_'): + print(' { "%s", %s, 0, %s },' % (esri_proj_name, WKT2_name, c_name)) + else: + print(' { "%s", "%s", 0, %s },' % (esri_proj_name, WKT2_name, c_name)) +print('};') + +print(""" +// --------------------------------------------------------------------------- + +// end of anonymous namespace +} + +//! @endcond + +#endif // ESRI_PROJECTION_MAPPINGS_HH_INCLUDED +""") |
