diff options
51 files changed, 1080 insertions, 458 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index b85e55cd..a75aa578 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,9 +110,9 @@ message(STATUS "Configuring PROJ:") #PROJ version information ################################################################################ include(ProjVersion) -proj_version(MAJOR 7 MINOR 2 PATCH 0) -set(PROJ_API_VERSION "20") -set(PROJ_BUILD_VERSION "20.0.1") +proj_version(MAJOR 8 MINOR 0 PATCH 0) +set(PROJ_API_VERSION "19") +set(PROJ_BUILD_VERSION "21.0.2") ################################################################################ # Build features and variants diff --git a/HOWTO-RELEASE b/HOWTO-RELEASE index 564bc7d3..92c6829c 100644 --- a/HOWTO-RELEASE +++ b/HOWTO-RELEASE @@ -52,7 +52,7 @@ Update the following files with the new ABI version number: - `src/Makefile.am` Update -version-info - `CMakeLists.txt`: Update PROJ_BUILD_VERSION (cur:rev:age) and - PROJ_API_VERSION (current) + PROJ_API_VERSION (current-age) *Commit the changes to master.* @@ -1,3 +1,97 @@ +7.2.0 Release Notes +------------------- + + Updates + ------- + + + Command line tools: + + o Add multi-line PROJ string export capability, and use it by default in + projinfo (unless --single-line is specified) (#2381) + + + Coordinate operations: + + o +proj=col_urban projection, implementing a EPSG projection method + used by a number of projected CRS in Colombia (#2395) + + o +proj=tinshift for triangulation-based transformations (#2344) + + o Added ellipsoidal formulation of +proj=ortho (#2361) + + + + Database + + o Update to EPSG 10.003 and make code base robust to dealing with + WKT CRS with DatumEnsemble (#2370) + + o Added Finland tinshift operations (#2392) + + o Added transformation from JGD2011 Geographic 3D to JGD2011 + height using GSIGEO2011 (#2393) + + o Improve CompoundCRS identification and name morphing in VerticalCRS + with ESRI WKT1 (#2386) + + o Added OGC:CRS27 and OGC:CRS83 CRS entries for NAD27 and NAD83 + in longitude, latitude order (#2350) + + + API + + o Added temporal, engineering, and parametric datum + PJ_TYPE enumerations (#2274) + + o Various improvements to context handling (#2329, #2331) + + o proj_create_vertical_crs_ex(): add a ACCURACY option to provide + an explicit accuracy, or derive it from the grid name if it is + known (#2342) + + o proj_crs_create_bound_crs_to_WGS84(): make it work on + verticalCRS/compoundCRS such as EPSG:4326+5773 and + EPSG:4326+3855 (#2365) + + o promoteTo3D(): add a remark with the original CRS identifier (#2369) + + o Added proj_context_clone (#2383) + + + Bug fixes + --------- + + o Avoid core dumps when copying contexts in certain scenarios (#2324) + + o proj_trans(): reset errno before attemptying a retry with a new + coordinate operation (#2353) + + o PROJJSON schema corrected to allow prime meridians values with + explicitly stating a unit (degrees assumed) (#2354) + + o Adjust createBoundCRSToWGS84IfPossible() and operation filtering + (for POSGAR 2007 to WGS84 issues) (#2357) + + o createOperations(): several fixes affecting NAD83 -> NAD83(2011) (#2364) + + o WKT2:2019 import/export: handle DATUM (at top level object) with PRIMEM + + o WKT1_ESRI: fix import and export of CompoundCRS (#2389) + + + THANKS TO + --------- + + Alexander Saprykin + Jeff McKenna + Nyall Dawson + Kai Pastor + Juan Hernando + Javier Jimenez Shaw + Howard Butler + Alan D. Snow + Charles Karney + Kristian Evers + Even Rouault + + 7.1.1 Release Notes ------------------- diff --git a/configure.ac b/configure.ac index 17f19900..33f8cc0c 100644 --- a/configure.ac +++ b/configure.ac @@ -1,7 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) -AC_INIT([PROJ], [7.2.0], +AC_INIT([PROJ], [8.0.0], [https://github.com/OSGeo/PROJ/issues], proj, [https://proj.org]) AC_CONFIG_MACRO_DIR([m4]) AC_LANG(C) diff --git a/data/sql/customizations.sql b/data/sql/customizations.sql index 96e7fe80..beaaf8fd 100644 --- a/data/sql/customizations.sql +++ b/data/sql/customizations.sql @@ -88,107 +88,6 @@ INSERT INTO "usage" VALUES( 'EPSG','1024' -- unknown ); - --- Temporary entry for NZGD2000 deformation model -INSERT INTO other_transformation VALUES( - 'PROJ','NZGD2000-20180701','NZGD2000 to ITRF96', - 'New Zealand Deformation Model. Defines the secular model (National Deformation Model) and patches for significant deformation events since 2000', - 'PROJ', 'PROJString', - '+proj=pipeline ' || - '+step +proj=unitconvert +xy_in=deg +xy_out=rad ' || - '+step +proj=axisswap +order=2,1 ' || - '+step +proj=defmodel +model=nz_linz_nzgd2000-20180701.json ' || - '+step +proj=axisswap +order=2,1 ' || - '+step +proj=unitconvert +xy_in=rad +xy_out=deg', - 'EPSG','4959', - 'EPSG','7907', - NULL, --accuracy - NULL,NULL,NULL,NULL,NULL,NULL, -- param1 - NULL,NULL,NULL,NULL,NULL,NULL, -- param2 - NULL,NULL,NULL,NULL,NULL,NULL, -- param3 - NULL,NULL,NULL,NULL,NULL,NULL, -- param4 - NULL,NULL,NULL,NULL,NULL,NULL, -- param5 - NULL,NULL,NULL,NULL,NULL,NULL, -- param6 - NULL,NULL,NULL,NULL,NULL,NULL, -- param7 - NULL,NULL, - '20180701', -- operation version - 0); -INSERT INTO "usage" VALUES( - 'PROJ', - 'NZGD2000-20180701_USAGE', - 'other_transformation', - 'PROJ', - 'NZGD2000-20180701', - 'EPSG','1175', -- extent - 'EPSG','1024' -- unknown -); - - -INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF97','NZGD2000 to ITRF97','Concatenation of PROJ:NZGD2000-20180701 and 9079','EPSG','4959','EPSG','7908',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF97',1,'PROJ','NZGD2000-20180701'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF97',2,'EPSG','9079'); -INSERT INTO "usage" VALUES( - 'PROJ', - 'NZGD2000_TO_ITRF97_USAGE', - 'concatenated_operation', - 'PROJ', - 'NZGD2000_TO_ITRF97', - 'EPSG','1175', -- extent - 'EPSG','1024' -- unknown -); - -INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF2000','NZGD2000 to ITRF2000','Concatenation of PROJ:NZGD2000-20180701 and 9080','EPSG','4959','EPSG','7909',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2000',1,'PROJ','NZGD2000-20180701'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2000',2,'EPSG','9080'); -INSERT INTO "usage" VALUES( - 'PROJ', - 'NZGD2000_TO_ITRF2000_USAGE', - 'concatenated_operation', - 'PROJ', - 'NZGD2000_TO_ITRF2000', - 'EPSG','1175', -- extent - 'EPSG','1024' -- unknown -); - -INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF2005','NZGD2000 to ITRF2005','Concatenation of PROJ:NZGD2000-20180701 and 9081','EPSG','4959','EPSG','7910',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2005',1,'PROJ','NZGD2000-20180701'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2005',2,'EPSG','9081'); -INSERT INTO "usage" VALUES( - 'PROJ', - 'NZGD2000_TO_ITRF2005_USAGE', - 'concatenated_operation', - 'PROJ', - 'NZGD2000_TO_ITRF2005', - 'EPSG','1175', -- extent - 'EPSG','1024' -- unknown -); - -INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF2008','NZGD2000 to ITRF2008','Concatenation of PROJ:NZGD2000-20180701 and EPSG:9082','EPSG','4959','EPSG','7911',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2008',1,'PROJ','NZGD2000-20180701'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2008',2,'EPSG','9082'); -INSERT INTO "usage" VALUES( - 'PROJ', - 'NZGD2000_TO_ITRF2008_USAGE', - 'concatenated_operation', - 'PROJ', - 'NZGD2000_TO_ITRF2008', - 'EPSG','1175', -- extent - 'EPSG','1024' -- unknown -); - -INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF2014','NZGD2000 to ITRF2014','Concatenation of PROJ:NZGD2000-20180701 and EPSG:9083','EPSG','4959','EPSG','7912',NULL,NULL,0); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2014',1,'PROJ','NZGD2000-20180701'); -INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2014',2,'EPSG','9083'); -INSERT INTO "usage" VALUES( - 'PROJ', - 'NZGD2000_TO_ITRF2014_USAGE', - 'concatenated_operation', - 'PROJ', - 'NZGD2000_TO_ITRF2014', - 'EPSG','1175', -- extent - 'EPSG','1024' -- unknown -); - -- alias of EPSG:3857 INSERT INTO "projected_crs" VALUES('EPSG','900913','Google Maps Global Mercator',NULL,'EPSG','4499','EPSG','4326','EPSG','3856',NULL,1); INSERT INTO "usage" VALUES( diff --git a/data/sql/grid_alternatives.sql b/data/sql/grid_alternatives.sql index 00cecea7..7e8e8032 100644 --- a/data/sql/grid_alternatives.sql +++ b/data/sql/grid_alternatives.sql @@ -7,48 +7,245 @@ INSERT INTO grid_alternatives(original_grid_name, package_name, url, direct_download, open_license, directory) VALUES + +-- at_bev - Austria Bundesamt für Eich- und Vermessungswessen +('AT_GIS_GRID.gsb','at_bev_AT_GIS_GRID.tif','AT_GIS_GRID.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/at_bev_AT_GIS_GRID.tif',1,1,NULL), +('GV_HoehenGrid_V1.csv','at_bev_GV_Hoehengrid_V1.tif',NULL,'GTiff','vgridshift',0,NULL,'https://cdn.proj.org/at_bev_GV_Hoehengrid_V1.tif',1,1,NULL), +('GEOID_GRS80_Oesterreich.csv','at_bev_GEOID_GRS80_Oesterreich.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/at_bev_GEOID_GRS80_Oesterreich.tif',1,1,NULL), +('GEOID_BESSEL_Oesterreich.csv','at_bev_GEOID_BESSEL_Oesterreich.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/at_bev_GEOID_BESSEL_Oesterreich.tif',1,1,NULL), +('GV_Hoehengrid_plus_Geoid_V3.csv','at_bev_GV_Hoehengrid_plus_Geoid_V2.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/at_bev_GV_Hoehengrid_plus_Geoid_V2.tif',1,1,NULL), + +-- au_ga - Geoscience Australia +-- source file contains undulation in first band, and deflection in 2nd and 3d band +('AUSGeoid09_V1.01.gsb','au_ga_AUSGeoid09_V1.01.tif','AUSGeoid09_V1.01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/au_ga_AUSGeoid09_V1.01.tif',1,1,NULL), +('AUSGeoid09_GDA94_V1.01_DOV_windows.gsb','au_ga_AUSGeoid09_V1.01.tif','AUSGeoid09_V1.01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/au_ga_AUSGeoid09_V1.01.tif',1,1,NULL), +-- source file contains undulation in first band, and deflection in 2nd and 3d band +('AUSGeoid2020_20180201.gsb','au_ga_AUSGeoid2020_20180201.tif','AUSGeoid2020_20180201.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/au_ga_AUSGeoid2020_20180201.tif',1,1,NULL), + +-- au_icsm - Australian Intergovernmental Committee on Surveying and Mapping +('A66 National (13.09.01).gsb','au_icsm_A66_National_13_09_01.tif','A66_National_13_09_01.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_A66_National_13_09_01.tif',1,1,NULL), +('National 84 (02.07.01).gsb','au_icsm_National_84_02_07_01.tif','National_84_02_07_01.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_National_84_02_07_01.tif',1,1,NULL), +('GDA94_GDA2020_conformal.gsb','au_icsm_GDA94_GDA2020_conformal.tif','GDA94_GDA2020_conformal.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal.tif',1,1,NULL), +('GDA94_GDA2020_conformal_and_distortion.gsb','au_icsm_GDA94_GDA2020_conformal_and_distortion.tif','GDA94_GDA2020_conformal_and_distortion.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal_and_distortion.tif',1,1,NULL), +('GDA94_GDA2020_conformal_christmas_island.gsb','au_icsm_GDA94_GDA2020_conformal_christmas_island.tif','GDA94_GDA2020_conformal_christmas_island.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal_christmas_island.tif',1,1,NULL), +('GDA94_GDA2020_conformal_cocos_island.gsb','au_icsm_GDA94_GDA2020_conformal_cocos_island.tif','GDA94_GDA2020_conformal_cocos_island.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal_cocos_island.tif',1,1,NULL), + +-- be_ign - IGN Belgium +('bd72lb72_etrs89lb08.gsb','be_ign_bd72lb72_etrs89lb08.tif','bd72lb72_etrs89lb08.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/be_ign_bd72lb72_etrs89lb08.tif',1,1,NULL), + +-- br_ibge - Instituto Brasileiro de Geografia e Estatistica (IBGE) +('CA61_003.gsb','br_ibge_CA61_003.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/br_ibge_CA61_003.tif',1,1,NULL), +('CA7072_003.gsb','br_ibge_CA7072_003.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/br_ibge_CA7072_003.tif',1,1,NULL), +('SAD69_003.gsb','br_ibge_SAD69_003.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/br_ibge_SAD69_003.tif',1,1,NULL), +('SAD96_003.gsb','br_ibge_SAD96_003.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/br_ibge_SAD96_003.tif',1,1,NULL), + +-- ca_nrc - Natural Resources Canada +('CGG2013i08a.byn','ca_nrc_CGG2013ai08.tif','CGG2013ai08.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_CGG2013ai08.tif',1,1,NULL), +('CGG2013n83a.byn','ca_nrc_CGG2013an83.tif','CGG2013an83.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_CGG2013an83.tif',1,1,NULL), +('CGG2013i83.byn','ca_nrc_CGG2013i08.tif','CGG2013i08.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_CGG2013i08.tif',1,1,NULL), +('CGG2013n83.byn','ca_nrc_CGG2013n83.tif','CGG2013n83.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_CGG2013n83.tif',1,1,NULL), +('HT2_0.byn','ca_nrc_HT2_2010v70.tif','HT2_2010v70.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_HT2_2010v70.tif',1,1,NULL), -- the PROJ grid is the reverse way of the EPSG one -('rgf93_ntf.gsb','fr_ign_ntf_r93.tif','ntf_r93.gsb','GTiff','hgridshift',1,NULL,'https://cdn.proj.org/fr_ign_ntf_r93.tif',1,1,NULL), -('gr3df97a.txt','fr_ign_gr3df97a.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/fr_ign_gr3df97a.tif',1,1,NULL), ('NTv1_0.gsb','ca_nrc_ntv1_can.tif','ntv1_can.dat','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ntv1_can.tif',1,1,NULL), -- just a case change ('NTv2_0.gsb','ca_nrc_ntv2_0.tif','ntv2_0.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ntv2_0.tif',1,1,NULL), +-- Provincial grids +('AB_CSRS.DAC','ca_nrc_ABCSRSV4.tif','ABCSRSV4.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ABCSRSV4.tif',1,1,NULL), +('BC_27_05.GSB','ca_nrc_BC_27_05.tif','BC_27_05.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_BC_27_05.tif',1,1,NULL), +('BC_93_05.GSB','ca_nrc_BC_93_05.tif','BC_93_05.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_BC_93_05.tif',1,1,NULL), +('CGQ77-98.gsb','ca_nrc_CQ77SCRS.tif','CQ77SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_CQ77SCRS.tif',1,1,NULL), +('CRD27_00.GSB','ca_nrc_CRD27_00.tif','CRD27_00.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_CRD27_00.tif',1,1,NULL), +('CRD93_00.GSB','ca_nrc_CRD93_00.tif','CRD93_00.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_CRD93_00.tif',1,1,NULL), +('GS7783.GSB','ca_nrc_GS7783.tif','GS7783.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_GS7783.tif',1,1,NULL), -- just a case change ('May76v20.gsb','ca_nrc_MAY76V20.tif','MAY76V20.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_MAY76V20.tif',1,1,NULL), +('NA27SCRS.GSB','ca_nrc_NA27SCRS.tif','NA27SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NA27SCRS.tif',1,1,NULL), +('QUE27-98.gsb','ca_nrc_NA27SCRS.tif','NA27SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NA27SCRS.tif',1,1,NULL), +-- two grid names in EPSG point to the same file distributed by NRCan +('NA83SCRS.GSB','ca_nrc_NA83SCRS.tif','NA83SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NA83SCRS.tif',1,1,NULL), +('NAD83-98.gsb','ca_nrc_NA83SCRS.tif','NA83SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NA83SCRS.tif',1,1,NULL), +('NB2783v2.gsb','ca_nrc_NB2783v2.tif','NB2783v2.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NB2783v2.tif',1,1,NULL), +('NB7783v2.gsb','ca_nrc_NB7783v2.tif','NB7783v2.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NB7783v2.tif',1,1,NULL), +('NS778302.gsb','ca_nrc_NS778302.tif','NS778302.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NS778302.tif',1,1,NULL), +('NVI93_05.GSB','ca_nrc_NVI93_05.tif','NVI93_05.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NVI93_05.tif',1,1,NULL), +('ON27CSv1.GSB','ca_nrc_ON27CSv1.tif','ON27CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ON27CSv1.tif',1,1,NULL), +('ON76CSv1.GSB','ca_nrc_ON76CSv1.tif','ON76CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ON76CSv1.tif',1,1,NULL), +('ON83CSv1.GSB','ca_nrc_ON83CSv1.tif','ON83CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ON83CSv1.tif',1,1,NULL), +('PE7783V2.gsb','ca_nrc_PE7783V2.tif','PE7783V2.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_PE7783V2.tif',1,1,NULL), +('SK27-98.gsb','ca_nrc_SK27-98.tif','SK27-98.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_SK27-98.tif',1,1,NULL), +('SK83-98.gsb','ca_nrc_SK83-98.tif','SK83-98.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_SK83-98.tif',1,1,NULL), +('TOR27CSv1.GSB','ca_nrc_TO27CSv1.tif','TO27CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_TO27CSv1.tif',1,1,NULL), + +-- ca_que - Ministère de l'Énergie et des Ressources naturelles du Québec +-- two grid names in EPSG point to the same file distributed by NRCan +('NA27NA83.GSB','ca_que_mern_na27na83.tif','na27na83.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_que_mern_na27na83.tif',1,1,NULL), +('CQ77NA83.GSB','ca_que_mern_cq77na83.tif','cq77na83.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_que_mern_cq77na83.tif',1,1,NULL), + +-- ch_swisstopo - Swisstopo Federal Office of Topography +('CHENyx06a.gsb','ch_swisstopo_CHENyx06a.tif','CHENyx06a.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ch_swisstopo_CHENyx06a.tif',1,1,NULL), +('CHENyx06_ETRS.gsb','ch_swisstopo_CHENyx06_ETRS.tif','CHENyx06_ETRS.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ch_swisstopo_CHENyx06_ETRS.tif',1,1,NULL), + +-- de_adv - Arbeitsgemeinschaft der Vermessungsverwaltungender der Länder der Bundesrepublik Deutschland (AdV) ('BETA2007.gsb','de_adv_BETA2007.tif','BETA2007.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/de_adv_BETA2007.tif',1,1,NULL), + +-- de_geosn - Staatsbetrieb Geobasisinformation und Vermessung Sachsen GeoSN +('NTv2_SN.gsb','de_geosn_NTv2_SN.tif','NTv2_SN.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/de_geosn_NTv2_SN.tif',1,1,NULL), + +-- de_lgl_bw - LGL Baden-Württemberg ('BWTA2017.gsb','de_lgl_bw_BWTA2017.tif','BWTA2017.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/de_lgl_bw_BWTA2017.tif',1,1,NULL), + +-- de_lgvl_saarland - LVGL Saarland ('SeTa2016.gsb','de_lgvl_saarland_SeTa2016.tif','SeTa2016.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/de_lgvl_saarland_SeTa2016.tif',1,1,NULL), -('NTv2_SN.gsb','de_geosn_NTv2_SN.tif','NTv2_SN.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/de_geosn_NTv2_SN.tif',1,1,NULL), -('AT_GIS_GRID.gsb','at_bev_AT_GIS_GRID.tif','AT_GIS_GRID.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/at_bev_AT_GIS_GRID.tif',1,1,NULL), -('GV_HoehenGrid_V1.csv','at_bev_GV_Hoehengrid_V1.tif',NULL,'GTiff','vgridshift',0,NULL,'https://cdn.proj.org/at_bev_GV_Hoehengrid_V1.tif',1,1,NULL), -('GEOID_GRS80_Oesterreich.csv','at_bev_GEOID_GRS80_Oesterreich.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/at_bev_GEOID_GRS80_Oesterreich.tif',1,1,NULL), -('GEOID_BESSEL_Oesterreich.csv','at_bev_GEOID_BESSEL_Oesterreich.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/at_bev_GEOID_BESSEL_Oesterreich.tif',1,1,NULL), -('GV_Hoehengrid_plus_Geoid_V3.csv','at_bev_GV_Hoehengrid_plus_Geoid_V2.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/at_bev_GV_Hoehengrid_plus_Geoid_V2.tif',1,1,NULL), -('nzgd2kgrid0005.gsb','nz_linz_nzgd2kgrid0005.tif','nzgd2kgrid0005.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2kgrid0005.tif',1,1,NULL), -('OSTN15_NTv2_OSGBtoETRS.gsb','uk_os_OSTN15_NTv2_OSGBtoETRS.tif','OSTN15_NTv2_OSGBtoETRS.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/uk_os_OSTN15_NTv2_OSGBtoETRS.tif',1,1,NULL), --- Continental USA VERTCON: NGVD (19)29 height to NAVD (19)88 height -('vertconw.94','us_noaa_vertconw.tif','vertconw.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/us_noaa_vertconw.tif',1,1,NULL), -('vertconc.94','us_noaa_vertconc.tif','vertconc.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/us_noaa_vertconc.tif',1,1,NULL), -('vertcone.94','us_noaa_vertcone.tif','vertcone.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/us_noaa_vertcone.tif',1,1,NULL), --- EGM models -('WW15MGH.GRD','us_nga_egm96_15.tif','egm96_15.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_nga_egm96_15.tif',1,1,NULL), -('Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz','us_nga_egm08_25.tif','egm08_25.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_nga_egm08_25.tif',1,1,NULL), --- Greenland height models -('gr2000g.gri','dk_sdfe_gvr2000.tif','gvr2000.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfe_gvr2000.tif',1,1,NULL), -('ggeoid16.gri','dk_sdfe_gvr2016.tif','gvr2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfe_gvr2016.tif',1,1,NULL), --- Denmark height models -('dvr90.gtx','dk_sdfe_dvr90.tif','dvr90.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfe_dvr90.tif',1,1,NULL), + +-- dk_sdfe - Danish Agency for Data Supply and Efficiency +-- Denmark mainland ('dnn.gtx','dk_sdfe_dnn.tif','dnn.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfe_dnn.tif',1,1,NULL), +('dvr90.gtx','dk_sdfe_dvr90.tif','dvr90.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfe_dvr90.tif',1,1,NULL), -- Faroe islands height models ('fvr09.gtx','dk_sdfe_fvr09.tif','fvr09.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfe_fvr09.tif',1,1,NULL), --- Sweden height models +-- Greenland height models +('gr2000g.gri','dk_sdfe_gvr2000.tif','gvr2000.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfe_gvr2000.tif',1,1,NULL), +('ggeoid16.gri','dk_sdfe_gvr2016.tif','gvr2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/dk_sdfe_gvr2016.tif',1,1,NULL), + +-- es_cat_icgc - Institut Cartogràfic i Geològic de Catalunya (ICGC) +('100800401.gsb','es_cat_icgc_100800401.tif','100800401.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_cat_icgc_100800401.tif',1,1,NULL), + +-- es_ign - Instituto Geográfico Nacional (IGN) +('SPED2ETV2.gsb','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL), +('EGM08_REDNAP.txt','es_ign_egm08-rednap.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/es_ign_egm08-rednap.tif',1,1,NULL), +('EGM08_REDNAP_Canarias.txt','es_ign_egm08-rednap-canarias.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/es_ign_egm08-rednap-canarias.tif',1,1,NULL), + +-- fi_nls - National Land Survey of Finland (MML) +('fi_nls_n43_n60.json','fi_nls_n43_n60.json',NULL,'JSON','tinshift',0,NULL,'https://cdn.proj.org/fi_nls_n43_n60.json',1,1,NULL), +('fi_nls_n60_n2000.json','fi_nls_n60_n2000.json',NULL,'JSON','tinshift',0,NULL,'https://cdn.proj.org/fi_nls_n60_n2000.json',1,1,NULL), +('fi_nls_ykj_etrs35fin.json','fi_nls_ykj_etrs35fin.json',NULL,'JSON','tinshift',0,NULL,'https://cdn.proj.org/fi_nls_ykj_etrs35fin.json',1,1,NULL), + +-- fr_ign - IGN France +('rgf93_ntf.gsb','fr_ign_ntf_r93.tif','ntf_r93.gsb','GTiff','hgridshift',1,NULL,'https://cdn.proj.org/fr_ign_ntf_r93.tif',1,1,NULL), +('gr3df97a.txt','fr_ign_gr3df97a.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/fr_ign_gr3df97a.tif',1,1,NULL), +-- Vertical grids +('RAC09.mnt','fr_ign_RAC09.tif','RAC09.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAC09.tif',1,1,NULL), +('RAF09.mnt','fr_ign_RAF09.tif','RAF09.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAF09.tif',1,1,NULL), +('RAF18.tac','fr_ign_RAF18.tif','RAF18.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAF18.tif',1,1,NULL), +('gg10_gtbt.txt','fr_ign_RAGTBT2016.tif','RAGTBT2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAGTBT2016.tif',1,1,NULL), +('RAGTBT2016.mnt','fr_ign_RAGTBT2016.tif','RAGTBT2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAGTBT2016.tif',1,1,NULL), +('gg10_ld.txt','fr_ign_RALD2016.tif','RALD2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALD2016.tif',1,1,NULL), +('RALD2016.mnt','fr_ign_RALD2016.tif','RALD2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALD2016.tif',1,1,NULL), +('ggg00_ld.txt','fr_ign_RALDW842016.tif','RALDW842016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALDW842016.tif',1,1,NULL), +('RALDW842016.mnt','fr_ign_RALDW842016.tif','RALDW842016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALDW842016.tif',1,1,NULL), +('gg10_ls.txt','fr_ign_RALS2016.tif','RALS2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALS2016.tif',1,1,NULL), +('RALS2016.mnt','fr_ign_RALS2016.tif','RALS2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALS2016.tif',1,1,NULL), +('gg10_mart.txt','fr_ign_RAMART2016.tif','RAMART2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAMART2016.tif',1,1,NULL), +('RAMART2016.mnt','fr_ign_RAMART2016.tif','RAMART2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAMART2016.tif',1,1,NULL), +('gg10_mg.txt','fr_ign_RAMG2016.tif','RAMG2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAMG2016.tif',1,1,NULL), +('RAMG2016.mnt','fr_ign_RAMG2016.tif','RAMG2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAMG2016.tif',1,1,NULL), +('ggr99.txt','fr_ign_RAR07_bl.tif','RAR07_bl.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAR07_bl.tif',1,1,NULL), +('RASPM2018.mnt','fr_ign_RASPM2018.tif','RASPM2018.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RASPM2018.tif',1,1,NULL), +('gg10_sb.txt','fr_ign_gg10_sbv2.tif','gg10_sbv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_gg10_sbv2.tif',1,1,NULL), +('gg10_sbv2.mnt','fr_ign_gg10_sbv2.tif','gg10_sbv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_gg10_sbv2.tif',1,1,NULL), +('gg10_sm.txt','fr_ign_gg10_smv2.tif','gg10_smv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_gg10_smv2.tif',1,1,NULL), +('gg10_smv2.mnt','fr_ign_gg10_smv2.tif','gg10_smv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_gg10_smv2.tif',1,1,NULL), +('ggg00_ls.txt','fr_ign_ggg00_lsv2.tif','ggg00_lsv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00_lsv2.tif',1,1,NULL), +('ggg00_mg.txt','fr_ign_ggg00_mgv2.tif','ggg00_mgv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00_mgv2.tif',1,1,NULL), +('ggg00_sb.txt','fr_ign_ggg00_sbv2.tif','ggg00_sbv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00_sbv2.tif',1,1,NULL), +('ggg00_sm.txt','fr_ign_ggg00_smv2.tif','ggg00_smv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00_smv2.tif',1,1,NULL), +('ggg00.txt','fr_ign_ggg00v2.tif','ggg00v2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00v2.tif',1,1,NULL), +('ggguy00.txt','fr_ign_ggguy15.tif','ggguy15.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggguy15.tif',1,1,NULL), +('ggm00.txt','fr_ign_ggm00v2.tif','ggm00v2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggm00v2.tif',1,1,NULL), +('GGSPM06v1.mnt','fr_ign_ggspm06v1.tif','ggspm06v1.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggspm06v1.tif',1,1,NULL), + +-- is_lmi - National Land Survey of Iceland +('Icegeoid_ISN2004.gtx','is_lmi_Icegeoid_ISN2004.tif','Icegeoid_ISN2004.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/is_lmi_Icegeoid_ISN2004.tif',1,1,NULL), +('Icegeoid_ISN93.gtx','is_lmi_Icegeoid_ISN93.tif','Icegeoid_ISN93.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/is_lmi_Icegeoid_ISN93.tif',1,1,NULL), +('Icegeoid_ISN2016.gtx','is_lmi_Icegeoid_ISN2016.tif','Icegeoid_ISN2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/is_lmi_Icegeoid_ISN2016.tif',1,1,NULL), +('ISN93_ISN2016.gsb','is_lmi_ISN93_ISN2016.tif','ISN93_ISN2016.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/is_lmi_ISN93_ISN2016.tif',1,1,NULL), +('ISN2004_ISN2016.gsb','is_lmi_ISN2004_ISN2016.tif','ISN2004_ISN2016.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/is_lmi_ISN2004_ISN2016.tif',1,1,NULL), + +-- jp_gsi - Geospatial Information Authority of Japan +('jp_gsi_gsigeo2011.tif','jp_gsi_gsigeo2011.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/jp_gsi_gsigeo2011.tif',1,1,NULL), + +-- nc_dittt - Gouvernement de Nouvelle Calédonie - DITTT +('Ranc08_Circe.mnt','nc_dittt_Ranc08_Circe.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nc_dittt_Ranc08_Circe.tif',1,1,NULL), +('gr3dnc01b.mnt','nc_dittt_gr3dnc01b.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/nc_dittt_gr3dnc01b.tif',1,1,NULL), +('gr3dnc02b.mnt','nc_dittt_gr3dnc02b.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/nc_dittt_gr3dnc02b.tif',1,1,NULL), +('gr3dnc03a.mnt','nc_dittt_gr3dnc03a.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/nc_dittt_gr3dnc03a.tif',1,1,NULL), + +-- Netherlands / RDNAP (non-free grids). See https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/master/debian/copyright +-- Netherlands / RDNAP 2018 +('nlgeo2018.gtx','nl_nsgi_nlgeo2018.tif','nlgeo2018.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nl_nsgi_nlgeo2018.tif',1,1,NULL), +('rdtrans2018.gsb','nl_nsgi_rdtrans2018.tif','rdtrans2018.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/nl_nsgi_rdtrans2018.tif',1,1,NULL), +('NOT-YET-IN-GRID-TRANSFORMATION-naptrans2018.gtx','nl_nsgi_naptrans2018.tif','naptrans2018.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nl_nsgi_naptrans2018.tif',1,1,NULL), +('NOT-YET-IN-GRID-TRANSFORMATION-rdcorr2018.gsb','nl_nsgi_rdcorr2018.tif','rdcorr2018.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/nl_nsgi_rdcorr2018.tif',1,1,NULL), +('naptrans2008.gtx','','naptrans2008.gtx','GTX','geoid_like',0,NULL,'https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/upstream/2008/naptrans2008.gtx',1,0,NULL), +('rdtrans2008.gsb','','rdtrans2008.gsb','NTv2','hgridshift',0,NULL,'https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/upstream/2008/rdtrans2008.gsb',1,0,NULL), + +-- nz_linz - New Zealand +('nzgd2kgrid0005.gsb','nz_linz_nzgd2kgrid0005.tif','nzgd2kgrid0005.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/nz_linz_nzgd2kgrid0005.tif',1,1,NULL), +('nzgeoid2016.gtx','nz_linz_nzgeoid2016.tif','nzgeoid2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2016.tif',1,1,NULL), +-- Superseded +('New_Zealand_Quasigeoid_2016.csv','nz_linz_nzgeoid2016.tif','nzgeoid2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2016.tif',1,1,NULL), +('nzgeoid2009.gtx','nz_linz_nzgeoid2009.tif','nzgeoid2009.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2009.tif',1,1,NULL), +-- Superseded +('nzgeoid09.sid','nz_linz_nzgeoid2009.tif','nzgeoid2009.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2009.tif',1,1,NULL), +-- New Zealand grid shift models. +('auckht1946-nzvd2016.gtx','nz_linz_auckht1946-nzvd2016.tif','auckht1946-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_auckht1946-nzvd2016.tif',1,1,NULL), +('blufht1955-nzvd2016.gtx','nz_linz_blufht1955-nzvd2016.tif','blufht1955-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_blufht1955-nzvd2016.tif',1,1,NULL), +('dublht1960-nzvd2016.gtx','nz_linz_dublht1960-nzvd2016.tif','dublht1960-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_dublht1960-nzvd2016.tif',1,1,NULL), +('duneht1958-nzvd2016.gtx','nz_linz_duneht1958-nzvd2016.tif','duneht1958-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_duneht1958-nzvd2016.tif',1,1,NULL), +('gisbht1926-nzvd2016.gtx','nz_linz_gisbht1926-nzvd2016.tif','gisbht1926-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_gisbht1926-nzvd2016.tif',1,1,NULL), +('lyttht1937-nzvd2016.gtx','nz_linz_lyttht1937-nzvd2016.tif','lyttht1937-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_lyttht1937-nzvd2016.tif',1,1,NULL), +('motuht1953-nzvd2016.gtx','nz_linz_motuht1953-nzvd2016.tif','motuht1953-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_motuht1953-nzvd2016.tif',1,1,NULL), +('napiht1962-nzvd2016.gtx','nz_linz_napiht1962-nzvd2016.tif','napiht1962-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_napiht1962-nzvd2016.tif',1,1,NULL), +('nelsht1955-nzvd2016.gtx','nz_linz_nelsht1955-nzvd2016.tif','nelsht1955-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_nelsht1955-nzvd2016.tif',1,1,NULL), +('ontpht1964-nzvd2016.gtx','nz_linz_ontpht1964-nzvd2016.tif','ontpht1964-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_ontpht1964-nzvd2016.tif',1,1,NULL), +('stisht1977-nzvd2016.gtx','nz_linz_stisht1977-nzvd2016.tif','stisht1977-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_stisht1977-nzvd2016.tif',1,1,NULL), +('taraht1970-nzvd2016.gtx','nz_linz_taraht1970-nzvd2016.tif','taraht1970-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_taraht1970-nzvd2016.tif',1,1,NULL), +('wellht1953-nzvd2016.gtx','nz_linz_wellht1953-nzvd2016.tif','wellht1953-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_wellht1953-nzvd2016.tif',1,1,NULL), +-- Superseded entries +('auckland-1946-to-nzvd2016-conversion.csv','nz_linz_auckht1946-nzvd2016.tif','auckht1946-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_auckht1946-nzvd2016.tif',1,1,NULL), +('bluff-1955-to-nzvd2016-conversion.csv','nz_linz_blufht1955-nzvd2016.tif','blufht1955-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_blufht1955-nzvd2016.tif',1,1,NULL), +('dunedin-bluff-1960-to-nzvd2016-conversion.csv','nz_linz_dublht1960-nzvd2016.tif','dublht1960-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_dublht1960-nzvd2016.tif',1,1,NULL), +('dunedin-1958-to-nzvd2016-conversion.csv','nz_linz_duneht1958-nzvd2016.tif','duneht1958-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_duneht1958-nzvd2016.tif',1,1,NULL), +('gisborne-1926-to-nzvd2016-conversion.csv','nz_linz_gisbht1926-nzvd2016.tif','gisbht1926-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_gisbht1926-nzvd2016.tif',1,1,NULL), +('lyttelton-1937-to-nzvd2016-conversion.csv','nz_linz_lyttht1937-nzvd2016.tif','lyttht1937-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_lyttht1937-nzvd2016.tif',1,1,NULL), +('moturiki-1953-to-nzvd2016-conversion.csv','nz_linz_motuht1953-nzvd2016.tif','motuht1953-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_motuht1953-nzvd2016.tif',1,1,NULL), +('napier-1962-to-nzvd2016-conversion.csv','nz_linz_napiht1962-nzvd2016.tif','napiht1962-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_napiht1962-nzvd2016.tif',1,1,NULL), +('nelson-1955-to-nzvd2016-conversion.csv','nz_linz_nelsht1955-nzvd2016.tif','nelsht1955-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_nelsht1955-nzvd2016.tif',1,1,NULL), +('onetreepoint-1964-to-nzvd2016-conversion.csv','nz_linz_ontpht1964-nzvd2016.tif','ontpht1964-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_ontpht1964-nzvd2016.tif',1,1,NULL), +('stewartisland-1977-to-nzvd2016-conversion.csv','nz_linz_stisht1977-nzvd2016.tif','stisht1977-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_stisht1977-nzvd2016.tif',1,1,NULL), +('taranaki-1970-to-nzvd2016-conversion.csv','nz_linz_taraht1970-nzvd2016.tif','taraht1970-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_taraht1970-nzvd2016.tif',1,1,NULL), +('wellington-1953-to-nzvd2016-conversion.csv','nz_linz_wellht1953-nzvd2016.tif','wellht1953-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_wellht1953-nzvd2016.tif',1,1,NULL), + +-- pt_dgt - DG Territorio +('DLx_ETRS89_geo.gsb','pt_dgt_DLx_ETRS89_geo.tif','DLx_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_DLx_ETRS89_geo.tif',1,1,NULL), +('D73_ETRS89_geo.gsb','pt_dgt_D73_ETRS89_geo.tif','D73_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_D73_ETRS89_geo.tif',1,1,NULL), + +-- se_lantmateriet - Sweden ('SWEN17_RH2000.gtx','se_lantmateriet_SWEN17_RH2000.tif','SWEN17_RH2000.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/se_lantmateriet_SWEN17_RH2000.tif',1,1,NULL), --- Ireland: OSGM15 height, Malin head datum -> ETRS89 ellipsoidal heights -('OSGM15_Malin.gri','uk_os_OSGM15_Malin.tif','OSGM15_Malin.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/uk_os_OSGM15_Malin.tif',1,1,NULL), + +-- sk_gku - Geodetický a kartografický ústav Bratislava (GKU) +('Slovakia_JTSK03_to_JTSK.LAS','sk_gku_JTSK03_to_JTSK.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/sk_gku_JTSK03_to_JTSK.tif',1,1,NULL), +('Slovakia_ETRS89h_to_Baltic1957.gtx','sk_gku_Slovakia_ETRS89h_to_Baltic1957.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/sk_gku_Slovakia_ETRS89h_to_Baltic1957.tif',1,1,NULL), +('Slovakia_ETRS89h_to_EVRF2007.gtx','sk_gku_Slovakia_ETRS89h_to_EVRF2007.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/sk_gku_Slovakia_ETRS89h_to_EVRF2007.tif',1,1,NULL), + +-- uk_os - Ordnance Survey -- Northern Ireland: OSGM15 height, Belfast height -> ETRS89 ellipsoidal heights ('OSGM15_Belfast.gri','uk_os_OSGM15_Belfast.tif','OSGM15_Belfast.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/uk_os_OSGM15_Belfast.tif',1,1,NULL), -- United Kingdom: OSGM15 height, ODN height -> ETRS89 ellipsoidal heights ('OSTN15_OSGM15_GB.txt','uk_os_OSGM15_GB.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/uk_os_OSGM15_GB.tif',1,1,NULL), +-- Ireland: OSGM15 height, Malin head datum -> ETRS89 ellipsoidal heights +('OSGM15_Malin.gri','uk_os_OSGM15_Malin.tif','OSGM15_Malin.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/uk_os_OSGM15_Malin.tif',1,1,NULL), +('OSTN15_NTv2_OSGBtoETRS.gsb','uk_os_OSTN15_NTv2_OSGBtoETRS.tif','OSTN15_NTv2_OSGBtoETRS.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/uk_os_OSTN15_NTv2_OSGBtoETRS.tif',1,1,NULL), + +-- us_nga - US National Geospatial Intelligence Agency (NGA) +('WW15MGH.GRD','us_nga_egm96_15.tif','egm96_15.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_nga_egm96_15.tif',1,1,NULL), +('Und_min2.5x2.5_egm2008_isw=82_WGS84_TideFree.gz','us_nga_egm08_25.tif','egm08_25.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_nga_egm08_25.tif',1,1,NULL), + +-- us_noaa - United States +-- Continental USA VERTCON: NGVD (19)29 height to NAVD (19)88 height +('vertconw.94','us_noaa_vertconw.tif','vertconw.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/us_noaa_vertconw.tif',1,1,NULL), +('vertconc.94','us_noaa_vertconc.tif','vertconc.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/us_noaa_vertconc.tif',1,1,NULL), +('vertcone.94','us_noaa_vertcone.tif','vertcone.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/us_noaa_vertcone.tif',1,1,NULL), -- US GEOID99 height models. Not mapped: Alaska: g1999a01.gtx to g1999a04.gtx. Hawaii: g1999h01.gtx, Puerto Rico: g1999p01.gtx ('g1999u01.bin','us_noaa_g1999u01.tif','g1999u01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u01.tif',1,1,NULL), ('g1999u02.bin','us_noaa_g1999u02.tif','g1999u02.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u02.tif',1,1,NULL), @@ -69,7 +266,6 @@ VALUES ('g2009s01.bin','us_noaa_g2009s01.tif','g2009s01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2009s01.tif',1,1,NULL), ('g2009p01.bin','us_noaa_g2009p01.tif','g2009p01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2009p01.tif',1,1,NULL), -- US GEOID12B height models --- -- CONUS ('g2012bu0.bin','us_noaa_g2012bu0.tif','g2012bu0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2012bu0.tif',1,1,NULL), -- Alaska @@ -82,158 +278,6 @@ VALUES ('g2012bs0.bin','us_noaa_g2012bs0.tif','g2012bs0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2012bs0.tif',1,1,NULL), -- US GEOID18 height models ('g2018u0.bin','us_noaa_g2018u0.tif','g2018u0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2018u0.tif',1,1,NULL), --- French vertical grids -('g2018p0.bin','us_noaa_g2018p0.tif','g2018p0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2018p0.tif',1,1,NULL), -('RAF09.mnt','fr_ign_RAF09.tif','RAF09.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAF09.tif',1,1,NULL), -('RAF18.tac','fr_ign_RAF18.tif','RAF18.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAF18.tif',1,1,NULL), -('RAC09.mnt','fr_ign_RAC09.tif','RAC09.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAC09.tif',1,1,NULL), -('ggm00.txt','fr_ign_ggm00v2.tif','ggm00v2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggm00v2.tif',1,1,NULL), -('ggg00.txt','fr_ign_ggg00v2.tif','ggg00v2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00v2.tif',1,1,NULL), -('ggg00_mg.txt','fr_ign_ggg00_mgv2.tif','ggg00_mgv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00_mgv2.tif',1,1,NULL), -('ggg00_sm.txt','fr_ign_ggg00_smv2.tif','ggg00_smv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00_smv2.tif',1,1,NULL), -('ggg00_ls.txt','fr_ign_ggg00_lsv2.tif','ggg00_lsv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00_lsv2.tif',1,1,NULL), -('ggg00_ld.txt','fr_ign_RALDW842016.tif','RALDW842016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALDW842016.tif',1,1,NULL), -('RALDW842016.mnt','fr_ign_RALDW842016.tif','RALDW842016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALDW842016.tif',1,1,NULL), -('ggg00_sb.txt','fr_ign_ggg00_sbv2.tif','ggg00_sbv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggg00_sbv2.tif',1,1,NULL), -('gg10_mart.txt','fr_ign_RAMART2016.tif','RAMART2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAMART2016.tif',1,1,NULL), -('RAMART2016.mnt','fr_ign_RAMART2016.tif','RAMART2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAMART2016.tif',1,1,NULL), -('gg10_gtbt.txt','fr_ign_RAGTBT2016.tif','RAGTBT2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAGTBT2016.tif',1,1,NULL), -('RAGTBT2016.mnt','fr_ign_RAGTBT2016.tif','RAGTBT2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAGTBT2016.tif',1,1,NULL), -('gg10_mg.txt','fr_ign_RAMG2016.tif','RAMG2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAMG2016.tif',1,1,NULL), -('RAMG2016.mnt','fr_ign_RAMG2016.tif','RAMG2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAMG2016.tif',1,1,NULL), -('gg10_sm.txt','fr_ign_gg10_smv2.tif','gg10_smv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_gg10_smv2.tif',1,1,NULL), -('gg10_smv2.mnt','fr_ign_gg10_smv2.tif','gg10_smv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_gg10_smv2.tif',1,1,NULL), -('gg10_ls.txt','fr_ign_RALS2016.tif','RALS2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALS2016.tif',1,1,NULL), -('RALS2016.mnt','fr_ign_RALS2016.tif','RALS2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALS2016.tif',1,1,NULL), -('gg10_ld.txt','fr_ign_RALD2016.tif','RALD2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALD2016.tif',1,1,NULL), -('RALD2016.mnt','fr_ign_RALD2016.tif','RALD2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RALD2016.tif',1,1,NULL), -('gg10_sb.txt','fr_ign_gg10_sbv2.tif','gg10_sbv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_gg10_sbv2.tif',1,1,NULL), -('gg10_sbv2.mnt','fr_ign_gg10_sbv2.tif','gg10_sbv2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_gg10_sbv2.tif',1,1,NULL), -('ggguy00.txt','fr_ign_ggguy15.tif','ggguy15.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggguy15.tif',1,1,NULL), -('ggr99.txt','fr_ign_RAR07_bl.tif','RAR07_bl.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RAR07_bl.tif',1,1,NULL), -('GGSPM06v1.mnt','fr_ign_ggspm06v1.tif','ggspm06v1.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggspm06v1.tif',1,1,NULL), -('RASPM2018.mnt','fr_ign_RASPM2018.tif','RASPM2018.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_RASPM2018.tif',1,1,NULL), --- Australian grids -('A66 National (13.09.01).gsb','au_icsm_A66_National_13_09_01.tif','A66_National_13_09_01.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_A66_National_13_09_01.tif',1,1,NULL), -('National 84 (02.07.01).gsb','au_icsm_National_84_02_07_01.tif','National_84_02_07_01.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_National_84_02_07_01.tif',1,1,NULL), -('GDA94_GDA2020_conformal.gsb','au_icsm_GDA94_GDA2020_conformal.tif','GDA94_GDA2020_conformal.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal.tif',1,1,NULL), -('GDA94_GDA2020_conformal_and_distortion.gsb','au_icsm_GDA94_GDA2020_conformal_and_distortion.tif','GDA94_GDA2020_conformal_and_distortion.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal_and_distortion.tif',1,1,NULL), -('GDA94_GDA2020_conformal_christmas_island.gsb','au_icsm_GDA94_GDA2020_conformal_christmas_island.tif','GDA94_GDA2020_conformal_christmas_island.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal_christmas_island.tif',1,1,NULL), -('GDA94_GDA2020_conformal_cocos_island.gsb','au_icsm_GDA94_GDA2020_conformal_cocos_island.tif','GDA94_GDA2020_conformal_cocos_island.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/au_icsm_GDA94_GDA2020_conformal_cocos_island.tif',1,1,NULL), --- source file contains undulation in first band, and deflection in 2nd and 3d band -('AUSGeoid09_V1.01.gsb','au_ga_AUSGeoid09_V1.01.tif','AUSGeoid09_V1.01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/au_ga_AUSGeoid09_V1.01.tif',1,1,NULL), -('AUSGeoid09_GDA94_V1.01_DOV_windows.gsb','au_ga_AUSGeoid09_V1.01.tif','AUSGeoid09_V1.01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/au_ga_AUSGeoid09_V1.01.tif',1,1,NULL), --- source file contains undulation in first band, and deflection in 2nd and 3d band -('AUSGeoid2020_20180201.gsb','au_ga_AUSGeoid2020_20180201.tif','AUSGeoid2020_20180201.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/au_ga_AUSGeoid2020_20180201.tif',1,1,NULL), --- Netherlands / RDNAP (non-free grids). See https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/master/debian/copyright -('naptrans2008.gtx','','naptrans2008.gtx','GTX','geoid_like',0,NULL,'https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/upstream/2008/naptrans2008.gtx',1,0,NULL), -('rdtrans2008.gsb','','rdtrans2008.gsb','NTv2','hgridshift',0,NULL,'https://salsa.debian.org/debian-gis-team/proj-rdnap/raw/upstream/2008/rdtrans2008.gsb',1,0,NULL), --- Netherlands / RDNAP 2018 -('nlgeo2018.gtx','nl_nsgi_nlgeo2018.tif','nlgeo2018.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nl_nsgi_nlgeo2018.tif',1,1,NULL), -('rdtrans2018.gsb','nl_nsgi_rdtrans2018.tif','rdtrans2018.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/nl_nsgi_rdtrans2018.tif',1,1,NULL), -('NOT-YET-IN-GRID-TRANSFORMATION-naptrans2018.gtx','nl_nsgi_naptrans2018.tif','naptrans2018.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nl_nsgi_naptrans2018.tif',1,1,NULL), -('NOT-YET-IN-GRID-TRANSFORMATION-rdcorr2018.gsb','nl_nsgi_rdcorr2018.tif','rdcorr2018.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/nl_nsgi_rdcorr2018.tif',1,1,NULL), --- Belgium -('bd72lb72_etrs89lb08.gsb','be_ign_bd72lb72_etrs89lb08.tif','bd72lb72_etrs89lb08.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/be_ign_bd72lb72_etrs89lb08.tif',1,1,NULL), --- Switzerland -('CHENyx06a.gsb','ch_swisstopo_CHENyx06a.tif','CHENyx06a.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ch_swisstopo_CHENyx06a.tif',1,1,NULL), -('CHENyx06_ETRS.gsb','ch_swisstopo_CHENyx06_ETRS.tif','CHENyx06_ETRS.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ch_swisstopo_CHENyx06_ETRS.tif',1,1,NULL), --- Spain -('100800401.gsb','es_cat_icgc_100800401.tif','100800401.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_cat_icgc_100800401.tif',1,1,NULL), -('SPED2ETV2.gsb','es_ign_SPED2ETV2.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/es_ign_SPED2ETV2.tif',1,1,NULL), -('EGM08_REDNAP.txt','es_ign_egm08-rednap.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/es_ign_egm08-rednap.tif',1,1,NULL), -('EGM08_REDNAP_Canarias.txt','es_ign_egm08-rednap-canarias.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/es_ign_egm08-rednap-canarias.tif',1,1,NULL), --- Portugal -('DLx_ETRS89_geo.gsb','pt_dgt_DLx_ETRS89_geo.tif','DLx_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_DLx_ETRS89_geo.tif',1,1,NULL), -('D73_ETRS89_geo.gsb','pt_dgt_D73_ETRS89_geo.tif','D73_ETRS89_geo.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/pt_dgt_D73_ETRS89_geo.tif',1,1,NULL), --- Canada provincial grids -('AB_CSRS.DAC','ca_nrc_ABCSRSV4.tif','ABCSRSV4.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ABCSRSV4.tif',1,1,NULL), -('CRD27_00.GSB','ca_nrc_CRD27_00.tif','CRD27_00.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_CRD27_00.tif',1,1,NULL), -('CRD93_00.GSB','ca_nrc_CRD93_00.tif','CRD93_00.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_CRD93_00.tif',1,1,NULL), -('NVI93_05.GSB','ca_nrc_NVI93_05.tif','NVI93_05.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NVI93_05.tif',1,1,NULL), -('BC_27_05.GSB','ca_nrc_BC_27_05.tif','BC_27_05.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_BC_27_05.tif',1,1,NULL), -('BC_93_05.GSB','ca_nrc_BC_93_05.tif','BC_93_05.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_BC_93_05.tif',1,1,NULL), -('NB7783v2.gsb','ca_nrc_NB7783v2.tif','NB7783v2.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NB7783v2.tif',1,1,NULL), -('NB2783v2.gsb','ca_nrc_NB2783v2.tif','NB2783v2.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NB2783v2.tif',1,1,NULL), -('GS7783.GSB','ca_nrc_GS7783.tif','GS7783.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_GS7783.tif',1,1,NULL), -('NS778302.gsb','ca_nrc_NS778302.tif','NS778302.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NS778302.tif',1,1,NULL), -('ON27CSv1.GSB','ca_nrc_ON27CSv1.tif','ON27CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ON27CSv1.tif',1,1,NULL), -('ON76CSv1.GSB','ca_nrc_ON76CSv1.tif','ON76CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ON76CSv1.tif',1,1,NULL), -('ON83CSv1.GSB','ca_nrc_ON83CSv1.tif','ON83CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_ON83CSv1.tif',1,1,NULL), -('TOR27CSv1.GSB','ca_nrc_TO27CSv1.tif','TO27CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_TO27CSv1.tif',1,1,NULL), -('PE7783V2.gsb','ca_nrc_PE7783V2.tif','PE7783V2.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_PE7783V2.tif',1,1,NULL), --- two grid names in EPSG point to the same file distributed by NRCan -('NA27NA83.GSB','ca_que_mern_na27na83.tif','na27na83.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_que_mern_na27na83.tif',1,1,NULL), -('NA27SCRS.GSB','ca_nrc_NA27SCRS.tif','NA27SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NA27SCRS.tif',1,1,NULL), -('QUE27-98.gsb','ca_nrc_NA27SCRS.tif','NA27SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NA27SCRS.tif',1,1,NULL), -('CQ77NA83.GSB','ca_que_mern_cq77na83.tif','cq77na83.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_que_mern_cq77na83.tif',1,1,NULL), -('CGQ77-98.gsb','ca_nrc_CQ77SCRS.tif','CQ77SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_CQ77SCRS.tif',1,1,NULL), --- two grid names in EPSG point to the same file distributed by NRCan -('NA83SCRS.GSB','ca_nrc_NA83SCRS.tif','NA83SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NA83SCRS.tif',1,1,NULL), -('NAD83-98.gsb','ca_nrc_NA83SCRS.tif','NA83SCRS.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_NA83SCRS.tif',1,1,NULL), -('SK27-98.gsb','ca_nrc_SK27-98.tif','SK27-98.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_SK27-98.tif',1,1,NULL), -('SK83-98.gsb','ca_nrc_SK83-98.tif','SK83-98.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_SK83-98.tif',1,1,NULL), -('HT2_0.byn','ca_nrc_HT2_2010v70.tif','HT2_2010v70.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_HT2_2010v70.tif',1,1,NULL), -('CGG2013i08a.byn','ca_nrc_CGG2013ai08.tif','CGG2013ai08.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_CGG2013ai08.tif',1,1,NULL), -('CGG2013n83a.byn','ca_nrc_CGG2013an83.tif','CGG2013an83.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_CGG2013an83.tif',1,1,NULL), -('CGG2013i83.byn','ca_nrc_CGG2013i08.tif','CGG2013i08.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_CGG2013i08.tif',1,1,NULL), -('CGG2013n83.byn','ca_nrc_CGG2013n83.tif','CGG2013n83.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/ca_nrc_CGG2013n83.tif',1,1,NULL), --- Iceland -('ISN93_ISN2016.gsb','is_lmi_ISN93_ISN2016.tif','ISN93_ISN2016.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/is_lmi_ISN93_ISN2016.tif',1,1,NULL), -('ISN2004_ISN2016.gsb','is_lmi_ISN2004_ISN2016.tif','ISN2004_ISN2016.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/is_lmi_ISN2004_ISN2016.tif',1,1,NULL), -('Icegeoid_ISN2004.gtx','is_lmi_Icegeoid_ISN2004.tif','Icegeoid_ISN2004.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/is_lmi_Icegeoid_ISN2004.tif',1,1,NULL), -('Icegeoid_ISN93.gtx','is_lmi_Icegeoid_ISN93.tif','Icegeoid_ISN93.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/is_lmi_Icegeoid_ISN93.tif',1,1,NULL), -('Icegeoid_ISN2016.gtx','is_lmi_Icegeoid_ISN2016.tif','Icegeoid_ISN2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/is_lmi_Icegeoid_ISN2016.tif',1,1,NULL), --- New Caledonia, -('gr3dnc01b.mnt','nc_dittt_gr3dnc01b.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/nc_dittt_gr3dnc01b.tif',1,1,NULL), -('gr3dnc02b.mnt','nc_dittt_gr3dnc02b.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/nc_dittt_gr3dnc02b.tif',1,1,NULL), -('gr3dnc03a.mnt','nc_dittt_gr3dnc03a.tif',NULL,'GTiff','geocentricoffset',0,NULL,'https://cdn.proj.org/nc_dittt_gr3dnc03a.tif',1,1,NULL), -('Ranc08_Circe.mnt','nc_dittt_Ranc08_Circe.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nc_dittt_Ranc08_Circe.tif',1,1,NULL), --- New Zealand grid shift models. -('auckland-1946-to-nzvd2016-conversion.csv','nz_linz_auckht1946-nzvd2016.tif','auckht1946-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_auckht1946-nzvd2016.tif',1,1,NULL), --- Slovakia -('Slovakia_JTSK03_to_JTSK.LAS','sk_gku_JTSK03_to_JTSK.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/sk_gku_JTSK03_to_JTSK.tif',1,1,NULL), -('Slovakia_ETRS89h_to_Baltic1957.gtx','sk_gku_Slovakia_ETRS89h_to_Baltic1957.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/sk_gku_Slovakia_ETRS89h_to_Baltic1957.tif',1,1,NULL), -('Slovakia_ETRS89h_to_EVRF2007.gtx','sk_gku_Slovakia_ETRS89h_to_EVRF2007.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/sk_gku_Slovakia_ETRS89h_to_EVRF2007.tif',1,1,NULL), --- Superseded entries -('bluff-1955-to-nzvd2016-conversion.csv','nz_linz_blufht1955-nzvd2016.tif','blufht1955-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_blufht1955-nzvd2016.tif',1,1,NULL), -('dunedin-1958-to-nzvd2016-conversion.csv','nz_linz_duneht1958-nzvd2016.tif','duneht1958-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_duneht1958-nzvd2016.tif',1,1,NULL), -('dunedin-bluff-1960-to-nzvd2016-conversion.csv','nz_linz_dublht1960-nzvd2016.tif','dublht1960-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_dublht1960-nzvd2016.tif',1,1,NULL), -('gisborne-1926-to-nzvd2016-conversion.csv','nz_linz_gisbht1926-nzvd2016.tif','gisbht1926-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_gisbht1926-nzvd2016.tif',1,1,NULL), -('lyttelton-1937-to-nzvd2016-conversion.csv','nz_linz_lyttht1937-nzvd2016.tif','lyttht1937-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_lyttht1937-nzvd2016.tif',1,1,NULL), -('moturiki-1953-to-nzvd2016-conversion.csv','nz_linz_motuht1953-nzvd2016.tif','motuht1953-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_motuht1953-nzvd2016.tif',1,1,NULL), -('napier-1962-to-nzvd2016-conversion.csv','nz_linz_napiht1962-nzvd2016.tif','napiht1962-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_napiht1962-nzvd2016.tif',1,1,NULL), -('nelson-1955-to-nzvd2016-conversion.csv','nz_linz_nelsht1955-nzvd2016.tif','nelsht1955-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_nelsht1955-nzvd2016.tif',1,1,NULL), -('onetreepoint-1964-to-nzvd2016-conversion.csv','nz_linz_ontpht1964-nzvd2016.tif','ontpht1964-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_ontpht1964-nzvd2016.tif',1,1,NULL), -('stewartisland-1977-to-nzvd2016-conversion.csv','nz_linz_stisht1977-nzvd2016.tif','stisht1977-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_stisht1977-nzvd2016.tif',1,1,NULL), -('taranaki-1970-to-nzvd2016-conversion.csv','nz_linz_taraht1970-nzvd2016.tif','taraht1970-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_taraht1970-nzvd2016.tif',1,1,NULL), -('wellington-1953-to-nzvd2016-conversion.csv','nz_linz_wellht1953-nzvd2016.tif','wellht1953-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_wellht1953-nzvd2016.tif',1,1,NULL), -('auckht1946-nzvd2016.gtx','nz_linz_auckht1946-nzvd2016.tif','auckht1946-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_auckht1946-nzvd2016.tif',1,1,NULL), -('blufht1955-nzvd2016.gtx','nz_linz_blufht1955-nzvd2016.tif','blufht1955-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_blufht1955-nzvd2016.tif',1,1,NULL), -('duneht1958-nzvd2016.gtx','nz_linz_duneht1958-nzvd2016.tif','duneht1958-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_duneht1958-nzvd2016.tif',1,1,NULL), -('dublht1960-nzvd2016.gtx','nz_linz_dublht1960-nzvd2016.tif','dublht1960-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_dublht1960-nzvd2016.tif',1,1,NULL), -('gisbht1926-nzvd2016.gtx','nz_linz_gisbht1926-nzvd2016.tif','gisbht1926-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_gisbht1926-nzvd2016.tif',1,1,NULL), -('lyttht1937-nzvd2016.gtx','nz_linz_lyttht1937-nzvd2016.tif','lyttht1937-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_lyttht1937-nzvd2016.tif',1,1,NULL), -('motuht1953-nzvd2016.gtx','nz_linz_motuht1953-nzvd2016.tif','motuht1953-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_motuht1953-nzvd2016.tif',1,1,NULL), -('napiht1962-nzvd2016.gtx','nz_linz_napiht1962-nzvd2016.tif','napiht1962-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_napiht1962-nzvd2016.tif',1,1,NULL), -('nelsht1955-nzvd2016.gtx','nz_linz_nelsht1955-nzvd2016.tif','nelsht1955-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_nelsht1955-nzvd2016.tif',1,1,NULL), -('ontpht1964-nzvd2016.gtx','nz_linz_ontpht1964-nzvd2016.tif','ontpht1964-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_ontpht1964-nzvd2016.tif',1,1,NULL), -('stisht1977-nzvd2016.gtx','nz_linz_stisht1977-nzvd2016.tif','stisht1977-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_stisht1977-nzvd2016.tif',1,1,NULL), -('taraht1970-nzvd2016.gtx','nz_linz_taraht1970-nzvd2016.tif','taraht1970-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_taraht1970-nzvd2016.tif',1,1,NULL), -('wellht1953-nzvd2016.gtx','nz_linz_wellht1953-nzvd2016.tif','wellht1953-nzvd2016.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/nz_linz_wellht1953-nzvd2016.tif',1,1,NULL), --- Superseded -('New_Zealand_Quasigeoid_2016.csv','nz_linz_nzgeoid2016.tif','nzgeoid2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2016.tif',1,1,NULL), -('nzgeoid2016.gtx','nz_linz_nzgeoid2016.tif','nzgeoid2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2016.tif',1,1,NULL), --- Superseded -('nzgeoid09.sid','nz_linz_nzgeoid2009.tif','nzgeoid2009.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2009.tif',1,1,NULL), -('nzgeoid2009.gtx','nz_linz_nzgeoid2009.tif','nzgeoid2009.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/nz_linz_nzgeoid2009.tif',1,1,NULL), --- Brazil -('CA61_003.gsb','br_ibge_CA61_003.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/br_ibge_CA61_003.tif',1,1,NULL), -('CA7072_003.gsb','br_ibge_CA7072_003.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/br_ibge_CA7072_003.tif',1,1,NULL), -('SAD69_003.gsb','br_ibge_SAD69_003.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/br_ibge_SAD69_003.tif',1,1,NULL), -('SAD96_003.gsb','br_ibge_SAD96_003.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/br_ibge_SAD96_003.tif',1,1,NULL), --- Finland -('fi_nls_ykj_etrs35fin.json','fi_nls_ykj_etrs35fin.json',NULL,'JSON','tinshift',0,NULL,'https://cdn.proj.org/fi_nls_ykj_etrs35fin.json',1,1,NULL), -('fi_nls_n43_n60.json','fi_nls_n43_n60.json',NULL,'JSON','tinshift',0,NULL,'https://cdn.proj.org/fi_nls_n43_n60.json',1,1,NULL), -('fi_nls_n60_n2000.json','fi_nls_n60_n2000.json',NULL,'JSON','tinshift',0,NULL,'https://cdn.proj.org/fi_nls_n60_n2000.json',1,1,NULL) +('g2018p0.bin','us_noaa_g2018p0.tif','g2018p0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2018p0.tif',1,1,NULL) ; + diff --git a/data/sql/grid_transformation_custom.sql b/data/sql/grid_transformation_custom.sql index cb8c757a..02bcc8ec 100644 --- a/data/sql/grid_transformation_custom.sql +++ b/data/sql/grid_transformation_custom.sql @@ -147,3 +147,25 @@ INSERT INTO "usage" VALUES( 'EPSG','1120', -- area of use: Iceland - onshore and offshore 'EPSG','1024' -- unknown ); + +-- Japan + +INSERT INTO "grid_transformation" VALUES( + 'PROJ','EPSG_6667_TO_EPSG_6695','JDG2011 to JGD2011 height', + NULL, + 'EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)', + 'EPSG','6667', -- source CRS (JDG2011) + 'EPSG','6695', -- target CRS (JDG2011 (vertical) height) + NULL, + 'EPSG','8666','Geoid (height correction) model file','jp_gsi_gsigeo2011.tif', + NULL,NULL,NULL,NULL,NULL,NULL,NULL,0); + +INSERT INTO "usage" VALUES( + 'PROJ', + 'EPSG_6667_TO_EPSG_6695_USAGE', + 'grid_transformation', + 'PROJ', + 'EPSG_6667_TO_EPSG_6695', + 'EPSG','3263', -- area of use: Japan - onshore mainland + 'EPSG','1024' -- unknown +); diff --git a/data/sql/other_transformation_custom.sql b/data/sql/other_transformation_custom.sql index 8d9b0426..c0c2bf11 100644 --- a/data/sql/other_transformation_custom.sql +++ b/data/sql/other_transformation_custom.sql @@ -40,3 +40,104 @@ INSERT INTO other_transformation VALUES( 'EPSG','5717','EPSG','3900',0.01, NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG','4123',NULL,0); INSERT INTO "usage" VALUES('PROJ','N60_TO_N2000_USAGE','other_transformation','PROJ','N60_TO_N2000','EPSG','3333','EPSG','1024'); + + +-- Temporary entry for NZGD2000 deformation model +INSERT INTO other_transformation VALUES( + 'PROJ','NZGD2000-20180701','NZGD2000 to ITRF96', + 'New Zealand Deformation Model. Defines the secular model (National Deformation Model) and patches for significant deformation events since 2000', + 'PROJ', 'PROJString', + '+proj=pipeline ' || + '+step +proj=unitconvert +xy_in=deg +xy_out=rad ' || + '+step +proj=axisswap +order=2,1 ' || + '+step +proj=defmodel +model=nz_linz_nzgd2000-20180701.json ' || + '+step +proj=axisswap +order=2,1 ' || + '+step +proj=unitconvert +xy_in=rad +xy_out=deg', + 'EPSG','4959', + 'EPSG','7907', + NULL, --accuracy + NULL,NULL,NULL,NULL,NULL,NULL, -- param1 + NULL,NULL,NULL,NULL,NULL,NULL, -- param2 + NULL,NULL,NULL,NULL,NULL,NULL, -- param3 + NULL,NULL,NULL,NULL,NULL,NULL, -- param4 + NULL,NULL,NULL,NULL,NULL,NULL, -- param5 + NULL,NULL,NULL,NULL,NULL,NULL, -- param6 + NULL,NULL,NULL,NULL,NULL,NULL, -- param7 + NULL,NULL, + '20180701', -- operation version + 0); +INSERT INTO "usage" VALUES( + 'PROJ', + 'NZGD2000-20180701_USAGE', + 'other_transformation', + 'PROJ', + 'NZGD2000-20180701', + 'EPSG','1175', -- extent + 'EPSG','1024' -- unknown +); + + +INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF97','NZGD2000 to ITRF97','Concatenation of PROJ:NZGD2000-20180701 and 9079','EPSG','4959','EPSG','7908',NULL,NULL,0); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF97',1,'PROJ','NZGD2000-20180701'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF97',2,'EPSG','9079'); +INSERT INTO "usage" VALUES( + 'PROJ', + 'NZGD2000_TO_ITRF97_USAGE', + 'concatenated_operation', + 'PROJ', + 'NZGD2000_TO_ITRF97', + 'EPSG','1175', -- extent + 'EPSG','1024' -- unknown +); + +INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF2000','NZGD2000 to ITRF2000','Concatenation of PROJ:NZGD2000-20180701 and 9080','EPSG','4959','EPSG','7909',NULL,NULL,0); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2000',1,'PROJ','NZGD2000-20180701'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2000',2,'EPSG','9080'); +INSERT INTO "usage" VALUES( + 'PROJ', + 'NZGD2000_TO_ITRF2000_USAGE', + 'concatenated_operation', + 'PROJ', + 'NZGD2000_TO_ITRF2000', + 'EPSG','1175', -- extent + 'EPSG','1024' -- unknown +); + +INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF2005','NZGD2000 to ITRF2005','Concatenation of PROJ:NZGD2000-20180701 and 9081','EPSG','4959','EPSG','7910',NULL,NULL,0); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2005',1,'PROJ','NZGD2000-20180701'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2005',2,'EPSG','9081'); +INSERT INTO "usage" VALUES( + 'PROJ', + 'NZGD2000_TO_ITRF2005_USAGE', + 'concatenated_operation', + 'PROJ', + 'NZGD2000_TO_ITRF2005', + 'EPSG','1175', -- extent + 'EPSG','1024' -- unknown +); + +INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF2008','NZGD2000 to ITRF2008','Concatenation of PROJ:NZGD2000-20180701 and EPSG:9082','EPSG','4959','EPSG','7911',NULL,NULL,0); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2008',1,'PROJ','NZGD2000-20180701'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2008',2,'EPSG','9082'); +INSERT INTO "usage" VALUES( + 'PROJ', + 'NZGD2000_TO_ITRF2008_USAGE', + 'concatenated_operation', + 'PROJ', + 'NZGD2000_TO_ITRF2008', + 'EPSG','1175', -- extent + 'EPSG','1024' -- unknown +); + +INSERT INTO "concatenated_operation" VALUES('PROJ','NZGD2000_TO_ITRF2014','NZGD2000 to ITRF2014','Concatenation of PROJ:NZGD2000-20180701 and EPSG:9083','EPSG','4959','EPSG','7912',NULL,NULL,0); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2014',1,'PROJ','NZGD2000-20180701'); +INSERT INTO "concatenated_operation_step" VALUES('PROJ','NZGD2000_TO_ITRF2014',2,'EPSG','9083'); +INSERT INTO "usage" VALUES( + 'PROJ', + 'NZGD2000_TO_ITRF2014_USAGE', + 'concatenated_operation', + 'PROJ', + 'NZGD2000_TO_ITRF2014', + 'EPSG','1175', -- extent + 'EPSG','1024' -- unknown +); diff --git a/data/triangulation.schema.json b/data/triangulation.schema.json index ee5cae0c..d3f8004d 100644 --- a/data/triangulation.schema.json +++ b/data/triangulation.schema.json @@ -94,6 +94,10 @@ "additionalProperties": false } }, + "extent": { + "$ref": "#/definitions/extent", + "description": "Defines the region within which the triangulation is defined. This should be a bounding box defined as an array of [west,south,east,north] coordinate values in a unspecified geographic CRS. This bounding box should be seen as approximate, given that triangulation may be defined with projected coordinates, and also because some triangulations may not cover the whole bounding box." + }, "input_crs": { "$ref": "#/definitions/crs", "description": "String identifying the CRS of source coordinates in the vertices. Typically \"EPSG:XXXX\". If the transformation is for vertical component, this should be the code for a compound CRS (can be EPSG:XXXX+YYYY where XXXX is the code of the horizontal CRS and YYYY the code of the vertical CRS). For example, for the KKJ->ETRS89 transformation, this is EPSG:2393 (\"KKJ / Finland Uniform Coordinate System\"). The input coordinates are assumed to be passed in the \"normalized for visualisation\" / \"GIS friendly\" order, that is longitude, latitude for geographic coordinates and easting, northing for projected coordinates." @@ -160,10 +164,43 @@ "crs": { "type": "string" }, - "datetime": { + "datetime": { "type": "string", "format": "date-time", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$" + }, + "extent": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "bbox" + ] + }, + "name" : { + "type": "string", + "description": "Name of the extent (e.g. \"Finland - mainland south of 66°N\")" + }, + "parameters": { + "type": "object", + "properties": { + "bbox": { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "number" + } + } + } + } + }, + "required": [ + "type", + "parameters" + ], + "additionalProperties": false } } } diff --git a/docs/source/community/rfc/rfc-6.rst b/docs/source/community/rfc/rfc-6.rst index a4437962..ed8115df 100644 --- a/docs/source/community/rfc/rfc-6.rst +++ b/docs/source/community/rfc/rfc-6.rst @@ -182,7 +182,7 @@ single triangle: "authority": { "name": "Authority name", "url": "http://example.com", - "address": "Adress", + "address": "Address", "email": "test@example.com" }, "links": [ diff --git a/docs/source/conf.py b/docs/source/conf.py index 31b81d3f..fbf4358a 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -69,8 +69,8 @@ copyright = u'1983-{0}'.format(now.year) # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. -version = '7.2.0' -data_version = '1.2' +version = '8.0.0' +data_version = '1.3' # use same |release| as |version| release = version @@ -194,7 +194,7 @@ html_context = { 'github_user': 'OSGeo', 'github_repo': 'PROJ', # TODO: edit when switching active branch - 'github_version': '/7.1/docs/source/', + 'github_version': '/7.2/docs/source/', 'css_files': [ '_static/theme_overrides.css', # override wide tables in RTD theme ], diff --git a/docs/source/download.rst b/docs/source/download.rst index 12d9d913..f33733fb 100644 --- a/docs/source/download.rst +++ b/docs/source/download.rst @@ -13,17 +13,8 @@ distribution of the source code and various resource file archives. See Current Release -------------------------------------------------------------------------------- -* **2020-09-01** `proj-7.1.1.tar.gz`_ (`md5`_) -* **2020-07-01** `proj-7.1.0.tar.gz`_ -* **2020-05-01** `proj-6.3.2.tar.gz`_ -* **2020-09-01** `proj-data-1.2.tar.gz`_ -* **2020-05-01** `proj-data-1.1.tar.gz`_ -* **2020-03-01** `proj-data-1.0.tar.gz`_ -* **2018-09-15** `proj-datumgrid-1.8.zip`_ -* **2020-03-01** `proj-datumgrid-europe-1.6.zip`_ -* **2020-03-01** `proj-datumgrid-north-america-1.4.zip`_ -* **2020-03-01** `proj-datumgrid-oceania-1.2.zip`_ -* **2019-03-01** `proj-datumgrid-world-1.0.zip`_ +* **2020-11-01** `proj-7.2.0.tar.gz`_ (`md5`_) +* **2020-11-01** `proj-data-1.3.tar.gz`_ * **PDF Manual** `proj.pdf`_ .. note:: @@ -37,6 +28,9 @@ Current Release Past Releases -------------------------------------------------------------------------------- +* **2020-09-01** `proj-7.1.1.tar.gz`_ +* **2020-07-01** `proj-7.1.0.tar.gz`_ +* **2020-05-01** `proj-6.3.2.tar.gz`_ * **2020-05-01** `proj-7.0.1.tar.gz`_ * **2020-03-01** `proj-7.0.0.tar.gz`_ * **2020-02-11** `proj-6.3.1.tar.gz`_ @@ -54,8 +48,15 @@ Past Releases * **2015-09-13** `proj-4.9.2.tar.gz`_ * **2015-03-04** `proj-4.9.1.tar.gz`_ +* **2020-09-01** `proj-data-1.2.tar.gz`_ +* **2020-05-01** `proj-data-1.1.tar.gz`_ * **2020-03-01** `proj-data-1.0.tar.gz`_ +* **2018-09-15** `proj-datumgrid-1.8.zip`_ +* **2020-03-01** `proj-datumgrid-europe-1.6.zip`_ +* **2020-03-01** `proj-datumgrid-north-america-1.4.zip`_ +* **2020-03-01** `proj-datumgrid-oceania-1.2.zip`_ +* **2019-03-01** `proj-datumgrid-world-1.0.zip`_ * **2018-03-01** `proj-datumgrid-1.7.zip`_ * **2016-09-11** `proj-datumgrid-1.6.zip`_ * **2019-09-01** `proj-datumgrid-europe-1.5.zip`_ @@ -71,8 +72,9 @@ Past Releases * **2018-03-01** `proj-datumgrid-oceania-1.1.zip`_ * **2018-03-01** `proj-datumgrid-oceania-1.0.zip`_ +.. _`proj-7.2.0.tar.gz`: https://download.osgeo.org/proj/proj-7.2.0.tar.gz +.. _`md5`: https://download.osgeo.org/proj/proj-7.2.0.tar.gz.md5 .. _`proj-7.1.1.tar.gz`: https://download.osgeo.org/proj/proj-7.1.1.tar.gz -.. _`md5`: https://download.osgeo.org/proj/proj-7.1.1.tar.gz.md5 .. _`proj-7.1.0.tar.gz`: https://download.osgeo.org/proj/proj-7.1.0.tar.gz .. _`proj-7.0.1.tar.gz`: https://download.osgeo.org/proj/proj-7.0.1.tar.gz .. _`proj-7.0.0.tar.gz`: https://download.osgeo.org/proj/proj-7.0.0.tar.gz @@ -91,9 +93,12 @@ Past Releases .. _`proj-4.9.1.tar.gz`: https://download.osgeo.org/proj/proj-4.9.1.tar.gz .. _`proj-4.9.2.tar.gz`: https://download.osgeo.org/proj/proj-4.9.2.tar.gz .. _`proj-4.9.3.tar.gz`: https://download.osgeo.org/proj/proj-4.9.3.tar.gz + +.. _`proj-data-1.3.tar.gz`: https://download.osgeo.org/proj/proj-data-1.3.tar.gz .. _`proj-data-1.2.tar.gz`: https://download.osgeo.org/proj/proj-data-1.2.tar.gz .. _`proj-data-1.1.tar.gz`: https://download.osgeo.org/proj/proj-data-1.1.tar.gz .. _`proj-data-1.0.tar.gz`: https://download.osgeo.org/proj/proj-data-1.0.tar.gz + .. _`proj-datumgrid-1.6.zip`: https://download.osgeo.org/proj/proj-datumgrid-1.6.zip .. _`proj-datumgrid-1.7.zip`: https://download.osgeo.org/proj/proj-datumgrid-1.7.zip .. _`proj-datumgrid-1.8.zip`: https://download.osgeo.org/proj/proj-datumgrid-1.8.zip diff --git a/docs/source/news.rst b/docs/source/news.rst index 21e3f748..4275dd11 100644 --- a/docs/source/news.rst +++ b/docs/source/news.rst @@ -3,6 +3,84 @@ News ############################################################################### +7.2.0 Release Notes +++++++++++++++++++++++++++++++++++++++++ +*November 1st 2020* + +Updates +------- + ++ **Command line tools** + + * Add multi-line PROJ string export capability, and use it by default in + :program:`projinfo` (unless ``--single-line`` is specified) (`#2381 <https://github.com/OSGeo/issues/2381>`_) + ++ **Coordinate operations** + + * :ref:`col_urban` projection, implementing a EPSG projection method + used by a number of projected CRS in Colombia (`#2395 <https://github.com/OSGeo/issues/2395>`_) + + * :ref:`tinshift` for triangulation-based transformations (`#2344 <https://github.com/OSGeo/issues/2344>`_) + + * Added ellipsoidal formulation of :ref:`ortho` (`#2361 <https://github.com/OSGeo/issues/2361>`_) + + ++ **Database** + + * Update to EPSG 10.003 and make code base robust to dealing with + WKT CRS with DatumEnsemble (`#2370 <https://github.com/OSGeo/issues/2370>`_) + + * Added Finland tinshift operations (`#2392 <https://github.com/OSGeo/issues/2392>`_) + + * Added transformation from JGD2011 Geographic 3D to JGD2011 + height using GSIGEO2011 (`#2393 <https://github.com/OSGeo/issues/2393>`_) + + * Improve CompoundCRS identification and name morphing in VerticalCRS + with ESRI WKT1 (`#2386 <https://github.com/OSGeo/issues/2386>`_) + + * Added OGC:CRS27 and OGC:CRS83 CRS entries for NAD27 and NAD83 + in longitude, latitude order (`#2350 <https://github.com/OSGeo/issues/2350>`_) + ++ **API** + + * Added temporal, engineering, and parametric datum :c:type:`PJ_TYPE` enumerations (`#2274 <https://github.com/OSGeo/issues/2274>`_) + + * Various improvements to context handling (#2329, #2331) + + * :c:func:`proj_create_vertical_crs_ex()`: add a ``ACCURACY`` option to provide + an explicit accuracy, or derive it from the grid name if it is + known (`#2342 <https://github.com/OSGeo/issues/2342>`_) + + * :c:func:`proj_crs_create_bound_crs_to_WGS84()`: make it work on + verticalCRS/compoundCRS such as EPSG:4326+5773 and + EPSG:4326+3855 (`#2365 <https://github.com/OSGeo/issues/2365>`_) + + * :cpp:func:`promoteTo3D()`: add a remark with the original CRS identifier (`#2369 <https://github.com/OSGeo/issues/2369>`_) + + * Added :c:func:`proj_context_clone` (`#2383 <https://github.com/OSGeo/issues/2383>`_) + + +Bug fixes +--------- + +* Avoid core dumps when copying contexts in certain scenarios (`#2324 <https://github.com/OSGeo/issues/2324>`_) + +* :c:func:`proj_trans()`: reset errno before attemptying a retry with a new + coordinate operation (`#2353 <https://github.com/OSGeo/issues/2353>`_) + +* PROJJSON schema corrected to allow prime meridians values with + explicitly stating a unit (degrees assumed) (`#2354 <https://github.com/OSGeo/issues/2354>`_) + +* Adjust :cpp:func:`createBoundCRSToWGS84IfPossible()` and operation filtering + (for POSGAR 2007 to WGS84 issues) (`#2357 <https://github.com/OSGeo/issues/2357>`_) + +* :cpp:func:`createOperations()`: several fixes affecting NAD83 -> NAD83(2011) (`#2364 <https://github.com/OSGeo/issues/2364>`_) + +* WKT2:2019 import/export: handle DATUM (at top level object) with PRIMEM + +* WKT1_ESRI: fix import and export of CompoundCRS (`#2389 <https://github.com/OSGeo/issues/2389>`_) + + 7.1.1 Release Notes ++++++++++++++++++++++++++++++++++++++++ *September 1st 2020* diff --git a/docs/source/operations/projections/col_urban.rst b/docs/source/operations/projections/col_urban.rst new file mode 100644 index 00000000..df2873dd --- /dev/null +++ b/docs/source/operations/projections/col_urban.rst @@ -0,0 +1,49 @@ +.. _col_urban: + +******************************************************************************** +Colombia Urban +******************************************************************************** + +.. versionadded:: 7.2 + ++---------------------+----------------------------------------------------------+ +| **Classification** | Miscellaneous | ++---------------------+----------------------------------------------------------+ +| **Available forms** | Forward and inverse ellipsoidal projection | ++---------------------+----------------------------------------------------------+ +| **Alias** | col_urban | ++---------------------+----------------------------------------------------------+ +| **Domain** | 2D | ++---------------------+----------------------------------------------------------+ +| **Input type** | Geodetic coordinates | ++---------------------+----------------------------------------------------------+ +| **Output type** | Projected coordinates | ++---------------------+----------------------------------------------------------+ + +From :cite:`IOGP2018`: + + The capital cites of each department in Colombia use an urban projection for large + scale topographic mapping of the urban areas. It is based on a plane through + the origin at an average height for the area, eliminating the need for corrections + to engineering survey observations. + + proj-string: ``+proj=col_urban`` + +Parameters +################################################################################ + +.. include:: ../options/lon_0.rst + +.. include:: ../options/lat_0.rst + +.. include:: ../options/ellps.rst + +.. include:: ../options/x_0.rst + +.. include:: ../options/y_0.rst + +.. option:: +h_0=<value> + + Projection plane origin height (in metre) + + *Defaults to 0.0.* diff --git a/docs/source/operations/projections/index.rst b/docs/source/operations/projections/index.rst index 169187cc..48420971 100644 --- a/docs/source/operations/projections/index.rst +++ b/docs/source/operations/projections/index.rst @@ -34,6 +34,7 @@ Projections map the spherical 3D space to a flat 2D space. cea chamb collg + col_urban comill crast denoy diff --git a/docs/source/operations/projections/tmerc.rst b/docs/source/operations/projections/tmerc.rst index 899c6ac0..3a18904f 100644 --- a/docs/source/operations/projections/tmerc.rst +++ b/docs/source/operations/projections/tmerc.rst @@ -122,7 +122,7 @@ to Krüger :cite:`Krueger1912` who gave the series expansions accurate to :math:`n^4`, where :math:`n = (a-b)/(a+b)` is the third flattening. These series were extended to sixth order by Engsager and Poder in :cite:`Poder1998` and :cite:`Engsager2007`. This gives full -double-precision accuracy withing 3900 km of the central meridian (about +double-precision accuracy within 3900 km of the central meridian (about 57% of the surface of the earth) :cite:`Karney2011tm`. The error is less than 0.1 mm within 7000 km of the central meridian (about 89% of the surface of the earth). diff --git a/include/proj/internal/coordinateoperation_constants.hpp b/include/proj/internal/coordinateoperation_constants.hpp index 7038ba9f..592f6263 100644 --- a/include/proj/internal/coordinateoperation_constants.hpp +++ b/include/proj/internal/coordinateoperation_constants.hpp @@ -519,6 +519,19 @@ static const ParamMapping *const paramsVerticalPerspective[] = { ¶mFalseNorthing, // PROJ addition nullptr}; +static const ParamMapping paramProjectionPlaneOriginHeight = { + EPSG_NAME_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT, + EPSG_CODE_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT, nullptr, + common::UnitOfMeasure::Type::LINEAR, "h_0"}; + +static const ParamMapping *const paramsColombiaUrban[] = { + ¶mLatitudeNatOrigin, + ¶mLongitudeNatOrigin, + ¶mFalseEasting, + ¶mFalseNorthing, + ¶mProjectionPlaneOriginHeight, + nullptr}; + static const MethodMapping projectionMethodMappings[] = { {EPSG_NAME_METHOD_TRANSVERSE_MERCATOR, EPSG_CODE_METHOD_TRANSVERSE_MERCATOR, "Transverse_Mercator", "tmerc", nullptr, paramsNatOriginScaleK}, @@ -820,6 +833,9 @@ static const MethodMapping projectionMethodMappings[] = { {EPSG_NAME_METHOD_VERTICAL_PERSPECTIVE, EPSG_CODE_METHOD_VERTICAL_PERSPECTIVE, nullptr, "nsper", nullptr, paramsVerticalPerspective}, + + {EPSG_NAME_METHOD_COLOMBIA_URBAN, EPSG_CODE_METHOD_COLOMBIA_URBAN, nullptr, + "col_urban", nullptr, paramsColombiaUrban}, }; #define METHOD_NAME_CODE(method) \ @@ -855,7 +871,7 @@ static const struct MethodNameCode { METHOD_NAME_CODE(POLAR_STEREOGRAPHIC_VARIANT_A), METHOD_NAME_CODE(POLAR_STEREOGRAPHIC_VARIANT_B), METHOD_NAME_CODE(EQUAL_EARTH), METHOD_NAME_CODE(LABORDE_OBLIQUE_MERCATOR), - METHOD_NAME_CODE(VERTICAL_PERSPECTIVE), + METHOD_NAME_CODE(VERTICAL_PERSPECTIVE), METHOD_NAME_CODE(COLOMBIA_URBAN), // Other conversions METHOD_NAME_CODE(CHANGE_VERTICAL_UNIT), METHOD_NAME_CODE(HEIGHT_DEPTH_REVERSAL), @@ -926,6 +942,7 @@ static const struct ParamNameCode { PARAM_NAME_CODE(LATITUDE_STD_PARALLEL), PARAM_NAME_CODE(LONGITUDE_OF_ORIGIN), PARAM_NAME_CODE(ELLIPSOID_SCALE_FACTOR), + PARAM_NAME_CODE(PROJECTION_PLANE_ORIGIN_HEIGHT), // Parameters of transformations PARAM_NAME_CODE(SEMI_MAJOR_AXIS_DIFFERENCE), PARAM_NAME_CODE(FLATTENING_DIFFERENCE), diff --git a/include/proj/internal/esri_projection_mappings.hpp b/include/proj/internal/esri_projection_mappings.hpp index c230f26b..16cda552 100644 --- a/include/proj/internal/esri_projection_mappings.hpp +++ b/include/proj/internal/esri_projection_mappings.hpp @@ -920,6 +920,19 @@ static const ESRIParamMapping paramsESRI_Transverse_Cylindrical_Equal_Area[] = { EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, {nullptr, nullptr, 0, "0.0", false}}; +static const ESRIParamMapping paramsESRI_IGAC_Plano_Cartesiano[] = { + {"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}, + {"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, + EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false}, + {"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, + EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false}, + {"Height", EPSG_NAME_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT, + EPSG_CODE_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT, "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}, @@ -1082,6 +1095,8 @@ static const ESRIMethodMapping esriMappings[] = { EPSG_CODE_METHOD_MERCATOR_VARIANT_B, paramsESRI_Mercator_Variant_C}, {"Transverse_Cylindrical_Equal_Area", "Transverse Cylindrical Equal Area", 0, paramsESRI_Transverse_Cylindrical_Equal_Area}, + {"IGAC_Plano_Cartesiano", EPSG_NAME_METHOD_COLOMBIA_URBAN, + EPSG_CODE_METHOD_COLOMBIA_URBAN, paramsESRI_IGAC_Plano_Cartesiano}, }; // --------------------------------------------------------------------------- diff --git a/man/man1/cct.1 b/man/man1/cct.1 index 45780009..efb03def 100644 --- a/man/man1/cct.1 +++ b/man/man1/cct.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "CCT" "1" "Jul 1, 2020" "7.1.0" "PROJ" +.TH "CCT" "1" "Nov 01, 2020" "7.2.0" "PROJ" .SH NAME cct \- Coordinate Conversion and Transformation . @@ -33,7 +33,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .SH SYNOPSIS .INDENT 0.0 .INDENT 3.5 -\fBcct\fP [\fB\-cIostvz\fP [args]] \fI+opt[=arg]\fP … file … +\fBcct\fP [\fB\-cIostvz\fP [args]] \fI+opt[=arg]\fP ... file ... .UNINDENT .UNINDENT .SH DESCRIPTION @@ -52,10 +52,11 @@ Specify input columns for (up to) 4 input parameters. Defaults to 1,2,3,4. .INDENT 0.0 .TP .B \-d <n> -.UNINDENT -.sp -New in version 5.2.0: Specify the number of decimals in the output. +New in version 5.2.0. +.sp +Specify the number of decimals in the output. +.UNINDENT .INDENT 0.0 .TP .B \-I @@ -103,7 +104,7 @@ Usage varies with operation. \fBcct\fP is an acronym meaning \fICoordinate Conversion and Transformation\fP\&. .sp The acronym refers to definitions given in the OGC 08\-015r2/ISO\-19111 -standard “Geographical Information – Spatial Referencing by Coordinates”, +standard "Geographical Information \-\- Spatial Referencing by Coordinates", which defines two different classes of \fIcoordinate operations\fP: .sp \fICoordinate Conversions\fP, which are coordinate operations where input @@ -238,18 +239,18 @@ $ echo 12 56 100 2018.0 auxiliary data | cct +proj=merc .UNINDENT .SH BACKGROUND .sp -\fBcct\fP also refers to Carl Christian Tscherning (1942–2014), +\fBcct\fP also refers to Carl Christian Tscherning (1942\-\-2014), professor of Geodesy at the University of Copenhagen, mentor and advisor for a generation of Danish geodesists, colleague and collaborator for two generations of global geodesists, Secretary General for the -International Association of Geodesy, IAG (1995–2007), fellow of the +International Association of Geodesy, IAG (1995\-\-2007), fellow of the American Geophysical Union (1991), recipient of the IAG Levallois Medal (2007), the European Geosciences Union Vening Meinesz Medal (2008), and of numerous other honours. .sp \fIcct\fP, or Christian, as he was known to most of us, was recognized for his good mood, his sharp wit, his tireless work, and his great commitment to -the development of geodesy – both through his scientific contributions, +the development of geodesy \-\- both through his scientific contributions, comprising more than 250 publications, and by his mentoring and teaching of the next generations of geodesists. .sp diff --git a/man/man1/cs2cs.1 b/man/man1/cs2cs.1 index 8ff3cb0a..d4d65a00 100644 --- a/man/man1/cs2cs.1 +++ b/man/man1/cs2cs.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "CS2CS" "1" "Jul 1, 2020" "7.1.0" "PROJ" +.TH "CS2CS" "1" "Nov 01, 2020" "7.2.0" "PROJ" .SH NAME cs2cs \- Cartographic coordinate system filter . @@ -33,18 +33,45 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .SH SYNOPSIS .INDENT 0.0 .INDENT 3.5 -\fBcs2cs\fP [\fB\-eEfIlrstvwW\fP [args]] [\fI+opt[=arg]\fP …] [+to \fI+opt[=arg]\fP …] file … +\fBcs2cs\fP [\fB\-eEfIlrstvwW\fP [args]] [\fI+opt[=arg]\fP ...] [+to \fI+opt[=arg]\fP ...] file ... .UNINDENT .UNINDENT .sp or .INDENT 0.0 .INDENT 3.5 -\fBcs2cs\fP [\fB\-eEfIlrstvwW\fP [args]] {source_crs} {target_crs} file … +\fBcs2cs\fP [\fB\-eEfIlrstvwW\fP [args]] {source_crs} {target_crs} file ... .sp -where {source_crs} or {target_crs} is a PROJ string, a WKT string or a AUTHORITY:CODE -(where AUTHORITY is the name of a CRS authority and CODE the code of a CRS -found in the proj.db database), expressing a coordinate reference system. +where {source_crs} or {target_crs} is one of the possibilities accepted +by \fBproj_create()\fP, provided it expresses a CRS +.INDENT 0.0 +.IP \(bu 2 +a proj\-string, +.IP \(bu 2 +a WKT string, +.IP \(bu 2 +an object code (like "EPSG:4326", "urn:ogc:def:crs:EPSG::4326", +"urn:ogc:def:coordinateOperation:EPSG::1671"), +.IP \(bu 2 +an Object name. e.g "WGS 84", "WGS 84 / UTM zone 31N". In that case as +uniqueness is not guaranteed, heuristics are applied to determine the appropriate best match. +.IP \(bu 2 +a OGC URN combining references for compound coordinate reference systems +(e.g "\fI\%urn:ogc:def:crs,crs:EPSG::2393,crs:EPSG::5717\fP" or custom abbreviated +syntax "EPSG:2393+5717"), +.IP \(bu 2 +a OGC URN combining references for references for projected or derived CRSs +e.g. for Projected 3D CRS "UTM zone 31N / WGS 84 (3D)": +"\fI\%urn:ogc:def:crs,crs:EPSG::4979,cs:PROJ::ENh,coordinateOperation:EPSG::16031\fP" +(\fIadded in 6.2\fP) +.IP \(bu 2 +a OGC URN combining references for concatenated operations +(e.g. "\fI\%urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618\fP") +.IP \(bu 2 +a PROJJSON string. The jsonschema is at \fI\%https://proj.org/schemas/v0.2/projjson.schema.json\fP (\fIadded in 6.2\fP) +.IP \(bu 2 +a compound CRS made from two object names separated with " + ". e.g. "WGS 84 + EGM96 height" (\fIadded in 7.1\fP) +.UNINDENT .sp New in version 6.0.0. @@ -82,10 +109,11 @@ ASCII input only. (# is the default value). .INDENT 0.0 .TP .B \-d <n> -.UNINDENT -.sp -New in version 5.2.0: Specify the number of decimals in the output. +New in version 5.2.0. +.sp +Specify the number of decimals in the output. +.UNINDENT .INDENT 0.0 .TP .B \-e <string> @@ -250,7 +278,7 @@ The x\-y output data will appear as three lines of: .fi .UNINDENT .UNINDENT -.SS Using EPSG codes +.SS Using EPSG CRS codes .sp Transforming from WGS 84 latitude/longitude (in that order) to UTM Zone 31N/WGS 84 .INDENT 0.0 @@ -277,6 +305,32 @@ outputs .fi .UNINDENT .UNINDENT +.SS Using EPSG CRS names +.sp +Transforming from WGS 84 latitude/longitude (in that order) with EGM96 height to +UTM Zone 31N/WGS 84 with WGS84 ellipsoidal height +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +echo 45 2 0 | cs2cs "WGS 84 + EGM96 height" "WGS 84 / UTM zone 31N" +.ft P +.fi +.UNINDENT +.UNINDENT +.sp +outputs +.INDENT 0.0 +.INDENT 3.5 +.sp +.nf +.ft C +421184.70 4983436.77 50.69 +.ft P +.fi +.UNINDENT +.UNINDENT .SH SEE ALSO .sp \fBproj(1)\fP, \fBcct(1)\fP, \fBgeod(1)\fP, \fBgie(1)\fP, \fBprojinfo(1)\fP, \fBprojsync(1)\fP diff --git a/man/man1/geod.1 b/man/man1/geod.1 index 5ba4e995..828919a8 100644 --- a/man/man1/geod.1 +++ b/man/man1/geod.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "GEOD" "1" "Jul 1, 2020" "7.1.0" "PROJ" +.TH "GEOD" "1" "Nov 01, 2020" "7.2.0" "PROJ" .SH NAME geod \- Geodesic computations . @@ -33,9 +33,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .SH SYNOPSIS .INDENT 0.0 .INDENT 3.5 -\fBgeod\fP \fI+ellps=<ellipse>\fP [\fB\-afFIlptwW\fP [args]] [\fI+opt[=arg]\fP …] file … +\fBgeod\fP \fI+ellps=<ellipse>\fP [\fB\-afFIlptwW\fP [args]] [\fI+opt[=arg]\fP ...] file ... .sp -\fBinvgeod\fP \fI+ellps=<ellipse>\fP [\fB\-afFIlptwW\fP [args]] [\fI+opt[=arg]\fP …] file … +\fBinvgeod\fP \fI+ellps=<ellipse>\fP [\fB\-afFIlptwW\fP [args]] [\fI+opt[=arg]\fP ...] file ... .UNINDENT .UNINDENT .SH DESCRIPTION @@ -143,12 +143,12 @@ azimuthal data must be in decimal degrees or DMS format and input distance data must be in units consistent with the ellipsoid major axis or sphere radius units. The latitude must lie in the range [\-90d,90d]. Output geographic coordinates will be -in DMS (if the \fI\%\-f\fP switch is not employed) to 0.001” with trailing, +in DMS (if the \fI\%\-f\fP switch is not employed) to 0.001" with trailing, zero\-valued minute\-second fields deleted. Output distance data will be in the same units as the ellipsoid or sphere radius. .sp -The Earth’s ellipsoidal figure may be selected in the same manner +The Earth\(aqs ellipsoidal figure may be selected in the same manner as program \fBproj\fP by using \fI+ellps=\fP, \fI+a=\fP, \fI+es=\fP, etc. .sp \fBgeod\fP may also be used to determine intermediate points along @@ -201,7 +201,7 @@ where the first two values are the azimuth from Boston to Portland, the back azimuth from Portland to Boston followed by the distance. .sp An example of forward geodesic use is to use the Boston location -and determine Portland’s location by azimuth and distance: +and determine Portland\(aqs location by azimuth and distance: .INDENT 0.0 .INDENT 3.5 .sp diff --git a/man/man1/gie.1 b/man/man1/gie.1 index 6cef00e7..2b5e4fa3 100644 --- a/man/man1/gie.1 +++ b/man/man1/gie.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "GIE" "1" "Jul 1, 2020" "7.1.0" "PROJ" +.TH "GIE" "1" "Nov 01, 2020" "7.2.0" "PROJ" .SH NAME gie \- The Geospatial Integrity Investigation Environment . @@ -209,7 +209,7 @@ Many coordinates can be expected for one \fI\%operation\fP\&. For each See \fI\%operation\fP for an example. .sp In addition to expecting a coordinate it is also possible to expect a -PROJ error code in case an operation can’t be created. This is useful when +PROJ error code in case an operation can\(aqt be created. This is useful when testing that errors are caught and handled correctly. Below is an example of that tests that the pipeline operator fails correctly when a non\-invertible pipeline is constructed. @@ -267,7 +267,7 @@ units. Do a roundtrip test of an operation. \fI\%roundtrip\fP needs a \fI\%operation\fP and a \fI\%accept\fP command to function. The accepted coordinate is passed to the operation first in -it’s forward mode, then the output from the forward operation is passed +it\(aqs forward mode, then the output from the forward operation is passed back to the inverse operation. This procedure is done \fBn\fP times. If the resulting coordinate is within the set tolerance of the initial coordinate, the test is passed. @@ -343,7 +343,7 @@ expect 12 55 0 0 .UNINDENT .UNINDENT .sp -The default direction is “forward”. +The default direction is "forward". .UNINDENT .INDENT 0.0 .TP @@ -474,21 +474,21 @@ expect 173 \-45 .UNINDENT .SH BACKGROUND .sp -More importantly than being an acronym for “Geospatial Integrity Investigation -Environment”, gie were also the initials, user id, and USGS email address of -Gerald Ian Evenden (1935–2016), the geospatial visionary, who, already in the +More importantly than being an acronym for "Geospatial Integrity Investigation +Environment", gie were also the initials, user id, and USGS email address of +Gerald Ian Evenden (1935\-\-2016), the geospatial visionary, who, already in the 1980s, started what was to become the PROJ of today. .sp -Gerald’s clear vision was that map projections are \fIjust special functions\fP\&. +Gerald\(aqs clear vision was that map projections are \fIjust special functions\fP\&. Some of them rather complex, most of them of two variables, but all of them \fIjust special functions\fP, and not particularly more special than the \fBsin()\fP, \fBcos()\fP, \fBtan()\fP, and \fBhypot()\fP already available in the C standard library. .sp And hence, according to Gerald, \fIthey should not be particularly much harder -to use\fP, for a programmer, than the \fBsin()\fP’s, \fBtan()\fP’s and -\fBhypot()\fP’s so readily available. +to use\fP, for a programmer, than the \fBsin()\fP\(aqs, \fBtan()\fP\(aqs and +\fBhypot()\fP\(aqs so readily available. .sp -Gerald’s ingenuity also showed in the implementation of the vision, where +Gerald\(aqs ingenuity also showed in the implementation of the vision, where he devised a comprehensive, yet simple, system of key\-value pairs for parameterising a map projection, and the highly flexible \fBPJ\fP struct, storing run\-time compiled versions of those key\-value pairs, hence making a map @@ -497,15 +497,15 @@ call like \fBhypot(x,y)\fP\&. .sp While today, we may have more formally well defined metadata systems (most prominent the OGC WKT2 representation), nothing comes close being as easily -readable (“human compatible”) as Gerald’s key\-value system. This system in -particular, and the PROJ system in general, was Gerald’s great gift to anyone +readable ("human compatible") as Gerald\(aqs key\-value system. This system in +particular, and the PROJ system in general, was Gerald\(aqs great gift to anyone using and/or communicating about geodata. .sp It is only reasonable to name a program, keeping an eye on the integrity of the PROJ system, in honour of Gerald. .sp So in honour, and hopefully also in the spirit, of Gerald Ian Evenden -(1935–2016), this is the Geospatial Integrity Investigation Environment. +(1935\-\-2016), this is the Geospatial Integrity Investigation Environment. .SH SEE ALSO .sp \fBproj(1)\fP, \fBcs2cs(1)\fP, \fBcct(1)\fP, \fBgeod(1)\fP, \fBprojinfo(1)\fP, \fBprojsync(1)\fP diff --git a/man/man1/proj.1 b/man/man1/proj.1 index 7927c35f..bb0a1917 100644 --- a/man/man1/proj.1 +++ b/man/man1/proj.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "PROJ" "1" "Jul 1, 2020" "7.1.0" "PROJ" +.TH "PROJ" "1" "Nov 01, 2020" "7.2.0" "PROJ" .SH NAME proj \- Cartographic projection filter . @@ -33,9 +33,9 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .SH SYNOPSIS .INDENT 0.0 .INDENT 3.5 -\fBproj\fP [\fB\-beEfiIlmorsStTvVwW\fP] [args]] [\fI+opt[=arg]\fP …] file … +\fBproj\fP [\fB\-beEfiIlmorsStTvVwW\fP] [args]] [\fI+opt[=arg]\fP ...] file ... .sp -\fBinvproj\fP [\fB\-beEfiIlmorsStTvVwW\fP] [args]] [\fI+opt[=arg]\fP …] file … +\fBinvproj\fP [\fB\-beEfiIlmorsStTvVwW\fP] [args]] [\fI+opt[=arg]\fP ...] file ... .UNINDENT .UNINDENT .SH DESCRIPTION @@ -211,7 +211,7 @@ portions of the input line are appended to the output line. Input geographic data (longitude and latitude) must be in DMS or decimal degrees format and input cartesian data must be in units consistent with the ellipsoid major axis or sphere radius units. Output geographic coordinates will be in DMS (if the -\fB\-w\fP switch is not employed) and precise to 0.001” with trailing, zero\-valued +\fB\-w\fP switch is not employed) and precise to 0.001" with trailing, zero\-valued minute\-second fields deleted. .SH EXAMPLE .sp diff --git a/man/man1/projinfo.1 b/man/man1/projinfo.1 index 829c1bd1..8eca3ad6 100644 --- a/man/man1/projinfo.1 +++ b/man/man1/projinfo.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "PROJINFO" "1" "Jul 1, 2020" "7.1.0" "PROJ" +.TH "PROJINFO" "1" "Nov 01, 2020" "7.2.0" "PROJ" .SH NAME projinfo \- Geodetic object and coordinate operation queries . @@ -36,55 +36,56 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .nf \fBprojinfo\fP .in +2 -[\-o formats] [\-k crs|operation|datum|ellipsoid] [–summary] [\-q] -[[–area name_or_code] | [–bbox west_long,south_lat,east_long,north_lat]] -[–spatial\-test contains|intersects] -[–crs\-extent\-use none|both|intersection|smallest] -[–grid\-check none|discard_missing|sort|known_available] -[–pivot\-crs always|if_no_direct_transformation|never|{auth:code[,auth:code]*}] -[–show\-superseded] [–hide\-ballpark] -[–boundcrs\-to\-wgs84] -[–main\-db\-path path] [–aux\-db\-path path]* -[–identify] [–3d] -[–c\-ify] [–single\-line] -–searchpaths | –remote\-data | {object_definition} | +[\-o formats] [\-k crs|operation|datum|ellipsoid] [\-\-summary] [\-q] +[[\-\-area name_or_code] | [\-\-bbox west_long,south_lat,east_long,north_lat]] +[\-\-spatial\-test contains|intersects] +[\-\-crs\-extent\-use none|both|intersection|smallest] +[\-\-grid\-check none|discard_missing|sort|known_available] +[\-\-pivot\-crs always|if_no_direct_transformation|never|{auth:code[,auth:code]*}] +[\-\-show\-superseded] [\-\-hide\-ballpark] +[\-\-boundcrs\-to\-wgs84] +[\-\-main\-db\-path path] [\-\-aux\-db\-path path]* +[\-\-identify] [\-\-3d] +[\-\-c\-ify] [\-\-single\-line] +\-\-searchpaths | \-\-remote\-data | {object_definition} | {object_reference} | (\-s {srs_def} \-t {srs_def}) .in -2 .fi .sp .sp -where {object_definition} or {srs_def} is +where {object_definition} or {srs_def} is one of the possibilities accepted +by \fBproj_create()\fP .INDENT 0.0 .IP \(bu 2 a proj\-string, .IP \(bu 2 a WKT string, .IP \(bu 2 -an object code (like “EPSG:4326”, “urn:ogc:def:crs:EPSG::4326”, -“urn:ogc:def:coordinateOperation:EPSG::1671”), +an object code (like "EPSG:4326", "urn:ogc:def:crs:EPSG::4326", +"urn:ogc:def:coordinateOperation:EPSG::1671"), .IP \(bu 2 -an Object name. e.g “WGS 84”, “WGS 84 / UTM zone 31N”. In that case as +an Object name. e.g "WGS 84", "WGS 84 / UTM zone 31N". In that case as uniqueness is not guaranteed, heuristics are applied to determine the appropriate best match. .IP \(bu 2 a OGC URN combining references for compound coordinate reference systems -(e.g “\fI\%urn:ogc:def:crs,crs:EPSG::2393,crs:EPSG::5717\fP” or custom abbreviated -syntax “EPSG:2393+5717”), +(e.g "\fI\%urn:ogc:def:crs,crs:EPSG::2393,crs:EPSG::5717\fP" or custom abbreviated +syntax "EPSG:2393+5717"), .IP \(bu 2 a OGC URN combining references for references for projected or derived CRSs -e.g. for Projected 3D CRS “UTM zone 31N / WGS 84 (3D)”: -“\fI\%urn:ogc:def:crs,crs:EPSG::4979,cs:PROJ::ENh,coordinateOperation:EPSG::16031\fP” +e.g. for Projected 3D CRS "UTM zone 31N / WGS 84 (3D)": +"\fI\%urn:ogc:def:crs,crs:EPSG::4979,cs:PROJ::ENh,coordinateOperation:EPSG::16031\fP" (\fIadded in 6.2\fP) .IP \(bu 2 a OGC URN combining references for concatenated operations -(e.g. “\fI\%urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618\fP”) +(e.g. "\fI\%urn:ogc:def:coordinateOperation,coordinateOperation:EPSG::3895,coordinateOperation:EPSG::1618\fP") .IP \(bu 2 -a PROJJSON string. The jsonschema is at \fI\%https://proj.org/schemas/v0.1/projjson.schema.json\fP (\fIadded in 6.2\fP) +a PROJJSON string. The jsonschema is at \fI\%https://proj.org/schemas/v0.2/projjson.schema.json\fP (\fIadded in 6.2\fP) .IP \(bu 2 -a compound CRS made from two object names separated with ” + “. e.g. “WGS 84 + EGM96 height” (\fIadded in 7.1\fP) +a compound CRS made from two object names separated with " + ". e.g. "WGS 84 + EGM96 height" (\fIadded in 7.1\fP) .UNINDENT .sp -{object_reference} is a filename preceded by the ‘@’ character. The +{object_reference} is a filename preceded by the \(aq@\(aq character. The file referenced by the {object_reference} must contain a valid {object_definition}. .UNINDENT @@ -120,7 +121,7 @@ WKT2_2019 was previously called WKT2_2018. \fBNOTE:\fP .INDENT 7.0 .INDENT 3.5 -Before PROJ 6.3.0, WKT1:GDAL was implicitly calling –boundcrs\-to\-wgs84. +Before PROJ 6.3.0, WKT1:GDAL was implicitly calling \-\-boundcrs\-to\-wgs84. This is no longer the case. .UNINDENT .UNINDENT @@ -159,7 +160,7 @@ potentially compatible of being piped in other utilities. .B \-\-area name_or_code Specify an area of interest to restrict the results when researching coordinate operations between 2 CRS. The area of interest can be specified either -as a name (e.g “Denmark \- onshore”) or a AUTHORITY:CODE (EPSG:3237) +as a name (e.g "Denmark \- onshore") or a AUTHORITY:CODE (EPSG:3237) This option is exclusive of \fI\%\-\-bbox\fP\&. .sp \fBNOTE:\fP @@ -348,7 +349,7 @@ with a likelihood of 70% to EPSG:32631 New in version 6.3. .sp -“Promote” the CRS(s) to their 3D version. In the context of researching +"Promote" the CRS(s) to their 3D version. In the context of researching available coordinate transformations, explicitly specifying this option is not necessary, because when one of the source or target CRS has a vertical component but not the other one, the one that has no vertical component is @@ -364,8 +365,8 @@ is easy to put those strings in C/C++ code .INDENT 0.0 .TP .B \-\-single\-line -Output WKT or PROJJSON strings on a single line, instead of multiple intended lines by -default. +Output PROJ, WKT or PROJJSON strings on a single line, instead of multiple +indented lines by default. .UNINDENT .INDENT 0.0 .TP diff --git a/man/man1/projsync.1 b/man/man1/projsync.1 index 14e96fb9..9e3fbb9b 100644 --- a/man/man1/projsync.1 +++ b/man/man1/projsync.1 @@ -1,6 +1,6 @@ .\" Man page generated from reStructuredText. . -.TH "PROJSYNC" "1" "Ju1 1, 2020" "7.1.0" "PROJ" +.TH "PROJSYNC" "1" "Nov 01, 2020" "7.2.0" "PROJ" .SH NAME projsync \- Downloading tool of resource files . @@ -36,15 +36,15 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]] .nf \fBprojsync\fP .in +2 -[–endpoint URL] -[–local\-geojson\-file FILENAME] -([–user\-writable\-directory] | [–system\-directory] | [–target\-dir DIRNAME]) -[–bbox west_long,south_lat,east_long,north_lat] -[–spatial\-test contains|intersects] -[–source\-id ID] [–area\-of\-use NAME] -[–file NAME] -[–all] [–exclude\-world\-coverage] -[–quiet] [–dry\-run] [–list\-files] +[\-\-endpoint URL] +[\-\-local\-geojson\-file FILENAME] +([\-\-user\-writable\-directory] | [\-\-system\-directory] | [\-\-target\-dir DIRNAME]) +[\-\-bbox west_long,south_lat,east_long,north_lat] +[\-\-spatial\-test contains|intersects] +[\-\-source\-id ID] [\-\-area\-of\-use NAME] +[\-\-file NAME] +[\-\-all] [\-\-exclude\-world\-coverage] +[\-\-quiet] [\-\-dry\-run] [\-\-list\-files] .in -2 .fi .sp diff --git a/scripts/build_esri_projection_mapping.py b/scripts/build_esri_projection_mapping.py index 12eeb852..00a49c68 100644 --- a/scripts/build_esri_projection_mapping.py +++ b/scripts/build_esri_projection_mapping.py @@ -687,6 +687,16 @@ config_str = """ - Scale_Factor: EPSG_NAME_PARAMETER_SCALE_FACTOR_AT_NATURAL_ORIGIN - Latitude_Of_Origin: EPSG_NAME_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN +- IGAC_Plano_Cartesiano: + WKT2_name: EPSG_NAME_METHOD_COLOMBIA_URBAN + 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 + - Height: EPSG_NAME_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT + + # Missing/unclear mappings # Hammer_Aitoff: possibly hammer? @@ -705,12 +715,10 @@ config_str = """ # The following methods are not currently possible in PROJ: # Ney_Modified_Conic -# IGAC_Plano_Cartesiano # Fuller # Berghaus_Star # Cube # Robinson_ARC_INFO -# Local # Equidistant_Cylindrical_Auxiliary_Sphere # Aspect_Adaptive_Cylindrical # Mollweide_Auxiliary_Sphere diff --git a/scripts/fix_typos.sh b/scripts/fix_typos.sh index 152ba550..ceb5ad6f 100755 --- a/scripts/fix_typos.sh +++ b/scripts/fix_typos.sh @@ -36,7 +36,7 @@ if ! test -d fix_typos; then git clone https://github.com/rouault/codespell (cd codespell && git checkout gdal_improvements) # Aggregate base dictionary + QGIS one + Debian Lintian one - curl https://raw.githubusercontent.com/qgis/QGIS/master/scripts/spell_check/spelling.dat | sed "s/:/->/" | grep -v "colour->" | grep -v "colours->" > qgis.txt + curl https://raw.githubusercontent.com/qgis/QGIS/master/scripts/spell_check/spelling.dat | sed "s/:/->/" | sed "s/:%//" | grep -v "colour->" | grep -v "colours->" > qgis.txt curl https://salsa.debian.org/lintian/lintian/-/raw/master/data/spelling/corrections | grep "||" | grep -v "#" | sed "s/||/->/" > debian.txt cat codespell/data/dictionary.txt qgis.txt debian.txt | awk 'NF' > gdal_dict.txt echo "difered->deferred" >> gdal_dict.txt diff --git a/scripts/grid_checks.py b/scripts/grid_checks.py index 2a49e9a1..556ed326 100755 --- a/scripts/grid_checks.py +++ b/scripts/grid_checks.py @@ -30,7 +30,6 @@ ############################################################################### import argparse -import csv import fnmatch import os import sqlite3 @@ -38,8 +37,8 @@ import sqlite3 parser = argparse.ArgumentParser(description='Check database and PROJ-data consistency.') parser.add_argument('path_to_proj_db', help='Full pathname to proj.db') -parser.add_argument('path_to_proj_datumgrid', - help='Full pathname to the root of the proj_datumgrid_geotiff git repository') +parser.add_argument('path_to_proj_data', + help='Full pathname to the root of the proj_data_geotiff git repository') group = parser.add_mutually_exclusive_group(required=True) group.add_argument('--not-in-grid-alternatives', dest='not_in_grid_alternatives', action='store_true', @@ -52,7 +51,7 @@ group.add_argument('--not-in-db', dest='not_in_db', action='store_true', args = parser.parse_args() dbname = args.path_to_proj_db -proj_datumgrid = args.path_to_proj_datumgrid +proj_data = args.path_to_proj_data if args.not_in_grid_alternatives: conn = sqlite3.connect(dbname) @@ -67,7 +66,7 @@ if args.not_in_grid_alternatives: elif args.not_in_proj_data: set_grids = set() - for root, dirnames, filenames in os.walk(proj_datumgrid): + for root, dirnames, filenames in os.walk(proj_data): for filename in fnmatch.filter(filenames, '*'): set_grids.add(filename) @@ -80,7 +79,7 @@ elif args.not_in_proj_data: elif args.not_in_db: set_grids = set() - for root, dirnames, filenames in os.walk(proj_datumgrid): + for root, dirnames, filenames in os.walk(proj_data): if '.git' in root: continue for filename in fnmatch.filter(filenames, '*'): diff --git a/src/4D_api.cpp b/src/4D_api.cpp index 0c26840d..86c0e071 100644 --- a/src/4D_api.cpp +++ b/src/4D_api.cpp @@ -977,9 +977,7 @@ static void reproject_bbox(PJ* pjGeogToCrs, maxx = -maxx; maxy = -maxy; - std::vector<double> x, y; - x.resize(21 * 4); - y.resize(21 * 4); + std::vector<double> x(21 * 4), y(21 * 4); for( int j = 0; j <= 20; j++ ) { x[j] = west_lon + j * (east_lon - west_lon) / 20; diff --git a/src/Makefile.am b/src/Makefile.am index 68aeadf2..5b36c8bd 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -52,7 +52,7 @@ geodtest_LDADD = libproj.la lib_LTLIBRARIES = libproj.la -libproj_la_LDFLAGS = -no-undefined -version-info 20:0:1 +libproj_la_LDFLAGS = -no-undefined -version-info 21:0:2 libproj_la_LIBADD = @SQLITE3_LIBS@ @TIFF_LIBS@ @CURL_LIBS@ libproj_la_SOURCES = \ @@ -180,6 +180,7 @@ libproj_la_SOURCES = \ projections/natearth2.cpp \ projections/calcofi.cpp \ projections/eqearth.cpp \ + projections/col_urban.cpp \ \ conversions/axisswap.cpp \ conversions/cart.cpp \ diff --git a/src/apps/projsync.cpp b/src/apps/projsync.cpp index 8e6ac96b..7f3d5e56 100644 --- a/src/apps/projsync.cpp +++ b/src/apps/projsync.cpp @@ -238,7 +238,7 @@ int main(int argc, char *argv[]) { endpoint.resize(endpoint.size() - 1); } - if (!quiet) { + if (!quiet && !listFiles) { std::cout << "Downloading from " << endpoint << " into " << targetDir << std::endl; } @@ -344,12 +344,6 @@ int main(int argc, char *argv[]) { } } - if (listFiles) { - std::cout << name << "," << area_of_use << "," << source_id - << "," << file_size << std::endl; - continue; - } - const bool matchSourceId = queryAll || queriedSourceId.empty() || source_id.find(queriedSourceId) != std::string::npos; @@ -479,7 +473,14 @@ int main(int argc, char *argv[]) { } while (false); } - if (matchFile & matchSourceId && matchAreaOfUse && matchBbox) { + if (matchFile && matchSourceId && matchAreaOfUse && matchBbox) { + + if (listFiles) { + std::cout << name << "," << area_of_use << "," << source_id + << "," << file_size << std::endl; + continue; + } + const std::string resource_url(endpoint + '/' + name); if (proj_is_download_needed(ctx, resource_url.c_str(), false)) { total_size_to_download += file_size; @@ -493,7 +494,7 @@ int main(int argc, char *argv[]) { } } - if (!quiet && total_size_to_download > 0) { + if (!quiet && !listFiles && total_size_to_download > 0) { if (total_size_to_download > 1024 * 1024) std::cout << "Total size to download: " << total_size_to_download / (1024 * 1024) << " MB" diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp index 8d77437a..90a414c6 100644 --- a/src/iso19111/c_api.cpp +++ b/src/iso19111/c_api.cpp @@ -1032,7 +1032,7 @@ PJ_OBJ_LIST *proj_create_from_name(PJ_CONTEXT *ctx, const char *auth_name, size_t limitResultCount, const char *const *options) { SANITIZE_CTX(ctx); - if (!searchedName || (types != nullptr && typesCount <= 0) || + if (!searchedName || (types != nullptr && typesCount == 0) || (types == nullptr && typesCount > 0)) { proj_log_error(ctx, __FUNCTION__, "invalid input"); return nullptr; @@ -2050,6 +2050,8 @@ PJ *proj_get_ellipsoid(PJ_CONTEXT *ctx, const PJ *obj) { /** \brief Get the horizontal datum from a CRS * + * This function may return a Datum or DatumEnsemble object. + * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. @@ -4438,8 +4440,9 @@ PJ *proj_create_cartesian_2D_cs(PJ_CONTEXT *ctx, PJ_CARTESIAN_CS_2D_TYPE type, * * @param ctx PROJ context, or NULL for default context * @param type Coordinate system type. - * @param unit_name Unit name. - * @param unit_conv_factor Unit conversion factor to SI. + * @param unit_name Name of the angular units. Or NULL for Degree + * @param unit_conv_factor Conversion factor from the angular unit to radian. + * Or 0 for Degree if unit_name == NULL. Otherwise should be not NULL * * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. @@ -4478,13 +4481,17 @@ PJ *proj_create_ellipsoidal_2D_cs(PJ_CONTEXT *ctx, * * @param ctx PROJ context, or NULL for default context * @param type Coordinate system type. - * @param horizontal_angular_unit_name Horizontal angular unit name. - * @param horizontal_angular_unit_conv_factor Horizontal angular unit conversion - * factor to SI. - * @param vertical_linear_unit_name Vertical linear unit name. + * @param horizontal_angular_unit_name Name of the angular units. Or NULL for + * Degree. + * @param horizontal_angular_unit_conv_factor Conversion factor from the angular + * unit to radian. Or 0 for Degree if horizontal_angular_unit_name == NULL. + * Otherwise should be not NULL + * @param vertical_linear_unit_name Vertical linear unit name. Or NULL for + * Metre. * @param vertical_linear_unit_conv_factor Vertical linear unit conversion - * factor to SI. - * + * factor to metre. Or 0 for Metre if vertical_linear_unit_name == NULL. + * Otherwise should be not NULL + * @return Object that must be unreferenced with * proj_destroy(), or NULL in case of error. * @since 6.3 @@ -7871,6 +7878,7 @@ proj_create_operations(PJ_CONTEXT *ctx, const PJ *source_crs, * @since 7.1 */ int proj_get_suggested_operation(PJ_CONTEXT *ctx, PJ_OBJ_LIST *operations, + // cppcheck-suppress passedByValue PJ_DIRECTION direction, PJ_COORD coord) { SANITIZE_CTX(ctx); auto opList = dynamic_cast<PJ_OPERATION_LIST *>(operations); @@ -7986,6 +7994,9 @@ double proj_coordoperation_get_accuracy(PJ_CONTEXT *ctx, /** \brief Returns the datum of a SingleCRS. * + * If that function returns NULL, @see proj_crs_get_datum_ensemble() to + * potentially get a DatumEnsemble instead. + * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. @@ -8017,6 +8028,9 @@ PJ *proj_crs_get_datum(PJ_CONTEXT *ctx, const PJ *crs) { /** \brief Returns the datum ensemble of a SingleCRS. * + * If that function returns NULL, @see proj_crs_get_datum() to + * potentially get a Datum instead. + * * The returned object must be unreferenced with proj_destroy() after * use. * It should be used by at most one thread at a time. diff --git a/src/iso19111/coordinateoperation.cpp b/src/iso19111/coordinateoperation.cpp index 82ec4f30..e9d73f52 100644 --- a/src/iso19111/coordinateoperation.cpp +++ b/src/iso19111/coordinateoperation.cpp @@ -8836,11 +8836,16 @@ createSimilarPropertiesTransformation(TransformationNNPtr obj) { // The domain(s) are unchanged addDomains(map, obj.get()); - std::string forwardName = obj->nameStr(); + const std::string &forwardName = obj->nameStr(); if (!forwardName.empty()) { map.set(common::IdentifiedObject::NAME_KEY, forwardName); } + const std::string &remarks = obj->remarks(); + if (!remarks.empty()) { + map.set(common::IdentifiedObject::REMARKS_KEY, remarks); + } + addModifiedIdentifier(map, obj.get(), false, true); return map; @@ -10221,15 +10226,10 @@ ConcatenatedOperationNNPtr ConcatenatedOperation::create( auto subOpInterpCRS = operationsIn[i]->interpolationCRS(); if (interpolationCRS == nullptr) interpolationCRS = subOpInterpCRS; - else if ((subOpInterpCRS == nullptr && - interpolationCRS != nullptr) || - (subOpInterpCRS != nullptr && - interpolationCRS == nullptr) || - (subOpInterpCRS != nullptr && - interpolationCRS != nullptr && - !(subOpInterpCRS->isEquivalentTo( - interpolationCRS.get(), - util::IComparable::Criterion::EQUIVALENT)))) { + else if (subOpInterpCRS == nullptr || + !(subOpInterpCRS->isEquivalentTo( + interpolationCRS.get(), + util::IComparable::Criterion::EQUIVALENT))) { interpolationCRS = nullptr; interpolationCRSValid = false; } @@ -10604,7 +10604,7 @@ void ConcatenatedOperation::_exportToWKT(io::WKTFormatter *formatter) const { !identifiers().empty()); formatter->addQuotedString(nameStr()); - if (isWKT2 && formatter->use2019Keywords()) { + if (formatter->use2019Keywords()) { const auto &version = operationVersion(); if (version.has_value()) { formatter->startNode(io::WKTConstants::VERSION, false); @@ -11453,7 +11453,7 @@ struct SortFunction { // "Amersfoort to WGS 84 (3)", which is probably a better guess. // Except for French NTF (Paris) to NTF, where the (1) conversion - // should be preferred because in the remarks of (2), it is mentionned + // should be preferred because in the remarks of (2), it is mentioned // OGP prefers value from IGN Paris (code 1467)... if (a_name.find("NTF (Paris) to NTF (1)") != std::string::npos && b_name.find("NTF (Paris) to NTF (2)") != std::string::npos) { @@ -12620,6 +12620,55 @@ createGeodToGeodPROJBased(const crs::CRSNNPtr &geodSrc, // --------------------------------------------------------------------------- +static std::string +getRemarks(const std::vector<operation::CoordinateOperationNNPtr> &ops) { + std::string remarks; + for (const auto &op : ops) { + const auto &opRemarks = op->remarks(); + if (!opRemarks.empty()) { + if (!remarks.empty()) { + remarks += '\n'; + } + + std::string opName(op->nameStr()); + if (starts_with(opName, INVERSE_OF)) { + opName = opName.substr(INVERSE_OF.size()); + } + + remarks += "For "; + remarks += opName; + + const auto &ids = op->identifiers(); + if (!ids.empty()) { + std::string authority(*ids.front()->codeSpace()); + if (starts_with(authority, "INVERSE(") && + authority.back() == ')') { + authority = authority.substr(strlen("INVERSE("), + authority.size() - 1 - + strlen("INVERSE(")); + } + if (starts_with(authority, "DERIVED_FROM(") && + authority.back() == ')') { + authority = authority.substr(strlen("DERIVED_FROM("), + authority.size() - 1 - + strlen("DERIVED_FROM(")); + } + + remarks += " ("; + remarks += authority; + remarks += ':'; + remarks += ids.front()->code(); + remarks += ')'; + } + remarks += ": "; + remarks += opRemarks; + } + } + return remarks; +} + +// --------------------------------------------------------------------------- + static CoordinateOperationNNPtr createHorizVerticalPROJBased( const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS, const operation::CoordinateOperationNNPtr &horizTransform, @@ -12645,6 +12694,10 @@ static CoordinateOperationNNPtr createHorizVerticalPROJBased( properties.set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY, NN_NO_CHECK(extent)); } + const auto &remarks = verticalTransform->remarks(); + if (!remarks.empty()) { + properties.set(common::IdentifiedObject::REMARKS_KEY, remarks); + } return createPROJBased( properties, exportable, sourceCRS, targetCRS, nullptr, verticalTransform->coordinateOperationAccuracies(), @@ -12669,6 +12722,11 @@ static CoordinateOperationNNPtr createHorizVerticalPROJBased( NN_NO_CHECK(extent)); } + const auto remarks = getRemarks(ops); + if (!remarks.empty()) { + properties.set(common::IdentifiedObject::REMARKS_KEY, remarks); + } + std::vector<metadata::PositionalAccuracyNNPtr> accuracies; const double accuracy = getAccuracy(ops); if (accuracy >= 0.0) { @@ -12729,6 +12787,11 @@ static CoordinateOperationNNPtr createHorizVerticalHorizPROJBased( NN_NO_CHECK(extent)); } + const auto remarks = getRemarks(ops); + if (!remarks.empty()) { + properties.set(common::IdentifiedObject::REMARKS_KEY, remarks); + } + std::vector<metadata::PositionalAccuracyNNPtr> accuracies; const double accuracy = getAccuracy(ops); if (accuracy >= 0.0) { @@ -14463,7 +14526,7 @@ void CoordinateOperationFactory::Private::createOperationsBoundToGeog( hubSrcGeog->coordinateSystem()->axisList(); const auto &targetAxisList = geogDst->coordinateSystem()->axisList(); - if (hubAxisList.size() == 3 && hubAxisList.size() == 3 && + if (hubAxisList.size() == 3 && targetAxisList.size() == 3 && !hubAxisList[2]->_isEquivalentTo( targetAxisList[2].get(), util::IComparable::Criterion::EQUIVALENT)) { diff --git a/src/iso19111/factory.cpp b/src/iso19111/factory.cpp index 08b627b2..5d02aeea 100644 --- a/src/iso19111/factory.cpp +++ b/src/iso19111/factory.cpp @@ -5703,9 +5703,9 @@ AuthorityFactory::createObjectsFromName( //! @cond Doxygen_Suppress /** \brief Return a list of objects, identifier by their name, with the name - * on which the match occured. + * on which the match occurred. * - * The name on which the match occured might be different from the object name, + * The name on which the match occurred might be different from the object name, * if the match has been done on an alias name of that object. * * @param searchedName Searched name. Must be at least 2 character long. diff --git a/src/lib_proj.cmake b/src/lib_proj.cmake index 1cd7f421..67bc1f4e 100644 --- a/src/lib_proj.cmake +++ b/src/lib_proj.cmake @@ -164,6 +164,7 @@ set(SRC_LIBPROJ_PROJECTIONS projections/natearth2.cpp projections/calcofi.cpp projections/eqearth.cpp + projections/col_urban.cpp ) set(SRC_LIBPROJ_CONVERSIONS diff --git a/src/pj_list.h b/src/pj_list.h index 5b91af9b..bcdc189e 100644 --- a/src/pj_list.h +++ b/src/pj_list.h @@ -30,6 +30,7 @@ PROJ_HEAD(ccon, "Central Conic") PROJ_HEAD(cea, "Equal Area Cylindrical") PROJ_HEAD(chamb, "Chamberlin Trimetric") PROJ_HEAD(collg, "Collignon") +PROJ_HEAD(col_urban, "Colombia Urban") PROJ_HEAD(comill, "Compact Miller") PROJ_HEAD(crast, "Craster Parabolic (Putnins P4)") PROJ_HEAD(defmodel, "Deformation model") @@ -170,8 +170,8 @@ extern "C" { #endif /* The version numbers should be updated with every release! **/ -#define PROJ_VERSION_MAJOR 7 -#define PROJ_VERSION_MINOR 2 +#define PROJ_VERSION_MAJOR 8 +#define PROJ_VERSION_MINOR 0 #define PROJ_VERSION_PATCH 0 extern char const PROJ_DLL pj_release[]; /* global release id string */ diff --git a/src/proj_api.h b/src/proj_api.h index a1b6393c..a26088ca 100644 --- a/src/proj_api.h +++ b/src/proj_api.h @@ -38,7 +38,7 @@ #endif #ifndef PJ_VERSION -#define PJ_VERSION 720 +#define PJ_VERSION 800 #endif #ifdef PROJ_RENAME_SYMBOLS diff --git a/src/proj_constants.h b/src/proj_constants.h index f64bf496..a3da2c10 100644 --- a/src/proj_constants.h +++ b/src/proj_constants.h @@ -234,6 +234,9 @@ #define PROJ_WKT2_NAME_METHOD_POLE_ROTATION_GRIB_CONVENTION "Pole rotation (GRIB convention)" +#define EPSG_CODE_METHOD_COLOMBIA_URBAN 1052 +#define EPSG_NAME_METHOD_COLOMBIA_URBAN "Colombia Urban" + /* ------------------------------------------------------------------------ */ /* Projection parameters */ @@ -335,6 +338,9 @@ #define EPSG_NAME_PARAMETER_VIEWPOINT_HEIGHT "Viewpoint height" #define EPSG_CODE_PARAMETER_VIEWPOINT_HEIGHT 8840 +#define EPSG_NAME_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT "Projection plane origin height" +#define EPSG_CODE_PARAMETER_PROJECTION_PLANE_ORIGIN_HEIGHT 1039 + /* ------------------------------------------------------------------------ */ /* Other conversions and transformations */ diff --git a/src/projections/col_urban.cpp b/src/projections/col_urban.cpp new file mode 100644 index 00000000..5bc8407f --- /dev/null +++ b/src/projections/col_urban.cpp @@ -0,0 +1,76 @@ +#define PJ_LIB__ + +#include <errno.h> +#include <math.h> + +#include "proj.h" +#include "proj_internal.h" + +PROJ_HEAD(col_urban, "Colombia Urban") + "\n\tMisc\n\th_0="; + +// Notations and formulas taken from IOGP Publication 373-7-2 - +// Geomatics Guidance Note number 7, part 2 - March 2020 + +namespace { // anonymous namespace + +struct pj_opaque { + double h0; // height of projection origin, divided by semi-major axis (a) + double rho0; // adimensional value, contrary to Guidance note 7.2 + double A; + double B; // adimensional value, contrary to Guidance note 7.2 + double C; + double D; // adimensional value, contrary to Guidance note 7.2 +}; +} // anonymous namespace + +static PJ_XY col_urban_forward (PJ_LP lp, PJ *P) { + PJ_XY xy; + struct pj_opaque *Q = static_cast<struct pj_opaque*>(P->opaque); + + const double cosphi = cos(lp.phi); + const double sinphi = sin(lp.phi); + const double nu = 1. / sqrt(1 - P->es * sinphi * sinphi); + const double lam_nu_cosphi = lp.lam * nu * cosphi; + xy.x = Q->A * lam_nu_cosphi; + const double sinphi_m = sin(0.5 * (lp.phi + P->phi0)); + const double rho_m = (1 - P->es) / pow(1 - P->es * sinphi_m * sinphi_m, 1.5); + const double G = 1 + Q->h0 / rho_m; + xy.y = G * Q->rho0 * ((lp.phi - P->phi0) + Q->B * lam_nu_cosphi * lam_nu_cosphi); + + return xy; +} + +static PJ_LP col_urban_inverse (PJ_XY xy, PJ *P) { + PJ_LP lp; + struct pj_opaque *Q = static_cast<struct pj_opaque*>(P->opaque); + + lp.phi = P->phi0 + xy.y / Q->D - Q->B * (xy.x / Q->C) * (xy.x / Q->C); + const double sinphi = sin(lp.phi); + const double nu = 1. / sqrt(1 - P->es * sinphi * sinphi); + lp.lam = xy.x / (Q->C * nu * cos(lp.phi)); + + return lp; +} + +PJ *PROJECTION(col_urban) { + struct pj_opaque *Q = static_cast<struct pj_opaque*>(pj_calloc (1, sizeof (struct pj_opaque))); + if (nullptr==Q) + return pj_default_destructor (P, ENOMEM); + P->opaque = Q; + + const double h0_unscaled = pj_param(P->ctx, P->params, "dh_0").f; + Q->h0 = h0_unscaled / P->a; + const double sinphi0 = sin(P->phi0); + const double nu0 = 1. / sqrt(1 - P->es * sinphi0 * sinphi0); + Q->A = 1 + Q->h0 / nu0; + Q->rho0 = (1 - P->es) / pow(1 - P->es * sinphi0 * sinphi0, 1.5); + Q->B = tan(P->phi0) / (2 * Q->rho0 * nu0); + Q->C = 1 + Q->h0; + Q->D = Q->rho0 * (1 + Q->h0 / (1 - P->es)); + + P->fwd = col_urban_forward; + P->inv = col_urban_inverse; + + return P; +} diff --git a/src/projections/ortho.cpp b/src/projections/ortho.cpp index 75b8199d..8dcfb53c 100644 --- a/src/projections/ortho.cpp +++ b/src/projections/ortho.cpp @@ -223,7 +223,7 @@ static PJ_LP ortho_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inver // Using Q->sinph0 * sinphi + Q->cosph0 * cosphi * coslam == 0 (visibity // condition of the forward case) in the forward equations, and a lot of - // substition games... + // substitution games... PJ_XY xy_recentered; xy_recentered.x = xy.x; xy_recentered.y = (xy.y - Q->y_shift) / Q->y_scale; diff --git a/src/release.cpp b/src/release.cpp index 06b2cfcd..c8b9c178 100644 --- a/src/release.cpp +++ b/src/release.cpp @@ -11,7 +11,7 @@ char const pj_release[] = STR(PROJ_VERSION_MAJOR)"." STR(PROJ_VERSION_MINOR)"." STR(PROJ_VERSION_PATCH)", " - "November 1st, 2020"; + "March 1st, 2021"; const char *pj_get_release() { return pj_release; diff --git a/src/transformations/defmodel.hpp b/src/transformations/defmodel.hpp index 642213b7..6bf37d8b 100644 --- a/src/transformations/defmodel.hpp +++ b/src/transformations/defmodel.hpp @@ -181,7 +181,7 @@ class Component { /** Get the spatial model. */ const SpatialModel &spatialModel() const { return mSpatialModel; } - /** Generic type for a type functon */ + /** Generic type for a type function */ struct TimeFunction { std::string type{}; @@ -218,11 +218,11 @@ class Component { }; struct PiecewiseTimeFunction : public TimeFunction { - /** One of "zero", "constant", and "linear", defines the behaviour of + /** One of "zero", "constant", and "linear", defines the behavior of * the function before the first defined epoch */ std::string beforeFirst{}; - /** One of "zero", "constant", and "linear", defines the behaviour of + /** One of "zero", "constant", and "linear", defines the behavior of * the function after the last defined epoch */ std::string afterLast{}; @@ -369,13 +369,13 @@ class MasterFile { * models. Typically "EPSG:XXXX" */ const std::string &definitionCRS() const { return mDefinitionCRS; } - /** Get the nominal reference epoch of the deformation model. Formated + /** Get the nominal reference epoch of the deformation model. Formatted * as a ISO-8601 date-time. This is not necessarily used to calculate * the deformation model - each component defines its own time function. */ const std::string &referenceEpoch() const { return mReferenceEpoch; } /** Get the epoch at which the uncertainties of the deformation model - * are calculated. Formated as a ISO-8601 date-time. */ + * are calculated. Formatted as a ISO-8601 date-time. */ const std::string &uncertaintyReferenceEpoch() const { return mUncertaintyReferenceEpoch; } diff --git a/src/transformations/defmodel_impl.hpp b/src/transformations/defmodel_impl.hpp index a15137d7..abd07286 100644 --- a/src/transformations/defmodel_impl.hpp +++ b/src/transformations/defmodel_impl.hpp @@ -1232,7 +1232,7 @@ bool Evaluator<Grid, GridSet, EvaluatorIface>::inverse( constexpr bool forInverseComputation = true; for (int i = 0; i < 10; i++) { #ifdef DEBUG_DEFMODEL - iface.log("Iteration " + std::to_string(i) + ": before foward: x=" + + iface.log("Iteration " + std::to_string(i) + ": before forward: x=" + toString(x_out) + ", y=" + toString(y_out)); #endif double x_new; @@ -1243,7 +1243,7 @@ bool Evaluator<Grid, GridSet, EvaluatorIface>::inverse( return false; } #ifdef DEBUG_DEFMODEL - iface.log("After foward: x=" + toString(x_new) + ", y=" + + iface.log("After forward: x=" + toString(x_new) + ", y=" + toString(y_new)); #endif const double dx = x_new - x; diff --git a/src/transformations/tinshift.hpp b/src/transformations/tinshift.hpp index 7cebab9f..cc8771b3 100644 --- a/src/transformations/tinshift.hpp +++ b/src/transformations/tinshift.hpp @@ -239,7 +239,7 @@ class Evaluator { private: std::unique_ptr<TINShiftFile> mFile; - // Reused between invokations to save memory allocations + // Reused between invocations to save memory allocations std::vector<unsigned> mTriangleIndices{}; std::unique_ptr<NS_PROJ::QuadTree::QuadTree<unsigned>> mQuadTreeForward{}; diff --git a/test/cli/testprojinfo_out.dist b/test/cli/testprojinfo_out.dist index 245bb258..7da5add7 100644 --- a/test/cli/testprojinfo_out.dist +++ b/test/cli/testprojinfo_out.dist @@ -317,7 +317,8 @@ COORDINATEOPERATION["NAD27 to NAD83 (3)", SCOPE["Historic record only - now superseded - see remarks."], AREA["Canada - onshore and offshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon."], BBOX[40.04,-141.01,86.46,-47.74]], - ID["DERIVED_FROM(EPSG)",1312]] + ID["DERIVED_FROM(EPSG)",1312], + REMARK["Uses NTv1 method. Replaced in Quebec by code 1462 and elsewhere in 1997 by NTv2 (transformation code 1313). Input expects longitudes to be positive west; EPSG GeogCRS NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east."]] ------------------------------------- Operation No. 2: @@ -371,7 +372,8 @@ COORDINATEOPERATION["NAD27 to NAD83 (4)", SCOPE["Transformation of coordinates at 1m to 2m level of accuracy."], AREA["Canada - onshore - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon; offshore east coast."], BBOX[40.04,-141.01,83.17,-47.74]], - ID["DERIVED_FROM(EPSG)",1313]] + ID["DERIVED_FROM(EPSG)",1313], + REMARK["Uses NTv2 data files. Replaces NTv1 (transformation code 1312) except in Quebec. Input expects longitudes to be positive west; EPSG GeogCRS NAD27 (code 4267) and (code 4269) have longitudes positive east. May be used as tfm to WGS 84 - see code 1693."]] ------------------------------------- Operation No. 3: @@ -425,7 +427,8 @@ COORDINATEOPERATION["NAD27 to NAD83 (1)", SCOPE["Transformation of coordinates at 0.2m level of accuracy."], AREA["United States (USA) - CONUS including EEZ -onshore and offshore - Alabama; Arizona; Arkansas; California; Colorado; Connecticut; Delaware; Florida; Georgia; Idaho; Illinois; Indiana; Iowa; Kansas; Kentucky; Louisiana; Maine; Maryland; Massachusetts; Michigan; Minnesota; Mississippi; Missouri; Montana; Nebraska; Nevada; New Hampshire; New Jersey; New Mexico; New York; North Carolina; North Dakota; Ohio; Oklahoma; Oregon; Pennsylvania; Rhode Island; South Carolina; South Dakota; Tennessee; Texas; Utah; Vermont; Virginia; Washington; West Virginia; Wisconsin; Wyoming. US Gulf of Mexico (GoM) OCS."], BBOX[23.81,-129.17,49.38,-65.69]], - ID["DERIVED_FROM(EPSG)",1241]] + ID["DERIVED_FROM(EPSG)",1241], + REMARK["Uses NADCON method which expects longitudes positive west; EPSG GeogCRS NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east."]] ------------------------------------- Operation No. 4: @@ -479,7 +482,8 @@ COORDINATEOPERATION["NAD27 to NAD83 (2)", SCOPE["Geodesy."], AREA["United States (USA) - Alaska including EEZ."], BBOX[47.88,167.65,74.71,-129.99]], - ID["DERIVED_FROM(EPSG)",1243]] + ID["DERIVED_FROM(EPSG)",1243], + REMARK["Uses NADCON method which expects longitudes positive west; EPSG GeogCRS NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east. May be used as transformation to WGS 84 - see NAD27 to WGS 84 (85) (code 15864)."]] ------------------------------------- Operation No. 5: @@ -533,7 +537,8 @@ COORDINATEOPERATION["NAD27 to NAD83 (6)", SCOPE["Transformation of coordinates at 1m to 2m level of accuracy."], AREA["Canada - Quebec."], BBOX[44.99,-79.85,62.62,-57.1]], - ID["DERIVED_FROM(EPSG)",1573]] + ID["DERIVED_FROM(EPSG)",1573], + REMARK["Also distributed with file name QUE27-83.gsb. Replaces NAD27 to NAD83 (5) (code 1462). Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27 (code 4267) and NAD83 (code 4269) have longitudes positive east."]] ------------------------------------- Operation No. 6: diff --git a/test/cli/testvarious b/test/cli/testvarious index 6a77729e..292ee316 100755 --- a/test/cli/testvarious +++ b/test/cli/testvarious @@ -1003,6 +1003,12 @@ echo "2 49" > tmp.txt $EXE EPSG:4326 EPSG:4326 tmp.txt -E >> ${OUT} rm tmp.txt +echo "##############################################################" >> ${OUT} +echo "Test Colombia Urban" >> ${OUT} +$EXE -f %.3f EPSG:4686 EPSG:6247 -E >> ${OUT} <<EOF +4.8 -74.25 +EOF + # Done! # do 'diff' with distribution results echo "diff ${OUT} with ${OUT}.dist" diff --git a/test/cli/tv_out.dist b/test/cli/tv_out.dist index 22a26380..70b2ab6e 100644 --- a/test/cli/tv_out.dist +++ b/test/cli/tv_out.dist @@ -482,3 +482,6 @@ Check +proj=longlat +over +datum=WGS84 +to proj=merc +a=6378137 +b=6378137 +lat_ ############################################################## Test EPSG:xxxx EPSG:yyyy filename 2 49 2dN 49dE 0.000 +############################################################## +Test Colombia Urban +4.8 -74.25 122543.174 80859.033 0.000 diff --git a/test/gie/builtins.gie b/test/gie/builtins.gie index 1ec59b7a..def30206 100644 --- a/test/gie/builtins.gie +++ b/test/gie/builtins.gie @@ -4487,7 +4487,7 @@ tolerance 0.1 mm accept -90 0 expect -6378137 18504.1253 -# This test is fragile. Note the slighly important tolerance +# This test is fragile. Note the slightly important tolerance # direction inverse # tolerance 100 mm # accept -6378137 18504.125313223721605027 @@ -4565,7 +4565,7 @@ expect failure errno tolerance_condition accept -90.00001 0 expect failure errno tolerance_condition -# Consistant with WGS84 semi-major axis +# Consistent with WGS84 semi-major axis accept 90 0 expect 6378137 0 roundtrip 1 @@ -4574,7 +4574,7 @@ accept -90 0 expect -6378137 0 roundtrip 1 -# Consistant with WGS84 semi-minor axis +# Consistent with WGS84 semi-minor axis accept 0 90 expect 0 6356752.3142 roundtrip 1 @@ -4619,7 +4619,7 @@ roundtrip 1 accept 0 -0.0000001 expect failure errno tolerance_condition -# Consistant with WGS84 semi-major axis +# Consistent with WGS84 semi-major axis accept 0 0 expect 0 -6378137 roundtrip 1 @@ -4646,7 +4646,7 @@ roundtrip 1 accept 0 0.0000001 expect failure errno tolerance_condition -# Consistant with WGS84 semi-major axis +# Consistent with WGS84 semi-major axis accept 0 0 expect 0 6378137 roundtrip 1 @@ -6641,4 +6641,18 @@ expect -0.001790493 0.000895247 accept -200 -100 expect -0.001790493 -0.000895247 + +=============================================================================== +# Colombia Urbian +# Test point from IOGP Publication 373-7-2 - Geomatics Guidance Note number 7, part 2 - March 2020 +=============================================================================== + +------------------------------------------------------------------------------- +operation +proj=col_urban +lat_0=4.68048611111111 +lon_0=-74.1465916666667 +x_0=92334.879 +y_0=109320.965 +h_0=2550 +ellps=GRS80 +------------------------------------------------------------------------------- +tolerance 1 mm +accept -74.25 4.8 +expect 80859.033 122543.174 +roundtrip 1 + </gie-strict> diff --git a/test/unit/test_operation.cpp b/test/unit/test_operation.cpp index ce4b866b..1181b6d8 100644 --- a/test/unit/test_operation.cpp +++ b/test/unit/test_operation.cpp @@ -8734,6 +8734,14 @@ TEST(operation, compoundCRS_to_geogCRS_3D_context) { "+multiplier=1 " "+step +proj=unitconvert +xy_in=rad +xy_out=deg " "+step +proj=axisswap +order=2,1"); + EXPECT_EQ(list[0]->remarks(), + "For NAD83(NSRS2007) to NAVD88 height (1) (EPSG:9173): Uses " + "Geoid09 hybrid model. Replaced by 2012 model (CT code 6326)." + "\n" + "For NAD83(NSRS2007) to WGS 84 (1) (EPSG:15931): " + "Approximation at the +/- 1m level assuming that " + "NAD83(NSRS2007) is equivalent to WGS 84 within the accuracy " + "of the transformation."); } // NAD83 + NAVD88 height --> WGS 84 diff --git a/travis/after_success.sh b/travis/after_success.sh index c3b28b97..095bafbd 100755 --- a/travis/after_success.sh +++ b/travis/after_success.sh @@ -12,7 +12,7 @@ fi echo "$TRAVIS_SECURE_ENV_VARS" ./travis/build_docs.sh # Only build and publish docs when changes are made on most recent maintenance branch -if test "$TRAVIS_SECURE_ENV_VARS" = "true" -a "$TRAVIS_BRANCH" = "7.1"; then +if test "$TRAVIS_SECURE_ENV_VARS" = "true" -a "$TRAVIS_BRANCH" = "7.2"; then echo "publish website"; ./travis/add_deploy_key.sh; ./travis/deploy_website.sh $TRAVIS_BUILD_DIR/docs/build /tmp; |
