Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a83433e499 | ||
|
|
3f38a67a35 | ||
|
|
edd8c19d4a | ||
|
|
9d29cd6f17 | ||
|
|
e9f25afc6d | ||
|
|
88d58b5bd4 | ||
|
|
cc2d1758ac | ||
|
|
647e25f0dd | ||
|
|
f55bb077c8 | ||
|
|
43407f7ba4 | ||
|
|
ac0bb4b447 | ||
|
|
b0687dfb1e | ||
|
|
8db9cc2876 | ||
|
|
9399b64afa | ||
|
|
f909fc05e1 | ||
|
|
5c382df1ba | ||
|
|
e9cbf983e1 | ||
|
|
1212e9b818 | ||
|
|
6ef2325d23 | ||
|
|
a0a1b4255e | ||
|
|
b2177db68b | ||
|
|
78c4ac5c29 | ||
|
|
5a174a9899 | ||
|
|
7f1a1897d7 | ||
|
|
30d17d7243 | ||
|
|
930661beaa | ||
|
|
4639b891e8 | ||
|
|
4a89f16eff | ||
|
|
2968770ea2 | ||
|
|
cf438683b9 | ||
|
|
28032616a9 | ||
|
|
b451382cda | ||
|
|
b79a32d723 | ||
|
|
b9d7c0a8f8 | ||
|
|
fdd7cc1f8b | ||
|
|
d68ba7bc1a | ||
|
|
bccb57ec04 | ||
|
|
23c4c69b3a | ||
|
|
42fa3b5791 | ||
|
|
90a5526263 | ||
|
|
0d3c815efe | ||
|
|
9bb6e214fa | ||
|
|
f7d17d4450 | ||
|
|
7f18caa6a6 | ||
|
|
9901c65290 | ||
|
|
54616dbd34 | ||
|
|
f0ef1b95e3 | ||
|
|
a8ad205903 | ||
|
|
4be79fdefd | ||
|
|
78857020b1 | ||
|
|
14b0496b00 | ||
|
|
17b5dbea2a | ||
|
|
35cd325e73 | ||
|
|
66a4bef622 | ||
|
|
c3a50e5384 | ||
|
|
03853d63ae | ||
|
|
e4834bb6e1 | ||
|
|
e100c8334b | ||
|
|
014156cf86 | ||
|
|
be5379fab5 | ||
|
|
a85e2aed15 | ||
|
|
eac2b01309 | ||
|
|
7c1d10962e | ||
|
|
4136e326c4 | ||
|
|
48b240ffdc | ||
|
|
1046781930 | ||
|
|
fce2557010 | ||
|
|
e4e467e0ce | ||
|
|
f64c6be4fd | ||
|
|
17de9159a4 | ||
|
|
9ba423879a | ||
|
|
40daf707a1 | ||
|
|
65a78535d5 | ||
|
|
9355385402 | ||
|
|
b4f5ee6be9 | ||
|
|
f4049630d9 | ||
|
|
ceddaabe3d | ||
|
|
1e7679bc83 | ||
|
|
9537bcd932 | ||
|
|
46939ba0b2 |
+1
-1
@@ -96,9 +96,9 @@ install_manifest.txt
|
||||
/data/for_tests/
|
||||
|
||||
# docs
|
||||
tmp_breathe
|
||||
/docs/.doxygen_up_to_date
|
||||
/docs/build
|
||||
/docs/plot/images
|
||||
/latex
|
||||
|
||||
# m4
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
# .readthedocs.yaml
|
||||
# Read the Docs configuration file
|
||||
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
||||
|
||||
# Required
|
||||
version: 2
|
||||
|
||||
build:
|
||||
os: "ubuntu-22.04"
|
||||
tools:
|
||||
python: "mambaforge-4.10"
|
||||
|
||||
jobs:
|
||||
post_checkout:
|
||||
# Cancel building pull requests when there aren't changed in the docs directory or YAML file.
|
||||
# You can add any other files or directories that you'd like here as well,
|
||||
# like your docs requirements file, or other files that will change your docs build.
|
||||
#
|
||||
# If there are no changes (git diff exits with 0) we force the command to return with 183.
|
||||
# This is a special exit code on Read the Docs that will cancel the build immediately.
|
||||
- |
|
||||
if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/7.2 -- docs/ .readthedocs.yaml;
|
||||
then
|
||||
exit 183;
|
||||
fi
|
||||
- (git --no-pager log --pretty="tformat:%s -- %b" -1 | grep -viq "skip ci") || exit 183
|
||||
pre_build:
|
||||
- ./docs/rtd/pre_build.sh
|
||||
- ./scripts/doxygen.sh
|
||||
- ./docs/rtd/plot.sh
|
||||
post_build:
|
||||
- ./docs/rtd/post_build.sh
|
||||
|
||||
apt_packages:
|
||||
- cmake
|
||||
- ninja-build
|
||||
- g++
|
||||
- sqlite3
|
||||
- libsqlite3-dev
|
||||
- libtiff-dev
|
||||
- libcurl4-openssl-dev
|
||||
|
||||
formats:
|
||||
- pdf
|
||||
- epub
|
||||
|
||||
conda:
|
||||
environment: docs/environment.yml
|
||||
|
||||
sphinx:
|
||||
configuration: docs/source/conf.py
|
||||
fail_on_warning: true
|
||||
@@ -1,6 +1,6 @@
|
||||
To cite PROJ in publications use:
|
||||
|
||||
PROJ contributors (2020). PROJ coordinate transformation software
|
||||
PROJ contributors (2021). PROJ coordinate transformation software
|
||||
library. Open Source Geospatial Foundation. URL https://proj.org/.
|
||||
|
||||
A BibTeX entry for LaTeX users is
|
||||
@@ -11,6 +11,6 @@ A BibTeX entry for LaTeX users is
|
||||
title = {{PROJ} coordinate transformation software library},
|
||||
author = {{PROJ contributors}},
|
||||
organization = {Open Source Geospatial Foundation},
|
||||
year = {2020},
|
||||
year = {2021},
|
||||
url = {https://proj.org/},
|
||||
}
|
||||
|
||||
+3
-3
@@ -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 "21")
|
||||
set(PROJ_BUILD_VERSION "21.0.2")
|
||||
proj_version(MAJOR 7 MINOR 2 PATCH 1)
|
||||
set(PROJ_API_VERSION "19")
|
||||
set(PROJ_BUILD_VERSION "21.1.2")
|
||||
|
||||
################################################################################
|
||||
# Build features and variants
|
||||
|
||||
@@ -766,7 +766,7 @@ WARN_LOGFILE =
|
||||
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
|
||||
# Note: If this tag is empty the current directory is searched.
|
||||
|
||||
INPUT = src/iso19111 include/proj src/proj.h src/proj_experimental.h src/general_doc.dox src/filemanager.cpp src/networkfilemanager.cpp
|
||||
INPUT = src/iso19111 src/iso19111/operation include/proj src/proj.h src/proj_experimental.h src/general_doc.dox src/filemanager.cpp src/networkfilemanager.cpp
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||
|
||||
+2
-2
@@ -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.*
|
||||
|
||||
@@ -179,7 +179,7 @@ See step 1.6 above. Do not rename the archives with RC postfixes.
|
||||
|
||||
These vim substitutions are helpfull when converting NEWS to rst:
|
||||
|
||||
:s!(\#\(\d\{4}\))!(`\#\1 <https://github.com/OSGeo/issues/\1>`_)!
|
||||
:s!(\#\(\d\{4}\))!(`\#\1 <https://github.com/OSGeo/PROJ/issues/\1>`_)!
|
||||
:s/^o/*/
|
||||
|
||||
- Update download links in `docs/source/download.rst`
|
||||
|
||||
@@ -1,3 +1,69 @@
|
||||
7.2.1 Release Notes
|
||||
-------------------
|
||||
|
||||
Updates
|
||||
-------
|
||||
|
||||
o Add metadata with the version number of the database layout (#2474)
|
||||
|
||||
o Split coordinateoperation.cpp and test_operation.cpp in several parts (#2484)
|
||||
|
||||
o Update to EPSG v10.008 (#2490)
|
||||
|
||||
o Added the NKG 2008 and 2020 transformations in proj.db (#2495)
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
|
||||
o Set CURL_ENABLED definition on projinfo build (#2405)
|
||||
|
||||
o createBoundCRSToWGS84IfPossible(): make it return same result with a CRS
|
||||
built from EPSG code or WKT1 (#2412)
|
||||
|
||||
o WKT2 parsing: several fixes related to map projection parameter units (#2428)
|
||||
|
||||
o createOperation(): make it work properly when one of the CRS is a BoundCRS of
|
||||
a DerivedGeographicCRS (+proj=ob_tran +o_proj=lonlat +towgs84=....) (#2441)
|
||||
|
||||
o WKT parsing: fix ingestion of WKT with a Geocentric CRS as the base of the
|
||||
projected CRS (#2443)
|
||||
|
||||
o GeographicCRS::_isEquivalentTo(EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS):
|
||||
make it work when comparing easting,northing,up and northing,easting,up (#2446)
|
||||
|
||||
o createOperation(): add a ballpark vertical transformation when dealing
|
||||
with GEOIDMODEL[] (#2449)
|
||||
|
||||
o Use same arguments to printf format string for both radians and degrees in
|
||||
output by cct (#2453)
|
||||
|
||||
o PRIMEM WKT handling: fixes on import for 'sexagesimal DMS' or from WKT1:GDAL/ESRI
|
||||
when GEOGCS UNIT != Degree; morph to ESRI the PRIMEM name on export (#2455)
|
||||
|
||||
o createObjectsFromName(): in exact match, make looking for 'ETRS89 / UTM zone 32N'
|
||||
return only the exact match (#2462)
|
||||
|
||||
o Inverse tmerc spherical: fix wrong sign of latitude when lat_0 is used (#2469)
|
||||
|
||||
o Add option to allow export of Geographic/Projected 3D CRS in WKT1_GDAL (#2470)
|
||||
|
||||
o Fix building proj.db with SQLite built with -DSQLITE_DQS=0 (#2480)
|
||||
|
||||
o Include JSON Schema files in CMake builds (#2485)
|
||||
|
||||
o createOperations(): fix inconsistent chaining exception when transforming from BoundCRS of projected CRS based on NTF Paris to BoundCRS of geog CRS NTF Paris (#2486)
|
||||
|
||||
THANKS TO
|
||||
---------
|
||||
|
||||
Zac Miller
|
||||
Nomit Rawat
|
||||
Guillaume Lostis
|
||||
J.H. van de Water
|
||||
Kristian Evers
|
||||
Even Rouault
|
||||
|
||||
|
||||
7.2.0 Release Notes
|
||||
-------------------
|
||||
|
||||
|
||||
+1
-1
@@ -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], [7.2.1],
|
||||
[https://github.com/OSGeo/PROJ/issues], proj, [https://proj.org])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
AC_LANG(C)
|
||||
|
||||
@@ -27,6 +27,8 @@ file(GLOB GSB_FILES *.gsb)
|
||||
file(GLOB GTX_FILES *.gtx)
|
||||
set(GRIDSHIFT_FILES ${GSB_FILES} ${GTX_FILES})
|
||||
|
||||
file(GLOB SCHEMA_FILES *.json)
|
||||
|
||||
set(ALL_SQL_IN "${CMAKE_CURRENT_BINARY_DIR}/all.sql.in")
|
||||
set(PROJ_DB "${CMAKE_CURRENT_BINARY_DIR}/proj.db")
|
||||
include(sql_filelist.cmake)
|
||||
@@ -106,6 +108,7 @@ set(ALL_DATA_FILE
|
||||
${PROJ_DICTIONARY}
|
||||
${GRIDSHIFT_FILES}
|
||||
${PROJ_DB}
|
||||
${SCHEMA_FILES}
|
||||
)
|
||||
install(
|
||||
FILES ${ALL_DATA_FILE}
|
||||
|
||||
@@ -42,6 +42,7 @@ SQL_ORDERED_LIST = sql/begin.sql \
|
||||
sql/grid_alternatives.sql \
|
||||
sql/grid_alternatives_generated_noaa.sql \
|
||||
sql/customizations.sql \
|
||||
sql/nkg.sql \
|
||||
sql/commit.sql
|
||||
|
||||
EXTRA_DIST = proj.ini GL27 nad.lst nad27 nad83 \
|
||||
|
||||
+36
-21
@@ -192,7 +192,6 @@ INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1192','NAD83(CSRS96)','
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1195','NAD83(CSRS)v4','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6265','Rome 1940','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6806','Rome 1940 (Rome)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6670','IGM95','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6673','CI1979','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5172','NG-L','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5174','NN1954','EPSG');
|
||||
@@ -333,7 +332,6 @@ INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5202','Bora Bora 2001',
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5124','Fahud HD','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5132','DNN','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5138','ODN Orkney','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5215','EVRF2007','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6743','Karbala 1979 (Polservice)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5149','British Vertical Datum','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1029','IGRS','EPSG');
|
||||
@@ -361,7 +359,6 @@ INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6903','Madrid','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1156','WGS 84 (G1762)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1157','PZ-90.02','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1158','PZ-90.11','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1274','EVRF2019','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1275','REDNAP','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1276','REDNAP','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1277','REDNAP','EPSG');
|
||||
@@ -506,7 +503,6 @@ INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1283','REDNAP','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1284','REDNAP','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1285','REDNAP','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1243','SIRGAS-Chile 2010','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1287','EVRF2019mean','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1289','GBK19-IRF','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1291','ATRF2014','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1270','MSL NL','EPSG');
|
||||
@@ -609,6 +605,13 @@ INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1130','JGD2000 (vertica
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1129','JSLD72','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','1132','RDN2008','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1288','BI','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6258','European Terrestrial Reference System 1989','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6326','World Geodetic System 1984','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6670','IGM95','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','5215','EVRF2007','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1274','EVRF2019','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1287','EVRF2019mean','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_datum','EPSG','1302','Pago Pago 2020','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','21100','Genuk / NEIEZ','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2140','NAD83(CSRS98) / SCoPQ zone 3','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2141','NAD83(CSRS98) / SCoPQ zone 4','EPSG');
|
||||
@@ -720,7 +723,6 @@ INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5701','Newlyn height','EP
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5702','National Geodetic Vertical Datum of 1929 height (ftUS)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5703','North American Vertical Datum of 1988 height (m)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5709','Normaal Amsterdams Peil height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','Australian Height Datum height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5712','Australian Height Datum (Tasmania) height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5713','Canadian Geodetic Vertical Datum of 1928 height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5714','mean sea level height','EPSG');
|
||||
@@ -1027,7 +1029,6 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29849','Timbalai 1948 /
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29850','Timbalai 1948 / UTM 50N','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29871','Timbalai / Borneo (ch)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29872','Timbalai / Borneo (ftSe)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29873','Timbalai / Borneo (m)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29900','TM65 / Irish Nat Grid','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30161','Tokyo / Japan zone I','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','30162','Tokyo / Japan zone II','EPSG');
|
||||
@@ -1713,8 +1714,6 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6861','CORS96 / OCRS_SAN
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3069','NAD27 / WTM 27','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5723','Japanese Standard Levelling Datum height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7005','Nahrwan 1934 / UTM 37N','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6875','RDN2008 / Fuso Italia (N-E)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6876','RDN2008 / Fuso 12 (N-E)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5787','Baltic 1980 height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5782','REDNAP height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3072','Maine Coordinate System of 2000 East Zone','EPSG');
|
||||
@@ -2204,10 +2203,8 @@ INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4298','Timbalai 1968','EP
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4298','BT68','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29849','BT68 / UTM zone 49N','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29850','BT68 / UTM zone 50N','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29873','BT68 / RSO Borneo (m)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29849','Timbalai 1968 / UTM zone 49N','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29850','Timbalai 1968 / UTM zone 50N','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29873','Timbalai 1968 / RSO Borneo (m)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4245','MRT68','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24500','MRT68 / Singapore Grid','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','24547','MRT68 / UTM zone 47N','EPSG');
|
||||
@@ -4244,8 +4241,6 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3088','NAD83 / KY1Z (m)'
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9379','726','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3857','WGS 84 / Popular Visualisation Pseudo-Mercator','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9379','IGb14 - LatLonEHt','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9380','725','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9380','IGb14 - LatLon','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','3886','National Elevation Network height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3893','ED50 / Iraq Nat. Grid','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4743','Karbala 1979 (Polservice)','EPSG');
|
||||
@@ -4763,7 +4758,6 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','3857','Web Mercator','EP
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9391','BGS2005 / UTM zone 35 (E-N)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5634','REGCAN95 - LCC','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9400','REDNAP height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9389','EVRF2019_AMST / NH','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9392','REDNAP height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7692','Kyrg06-68','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','7693','Kyrg06-71','EPSG');
|
||||
@@ -5086,8 +5080,6 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8383','NCRS Las Vegas (m
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8387','NCRS Las Vegas high (ftUS)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','8433','Macao 1920 Grid System','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','5514','S-JTSK [JTSK] / Krovak East North','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','AHD71 height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','AHD-TAS83 height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4414','GGN93 / Guam Map Grid','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4414','Guam Geodetic Network 1993 / Guam Map Grid','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4414','NAD83 / Guam Map Grid','EPSG');
|
||||
@@ -5608,8 +5600,6 @@ INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4202','298','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4202','AGD66 - LatLon','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4203','350','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4203','AGD84 - LatLon','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','339','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','AHD - NOHt','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7844','284','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7844','GDA2020 - LatLon','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','7843','329','EPSG');
|
||||
@@ -6083,7 +6073,6 @@ INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','8690','SI_KOP / NH','EPSG
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5195','SI_TRIE / NOH','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5195','MK_TRIE / NOH','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','4826','WGS 84 / Cape Verde New','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9390','EVRF2019mean_AMST / NH','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4479','732','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4480','733','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('compound_crs','EPSG','9450','ETRS89 + Belfast Lough height','EPSG');
|
||||
@@ -7189,8 +7178,34 @@ INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6677','JGD2011 / Japan z
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6693','Japan Levelling Datum height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6693','Japanese Standard Levelling Datum height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','6693','JSLD height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6707','RDN2008 / TM32','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6708','RDN2008 / TM33','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6709','RDN2008 / TM34','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2062','Madrid (Madrid) / Spain LCC','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','2062','Madrid - LCC','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9380','725','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','9380','IGb14 - LatLon','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','Australian Height Datum height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','AHD71 height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','AHD-TAS83 height','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','339','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','5711','AHD - NOHt','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29873','Timbalai / Borneo (m)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29873','BT68 / RSO Borneo (m)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29873','Timbalai 1968 / RSO Borneo (m)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','29874','BT68 / RSO Sarawak LSD (m)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6705','ETRF2000 epoca 2008.0','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6704','ETRF2000 epoca 2008.0','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','6706','ETRF2000 epoca 2008.0','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6708','RDN2008 / TM33','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6708','ETRF2000 epoca 2008.0 fuso 33','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6707','RDN2008 / TM32','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6707','ETRF2000 epoca 2008.0 fuso 32','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6709','RDN2008 / TM34','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6709','ETRF2000 epoca 2008.0 fuso 34','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6875','RDN2008 / Fuso Italia (N-E)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6875','ETRF2000 epoca 2008.0 fuso Italia','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6876','RDN2008 / Fuso 12 (N-E)','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','6876','ETRF2000 epoca 2008.0 fuso 12','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('projected_crs','EPSG','9498','CABA-P07','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9389','EVRF2019_AMST / NH','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9390','EVRF2019mean_AMST / NH','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9675','741','EPSG');
|
||||
INSERT INTO "alias_name" VALUES('vertical_crs','EPSG','9675','LT at Pago Pago - NOHt','EPSG');
|
||||
|
||||
@@ -1734,6 +1734,10 @@ INSERT INTO "conversion" VALUES('EPSG','9385','AbInvA96_2020-TM','In conjunction
|
||||
INSERT INTO "usage" VALUES('EPSG','14062','conversion','EPSG','9385','EPSG','4589','EPSG','1196');
|
||||
INSERT INTO "conversion" VALUES('EPSG','9455','GBK19-TM','In conjunction with transformation ETRS89 to GBK19-IRF (1) (code 9454), emulates the TPEN11 Snake projection.','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',55.45,'EPSG','9110','EPSG','8802','Longitude of natural origin',-4.21,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',93720.394,'EPSG','9001','EPSG','8807','False northing',113870.493,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14130','conversion','EPSG','9455','EPSG','4607','EPSG','1141');
|
||||
INSERT INTO "conversion" VALUES('EPSG','9497','Gauss-Kruger CABA 2019','Projection created in 2017 for the purpose of modernizing the city''s cadastre and linking it to modern reference frames. Origin approximates the 1919 origin of the cross of the main tower of the San José de Flores church ("0 de Flores" plane grid).','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',-34.374536,'EPSG','9110','EPSG','8802','Longitude of natural origin',-58.274791,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',20000.0,'EPSG','9001','EPSG','8807','False northing',70000.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14242','conversion','EPSG','9497','EPSG','4610','EPSG','1056');
|
||||
INSERT INTO "conversion" VALUES('EPSG','9673','US Forest Service region 6 Albers','','EPSG','9822','Albers Equal Area','EPSG','8821','Latitude of false origin',34.0,'EPSG','9102','EPSG','8822','Longitude of false origin',-120.0,'EPSG','9102','EPSG','8823','Latitude of 1st standard parallel',43.0,'EPSG','9102','EPSG','8824','Latitude of 2nd standard parallel',48.0,'EPSG','9102','EPSG','8826','Easting at false origin',600000.0,'EPSG','9001','EPSG','8827','Northing at false origin',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14786','conversion','EPSG','9673','EPSG','2381','EPSG','1165');
|
||||
INSERT INTO "conversion" VALUES('EPSG','10101','Alabama CS27 East zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.3,'EPSG','9110','EPSG','8802','Longitude of natural origin',-85.5,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.99996,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','11101','conversion','EPSG','10101','EPSG','2154','EPSG','1142');
|
||||
INSERT INTO "conversion" VALUES('EPSG','10102','Alabama CS27 West zone','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',30.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',-87.3,'EPSG','9110','EPSG','8805','Scale factor at natural origin',0.999933333,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9003','EPSG','8807','False northing',0.0,'EPSG','9003',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
|
||||
@@ -4545,6 +4549,8 @@ INSERT INTO "conversion" VALUES('EPSG','18451','CS63 zone C1','','EPSG','9807','
|
||||
INSERT INTO "usage" VALUES('EPSG','12917','conversion','EPSG','18451','EPSG','3174','EPSG','1207');
|
||||
INSERT INTO "conversion" VALUES('EPSG','18452','CS63 zone C2','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.06,'EPSG','9110','EPSG','8802','Longitude of natural origin',27.57,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',2250000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','12918','conversion','EPSG','18452','EPSG','3175','EPSG','1207');
|
||||
INSERT INTO "conversion" VALUES('EPSG','19838','Rectified Skew Orthomorphic Sarawak LSD (metres)','Used by the Sarawak Land and Survey Department. Conversion 19958 but using Hotine Oblique Mercator (variant A) and with FE increased by 2,000,000 m and FN by 5,000,000 m. If using variant B method (code 9815) FE = 2590476.871 m and FN = 5442857.653 m.','EPSG','9812','Hotine Oblique Mercator (variant A)','EPSG','8811','Latitude of projection centre',4.0,'EPSG','9110','EPSG','8812','Longitude of projection centre',115.0,'EPSG','9110','EPSG','8813','Azimuth of initial line',53.18569537,'EPSG','9110','EPSG','8814','Angle from Rectified to Skew Grid',53.07483685,'EPSG','9110','EPSG','8815','Scale factor on initial line',0.99984,'EPSG','9201','EPSG','8806','False easting',2000000.0,'EPSG','9001','EPSG','8807','False northing',5000000.0,'EPSG','9001',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14399','conversion','EPSG','19838','EPSG','4611','EPSG','1142');
|
||||
INSERT INTO "conversion" VALUES('EPSG','19839','Dubai Local Transverse Mercator','','EPSG','9807','Transverse Mercator','EPSG','8801','Latitude of natural origin',0.0,'EPSG','9110','EPSG','8802','Longitude of natural origin',55.2,'EPSG','9110','EPSG','8805','Scale factor at natural origin',1.0,'EPSG','9201','EPSG','8806','False easting',500000.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','12919','conversion','EPSG','19839','EPSG','3531','EPSG','1055');
|
||||
INSERT INTO "conversion" VALUES('EPSG','19840','IBCAO Polar Stereographic','Used for the International Bathymetric Chart of Arctic Ocean.','EPSG','9829','Polar Stereographic (variant B)','EPSG','8832','Latitude of standard parallel',75.0,'EPSG','9102','EPSG','8833','Longitude of origin',0.0,'EPSG','9102','EPSG','8806','False easting',0.0,'EPSG','9001','EPSG','8807','False northing',0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
|
||||
|
||||
@@ -274,12 +274,6 @@ INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6277','OSGB36','PROJ');
|
||||
-- to the EPSG:4326 CRS, as this is a common use case (https://github.com/OSGeo/PROJ/issues/2216)
|
||||
INSERT INTO "alias_name" VALUES('geodetic_crs','EPSG','4326','WGS84','PROJ');
|
||||
|
||||
---- Aliases from old datum names to new datum ensemble names -----
|
||||
|
||||
-- Those have been reported to IOGP and will hopefully be integrated in a later EPSG release
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6326','World Geodetic System 1984','PROJ');
|
||||
INSERT INTO "alias_name" VALUES('geodetic_datum','EPSG','6258','European Terrestrial Reference System 1989','PROJ');
|
||||
|
||||
---- PROJ unit short names -----
|
||||
|
||||
-- Linear units
|
||||
|
||||
+11
-7
@@ -1202,8 +1202,8 @@ INSERT INTO "extent" VALUES('EPSG','2222','USA - Nebraska - SPCS27 - S','United
|
||||
INSERT INTO "extent" VALUES('EPSG','2223','USA - Nevada - SPCS - C','United States (USA) - Nevada - counties of Lander; Nye.',36.0,41.0,-118.19,-114.99,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2224','USA - Nevada - SPCS - E','United States (USA) - Nevada - counties of Clark; Elko; Eureka; Lincoln; White Pine.',34.99,42.0,-117.01,-114.03,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2225','USA - Nevada - SPCS - W','United States (USA) - Nevada - counties of Churchill; Douglas; Esmeralda; Humboldt; Lyon; Mineral; Pershing; Storey; Washoe.',36.95,42.0,-120.0,-116.99,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2226','Canada - Newfoundland - east of 54.5°W','Canada - Newfoundland - onshore east of 54°30''W.',46.56,49.71,-54.5,-52.54,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2227','Canada - Newfoundland and Labrador - 57.5°W to 54.5°W','Canada - Newfoundland and Labrador between 57°30''W and 54°30''W.',46.81,54.71,-57.5,-54.49,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2226','Canada - Newfoundland - east of 54.5°W','Canada - Newfoundland - onshore east of 54°30''W.',46.567800287196,49.880440168616,-54.5,-52.543563434093,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2227','Canada - Newfoundland and Labrador - 57.5°W to 54.5°W','Canada - Newfoundland and Labrador between 57°30''W and 54°30''W.',46.810451303426,54.704265687623,-57.5,-54.5,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2228','USA - New Mexico - SPCS - E','United States (USA) - New Mexico - counties of Chaves; Colfax; Curry; De Baca; Eddy; Guadalupe; Harding; Lea; Mora; Quay; Roosevelt; San Miguel; Union.',32.0,37.0,-105.72,-102.99,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2229','USA - New Mexico - SPCS27 - C','United States (USA) - New Mexico - counties of Bernalillo; Dona Ana; Lincoln; Los Alamos; Otero; Rio Arriba; Sandoval; Santa Fe; Socorro; Taos; Torrance.',31.78,37.0,-107.73,-104.83,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2230','USA - New Mexico - SPCS27 - W','United States (USA) - New Mexico - counties of Catron; Cibola; Grant; Hidalgo; Luna; McKinley; San Juan; Sierra; Valencia.',31.33,37.0,-109.06,-106.32,0);
|
||||
@@ -1346,7 +1346,7 @@ INSERT INTO "extent" VALUES('EPSG','2366','Spain - mainland onshore','Spain - ma
|
||||
INSERT INTO "extent" VALUES('EPSG','2367','Spain - mainland northeast','Spain - onshore mainland north of the parallel of approximately 41°58''N from approximately 6°35''W to the meridian of 4°W of Greenwich and then a line from 41°58''N, 4°W through 40°N, 0°E of Greenwich.',39.96,43.82,-9.37,3.39,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2368','Spain - mainland southwest','Spain - onshore mainland south of the parallel of approximately 41°58''N from approximately 6°35''W to the meridian of 4°W of Greenwich and then a line from 41°58''N, 4°W through 40°N, 0°E of Greenwich.',35.95,41.98,-7.54,0.28,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2369','Seychelles - Mahe Island','Seychelles - Mahe Island.',-4.86,-4.5,55.3,55.59,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2370','Europe - former Yugoslavia onshore','Boznia and Herzegovina; Croatia - onshore; Kosovo; Montenegro - onshore; North Macedonia; Serbia; Slovenia - onshore.',40.85,46.88,13.38,23.04,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2370','Europe - former Yugoslavia onshore','Bosnia and Herzegovina; Croatia - onshore; Kosovo; Montenegro - onshore; North Macedonia; Serbia; Slovenia - onshore.',40.855888366699,46.876247406006,13.383471488953,23.030969619751,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2371','Nigeria - south','Nigeria - onshore south.',4.22,6.95,4.35,9.45,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2372','Italy - mainland','Italy - mainland including San Marino and Vatican City State.',37.86,47.1,6.62,18.58,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2373','USA - Alaska including EEZ','United States (USA) - Alaska including EEZ.',47.88,74.71,167.65,-129.99,0);
|
||||
@@ -1392,7 +1392,7 @@ INSERT INTO "extent" VALUES('EPSG','2412','USA - Alaska mainland','United States
|
||||
INSERT INTO "extent" VALUES('EPSG','2413','Bahamas - main islands onshore','Bahamas - onshore southwest of a line from 27°30''N, 77°30''W through 23°15''N, 74°30''W to 22°30''N, 72°30''W.',20.86,27.29,-79.04,-72.68,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2414','Bahamas (San Salvador Island) - onshore','Bahamas (San Salvador Island) - onshore.',23.9,24.19,-74.6,-74.37,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2415','Canada - Manitoba and Ontario','Canada - Manitoba; Ontario.',41.67,60.01,-102.0,-74.35,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2416','Canada - eastern provinces','Canada - onshore - New Brunswick; Newfoundland and Labrador; Nova Scotia; Prince Edward Island; Quebec.',43.41,62.62,-79.85,-52.54,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2416','Canada - eastern provinces','Canada - onshore - New Brunswick; Newfoundland and Labrador; Nova Scotia; Prince Edward Island; Quebec.',43.415647861102,62.61106035396,-79.847158104293,-52.543563434093,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2417','Canada - Yukon','Canada - Yukon.',59.99,69.7,-141.01,-123.91,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2418','Caribbean - central (DMA tfm)','Antigua; Barbados; Barbuda; Cuba; Dominican Republic; Grand Cayman; Jamaica; Turks and Caicos Islands. Note: does not include other islands within this geographic area.',13.0,23.25,-85.01,-59.37,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2419','Central America - Belize to Costa Rica','Onshore Belize, Costa Rica, El Salvador, Guatemala, Honduras and Nicaragua.',7.98,18.49,-92.29,-82.53,0);
|
||||
@@ -1807,7 +1807,7 @@ INSERT INTO "extent" VALUES('EPSG','2827','Africa - South Sudan and Sudan - 24°
|
||||
INSERT INTO "extent" VALUES('EPSG','2828','Guadeloupe - St Martin and St Barthelemy - onshore','Guadeloupe - onshore - St Martin and St Barthélemy islands.',17.82,18.17,-63.21,-62.73,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2829','Guadeloupe - Grande-Terre and surrounding islands - onshore','Guadeloupe - onshore - Basse-Terre, Grande-Terre, La Desirade, Marie-Galante, Les Saintes.',15.8,16.55,-61.85,-60.97,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2830','World (by country)','World: Afghanistan, Albania, Algeria, American Samoa, Andorra, Angola, Anguilla, Antarctica, Antigua and Barbuda, Argentina, Armenia, Aruba, Australia, Austria, Azerbaijan, Bahamas, Bahrain, Bangladesh, Barbados, Belgium, Belgium, Belize, Benin, Bermuda, Bhutan, Bolivia, Bonaire, Saint Eustasius and Saba, Bosnia and Herzegovina, Botswana, Bouvet Island, Brazil, British Indian Ocean Territory, British Virgin Islands, Brunei Darussalam, Bulgaria, Burkina Faso, Burundi, Cambodia, Cameroon, Canada, Cape Verde, Cayman Islands, Central African Republic, Chad, Chile, China, Christmas Island, Cocos (Keeling) Islands, Comoros, Congo, Cook Islands, Costa Rica, Côte d''Ivoire (Ivory Coast), Croatia, Cuba, Curacao, Cyprus, Czechia, Denmark, Djibouti, Dominica, Dominican Republic, East Timor, Ecuador, Egypt, El Salvador, Equatorial Guinea, Eritrea, Estonia, Eswatini (Swaziland), Ethiopia, Falkland Islands (Malvinas), Faroe Islands, Fiji, Finland, France, French Guiana, French Polynesia, French Southern Territories, Gabon, Gambia, Georgia, Germany, Ghana, Gibraltar, Greece, Greenland, Grenada, Guadeloupe, Guam, Guatemala, Guinea, Guinea-Bissau, Guyana, Haiti, Heard Island and McDonald Islands, Holy See (Vatican City State), Honduras, China - Hong Kong, Hungary, Iceland, India, Indonesia, Islamic Republic of Iran, Iraq, Ireland, Israel, Italy, Jamaica, Japan, Jordan, Kazakhstan, Kenya, Kiribati, Democratic People''s Republic of Korea (North Korea), Republic of Korea (South Korea), Kosovo, Kuwait, Kyrgyzstan, Lao People''s Democratic Republic (Laos), Latvia, Lebanon, Lesotho, Liberia, Libyan Arab Jamahiriya, Liechtenstein, Lithuania, Luxembourg, China - Macao, Madagascar, Malawi, Malaysia, Maldives, Mali, Malta, Marshall Islands, Martinique, Mauritania, Mauritius, Mayotte, Mexico, Federated States of Micronesia, Monaco, Mongolia, Montenegro, Montserrat, Morocco, Mozambique, Myanmar (Burma), Namibia, Nauru, Nepal, Netherlands, New Caledonia, New Zealand, Nicaragua, Niger, Nigeria, Niue, Norfolk Island, North Macedonia, Northern Mariana Islands, Norway, Oman, Pakistan, Palau, Panama, Papua New Guinea (PNG), Paraguay, Peru, Philippines, Pitcairn, Poland, Portugal, Puerto Rico, Qatar, Reunion, Romania, Russian Federation, Rwanda, Saint Kitts and Nevis, Saint Helena, Ascension and Tristan da Cunha, Saint Lucia, Saint Pierre and Miquelon, Saint Vincent and the Grenadines, Samoa, San Marino, Sao Tome and Principe, Saudi Arabia, Senegal, Serbia, Seychelles, Sierra Leone, Singapore, Slovakia (Slovak Republic), Slovenia, Sint Maarten, Solomon Islands, Somalia, South Africa, South Georgia and the South Sandwich Islands, South Sudan, Spain, Sri Lanka, Sudan, Suriname, Svalbard and Jan Mayen, Sweden, Switzerland, Syrian Arab Republic, Taiwan, Tajikistan, United Republic of Tanzania, Thailand, The Democratic Republic of the Congo (Zaire), Togo, Tokelau, Tonga, Trinidad and Tobago, Tunisia, Turkey, Turkmenistan, Turks and Caicos Islands, Tuvalu, Uganda, Ukraine, United Arab Emirates (UAE), United Kingdom (UK), United States (USA), United States Minor Outlying Islands, Uruguay, Uzbekistan, Vanuatu, Venezuela, Vietnam, US Virgin Islands, Wallis and Futuna, Western Sahara, Yemen, Zambia, Zimbabwe.',-90.0,90.0,-180.0,180.0,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2831','Canada - Atlantic offshore','Canada - offshore Newfoundland and Labrador, New Brunswick and Nova Scotia.',40.04,64.21,-67.75,-47.74,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2831','Canada - Atlantic offshore','Canada - offshore Newfoundland and Labrador, New Brunswick and Nova Scotia.',40.040199904302,64.205208824162,-67.743055559783,-47.743430543984,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2832','Canada - British Columbia','Canada - British Columbia.',48.25,60.01,-139.04,-114.08,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2833','Sweden - 12 00','Sweden - communes west of approximately 12°45''E and south of approximately 60°N. See information source for map.',56.74,60.13,10.93,13.11,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','2834','Sweden - 13 30','Sweden - communes between approximately 12°45''E and 14°15''E and south of approximately 62°10''N. See information source for map.',55.28,62.28,12.12,14.79,0);
|
||||
@@ -2442,7 +2442,7 @@ INSERT INTO "extent" VALUES('EPSG','3462','Mexico - offshore GoM - Campeche area
|
||||
INSERT INTO "extent" VALUES('EPSG','3463','World - 86°S to 86°N','World between 86°S and 86°N.',-86.0,86.0,-180.0,180.0,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','3464','World - N hemisphere - 12°E to 18°E - by country and WGS 72BE','Between 12°E and 18°E, northern hemisphere between equator and 84°N, onshore and offshore. Chad - west of 18°E.',0.0,84.0,12.0,18.0,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','3465','World - N hemisphere - 18°E to 24°E - by country and WGS 72BE','Between 12°E and 18°E, northern hemisphere between equator and 84°N, onshore and offshore. Chad - east of 18°E.',0.0,84.0,18.0,24.0,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','3466','China - Ordos - 108°E to 108.5°E and 37.75°N to 38.25°N','China - Ordos basin.',35.0,39.0,107.0,110.01,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','3466','China - Ordos basin','China - Ordos basin.',35.0,39.0,107.0,110.007,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','3467','North America - Great Lakes basin','Canada and United States (USA) - Great Lakes basin.',40.99,50.74,-93.17,-74.47,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','3468','North America - Great Lakes basin and St Lawrence Seaway','Canada and United States (USA) - Great Lakes basin and St Lawrence Seaway.',40.99,52.22,-93.17,-54.75,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','3469','China - offshore - Yellow Sea','China - offshore - Huang Hai (Yellow Sea).',31.23,37.4,119.23,125.06,0);
|
||||
@@ -3518,7 +3518,7 @@ INSERT INTO "extent" VALUES('EPSG','4539','Angola - east of 18°E','Angola - eas
|
||||
INSERT INTO "extent" VALUES('EPSG','4540','Africa - South Africa, Lesotho and Eswatini.','Eswatini (Swaziland); Lesotho; South Africa - onshore and offshore.',-50.32,-22.13,13.33,42.85,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4541','Vietnam - Dien Bien and Lai Chau','Vietnam - Dien Bien and Lai Chau provinces.',20.89,22.82,102.14,103.99,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4542','Kosovo','Kosovo.',41.85,43.25,19.97,21.8,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4543','Serbia','Serbia including Vojvodinja.',42.23,46.19,18.81,23.01,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4543','Serbia','Serbia including Vojvodina.',42.232494354248,46.18111038208,18.81702041626,23.004997253418,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4544','North America - Canada, US (Conus+AK), PRVI','North America - onshore and offshore: Canada - Alberta; British Columbia; Manitoba; New Brunswick; Newfoundland and Labrador; Northwest Territories; Nova Scotia; Nunavut; Ontario; Prince Edward Island; Quebec; Saskatchewan; Yukon. Puerto Rico. United States (USA) - Alabama; Alaska; 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 Virgin Islands.',14.92,86.46,167.65,-47.74,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4545','Vietnam - Ca Mau and Kien Giang','Vietnam - Ca Mau and Kien Giang provinces.',8.33,10.55,103.4,105.54,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4546','Vietnam - An Giang, Lao Cai, Nghe An, Phu Tho, Yen Bai','Vietnam - An Giang, Lao Cai, Nghe An, Phu Tho and Yen Bai provinces.',10.18,22.85,103.53,105.86,0);
|
||||
@@ -3585,3 +3585,7 @@ INSERT INTO "extent" VALUES('EPSG','4606','Europe - British Isles - UK and Irela
|
||||
INSERT INTO "extent" VALUES('EPSG','4607','UK - Glasgow to Kilmarnock','UK - on or related to the rail route from Glasgow via Barrhead to Kilmarnock and the branch to East Kilbride.',55.55,55.95,-4.65,-4.05,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4608','Europe - EVRF2019','Europe - onshore - Andorra; Austria; Belarus; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar, Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; North Macedonia; Norway; Poland; Portugal - mainland; Romania; Russia – west of approximately 60°E; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Ukraine; Vatican City State.',35.95,77.07,-9.56,69.15,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4609','Europe - ETRF EVRF2019','Europe - onshore - Andorra; Austria; Belgium; Bosnia and Herzegovina; Bulgaria; Croatia; Czechia; Denmark; Estonia; Finland; France - mainland; Germany; Gibraltar, Hungary; Italy - mainland and Sicily; Latvia; Liechtenstein; Lithuania; Luxembourg; Netherlands; North Macedonia; Norway; Poland; Portugal - mainland; Romania; San Marino; Slovakia; Slovenia; Spain - mainland; Sweden; Switzerland; United Kingdom (UK) - Great Britain mainland; Vatican City State.',35.95,71.21,-9.56,31.59,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4610','Argentina - Buenos Aires city','Argentina - autonomous city of Buenos Aires.',-34.705314975913,-34.506992229796,-58.531465195974,-58.29240989685,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4611','Malaysia - East Malaysia - Sarawak onshore','Malaysia - East Malaysia - Sarawak onshore.',0.85,5.03,109.54,115.69,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4612','Canada - Newfoundland','Canada - Newfoundland - onshore.',46.567800287196,51.674372389257,-59.477936442937,-52.543563434093,0);
|
||||
INSERT INTO "extent" VALUES('EPSG','4614','Argentina - Comodoro Rivadavia - west of 67.5°W','Argentina - Comodoro Rivadavia area west of 67°30''W.',-46.699998855591,-45.199998855591,-69.5,-67.5,0);
|
||||
|
||||
@@ -807,7 +807,7 @@ INSERT INTO "usage" VALUES('EPSG','3498','geodetic_crs','EPSG','4668','EPSG','12
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','4669','LKS94',NULL,'geographic 2D','EPSG','6422','EPSG','6126',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','3499','geodetic_crs','EPSG','4669','EPSG','1145','EPSG','1183');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','4670','IGM95',NULL,'geographic 2D','EPSG','6422','EPSG','6670',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','3500','geodetic_crs','EPSG','4670','EPSG','3343','EPSG','1183');
|
||||
INSERT INTO "usage" VALUES('EPSG','14404','geodetic_crs','EPSG','4670','EPSG','3343','EPSG','1183');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','4671','Voirol 1879',NULL,'geographic 2D','EPSG','6422','EPSG','6671',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','3501','geodetic_crs','EPSG','4671','EPSG','1365','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','4672','Chatham Islands 1971',NULL,'geographic 2D','EPSG','6422','EPSG','6672',NULL,0);
|
||||
@@ -1241,9 +1241,9 @@ INSERT INTO "usage" VALUES('EPSG','3780','geodetic_crs','EPSG','4980','EPSG','12
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','4981','Yemen NGN96',NULL,'geographic 3D','EPSG','6423','EPSG','6163',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','3781','geodetic_crs','EPSG','4981','EPSG','1257','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','4982','IGM95',NULL,'geocentric','EPSG','6500','EPSG','6670',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','3782','geodetic_crs','EPSG','4982','EPSG','3343','EPSG','1027');
|
||||
INSERT INTO "usage" VALUES('EPSG','14402','geodetic_crs','EPSG','4982','EPSG','3343','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','4983','IGM95',NULL,'geographic 3D','EPSG','6423','EPSG','6670',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','3783','geodetic_crs','EPSG','4983','EPSG','3343','EPSG','1027');
|
||||
INSERT INTO "usage" VALUES('EPSG','14403','geodetic_crs','EPSG','4983','EPSG','3343','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','4984','WGS 72',NULL,'geocentric','EPSG','6500','EPSG','6322',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','3784','geodetic_crs','EPSG','4984','EPSG','1262','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','4985','WGS 72',NULL,'geographic 3D','EPSG','6423','EPSG','6322',NULL,0);
|
||||
@@ -1455,11 +1455,11 @@ INSERT INTO "usage" VALUES('EPSG','4886','geodetic_crs','EPSG','6667','EPSG','11
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','6668','JGD2011',NULL,'geographic 2D','EPSG','6422','EPSG','1128',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4887','geodetic_crs','EPSG','6668','EPSG','1129','EPSG','1183');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','6704','RDN2008',NULL,'geocentric','EPSG','6500','EPSG','1132',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4919','geodetic_crs','EPSG','6704','EPSG','3343','EPSG','1027');
|
||||
INSERT INTO "usage" VALUES('EPSG','14411','geodetic_crs','EPSG','6704','EPSG','3343','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','6705','RDN2008',NULL,'geographic 3D','EPSG','6423','EPSG','1132',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4920','geodetic_crs','EPSG','6705','EPSG','3343','EPSG','1027');
|
||||
INSERT INTO "usage" VALUES('EPSG','14410','geodetic_crs','EPSG','6705','EPSG','3343','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','6706','RDN2008',NULL,'geographic 2D','EPSG','6422','EPSG','1132',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4921','geodetic_crs','EPSG','6706','EPSG','3343','EPSG','1183');
|
||||
INSERT INTO "usage" VALUES('EPSG','14412','geodetic_crs','EPSG','6706','EPSG','3343','EPSG','1183');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','6781','NAD83(CORS96)',NULL,'geocentric','EPSG','6500','EPSG','1133',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4937','geodetic_crs','EPSG','6781','EPSG','1511','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','6782','NAD83(CORS96)',NULL,'geographic 3D','EPSG','6423','EPSG','1133',NULL,0);
|
||||
@@ -2090,8 +2090,8 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','9378','IGb14',NULL,'geocentric','EPSG'
|
||||
INSERT INTO "usage" VALUES('EPSG','13999','geodetic_crs','EPSG','9378','EPSG','2830','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','9379','IGb14',NULL,'geographic 3D','EPSG','6423','EPSG','1272',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14000','geodetic_crs','EPSG','9379','EPSG','1262','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','9380','IGb14',NULL,'geographic 2D','EPSG','6422','EPSG','1191',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14001','geodetic_crs','EPSG','9380','EPSG','1262','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','9380','IGb14',NULL,'geographic 2D','EPSG','6422','EPSG','1272',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14213','geodetic_crs','EPSG','9380','EPSG','1262','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','9384','AbInvA96_2020-IRF',NULL,'geographic 2D','EPSG','6422','EPSG','1273',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14028','geodetic_crs','EPSG','9384','EPSG','4589','EPSG','1196');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','9403','PN68',NULL,'geographic 2D','EPSG','6422','EPSG','1286',NULL,0);
|
||||
@@ -2104,3 +2104,7 @@ INSERT INTO "geodetic_crs" VALUES('EPSG','9469','SRGI2013',NULL,'geographic 3D',
|
||||
INSERT INTO "usage" VALUES('EPSG','14151','geodetic_crs','EPSG','9469','EPSG','1122','EPSG','1027');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','9470','SRGI2013',NULL,'geographic 2D','EPSG','6422','EPSG','1293',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14152','geodetic_crs','EPSG','9470','EPSG','1122','EPSG','1183');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','9474','PZ-90.02',NULL,'geographic 2D','EPSG','6422','EPSG','1157',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14195','geodetic_crs','EPSG','9474','EPSG','1262','EPSG','1183');
|
||||
INSERT INTO "geodetic_crs" VALUES('EPSG','9475','PZ-90.11',NULL,'geographic 2D','EPSG','6422','EPSG','1158',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14194','geodetic_crs','EPSG','9475','EPSG','1262','EPSG','1183');
|
||||
|
||||
@@ -934,8 +934,8 @@ INSERT INTO "geodetic_datum" VALUES('EPSG','6667','Iraq-Kuwait Boundary Datum 19
|
||||
INSERT INTO "usage" VALUES('EPSG','13727','geodetic_datum','EPSG','6667','EPSG','2876','EPSG','1053');
|
||||
INSERT INTO "geodetic_datum" VALUES('EPSG','6668','European Datum 1979',NULL,'EPSG','7022','EPSG','8901','1979-01-01',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13728','geodetic_datum','EPSG','6668','EPSG','1297','EPSG','1027');
|
||||
INSERT INTO "geodetic_datum" VALUES('EPSG','6670','Istituto Geografico Militaire 1995',NULL,'EPSG','7030','EPSG','8901','1995-01-01',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13729','geodetic_datum','EPSG','6670','EPSG','3343','EPSG','1027');
|
||||
INSERT INTO "geodetic_datum" VALUES('EPSG','6670','Istituto Geografico Militaire 1995',NULL,'EPSG','7019','EPSG','8901','1995-01-01',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14401','geodetic_datum','EPSG','6670','EPSG','3343','EPSG','1027');
|
||||
INSERT INTO "geodetic_datum" VALUES('EPSG','6671','Voirol 1879',NULL,'EPSG','7011','EPSG','8901','1879-01-01',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13730','geodetic_datum','EPSG','6671','EPSG','1365','EPSG','1153');
|
||||
INSERT INTO "geodetic_datum" VALUES('EPSG','6672','Chatham Islands Datum 1971',NULL,'EPSG','7022','EPSG','8901','1971-01-01',NULL,NULL,0);
|
||||
@@ -1177,6 +1177,6 @@ INSERT INTO "usage" VALUES('EPSG','13848','geodetic_datum','EPSG','6903','EPSG',
|
||||
INSERT INTO "geodetic_datum" VALUES('EPSG','6904','Lisbon 1890 (Lisbon)',NULL,'EPSG','7004','EPSG','8902','1937-01-01',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13849','geodetic_datum','EPSG','6904','EPSG','1294','EPSG','1153');
|
||||
INSERT INTO "geodetic_datum" VALUES('EPSG','6258','European Terrestrial Reference System 1989 ensemble',NULL,'EPSG','7019','EPSG','8901',NULL,NULL,0.1,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13599','geodetic_datum','EPSG','6258','EPSG','1298','EPSG','1026');
|
||||
INSERT INTO "usage" VALUES('EPSG','14235','geodetic_datum','EPSG','6258','EPSG','1298','EPSG','1026');
|
||||
INSERT INTO "geodetic_datum" VALUES('EPSG','6326','World Geodetic System 1984 ensemble',NULL,'EPSG','7030','EPSG','8901',NULL,NULL,2.0,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13661','geodetic_datum','EPSG','6326','EPSG','1262','EPSG','1245');
|
||||
INSERT INTO "usage" VALUES('EPSG','14343','geodetic_datum','EPSG','6326','EPSG','1262','EPSG','1245');
|
||||
|
||||
@@ -21,6 +21,7 @@ VALUES
|
||||
('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),
|
||||
('AGQG_20191107.gsb','au_ga_AGQG_20191107.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/au_ga_AGQG_20191107.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),
|
||||
@@ -162,7 +163,7 @@ VALUES
|
||||
('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_mainland.tif','jp_gsi_gsigeo2011_mainland.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/jp_gsi_gsigeo2011_mainland.tif',1,1,NULL),
|
||||
('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),
|
||||
|
||||
@@ -277,7 +277,7 @@ INSERT INTO "usage" VALUES('EPSG','8673','grid_transformation','EPSG','1752','EP
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','1803','AGD66 to GDA94 (11)','Replaces AGD66 to GDA94 variants 6, 7 and 10 (codes 1506 1507 1596). Input expects longitudes to be positive west; EPSG GeogCRS AGD66 (code 4202) and GDA94 (code 4283) both have longitudes positive east. May be used as tfm to WGS 84 - see code 15786.','EPSG','9615','NTv2','EPSG','4202','EPSG','4283',0.1,'EPSG','8656','Latitude and longitude difference file','A66 National (13.09.01).gsb',NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Aus 0.1m',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','8724','grid_transformation','EPSG','1803','EPSG','2575','EPSG','1031');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','1804','AGD84 to GDA94 (5)','Replaces AGD84 to GDA94 (4) (code 1593) which itself replaced variant 3 (code 1559). Input expects longitudes to be + west; EPSG GeogCRS AGD84 (code 4203) and GDA94 (code 4283) both have longitudes positive east. May be used as tfm to WGS 84 - see 15785','EPSG','9615','NTv2','EPSG','4203','EPSG','4283',0.1,'EPSG','8656','Latitude and longitude difference file','National 84 (02.07.01).gsb',NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-Aus 0.1m',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','8725','grid_transformation','EPSG','1804','EPSG','2576','EPSG','1031');
|
||||
INSERT INTO "usage" VALUES('EPSG','14199','grid_transformation','EPSG','1804','EPSG','2576','EPSG','1031');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','1841','ATS77 to NAD83(CSRS) (1)','Introduced in 1999. Can be taken as an approximate transformation ATS77 to WGS 84 - see code 1688.','EPSG','9615','NTv2','EPSG','4122','EPSG','4617',1.5,'EPSG','8656','Latitude and longitude difference file','NB7783v2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'GIC-Can NB',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','8762','grid_transformation','EPSG','1841','EPSG','1447','EPSG','1231');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','1843','NAD83 to NAD83(CSRS) (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(CSRS) (code 4617) have longitudes positive east. Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1696.','EPSG','9615','NTv2','EPSG','4269','EPSG','4617',1.5,'EPSG','8656','Latitude and longitude difference file','NAD83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',1);
|
||||
@@ -323,7 +323,7 @@ INSERT INTO "usage" VALUES('EPSG','9347','grid_transformation','EPSG','5334','EP
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','5335','ETRS89 to Malin Head height (1)','May be used for transformations from WGS 84 to Malin Head. Replaced by ETRS89 to Malin Head height (2) (code 7959).','EPSG','1045','Geographic3D to GravityRelatedHeight (OSGM02-Ire)','EPSG','4937','EPSG','5731',0.04,'EPSG','8666','Geoid (height correction) model file','OSGM02_RoI.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-Ire',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','9348','grid_transformation','EPSG','5335','EPSG','1305','EPSG','1133');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','5338','OSGB 1936 to ETRS89 (1)','Approximate alternative to official OSTN02 method (tfm code 7952). Accuracy at 2000 test points compared to OSTN02 (tfm code 1039): latitude 0.5mm av, 17mm max; longitude 0.8mm av, 23mm max. May be taken as approximate CT to WGS 84 - see code 5339.','EPSG','9615','NTv2','EPSG','4277','EPSG','4258',0.03,'EPSG','8656','Latitude and longitude difference file','OSTN02_NTv2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OSGB-UK Gbr02 NT',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','9349','grid_transformation','EPSG','5338','EPSG','1264','EPSG','1033');
|
||||
INSERT INTO "usage" VALUES('EPSG','9349','grid_transformation','EPSG','5338','EPSG','1264','EPSG','1273');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','5339','OSGB 1936 to WGS 84 (7)','Parameter values taken from OSGB 1936 to ETRS89 (1) (tfm code 5338) assuming that ETRS89 is coincident with WGS 84 within the accuracy of the tfm. Within accuracy of the tfm equivalent to OSGB 1936 / British National Grid to WGS 84 (2) (tfm code 15956).','EPSG','9615','NTv2','EPSG','4277','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','OSTN02_NTv2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-UK Gbr02 NT',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','9350','grid_transformation','EPSG','5339','EPSG','1264','EPSG','1041');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','5409','NGVD29 height to NAVD88 height (1)','Interpolation within the gridded data file may be made using any of the horizontal CRSs NAD27, NAD83 or NAD83(HARN).','EPSG','9658','Vertical Offset by Grid Interpolation (VERTCON)','EPSG','5702','EPSG','5703',0.02,'EPSG','8732','Vertical offset file','vertconw.94',NULL,NULL,NULL,NULL,NULL,NULL,'NGS-US Conus W',1);
|
||||
@@ -425,7 +425,7 @@ INSERT INTO "usage" VALUES('EPSG','10205','grid_transformation','EPSG','7673','E
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','7674','CH1903 to ETRS89 (2)','Replaces tfm code 1646. Equivalent to concatenation of transformations 15486 and 1647 to within 2cm. Also used as transformation between CH1903 and CHTRF95 (see code 7673). May be used as approximate tfm CH1903 to WGS 84 - see code 7788.','EPSG','9615','NTv2','EPSG','4149','EPSG','4258',0.25,'EPSG','8656','Latitude and longitude difference file','CHENyx06_ETRS.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'BfL-Che NTv2',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','10206','grid_transformation','EPSG','7674','EPSG','1286','EPSG','1083');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','7709','OSGB 1936 to ETRS89 (2)','Approximate alternative to official OSTN15 method (tfm code 7953). May be taken as approximate transformation OSGB 1936 to WGS 84 - see code 7710. Replaces OSGB 1936 to ETRS89 (1) (tfm code 5338).','EPSG','9615','NTv2','EPSG','4277','EPSG','4258',0.03,'EPSG','8656','Latitude and longitude difference file','OSTN15_NTv2_OSGBtoETRS.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OSGB-UK Gbr15 NT',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','10222','grid_transformation','EPSG','7709','EPSG','4390','EPSG','1133');
|
||||
INSERT INTO "usage" VALUES('EPSG','10222','grid_transformation','EPSG','7709','EPSG','4390','EPSG','1273');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','7710','OSGB 1936 to WGS 84 (9)','Parameter values taken from OSGB 1936 to ETRS89 (3) (tfm code 7709) assuming that ETRS89 is coincident with WGS 84 within the accuracy of the tfm. Replaces OSGB 1936 to WGS 84 (7) (tfm code 5339).','EPSG','9615','NTv2','EPSG','4277','EPSG','4326',1.0,'EPSG','8656','Latitude and longitude difference file','OSTN15_NTv2_OSGBtoETRS.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'OGP-UK Gbr15 NT',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','10223','grid_transformation','EPSG','7710','EPSG','4390','EPSG','1252');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','7711','ETRS89 to ODN height (2)','OSGM15 supersedes OSGM02 geoid model. Replaces ETRS89 to Newlyn height (1) (tfm code 10021).','EPSG','9663','Geographic3D to GravityRelatedHeight (OSGM-GB)','EPSG','4937','EPSG','5701',0.008,'EPSG','8666','Geoid (height correction) model file','OSTN15_OSGM15_GB.txt',NULL,NULL,NULL,NULL,NULL,NULL,'OS-UK Gbr 2015',0);
|
||||
@@ -670,8 +670,8 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9239','NAD27 to NAD83(CSRS)v2 (
|
||||
INSERT INTO "usage" VALUES('EPSG','13884','grid_transformation','EPSG','9239','EPSG','1368','EPSG','1151');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9240','NAD27(CGQ77) to NAD83(CSRS)v2 (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD27(CGQ77) (code 4609) and NAD83(CSRS) (code 4617) have longitudes positive east. Can be taken as an approximate transformation NAD27(CGQ77) to WGS 84 - see code 1691.','EPSG','9615','NTv2','EPSG','4609','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','CGQ77-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13885','grid_transformation','EPSG','9240','EPSG','1368','EPSG','1151');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9241','NAD83 to NAD83(CSRS)v2 (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(CSRS) (code 4617) have longitudes positive east. Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1696.','EPSG','9615','NTv2','EPSG','4269','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','NAD83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13886','grid_transformation','EPSG','9241','EPSG','1368','EPSG','1151');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9241','NAD83 to NAD83(CSRS)v2 (1)','Uses NT method which expects longitudes positive west; EPSG GeogCRSs NAD83 (code 4269) and NAD83(CSRS)v2 (code 8237) have longitudes positive east. Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1696.','EPSG','9615','NTv2','EPSG','4269','EPSG','8237',1.5,'EPSG','8656','Latitude and longitude difference file','NAD83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SGQ-Can QC',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14556','grid_transformation','EPSG','9241','EPSG','1368','EPSG','1151');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9242','NAD27 to NAD83(CSRS)v3 (2)','Can be taken as an approximate transformation NAD27 to WGS 84 - see code 1703.','EPSG','9615','NTv2','EPSG','4267','EPSG','8240',1.5,'EPSG','8656','Latitude and longitude difference file','SK27-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13887','grid_transformation','EPSG','9242','EPSG','2375','EPSG','1151');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9243','NAD83 to NAD83(CSRS)v3 (2)','Can be taken as an approximate transformation NAD83 to WGS 84 - see code 1697.','EPSG','9615','NTv2','EPSG','4269','EPSG','8240',1.5,'EPSG','8656','Latitude and longitude difference file','SK83-98.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'SK PMC-Can SK',0);
|
||||
@@ -786,35 +786,35 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9420','REGCAN95 to La Palma hei
|
||||
INSERT INTO "usage" VALUES('EPSG','14076','grid_transformation','EPSG','9420','EPSG','4596','EPSG','1133');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9421','REGCAN95 to El Hierro height (1)','','EPSG','1025','Geographic3D to GravityRelatedHeight (EGM2008)','EPSG','4080','EPSG','9401',0.05,'EPSG','8666','Geoid (height correction) model file','EGM08_REDNAP_Canarias.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN-Esp 2008',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14077','grid_transformation','EPSG','9421','EPSG','4597','EPSG','1133');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9431','GHA height to EVRF2019 height (1)','Determined at 147 points, SD 0.060m. Offset: mean -0.306m, minimum -0.442m, maximum -0.219m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5778','EPSG','9389',0.12,'EPSG','8732','Vertical offset file','at_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut 2019z',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9431','GHA height to EVRF2019 height (1)','Determined at 147 points, SD 0.060m. Offset: mean -0.306m, minimum -0.442m, maximum -0.219m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5778','EPSG','9389',0.12,'EPSG','8732','Vertical offset file','at_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut 2019z',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14089','grid_transformation','EPSG','9431','EPSG','1037','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9432','GHA height to EVRF2019 mean-tide height (1)','Determined at 147 points, SD 0.058m. Offset: mean -0.330m, minimum -0.463m, maximum -0.245m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5778','EPSG','9390',0.116,'EPSG','8732','Vertical offset file','at_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut 2019m',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9432','GHA height to EVRF2019 mean-tide height (1)','Determined at 147 points, SD 0.058m. Offset: mean -0.330m, minimum -0.463m, maximum -0.245m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5778','EPSG','9390',0.116,'EPSG','8732','Vertical offset file','at_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut 2019m',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14090','grid_transformation','EPSG','9432','EPSG','1037','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9433','Ostend height to EVRF2019 mean-tide height (1)','Determined at 39 points, SD 0.016m. Offset: mean -2.323m, minimum -2.372m, maximum -2.290m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5710','EPSG','9390',0.032,'EPSG','8732','Vertical offset file','be_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel 2019m',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9433','Ostend height to EVRF2019 mean-tide height (1)','Determined at 39 points, SD 0.016m. Offset: mean -2.323m, minimum -2.372m, maximum -2.290m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5710','EPSG','9390',0.032,'EPSG','8732','Vertical offset file','be_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel 2019m',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14091','grid_transformation','EPSG','9433','EPSG','1347','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9434','Ostend height to EVRF2019 height (1)','Determined at 39 points, SD 0.017m. Offset: mean -2.315m, minimum -2.364m, maximum -2.279m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5710','EPSG','9389',0.034,'EPSG','8732','Vertical offset file','be_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel 2019z',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9434','Ostend height to EVRF2019 height (1)','Determined at 39 points, SD 0.017m. Offset: mean -2.315m, minimum -2.364m, maximum -2.279m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5710','EPSG','9389',0.034,'EPSG','8732','Vertical offset file','be_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel 2019z',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14092','grid_transformation','EPSG','9434','EPSG','1347','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9435','DHHN2016 height to EVRF2019 height (1)','Determined at 802 points, SD 0.010m. Offset: mean 0.013m, minimum -0.008m, maximum 0.039m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7837','EPSG','9389',0.02,'EPSG','8732','Vertical offset file','de_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu 2019z',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9435','DHHN2016 height to EVRF2019 height (1)','Determined at 802 points, SD 0.010m. Offset: mean 0.013m, minimum -0.008m, maximum 0.039m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7837','EPSG','9389',0.02,'EPSG','8732','Vertical offset file','de_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu 2019z',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14093','grid_transformation','EPSG','9435','EPSG','3339','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9436','DHHN2016 height to EVRF2019 mean-tide height (1)','Determined at 802 points, SD 0.003m. Offset: mean 0.007m, minimum -0.004m, maximum 0.018m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7837','EPSG','9390',0.006,'EPSG','8732','Vertical offset file','de_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu 2019m',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9436','DHHN2016 height to EVRF2019 mean-tide height (1)','Determined at 802 points, SD 0.003m. Offset: mean 0.007m, minimum -0.004m, maximum 0.018m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7837','EPSG','9390',0.006,'EPSG','8732','Vertical offset file','de_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu 2019m',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14094','grid_transformation','EPSG','9436','EPSG','3339','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9437','Trieste height to EVRF2019 height (1)','Determined at 46 points, SD 0.016m. Offset: mean -0.548m, minimum -0.595m, maximum -0.500m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9389',0.032,'EPSG','8732','Vertical offset file','mk_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Mkd 2019z',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9437','Trieste height to EVRF2019 height (1)','Determined at 46 points, SD 0.016m. Offset: mean -0.548m, minimum -0.595m, maximum -0.500m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9389',0.032,'EPSG','8732','Vertical offset file','mk_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Mkd 2019z',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14095','grid_transformation','EPSG','9437','EPSG','1148','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9438','Trieste height to EVRF2019 mean-tide height (1)','Determined at 46 points, SD 0.015m. Offset: mean -0.604m, minimum -0.650m, maximum -0.558m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9390',0.03,'EPSG','8732','Vertical offset file','mk_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Mkd 2019m',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9438','Trieste height to EVRF2019 mean-tide height (1)','Determined at 46 points, SD 0.015m. Offset: mean -0.604m, minimum -0.650m, maximum -0.558m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9390',0.03,'EPSG','8732','Vertical offset file','mk_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Mkd 2019m',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14096','grid_transformation','EPSG','9438','EPSG','1148','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9439','Cascais height to EVRF2019 height (1)','Determined at 18 points, SD 0.010m. Offset: mean -0.277m, minimum -0.323m, maximum -0.264m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5780','EPSG','9389',0.02,'EPSG','8732','Vertical offset file','pt_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Prt 2019z',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9439','Cascais height to EVRF2019 height (1)','Determined at 18 points, SD 0.010m. Offset: mean -0.277m, minimum -0.323m, maximum -0.264m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5780','EPSG','9389',0.02,'EPSG','8732','Vertical offset file','pt_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Prt 2019z',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14097','grid_transformation','EPSG','9439','EPSG','1294','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9440','Cascais height to EVRF2019 mean-tide height (1)','Determined at 18 points, SD 0.007m. Offset: mean -0.343m, minimum -0.383m, maximum -0.332m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5780','EPSG','9390',0.014,'EPSG','8732','Vertical offset file','pt_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Prt 2019m',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9440','Cascais height to EVRF2019 mean-tide height (1)','Determined at 18 points, SD 0.007m. Offset: mean -0.343m, minimum -0.383m, maximum -0.332m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5780','EPSG','9390',0.014,'EPSG','8732','Vertical offset file','pt_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Prt 2019m',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14098','grid_transformation','EPSG','9440','EPSG','1294','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9441','SVS2010 height to EVRF2019 height (1)','Determined at 66 points, SD 0.003m. Offset: mean -0.258m, minimum -0.264m, maximum -0.250m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','8690','EPSG','9389',0.006,'EPSG','8732','Vertical offset file','si_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svn 2019z',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9441','SVS2010 height to EVRF2019 height (1)','Determined at 66 points, SD 0.003m. Offset: mean -0.258m, minimum -0.264m, maximum -0.250m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','8690','EPSG','9389',0.006,'EPSG','8732','Vertical offset file','si_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svn 2019z',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14099','grid_transformation','EPSG','9441','EPSG','3307','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9442','SVS2010 height to EVRF2019 mean-tide height (1)','Determined at 66 points, SD 0.004m. Offset: mean -0.290m, minimum -0.295m, maximum -0.280m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','8690','EPSG','9390',0.008,'EPSG','8732','Vertical offset file','si_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svn 2019m',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9442','SVS2010 height to EVRF2019 mean-tide height (1)','Determined at 66 points, SD 0.004m. Offset: mean -0.290m, minimum -0.295m, maximum -0.280m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','8690','EPSG','9390',0.008,'EPSG','8732','Vertical offset file','si_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svn 2019m',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14100','grid_transformation','EPSG','9442','EPSG','3307','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9443','LHN95 height to EVRF2019 height (1)','Determined at 553 points, SD 0.075m. Offset: mean -0.204m, minimum -0.330m, maximum -0.130m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5729','EPSG','9389',0.15,'EPSG','8732','Vertical offset file','ch_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019z',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9443','LHN95 height to EVRF2019 height (1)','Determined at 553 points, SD 0.075m. Offset: mean -0.204m, minimum -0.330m, maximum -0.130m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5729','EPSG','9389',0.15,'EPSG','8732','Vertical offset file','ch_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019z',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14101','grid_transformation','EPSG','9443','EPSG','1286','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9444','LHN95 height to EVRF2019 mean-tide height (1)','Determined at 553 points, SD 0.073m. Offset: mean -0.233m, minimum -0.353m, maximum -0.044m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5729','EPSG','9390',0.146,'EPSG','8732','Vertical offset file','ch_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019m',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9444','LHN95 height to EVRF2019 mean-tide height (1)','Determined at 553 points, SD 0.073m. Offset: mean -0.233m, minimum -0.353m, maximum -0.044m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5729','EPSG','9390',0.146,'EPSG','8732','Vertical offset file','ch_2019_m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019m',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14102','grid_transformation','EPSG','9444','EPSG','1286','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9445','ODN height to EVRF2019 height (1)','Determined at 35 points, SD 0.011m. Offset: mean -0.181m, minimum -0.202m, maximum -0.161m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5701','EPSG','9389',0.022,'EPSG','8732','Vertical offset file','gb_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Gbr 2019z',0);
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9445','ODN height to EVRF2019 height (1)','Determined at 35 points, SD 0.011m. Offset: mean -0.181m, minimum -0.202m, maximum -0.161m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5701','EPSG','9389',0.022,'EPSG','8732','Vertical offset file','gb_2019_z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Gbr 2019z',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14103','grid_transformation','EPSG','9445','EPSG','2792','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9454','ETRS89 to GBK19-IRF (1)','In conjunction with the GBK19-TM map projection (code 9455) applied to GBK19-IRF (code 9453), emulates the GBK19 Snake projection. Applied to ETRS89 (as realized through the OSNet v2009 CORS) defines GBK19-IRF hence is errorless.','EPSG','9615','NTv2','EPSG','4258','EPSG','9453',0.0,'EPSG','8656','Latitude and longitude difference file','TN15-ETRS89-to-GBK19-IRF.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'NR-Gbr GBK19 OSNet2009',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14129','grid_transformation','EPSG','9454','EPSG','4607','EPSG','1141');
|
||||
@@ -826,6 +826,86 @@ INSERT INTO "grid_transformation" VALUES('EPSG','9466','GDA2020 to GDA2020 + AHD
|
||||
INSERT INTO "usage" VALUES('EPSG','14146','grid_transformation','EPSG','9466','EPSG','4493','EPSG','1133');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9467','GDA94 to GDA94 + AHD height (1)','Reversible alternative to GDA94 to AHD height (1) (code 5656). Uses AUSGeoid09 model which uses bi-cubic interpolation; bi-linear interpolation of the grid file will give results agreeing to within 1cm 99.97% of the time.','EPSG','1083','Geog3D to Geog2D+Vertical (AUSGeoid v2)','EPSG','4939','EPSG','9464',0.15,'EPSG','8666','Geoid (height correction) model file','AUSGeoid09_V1.01.gsb',NULL,NULL,NULL,NULL,'EPSG','4283','GA-Aus09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14147','grid_transformation','EPSG','9467','EPSG','4493','EPSG','1133');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9483','Canada velocity grid v7','','EPSG','1070','Point motion by grid (Canada NTv2_Vel)','EPSG','8254','EPSG','8254',0.01,'EPSG','1050','Point motion velocity grid file','cvg70.cvb',NULL,NULL,NULL,NULL,NULL,NULL,'NRC-Can cvg7.0',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14214','grid_transformation','EPSG','9483','EPSG','1061','EPSG','1131');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9484','ETRS89 to NN54 height (1)','','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4937','EPSG','5776',0.02,'EPSG','8666','Geoid (height correction) model file','href2008a.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2008',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14215','grid_transformation','EPSG','9484','EPSG','1352','EPSG','1133');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9485','ETRS89 to NN2000 height (1)','','EPSG','9665','Geographic3D to GravityRelatedHeight (gtx)','EPSG','4937','EPSG','5941',0.02,'EPSG','8666','Geoid (height correction) model file','HREF2018B_NN2000_EUREF89.gtx',NULL,NULL,NULL,NULL,NULL,NULL,'SK-Nor 2018',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14216','grid_transformation','EPSG','9485','EPSG','1352','EPSG','1133');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9496','MGI 1901 to SRB-ETRS89 (9)','','EPSG','9615','NTv2','EPSG','3906','EPSG','8685',0.03,'EPSG','8656','Latitude and longitude difference file','MGI1901_TO_SRBETRS89_NTv2.gsb',NULL,NULL,NULL,NULL,NULL,NULL,'RGZ-Srb 0.1m 2020',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14226','grid_transformation','EPSG','9496','EPSG','4543','EPSG','1185');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9550','NAD83 to NAD83(CSRS)v6 (10)','File NLCSRSV4A.GSB corrects error in file header record previously released as NLCSRSV4.GSB. No change to gridded data.','EPSG','9615','NTv2','EPSG','4269','EPSG','8252',0.1,'EPSG','8656','Latitude and longitude difference file','NLCSRSV4A.GSB ',NULL,NULL,NULL,NULL,NULL,NULL,'CGS-Can Nfl island',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14831','grid_transformation','EPSG','9550','EPSG','4612','EPSG','1026');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9553','Cascais height to EVRF2019 height (2)','Determined at 18 points, SD 0.014m. Offset: mean -0.275m, minimum -0.322m, maximum -0.262m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5780','EPSG','9389',0.028,'EPSG','8732','Vertical offset file','pt_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Prt 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14842','grid_transformation','EPSG','9553','EPSG','1294','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9554','Cascais height to EVRF2019 mean-tide height (2)','Determined at 18 points, SD 0.012m. Offset: mean -0.340m, minimum -0.383m, maximum -0.324m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5780','EPSG','9390',0.024,'EPSG','8732','Vertical offset file','pt_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Prt 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14671','grid_transformation','EPSG','9554','EPSG','1294','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9555','DHHN2016 height to EVRF2019 height (2)','Determined at 802 points, SD 0.010m. Offset: mean 0.016m, minimum -0.004m, maximum 0.052m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7837','EPSG','9389',0.02,'EPSG','8732','Vertical offset file','de_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14672','grid_transformation','EPSG','9555','EPSG','3339','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9556','DHHN2016 height to EVRF2019 mean-tide height (2)','Determined at 802 points, SD 0.004m. Offset: mean 0.009m, minimum -0.011m, maximum 0.028m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7837','EPSG','9390',0.008,'EPSG','8732','Vertical offset file','de_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Deu 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14843','grid_transformation','EPSG','9556','EPSG','3339','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9557','GHA height to EVRF2019 height (2)','Determined at 150 points, SD 0.068m. Offset: mean -0.309m, minimum -0.450m, maximum -0.210m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5778','EPSG','9389',0.136,'EPSG','8732','Vertical offset file','at_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14673','grid_transformation','EPSG','9557','EPSG','1037','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9558','GHA height to EVRF2019 mean-tide height (2)','Determined at 150 points, SD 0.065m. Offset: mean -0.333m, minimum -0.471m, maximum -0.236m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5778','EPSG','9390',0.13,'EPSG','8732','Vertical offset file','at_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Aut 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14674','grid_transformation','EPSG','9558','EPSG','1037','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9559','LHN95 height to EVRF2019 height (2)','Determined at 553 points, SD 0.073m. Offset: mean -0.216m, minimum -0.478m, maximum -0.021m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5729','EPSG','9389',0.146,'EPSG','8732','Vertical offset file','ch_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14675','grid_transformation','EPSG','9559','EPSG','1286','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9560','LHN95 height to EVRF2019 mean-tide height (2)','Determined at 553 points, SD 0.071m. Offset: mean -0.244m, minimum -0.506m, maximum -0.012m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5729','EPSG','9390',0.142,'EPSG','8732','Vertical offset file','ch_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Che 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14676','grid_transformation','EPSG','9560','EPSG','1286','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9561','ODN height to EVRF2019 height (2)','Determined at 35 points, SD 0.012m. Offset: mean -0.178m, minimum -0.199m, maximum -0.159m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5701','EPSG','9389',0.024,'EPSG','8732','Vertical offset file','gb_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Gbr 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14677','grid_transformation','EPSG','9561','EPSG','2792','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9563','Ostend height to EVRF2019 height (2)','Determined at 39 points, SD 0.021m. Offset: mean -2.312m, minimum -2.362m, maximum -2.275m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5710','EPSG','9389',0.042,'EPSG','8732','Vertical offset file','be_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14678','grid_transformation','EPSG','9563','EPSG','1347','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9564','Ostend height to EVRF2019 mean-tide height (2)','Determined at 39 points, SD 0.020m. Offset: mean -2.320m, minimum -2.370m, maximum -2.285m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5710','EPSG','9390',0.04,'EPSG','8732','Vertical offset file','be_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bel 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14679','grid_transformation','EPSG','9564','EPSG','1347','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9565','SVS2010 height to EVRF2019 height (2)','Determined at 65 points, SD 0.003m. Offset: mean -0.259m, minimum -0.265m, maximum -0.251m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','8690','EPSG','9389',0.006,'EPSG','8732','Vertical offset file','si_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svn 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14680','grid_transformation','EPSG','9565','EPSG','3307','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9566','SVS2010 height to EVRF2019 mean-tide height (2)','Determined at 65 points, SD 0.004m. Offset: mean -0.290m, minimum -0.295m, maximum -0.280m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','8690','EPSG','9390',0.008,'EPSG','8732','Vertical offset file','si_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Svn 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14681','grid_transformation','EPSG','9566','EPSG','3307','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9567','Trieste height to EVRF2019 height (2)','Determined at 46 points, SD 0.021m. Offset: mean -0.551m, minimum -0.606m, maximum -0.490m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9389',0.042,'EPSG','8732','Vertical offset file','mk_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Mkd 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14668','grid_transformation','EPSG','9567','EPSG','1148','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9568','Trieste height to EVRF2019 mean-tide height (2)','Determined at 46 points, SD 0.022m. Offset: mean -0.606m, minimum -0.662m, maximum -0.548m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9390',0.044,'EPSG','8732','Vertical offset file','mk_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Mkd 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14667','grid_transformation','EPSG','9568','EPSG','1148','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9569','Trieste height to EVRF2019 height (3)','Determined at 10 points, SD 0.006m. Offset: mean -0.336m, minimum -0.346m, maximum -0.326m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9389',0.012,'EPSG','8732','Vertical offset file','ba_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bih 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14666','grid_transformation','EPSG','9569','EPSG','1050','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9570','Trieste height to EVRF2019 mean-tide height (3)','Determined at 10 points, SD 0.005m. Offset: mean -0.377m, minimum -0.386m, maximum -0.368m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5195','EPSG','9390',0.01,'EPSG','8732','Vertical offset file','ba_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bih 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14665','grid_transformation','EPSG','9570','EPSG','1050','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9571','Baltic 1982 height to EVRF2019 height (1)','Determined at 58 points, SD 0.024m. Offset: mean 0.228m, minimum 0.167m, maximum 0.277m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5786','EPSG','9389',0.048,'EPSG','8732','Vertical offset file','bgalt_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bgr 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14628','grid_transformation','EPSG','9571','EPSG','3224','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9572','Baltic 1982 height to EVRF2019 mean-tide height (1)','Determined at 58 points, SD 0.021m. Offset: mean 0.180m, minimum 0.123m, maximum 0.228m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5786','EPSG','9390',0.042,'EPSG','8732','Vertical offset file','bgalt_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Bgr 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14781','grid_transformation','EPSG','9572','EPSG','3224','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9573','N2000 height to EVRF2019 height (1)','Determined at 191 points, SD 0.002m. Offset: mean 0.002m, minimum -0.005m, maximum 0.007m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','3900','EPSG','9389',0.004,'EPSG','8732','Vertical offset file','fi_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Fin 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14664','grid_transformation','EPSG','9573','EPSG','3333','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9574','N2000 height to EVRF2019 mean-tide height (1)','Determined at 191 points, SD 0.012m. Offset: mean 0.054m, minimum 0.034m, maximum 0.079m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','3900','EPSG','9390',0.024,'EPSG','8732','Vertical offset file','fi_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Fin 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14663','grid_transformation','EPSG','9574','EPSG','3333','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9575','NGF-IGN69 height to EVRF2019 height (1)','Determined at 1228 points, SD 0.054m. Offset: mean -0.539m, minimum -0.651m, maximum -0.380m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5720','EPSG','9389',0.108,'EPSG','8732','Vertical offset file','fr_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Fra 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14662','grid_transformation','EPSG','9575','EPSG','1326','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9576','NGF-IGN69 height to EVRF2019 mean-tide height (1)','Determined at 1228 points, SD 0.043m. Offset: mean -0.561m, minimum -0.658m, maximum -0.430m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5720','EPSG','9390',0.086,'EPSG','8732','Vertical offset file','fr_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Fra 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14682','grid_transformation','EPSG','9576','EPSG','1326','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9577','EOMA height 1980 to EVRF2019 height (1)','Determined at 35 points, SD 0.003m. Offset: mean 0.163m, minimum 0.156m, maximum 0.171m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5787','EPSG','9389',0.006,'EPSG','8732','Vertical offset file','hu_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Hun 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14844','grid_transformation','EPSG','9577','EPSG','1119','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9578','EOMA 1980 height to EVRF2019 mean-tide height (1)','Determined at 35 points, SD 0.005m. Offset: mean 0.138m, minimum 0.127m, maximum 0.149m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5787','EPSG','9390',0.01,'EPSG','8732','Vertical offset file','hu_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Hun 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14686','grid_transformation','EPSG','9578','EPSG','1119','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9579','Latvia 2000 height to EVRF2019 height (1)','Determined at 134 points, SD 0.003m. Offset: mean 0.009m, minimum 0.000m, maximum 0.019m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7700','EPSG','9389',0.006,'EPSG','8732','Vertical offset file','lv_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Lva 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14687','grid_transformation','EPSG','9579','EPSG','3268','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9580','Latvia 2000 height to EVRF2019 mean-tide height (1)','Determined at 134 points, SD 0.004m. Offset: mean 0.031m, minimum 0.025m, maximum 0.045m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','7700','EPSG','9390',0.008,'EPSG','8732','Vertical offset file','lv_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Lva 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14780','grid_transformation','EPSG','9580','EPSG','3268','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9581','NAP height to EVRF2019 height (1)','Determined at 1095 points, SD 0.008m. Offset: mean 0.021m, minimum 0.009m, maximum 0.055m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5709','EPSG','9389',0.016,'EPSG','8732','Vertical offset file','nl_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Nld 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14689','grid_transformation','EPSG','9581','EPSG','1275','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9582','NAP height to EVRF2019 mean-tide height (1)','Determined at 1095 points, SD 0.006m. Offset: mean 0.021m, minimum 0.008m, maximum 0.047m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5709','EPSG','9390',0.012,'EPSG','8732','Vertical offset file','nl_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Nld 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14779','grid_transformation','EPSG','9582','EPSG','1275','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9583','Constanta height to EVRF2019 height (1)','Determined at 96 points, SD 0.006m. Offset: mean 0.050m, minimum 0.029m, maximum 0.063m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5781','EPSG','9389',0.12,'EPSG','8732','Vertical offset file','ro_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Rou 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14693','grid_transformation','EPSG','9583','EPSG','3295','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9645','Constanta height to EVRF2019 mean-tide height (1)','Determined at 96 points, SD 0.010m. Offset: mean 0.015m, minimum -0.006m, maximum 0.040m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5781','EPSG','9390',0.02,'EPSG','8732','Vertical offset file','ro_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Rou 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14692','grid_transformation','EPSG','9645','EPSG','3295','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9646','Alicante height to EVRF2019 height (1)','Determined at 155 points, SD 0.041m. Offset: mean -0.427m, minimum -0.555m, maximum -0.355m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5782','EPSG','9389',0.082,'EPSG','8732','Vertical offset file','es_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Esp 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14696','grid_transformation','EPSG','9646','EPSG','2366','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9647','Alicante height to EVRF2019 mean-tide height (1)','Determined at 155 points, SD 0.039m. Offset: mean -0.488m, minimum -0.603m, maximum -0.426m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5782','EPSG','9390',0.078,'EPSG','8732','Vertical offset file','es_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Esp 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14854','grid_transformation','EPSG','9647','EPSG','2366','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9648','RH2000 height to EVRF2019 height (1)','Determined at 3356 points, SD 0.003m. Offset: mean -0.003m, minimum -0.014m, maximum 0.003m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5613','EPSG','9389',0.006,'EPSG','8732','Vertical offset file','se_2019z.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Swe 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14697','grid_transformation','EPSG','9648','EPSG','3313','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','9649','RH2000 height to EVRF2019 mean-tide height (1)','Determined at 3356 points, SD 0.016m. Offset: mean 0.036m, minimum 0.003m, maximum 0.071m.','EPSG','1085','Vertical Offset by Grid Interpolation (asc)','EPSG','5613','EPSG','9390',0.032,'EPSG','8732','Vertical offset file','se_2019m.asc',NULL,NULL,NULL,NULL,'EPSG','4258','EuG-Swe 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14778','grid_transformation','EPSG','9649','EPSG','3313','EPSG','1059');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','10000','RGF93 to NGF-IGN69 height (1)','May be used for transformations from WGS 84 to NGF-IGN69 height. Accuracy at each 0.1 deg x 0.1 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4965','EPSG','5720',0.5,'EPSG','8666','Geoid (height correction) model file','ggf97a.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','11001','grid_transformation','EPSG','10000','EPSG','1326','EPSG','1133');
|
||||
INSERT INTO "grid_transformation" VALUES('EPSG','10001','ETRS89 to NGF-IGN69 height (1)','Parameter values taken from RGF93 to NGF-IGN69 height (1) (code 10000) assuming that RGF93 is equivalent to ETRS89 within the accuracy of the transformation. Accuracy at each 0.1 deg x 0.1 degree grid node is given within the geoid model file.','EPSG','9664','Geographic3D to GravityRelatedHeight (IGN1997)','EPSG','4937','EPSG','5720',0.5,'EPSG','8666','Geoid (height correction) model file','ggf97a.txt',NULL,NULL,NULL,NULL,NULL,NULL,'IGN Fra',0);
|
||||
|
||||
@@ -157,7 +157,7 @@ INSERT INTO "grid_transformation" VALUES(
|
||||
'EPSG','6667', -- source CRS (JDG2011)
|
||||
'EPSG','6695', -- target CRS (JDG2011 (vertical) height)
|
||||
NULL,
|
||||
'EPSG','8666','Geoid (height correction) model file','jp_gsi_gsigeo2011_mainland.tif',
|
||||
'EPSG','8666','Geoid (height correction) model file','jp_gsi_gsigeo2011.tif',
|
||||
NULL,NULL,NULL,NULL,NULL,NULL,NULL,0);
|
||||
|
||||
INSERT INTO "usage" VALUES(
|
||||
|
||||
@@ -79,9 +79,9 @@ INSERT INTO "usage" VALUES('EPSG','8017','helmert_transformation','EPSG','1096',
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','1097','Dealul Piscului 1970 to WGS 84 (2)','Parameter values taken from Pulkovo 1942 to WGS 84 (9) (code 1293) assuming that Pulkovo 1942 in Romania is equivalent to Dealul Piscului 1970.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4317','EPSG','4326',7.0,28.0,-121.0,-77.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Rom',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','8018','helmert_transformation','EPSG','1097','EPSG','1197','EPSG','1160');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','1098','IGM95 to ETRS89 (1)','IGM95 is a realization of ETRS89. May be taken as approximate transformation IGM95 to WGS 84 - see code 1099.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4670','EPSG','4258',0.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','8019','helmert_transformation','EPSG','1098','EPSG','3343','EPSG','1161');
|
||||
INSERT INTO "usage" VALUES('EPSG','14407','helmert_transformation','EPSG','1098','EPSG','3343','EPSG','1161');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','1099','IGM95 to WGS 84 (1)','Parameter values taken from IGM95 to ETRS89 (1) (code 1098) assuming that ETRS89 is coincident with WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4670','EPSG','4326',1.0,0.0,0.0,0.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IGM-Ita',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','8020','helmert_transformation','EPSG','1099','EPSG','3343','EPSG','1252');
|
||||
INSERT INTO "usage" VALUES('EPSG','14408','helmert_transformation','EPSG','1099','EPSG','3343','EPSG','1252');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','1100','Adindan to WGS 84 (1)','Derived at 22 stations. Accuracy 5m in each axis.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4201','EPSG','4326',9.0,-166.0,-15.0,204.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Eth Sud',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','8021','helmert_transformation','EPSG','1100','EPSG','1271','EPSG','1160');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','1101','Adindan to WGS 84 (2)','Derived at 1 station connected to the Adindan (Blue Nile 1958) network through the 1968-69 12th parallel traverse. Accuracy 25m in each axis. Note: the Adindan (Blue Nile 1958) CRS is used in Ethiopia and Sudan, not Burkino Faso.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4201','EPSG','4326',44.0,-118.0,-14.0,218.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'DMA-Bfa',0);
|
||||
@@ -416,7 +416,7 @@ INSERT INTO "usage" VALUES('EPSG','8199','helmert_transformation','EPSG','1278',
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','1279','AGD84 to GDA94 (1)','Derived at 327 stations. May be taken as approximate transformation AGD84 to WGS 84 - see code 15789. For higher accuracy use AGD84 to GDA94 (2) (code 1280). Note: AGD84 officially adopted only in Queensland, South Australia and Western Australia.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4203','EPSG','4283',5.0,-128.5,-53.0,153.4,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-Aus 5m',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','8200','helmert_transformation','EPSG','1279','EPSG','2576','EPSG','1045');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','1280','AGD84 to GDA94 (2)','Replaces AGD84 to WGS 84 (2) (code 1236). May be taken as approximate transformation AGD84 to WGS 84 - see code 1669. Note: although applicable nationwide, AGD84 officially adopted only in Queensland, South Australia and Western Australia.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4203','EPSG','4283',1.0,-117.763,-51.51,139.061,'EPSG','9001',-0.292,-0.443,-0.277,'EPSG','9104',-0.191,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'Auslig-Aus 1m',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','8201','helmert_transformation','EPSG','1280','EPSG','2576','EPSG','1041');
|
||||
INSERT INTO "usage" VALUES('EPSG','14198','helmert_transformation','EPSG','1280','EPSG','2576','EPSG','1041');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','1281','Pulkovo 1995 to WGS 84 (1)','Derived through concatenation of Pulkovo 1995 to PZ-90 (1) (tfm code 1257) and PZ-90 to WGS 84 (2) (tfm code 1244). Mandated for use in Russia by GOST R 51794-2001, but this has been superseded by GOST R 51794-2008. Replaced by tfm code 5043.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4200','EPSG','4326',1.0,24.82,-131.21,-82.66,'EPSG','9001',0.0,0.0,-0.16,'EPSG','9104',-0.12,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GOST-Rus',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','8202','helmert_transformation','EPSG','1281','EPSG','1198','EPSG','1041');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','1282','Samboja to WGS 84 (1)','Datum shift derived through ITRF93.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4125','EPSG','4326',NULL,-404.78,685.68,45.47,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'TOT-Idn Mah',1);
|
||||
@@ -2036,8 +2036,8 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','8270','Saint Pierre et Mique
|
||||
INSERT INTO "usage" VALUES('EPSG','10463','helmert_transformation','EPSG','8270','EPSG','3299','EPSG','1041');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','8365','ETRS89 to S-JTSK [JTSK03] (1)','Derived at 684 points with known S-JTSK and ETRS89 (ETRF2000 realization) coordinates. Scale parameter was constrained to be zero. UGKK consider this transformation to not be reversible at the 1mm accuracy level: for reverse see transformation code 8367.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4258','EPSG','8351',0.001,-485.014055,-169.473618,-483.842943,'EPSG','9001',7.78625453,4.39770887,4.10248899,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UGKK-Svk',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','10512','helmert_transformation','EPSG','8365','EPSG','1211','EPSG','1115');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','8366','ITRF2014 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. See ITRF2014 to ETRF2014 (2) (code 8407) for an exactly equivalent transformation but with the transformation''s parameter values at epoch 2010.00.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','8401',0.0,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','10513','helmert_transformation','EPSG','8366','EPSG','1298','EPSG','1129');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','8366','ITRF2014 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m. See ITRF2014 to ETRF2014 (2) (code 8880) for an exactly equivalent transformation but with the transformation''s parameter values at epoch 2010.00.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','8401',0.0,0.0,0.0,0.0,'EPSG','1025',0.0,0.0,0.0,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',0.0,'EPSG','1030',1989.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14203','helmert_transformation','EPSG','8366','EPSG','1298','EPSG','1129');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','8367','S-JTSK [JTSK03] to ETRS89 (1)','Derived at 684 points. At the 1mm accuracy level this transformation is not reversible: for reverse see transformation code 8365. May be taken as approximate transformation to WGS 84 - see code 8368.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8351','EPSG','4258',0.001,485.021,169.465,483.839,'EPSG','9001',-7.786342,-4.397554,-4.102655,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UGKK-Svk',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','10514','helmert_transformation','EPSG','8367','EPSG','1211','EPSG','1027');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','8368','S-JTSK [JTSK03] to WGS 84 (1)','Parameter values taken from S-JTSK [JTSK03] to ETRS89 (1) (code 8367) assuming that ETRS89 (ETRF2000 realization) is coincident with WGS 84 within the accuracy of the transformation. Within the 1m accuracy of this transformation, it is reversible.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8351','EPSG','4326',1.0,485.021,169.465,483.839,'EPSG','9001',-7.786342,-4.397554,-4.102655,'EPSG','9104',0.0,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'UGKK-Svk',0);
|
||||
@@ -2172,8 +2172,8 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','8878','ITRF90 to ETRF2014 (1
|
||||
INSERT INTO "usage" VALUES('EPSG','10820','helmert_transformation','EPSG','8878','EPSG','1298','EPSG','1027');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','8879','ITRF89 to ETRF2014 (1)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9 or nm/m.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','4911','EPSG','8401',0.0,-30.4,-35.5,130.8,'EPSG','1025',1.785,11.151,-16.43,'EPSG','1031',-8.19,'EPSG','1028',-0.1,0.5,3.3,'EPSG','1027',0.085,0.531,-0.79,'EPSG','1032',-0.12,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','10821','helmert_transformation','EPSG','8879','EPSG','1298','EPSG','1027');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','8880','ITRF2014 to ETRF2014 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9. See ITRF2014 to ETRF2014 (1) (code 8366) for transformation which defines ETRF2014. Transformation 8407 is equivalent to 8366 but with parameter values at epoch 2010.00.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','8401',0.0,0.0,0.0,0.0,'EPSG','1025',1.785,11.151,-16.17,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',0.0,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','10822','helmert_transformation','EPSG','8880','EPSG','1298','EPSG','1027');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','8880','ITRF2014 to ETRF2014 (2)','Scale difference in ppb and scale difference rate in ppb/yr where 1/billion = 1E-9. See ITRF2014 to ETRF2014 (1) (code 8366) for transformation which defines ETRF2014. Transformation 8880 is equivalent to 8366 but with parameter values at epoch 2010.00.','EPSG','1053','Time-dependent Position Vector tfm (geocentric)','EPSG','7789','EPSG','8401',0.0,0.0,0.0,0.0,'EPSG','1025',1.785,11.151,-16.17,'EPSG','1031',0.0,'EPSG','1028',0.0,0.0,0.0,'EPSG','1027',0.085,0.531,-0.77,'EPSG','1032',0.0,'EPSG','1030',2010.0,'EPSG','1029',NULL,NULL,NULL,NULL,NULL,'EUREF-Eur 2014',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14204','helmert_transformation','EPSG','8880','EPSG','1298','EPSG','1027');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','8882','Camacupa 2015 to WGS 84 (11)','Used by CIDDEMA for delimitation of Angola''s EEZ boundary. Derived by Univ. of Lisbon using 38 REPANGOL points. Average horizontal error 1m, vertical 3m; max radial error 6m. Application offshore differs from Camacupa 1948 to WGS 84 by approx 25m.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','8694','EPSG','4326',3.0,-93.799,-132.737,-219.073,'EPSG','9001',1.844,-0.648,6.37,'EPSG','9104',-0.169,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'CIDDEMA-Ago',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','10823','helmert_transformation','EPSG','8882','EPSG','1029','EPSG','1053');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','8883','Camacupa 1948 to RSAO13 (1)','Parameter values taken from Camacupa 1948 to WGS 84 (7) (code 1324) assuming that RSAO13 is coincident with WGS 84 within the accuracy of the transformation.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4220','EPSG','8699',3.0,-48.0,-345.0,-231.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ELF-Ago B15',0);
|
||||
@@ -2406,6 +2406,10 @@ INSERT INTO "helmert_transformation" VALUES('EPSG','9460','ITRF2014 to ATRF2014
|
||||
INSERT INTO "usage" VALUES('EPSG','14140','helmert_transformation','EPSG','9460','EPSG','4177','EPSG','1268');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','9472','DGN95 to SRGI2013 (1)','Derived at 533 stations. Mean residual 0.218m. Note: information source gives rotations given in radians.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4755','EPSG','9470',0.2,-0.2773,0.0534,0.4819,'EPSG','9001',0.0935,-0.0286,0.00969,'EPSG','9109',-0.028,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SRGI-Idn',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14154','helmert_transformation','EPSG','9472','EPSG','1122','EPSG','1026');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','9486','MGI 1901 to WGS 84 (15)','Parameter values from MGI 1901 to ETRS89 (8) (code 9495). Assumes SRB-ETRS89 and WGS 84 can be considered the same to within the accuracy of the transformation.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','4326',1.0,577.84843,165.45019,390.43652,'EPSG','9001',-4.93131,0.96052,13.05072,'EPSG','9104',7.86546,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'IOGP-Srb 2020',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14220','helmert_transformation','EPSG','9486','EPSG','4543','EPSG','1041');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','9495','MGI 1901 to SRB-ETRS89 (8)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','3906','EPSG','8685',0.46,577.84843,165.45019,390.43652,'EPSG','9001',-4.93131,0.96052,13.05072,'EPSG','9104',7.86546,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'RGZ-Srb 0.5m 2020',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14227','helmert_transformation','EPSG','9495','EPSG','4543','EPSG','1153');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','10085','Trinidad 1903 to WGS 84 (2)','Parameter values provided to EOG by Trinidad Ministry of Energy and Energy Industries. Used by EOG offshore Trinidad (including Pelican, Kiskadee and Ibis fields) since 1996.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4302','EPSG','4326',3.0,-61.0,285.2,471.6,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EOG-Tto Trin',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','11086','helmert_transformation','EPSG','10085','EPSG','1339','EPSG','1136');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','10086','JAD69 to WGS 72 (1)','Derived in 1977 through Transit observations at 2 stations by US DMA.','EPSG','9603','Geocentric translations (geog2D domain)','EPSG','4242','EPSG','4322',15.0,48.0,208.0,382.0,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Jam',0);
|
||||
@@ -2896,7 +2900,7 @@ INSERT INTO "usage" VALUES('EPSG','11987','helmert_transformation','EPSG','15977
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','15978','NAD27 to WGS 84 (88)','','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4267','EPSG','4326',1.0,2.478,149.752,197.726,'EPSG','9001',-0.526,-0.498,0.501,'EPSG','9104',0.685,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ONHG-Cub',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','11988','helmert_transformation','EPSG','15978','EPSG','1077','EPSG','1041');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','15979','AGD66 to GDA94 (12)','Use only offshore: onshore, tfms 1458 (ACT), 1594 (Tas), 1460 (NSW and Vic) and 1595 (NT) are more accurate.May be used as a tfm to WGS 84 - see code 15980.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4283',3.0,-117.808,-51.536,137.784,'EPSG','9001',-0.303,-0.446,-0.234,'EPSG','9104',-0.29,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ICSM-Aus off',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','11989','helmert_transformation','EPSG','15979','EPSG','3559','EPSG','1043');
|
||||
INSERT INTO "usage" VALUES('EPSG','14200','helmert_transformation','EPSG','15979','EPSG','3559','EPSG','1043');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','15980','AGD66 to WGS 84 (18)','Parameter values from AGD66 to GDA94 (12) (code 15979). Assumes GDA94 and WGS 84 can be considered the same to within the accuracy of the transformation. Use only offshore: onshore tfms 1665-68 for ACT, NSW/Vic, Tas and NT respectively are more accurate.','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4202','EPSG','4326',3.0,-117.808,-51.536,137.784,'EPSG','9001',-0.303,-0.446,-0.234,'EPSG','9104',-0.29,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EPSG-Aus off',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','11990','helmert_transformation','EPSG','15980','EPSG','3559','EPSG','1043');
|
||||
INSERT INTO "helmert_transformation" VALUES('EPSG','15981','MGI to Slovenia 1996 (1)','Info source also gives a separate reverse tfm with slightly different parameter values. Given the tfm accuracy these differences are not significant and this tfm can be considered reversible. May be taken as approximate tfm MGI to WGS 84 (see code 15982)','EPSG','9607','Coordinate Frame rotation (geog2D domain)','EPSG','4312','EPSG','4765',1.0,409.545,72.164,486.872,'EPSG','9001',-3.085957,-5.46911,11.020289,'EPSG','9104',17.919665,'EPSG','9202',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'GuRS-Svn',1);
|
||||
|
||||
+13
-2
@@ -1,2 +1,13 @@
|
||||
INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v10.003');
|
||||
INSERT INTO "metadata" VALUES('EPSG.DATE', '2020-10-05');
|
||||
-- Version of the database structure.
|
||||
-- The major number indicates an incompatible change (e.g. table or column
|
||||
-- removed or renamed).
|
||||
-- The minor number is incremented if a backward compatible change done, that
|
||||
-- is the new database can still work with an older PROJ version.
|
||||
-- When updating those numbers, the DATABASE_LAYOUT_VERSION_MAJOR and
|
||||
-- DATABASE_LAYOUT_VERSION_MINOR constants in src/iso19111/factory.cpp must be
|
||||
-- updated as well.
|
||||
INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MAJOR', 1);
|
||||
INSERT INTO "metadata" VALUES('DATABASE.LAYOUT.VERSION.MINOR', 0);
|
||||
|
||||
INSERT INTO "metadata" VALUES('EPSG.VERSION', 'v10.008');
|
||||
INSERT INTO "metadata" VALUES('EPSG.DATE', '2020-12-16');
|
||||
|
||||
+2174
File diff suppressed because it is too large
Load Diff
@@ -438,12 +438,18 @@ INSERT INTO "other_transformation" VALUES('EPSG','8359','Baltic 1957 height to B
|
||||
INSERT INTO "usage" VALUES('EPSG','10507','other_transformation','EPSG','8359','EPSG','1306','EPSG','1111');
|
||||
INSERT INTO "other_transformation" VALUES('EPSG','9371','Vienna height to GHA height (1)','Defines Wiener Null surface. GHA vertical reference surface is 156.68m below Wiener Null surface.','EPSG','9616','Vertical Offset','EPSG','8881','EPSG','5778',0.0,'EPSG','8603','Vertical Offset',156.68,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'BEV-Aut Wien',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13986','other_transformation','EPSG','9371','EPSG','4585','EPSG','1059');
|
||||
INSERT INTO "other_transformation" VALUES('EPSG','9446','ODN height to EVRF2019 mean-tide height (1)','Determined at Channel Tunnel portal.','EPSG','9616','Vertical Offset','EPSG','5701','EPSG','9390',0.02,'EPSG','8603','Vertical Offset',-0.173,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Gbr 2019m',0);
|
||||
INSERT INTO "other_transformation" VALUES('EPSG','9446','ODN height to EVRF2019 mean-tide height (1)','Determined at Channel Tunnel portal.','EPSG','9616','Vertical Offset','EPSG','5701','EPSG','9390',0.02,'EPSG','8603','Vertical Offset',-0.173,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Gbr 2019m',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14104','other_transformation','EPSG','9446','EPSG','2792','EPSG','1059');
|
||||
INSERT INTO "other_transformation" VALUES('EPSG','9447','Antalya height to EVRF2019 mean-tide height (1)','Determined at two points. No accuracy figure available. Applicable for points up to a maximum height of about 1000 m.','EPSG','9616','Vertical Offset','EPSG','5775','EPSG','9390',0.02,'EPSG','8603','Vertical Offset',-0.446,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Tur 2019m',0);
|
||||
INSERT INTO "other_transformation" VALUES('EPSG','9447','Antalya height to EVRF2019 mean-tide height (1)','Determined at two points. No accuracy figure available. Applicable for points up to a maximum height of about 1000 m.','EPSG','9616','Vertical Offset','EPSG','5775','EPSG','9390',0.02,'EPSG','8603','Vertical Offset',-0.446,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Tur 2019m',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14105','other_transformation','EPSG','9447','EPSG','3322','EPSG','1059');
|
||||
INSERT INTO "other_transformation" VALUES('EPSG','9448','Antalya height to EVRF2019 height (1)','Determined at two points. No accuracy figure available. Applicable for points up to a maximum height of about 1000 m.','EPSG','9616','Vertical Offset','EPSG','5775','EPSG','9389',0.02,'EPSG','8603','Vertical Offset',-0.392,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Tur 2019z',0);
|
||||
INSERT INTO "other_transformation" VALUES('EPSG','9448','Antalya height to EVRF2019 height (1)','Determined at two points. No accuracy figure available. Applicable for points up to a maximum height of about 1000 m.','EPSG','9616','Vertical Offset','EPSG','5775','EPSG','9389',0.02,'EPSG','8603','Vertical Offset',-0.392,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Tur 2019z',1);
|
||||
INSERT INTO "usage" VALUES('EPSG','14106','other_transformation','EPSG','9448','EPSG','3322','EPSG','1059');
|
||||
INSERT INTO "other_transformation" VALUES('EPSG','9551','Antalya height to EVRF2019 height (2)','Determined at two points. No accuracy figure available. Applicable for points up to a maximum height of about 1000 m.','EPSG','9616','Vertical Offset','EPSG','5775','EPSG','9389',0.02,'EPSG','8603','Vertical Offset',-0.394,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Tur 2019z 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14651','other_transformation','EPSG','9551','EPSG','3322','EPSG','1059');
|
||||
INSERT INTO "other_transformation" VALUES('EPSG','9552','Antalya height to EVRF2019 mean-tide height (2)','Determined at two points. No accuracy figure available. Applicable for points up to a maximum height of about 1000 m.','EPSG','9616','Vertical Offset','EPSG','5775','EPSG','9390',0.02,'EPSG','8603','Vertical Offset',-0.448,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Tur 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14650','other_transformation','EPSG','9552','EPSG','3322','EPSG','1059');
|
||||
INSERT INTO "other_transformation" VALUES('EPSG','9562','ODN height to EVRF2019 mean-tide height (2)','Determined at Channel Tunnel portal.','EPSG','9616','Vertical Offset','EPSG','5701','EPSG','9390',0.02,'EPSG','8603','Vertical Offset',-0.17,'EPSG','9001',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'EuG-Gbr 2019m 2020-09',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14640','other_transformation','EPSG','9562','EPSG','2792','EPSG','1059');
|
||||
INSERT INTO "other_transformation" VALUES('EPSG','10087','Jamaica 1875 / Jamaica (Old Grid) to JAD69 / Jamaica National Grid (1)','Derived by least squares fit at primary triangulation stations. Accuracy will be less outside of this network due to extrapolation.','EPSG','9624','Affine parametric transformation','EPSG','24100','EPSG','24200',1.5,'EPSG','8623','A0',82357.457,'EPSG','9001','EPSG','8624','A1',0.304794369,'EPSG','9203','EPSG','8625','A2',1.5417425e-05,'EPSG','9203','EPSG','8639','B0',28091.324,'EPSG','9001','EPSG','8640','B1',-1.5417425e-05,'EPSG','9203','EPSG','8641','B2',0.304794369,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Jam',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','11088','other_transformation','EPSG','10087','EPSG','3342','EPSG','1153');
|
||||
INSERT INTO "other_transformation" VALUES('EPSG','10088','JAD69 / Jamaica National Grid to Jamaica 1875 / Jamaica (Old Grid) (1)','Derived by least squares fit at primary triangulation stations. Accuracy will be less outside of this network due to extrapolation.','EPSG','9624','Affine parametric transformation','EPSG','24200','EPSG','24100',1.5,'EPSG','8623','A0',-270201.96,'EPSG','9005','EPSG','8624','A1',0.00016595792,'EPSG','9203','EPSG','8625','A2',3.2809005,'EPSG','9203','EPSG','8639','B0',-92178.51,'EPSG','9005','EPSG','8640','B1',3.2809005,'EPSG','9203','EPSG','8641','B2',-0.00016595792,'EPSG','9203',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'SD-Jam',1);
|
||||
|
||||
@@ -1460,9 +1460,9 @@ CREATE VIEW object_view AS
|
||||
UNION ALL
|
||||
SELECT 'prime_meridian', auth_name, code, name, NULL, deprecated FROM prime_meridian
|
||||
UNION ALL
|
||||
SELECT 'geodetic_datum', auth_name, code, name, CASE WHEN ensemble_accuracy IS NOT NULL THEN "ensemble" ELSE "datum" END, deprecated FROM geodetic_datum
|
||||
SELECT 'geodetic_datum', auth_name, code, name, CASE WHEN ensemble_accuracy IS NOT NULL THEN 'ensemble' ELSE 'datum' END, deprecated FROM geodetic_datum
|
||||
UNION ALL
|
||||
SELECT 'vertical_datum', auth_name, code, name, CASE WHEN ensemble_accuracy IS NOT NULL THEN "ensemble" ELSE "datum" END, deprecated FROM vertical_datum
|
||||
SELECT 'vertical_datum', auth_name, code, name, CASE WHEN ensemble_accuracy IS NOT NULL THEN 'ensemble' ELSE 'datum' END, deprecated FROM vertical_datum
|
||||
UNION ALL
|
||||
SELECT 'axis', auth_name, code, name, NULL, 0 as deprecated FROM axis
|
||||
UNION ALL
|
||||
|
||||
@@ -2114,9 +2114,9 @@ INSERT INTO "usage" VALUES('EPSG','2080','projected_crs','EPSG','3062','EPSG','1
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','3063','Azores Central 1995 / UTM zone 26N',NULL,'EPSG','4400','EPSG','4665','EPSG','16026',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','2081','projected_crs','EPSG','3063','EPSG','1301','EPSG','1153');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','3064','IGM95 / UTM zone 32N',NULL,'EPSG','4400','EPSG','4670','EPSG','16032',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','2082','projected_crs','EPSG','3064','EPSG','1718','EPSG','1027');
|
||||
INSERT INTO "usage" VALUES('EPSG','14405','projected_crs','EPSG','3064','EPSG','1718','EPSG','1027');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','3065','IGM95 / UTM zone 33N',NULL,'EPSG','4400','EPSG','4670','EPSG','16033',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','2083','projected_crs','EPSG','3065','EPSG','1719','EPSG','1027');
|
||||
INSERT INTO "usage" VALUES('EPSG','14406','projected_crs','EPSG','3065','EPSG','1719','EPSG','1027');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','3066','ED50 / Jordan TM',NULL,'EPSG','4400','EPSG','4230','EPSG','19995',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','2084','projected_crs','EPSG','3066','EPSG','1130','EPSG','1142');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','3067','ETRS89 / TM35FIN(E,N)',NULL,'EPSG','4400','EPSG','4258','EPSG','16065',NULL,0);
|
||||
@@ -5685,11 +5685,11 @@ INSERT INTO "usage" VALUES('EPSG','4911','projected_crs','EPSG','6692','EPSG','3
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','6703','WGS 84 / TM 60 SW',NULL,'EPSG','4400','EPSG','4326','EPSG','6702',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4918','projected_crs','EPSG','6703','EPSG','4172','EPSG','1136');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','6707','RDN2008 / UTM zone 32N (N-E)',NULL,'EPSG','4500','EPSG','6706','EPSG','16032',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4922','projected_crs','EPSG','6707','EPSG','1718','EPSG','1142');
|
||||
INSERT INTO "usage" VALUES('EPSG','14415','projected_crs','EPSG','6707','EPSG','1718','EPSG','1142');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','6708','RDN2008 / UTM zone 33N (N-E)',NULL,'EPSG','4500','EPSG','6706','EPSG','16033',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4923','projected_crs','EPSG','6708','EPSG','4186','EPSG','1142');
|
||||
INSERT INTO "usage" VALUES('EPSG','14414','projected_crs','EPSG','6708','EPSG','4186','EPSG','1142');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','6709','RDN2008 / UTM zone 34N (N-E)',NULL,'EPSG','4500','EPSG','6706','EPSG','16034',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4924','projected_crs','EPSG','6709','EPSG','4187','EPSG','1142');
|
||||
INSERT INTO "usage" VALUES('EPSG','14416','projected_crs','EPSG','6709','EPSG','4187','EPSG','1142');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','6720','WGS 84 / CIG92',NULL,'EPSG','4400','EPSG','4326','EPSG','6716',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4926','projected_crs','EPSG','6720','EPSG','4169','EPSG','1029');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','6721','GDA94 / CIG94',NULL,'EPSG','4400','EPSG','4283','EPSG','6717',NULL,0);
|
||||
@@ -5879,9 +5879,9 @@ INSERT INTO "usage" VALUES('EPSG','5021','projected_crs','EPSG','6868','EPSG','1
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','6870','ETRS89 / Albania TM 2010',NULL,'EPSG','4530','EPSG','4258','EPSG','6869',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','5022','projected_crs','EPSG','6870','EPSG','3212','EPSG','1092');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','6875','RDN2008 / Italy zone (N-E)',NULL,'EPSG','4500','EPSG','6706','EPSG','6877',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','5024','projected_crs','EPSG','6875','EPSG','1127','EPSG','1241');
|
||||
INSERT INTO "usage" VALUES('EPSG','14417','projected_crs','EPSG','6875','EPSG','1127','EPSG','1241');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','6876','RDN2008 / Zone 12 (N-E)',NULL,'EPSG','4500','EPSG','6706','EPSG','6878',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','5025','projected_crs','EPSG','6876','EPSG','1127','EPSG','1142');
|
||||
INSERT INTO "usage" VALUES('EPSG','14418','projected_crs','EPSG','6876','EPSG','1127','EPSG','1142');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','6879','NAD83(2011) / Wisconsin Central',NULL,'EPSG','4499','EPSG','6318','EPSG','14832',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','5026','projected_crs','EPSG','6879','EPSG','2266','EPSG','1142');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','6880','NAD83(2011) / Nebraska (ftUS)',NULL,'EPSG','4497','EPSG','6318','EPSG','15396',NULL,0);
|
||||
@@ -7302,6 +7302,10 @@ INSERT INTO "projected_crs" VALUES('EPSG','9493','SRGI2013 / UTM zone 53S',NULL,
|
||||
INSERT INTO "usage" VALUES('EPSG','14171','projected_crs','EPSG','9493','EPSG','1662','EPSG','1266');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','9494','SRGI2013 / UTM zone 54S',NULL,'EPSG','4400','EPSG','9470','EPSG','16154',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14172','projected_crs','EPSG','9494','EPSG','1663','EPSG','1266');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','9498','POSGAR 2007 / CABA 2019',NULL,'EPSG','4530','EPSG','5340','EPSG','9497',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14513','projected_crs','EPSG','9498','EPSG','4610','EPSG','1056');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','9674','NAD83 / USFS R6 Albers',NULL,'EPSG','4400','EPSG','4269','EPSG','9673',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14787','projected_crs','EPSG','9674','EPSG','2381','EPSG','1165');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','20004','Pulkovo 1995 / Gauss-Kruger zone 4',NULL,'EPSG','4530','EPSG','4200','EPSG','16204',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','6177','projected_crs','EPSG','20004','EPSG','1763','EPSG','1211');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','20005','Pulkovo 1995 / Gauss-Kruger zone 5',NULL,'EPSG','4530','EPSG','4200','EPSG','16205',NULL,0);
|
||||
@@ -8923,7 +8927,9 @@ INSERT INTO "usage" VALUES('EPSG','6985','projected_crs','EPSG','29871','EPSG','
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','29872','Timbalai 1948 / RSO Borneo (ftSe)',NULL,'EPSG','4405','EPSG','4298','EPSG','19957',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','6986','projected_crs','EPSG','29872','EPSG','3977','EPSG','1136');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','29873','Timbalai 1948 / RSO Borneo (m)',NULL,'EPSG','4400','EPSG','4298','EPSG','19958',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','6987','projected_crs','EPSG','29873','EPSG','1362','EPSG','1149');
|
||||
INSERT INTO "usage" VALUES('EPSG','14397','projected_crs','EPSG','29873','EPSG','1362','EPSG','1149');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','29874','Timbalai 1948 / RSO Sarawak LSD (m)',NULL,'EPSG','4400','EPSG','4298','EPSG','19838',NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14400','projected_crs','EPSG','29874','EPSG','4611','EPSG','1142');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','29900','TM65 / Irish National Grid',NULL,'EPSG','4400','EPSG','4299','EPSG','19908',NULL,1);
|
||||
INSERT INTO "usage" VALUES('EPSG','6988','projected_crs','EPSG','29900','EPSG','1305','EPSG','1142');
|
||||
INSERT INTO "projected_crs" VALUES('EPSG','29901','OSNI 1952 / Irish National Grid',NULL,'EPSG','4400','EPSG','4188','EPSG','19973',NULL,0);
|
||||
|
||||
@@ -107,6 +107,7 @@ INSERT INTO "scope" VALUES('EPSG','1127','Geodesy. Defines ETRF2000.',0);
|
||||
INSERT INTO "scope" VALUES('EPSG','1128','Geodesy. Defines ETRF2005.',0);
|
||||
INSERT INTO "scope" VALUES('EPSG','1129','Geodesy. Defines ETRF2014.',0);
|
||||
INSERT INTO "scope" VALUES('EPSG','1130','EEZ delimitation.',0);
|
||||
INSERT INTO "scope" VALUES('EPSG','1131','Change of coordinate epoch for points referenced to NAD83(CSRS)v7.',0);
|
||||
INSERT INTO "scope" VALUES('EPSG','1132','Derivation of approximate gravity-related heights from GNSS observations.',0);
|
||||
INSERT INTO "scope" VALUES('EPSG','1133','Derivation of gravity-related heights from GNSS observations.',0);
|
||||
INSERT INTO "scope" VALUES('EPSG','1134','Description of the use or purpose of the CRS.',0);
|
||||
@@ -245,3 +246,4 @@ INSERT INTO "scope" VALUES('EPSG','1266','Engineering survey, topographic mappin
|
||||
INSERT INTO "scope" VALUES('EPSG','1267','Location-based services, Intelligent Transport Services, navigation, positioning.',0);
|
||||
INSERT INTO "scope" VALUES('EPSG','1268','Geodesy, location based services, intelligent transport services.',0);
|
||||
INSERT INTO "scope" VALUES('EPSG','1269','Intermediate CRS in transformation to and from projected CRS.',0);
|
||||
INSERT INTO "scope" VALUES('EPSG','1273','Transformation of coordinates at 0.03m level of accuracy.',0);
|
||||
|
||||
@@ -246,3 +246,5 @@ INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9168','grid_tran
|
||||
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','9169','grid_transformation','EPSG','9174','EPSG',0);
|
||||
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','15932','grid_transformation','EPSG','9409','EPSG',1);
|
||||
INSERT INTO "supersession" VALUES('grid_transformation','EPSG','15932','grid_transformation','EPSG','9408','EPSG',1);
|
||||
INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','7675','helmert_transformation','EPSG','9495','EPSG',0);
|
||||
INSERT INTO "supersession" VALUES('helmert_transformation','EPSG','7676','helmert_transformation','EPSG','9486','EPSG',1);
|
||||
|
||||
@@ -85,7 +85,7 @@ INSERT INTO "usage" VALUES('EPSG','4152','vertical_crs','EPSG','5709','EPSG','11
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','5710','Ostend height',NULL,'EPSG','6499','EPSG','5110',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4153','vertical_crs','EPSG','5710','EPSG','1347','EPSG','1179');
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','5711','AHD height',NULL,'EPSG','6499','EPSG','5111',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4154','vertical_crs','EPSG','5711','EPSG','4493','EPSG','1263');
|
||||
INSERT INTO "usage" VALUES('EPSG','14230','vertical_crs','EPSG','5711','EPSG','4493','EPSG','1263');
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','5712','AHD (Tasmania) height',NULL,'EPSG','6499','EPSG','5112',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','4155','vertical_crs','EPSG','5712','EPSG','2947','EPSG','1179');
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','5713','CGVD28 height',NULL,'EPSG','6499','EPSG','5114',0);
|
||||
@@ -453,9 +453,9 @@ INSERT INTO "usage" VALUES('EPSG','13922','vertical_crs','EPSG','9335','EPSG','3
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','9351','NGNC08 height',NULL,'EPSG','6499','EPSG','1255',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13977','vertical_crs','EPSG','9351','EPSG','3430','EPSG','1026');
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','9389','EVRF2019 height',NULL,'EPSG','6499','EPSG','1274',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14080','vertical_crs','EPSG','9389','EPSG','4608','EPSG','1261');
|
||||
INSERT INTO "usage" VALUES('EPSG','14658','vertical_crs','EPSG','9389','EPSG','4608','EPSG','1261');
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','9390','EVRF2019 mean-tide height',NULL,'EPSG','6499','EPSG','1287',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14081','vertical_crs','EPSG','9390','EPSG','4608','EPSG','1262');
|
||||
INSERT INTO "usage" VALUES('EPSG','14659','vertical_crs','EPSG','9390','EPSG','4608','EPSG','1262');
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','9392','Mallorca height',NULL,'EPSG','6499','EPSG','1275',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14031','vertical_crs','EPSG','9392','EPSG','4602','EPSG','1178');
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','9393','Menorca height',NULL,'EPSG','6499','EPSG','1276',0);
|
||||
@@ -481,6 +481,8 @@ INSERT INTO "usage" VALUES('EPSG','14041','vertical_crs','EPSG','9402','EPSG','4
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','9451','BI height',NULL,'EPSG','6499','EPSG','1288',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14087','vertical_crs','EPSG','9451','EPSG','4606','EPSG','1026');
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','9458','AVWS height',NULL,'EPSG','6499','EPSG','1292',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14138','vertical_crs','EPSG','9458','EPSG','4177','EPSG','1264');
|
||||
INSERT INTO "usage" VALUES('EPSG','14231','vertical_crs','EPSG','9458','EPSG','4177','EPSG','1264');
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','9471','INAGeoid2020 height',NULL,'EPSG','6499','EPSG','1294',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14153','vertical_crs','EPSG','9471','EPSG','1122','EPSG','1178');
|
||||
INSERT INTO "vertical_crs" VALUES('EPSG','9675','Pago Pago 2020 height',NULL,'EPSG','6499','EPSG','1302',0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14793','vertical_crs','EPSG','9675','EPSG','2288','EPSG','1026');
|
||||
|
||||
@@ -176,8 +176,8 @@ INSERT INTO "vertical_datum" VALUES('EPSG','1269','Kingdom of Saudi Arabia Verti
|
||||
INSERT INTO "usage" VALUES('EPSG','13897','vertical_datum','EPSG','1269','EPSG','3303','EPSG','1181');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1270','Mean Sea Level Netherlands',NULL,NULL,NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14119','vertical_datum','EPSG','1270','EPSG','1630','EPSG','1265');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1274','European Vertical Reference Frame 2019',NULL,'2019-05-22',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14078','vertical_datum','EPSG','1274','EPSG','4608','EPSG','1261');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1274','European Vertical Reference Frame 2019',NULL,'2020-09-01',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14738','vertical_datum','EPSG','1274','EPSG','4608','EPSG','1261');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1275','Mallorca',NULL,NULL,NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14014','vertical_datum','EPSG','1275','EPSG','4602','EPSG','1178');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1276','Menorca',NULL,NULL,NULL,NULL,0);
|
||||
@@ -200,14 +200,16 @@ INSERT INTO "vertical_datum" VALUES('EPSG','1284','El Hierro',NULL,NULL,NULL,NUL
|
||||
INSERT INTO "usage" VALUES('EPSG','14023','vertical_datum','EPSG','1284','EPSG','4597','EPSG','1178');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1285','Ceuta 2',NULL,NULL,NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14024','vertical_datum','EPSG','1285','EPSG','4590','EPSG','1178');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1287','European Vertical Reference Frame 2019 mean tide',NULL,'2019-05-22',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14079','vertical_datum','EPSG','1287','EPSG','4608','EPSG','1262');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1287','European Vertical Reference Frame 2019 mean tide',NULL,'2020-09-01',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14739','vertical_datum','EPSG','1287','EPSG','4608','EPSG','1262');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1290','Lowest Astronomical Tide Netherlands',NULL,NULL,NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14120','vertical_datum','EPSG','1290','EPSG','1630','EPSG','1198');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1292','Australian Vertical Working Surface',NULL,'2020-07-14',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14134','vertical_datum','EPSG','1292','EPSG','4177','EPSG','1264');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1294','Indonesian Geoid 2020',NULL,'2020-01-01',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14149','vertical_datum','EPSG','1294','EPSG','1122','EPSG','1178');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1302','Local Tidal Datum at Pago Pago 2020',NULL,NULL,NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14795','vertical_datum','EPSG','1302','EPSG','2288','EPSG','1026');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','5100','Mean Sea Level',NULL,NULL,NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13307','vertical_datum','EPSG','5100','EPSG','1262','EPSG','1199');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','5101','Ordnance Datum Newlyn',NULL,'1956-01-01',NULL,NULL,0);
|
||||
@@ -437,6 +439,6 @@ INSERT INTO "usage" VALUES('EPSG','13419','vertical_datum','EPSG','5213','EPSG',
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','5214','IGN 1988 SM',NULL,'1988-01-01',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13420','vertical_datum','EPSG','5214','EPSG','2890','EPSG','1178');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','5215','European Vertical Reference Frame 2007',NULL,'2008-01-01',NULL,NULL,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','13421','vertical_datum','EPSG','5215','EPSG','3594','EPSG','1027');
|
||||
INSERT INTO "usage" VALUES('EPSG','14655','vertical_datum','EPSG','5215','EPSG','3594','EPSG','1027');
|
||||
INSERT INTO "vertical_datum" VALUES('EPSG','1288','British Isles height ensemble',NULL,NULL,NULL,0.4,0);
|
||||
INSERT INTO "usage" VALUES('EPSG','14086','vertical_datum','EPSG','1288','EPSG','4606','EPSG','1026');
|
||||
|
||||
@@ -35,5 +35,6 @@ set(SQL_FILES
|
||||
"${SQL_DIR}/grid_alternatives.sql"
|
||||
"${SQL_DIR}/grid_alternatives_generated_noaa.sql"
|
||||
"${SQL_DIR}/customizations.sql"
|
||||
"${SQL_DIR}/nkg.sql"
|
||||
"${SQL_DIR}/commit.sql"
|
||||
)
|
||||
|
||||
@@ -82,10 +82,10 @@ matrix:
|
||||
- BUILD_NAME=linux_generic
|
||||
- DETAILS="linux, arm64"
|
||||
|
||||
- os: osx
|
||||
env:
|
||||
- BUILD_NAME=osx
|
||||
- DETAILS="osx"
|
||||
# - os: osx
|
||||
# env:
|
||||
# - BUILD_NAME=osx
|
||||
# - DETAILS="osx"
|
||||
|
||||
- os: linux
|
||||
dist: xenial
|
||||
@@ -20,7 +20,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- uses: goanpeca/setup-miniconda@v1
|
||||
- uses: conda-incubator/setup-miniconda@v2
|
||||
with:
|
||||
channels: conda-forge
|
||||
auto-update-conda: true
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
- uses: goanpeca/setup-miniconda@v1
|
||||
- uses: conda-incubator/setup-miniconda@v2
|
||||
with:
|
||||
channels: conda-forge
|
||||
auto-update-conda: true
|
||||
@@ -48,6 +48,8 @@ jobs:
|
||||
run: |
|
||||
python3 --version
|
||||
sphinx-build --version
|
||||
python3 -m pip list --not-required --format=columns
|
||||
|
||||
- uses: actions/download-artifact@v2
|
||||
name: Images
|
||||
with:
|
||||
+23
-1
@@ -4,18 +4,40 @@
|
||||
# You can set these variables from the command line, and also
|
||||
# from the environment for the first two.
|
||||
SPHINXOPTS ?=
|
||||
HTMLOPTS ?= -W
|
||||
SPHINXBUILD ?= sphinx-build
|
||||
SOURCEDIR = source
|
||||
BUILDDIR = build
|
||||
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
|
||||
|
||||
# Put it first so that "make" without argument is like "make help".
|
||||
help:
|
||||
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
|
||||
.PHONY: help Makefile
|
||||
|
||||
.PHONY: clean
|
||||
clean:
|
||||
rm -rf $(BUILDDIR)/*
|
||||
rm -rf .doxygen_up_to_date
|
||||
|
||||
.doxygen_up_to_date:
|
||||
../scripts/doxygen.sh
|
||||
touch .doxygen_up_to_date
|
||||
|
||||
.PHONY: html
|
||||
html: .doxygen_up_to_date
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(HTMLOPTS) $(BUILDDIR)/html
|
||||
# Undoes the hack done in scripts/doxygen.sh
|
||||
@sed "s/io::Convention_/io::Convention/g" < $(BUILDDIR)/html/development/reference/cpp/io.html | sed "s/>Convention_/>Convention/g" | sed "s/_WKT2/WKT2/g" | sed "s/_WKT1/WKT1/g" > $(BUILDDIR)/html/development/reference/cpp/io.html.tmp
|
||||
@mv $(BUILDDIR)/html/development/reference/cpp/io.html.tmp $(BUILDDIR)/html/development/reference/cpp/io.html
|
||||
@cp -r ../schemas $(BUILDDIR)/html/schemas
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
|
||||
# Catch-all target: route all unknown targets to Sphinx using the new
|
||||
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
|
||||
%: Makefile
|
||||
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
|
||||
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
name: proj
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- descartes
|
||||
- doxygen < 1.9
|
||||
- geojson
|
||||
- matplotlib
|
||||
- shapely < 1.8
|
||||
- pip
|
||||
- pip:
|
||||
- breathe
|
||||
- pybtex
|
||||
- sphinx-rtd-theme
|
||||
- sphinxcontrib-bibtex
|
||||
- sphinxcontrib-spelling
|
||||
@@ -1,86 +0,0 @@
|
||||
name: proj
|
||||
channels:
|
||||
- defaults
|
||||
dependencies:
|
||||
- blas=1.0=mkl
|
||||
- bzip2=1.0.6=h1de35cc_5
|
||||
- ca-certificates=2018.03.07=0
|
||||
- cairo=1.14.12=hc4e6be7_4
|
||||
- certifi=2018.8.24=py37_1
|
||||
- click=6.7=py37_0
|
||||
- click-plugins=1.0.3=py37_1
|
||||
- cligj=0.4.0=py37_1
|
||||
- curl=7.61.0=ha441bb4_0
|
||||
- cycler=0.10.0=py37_0
|
||||
- descartes=1.1.0=py37_0
|
||||
- expat=2.2.6=h0a44026_0
|
||||
- fiona=1.7.12=py37h0dff353_0
|
||||
- fontconfig=2.13.0=h5d5b041_1
|
||||
- freetype=2.9.1=hb4e5f40_0
|
||||
- freexl=1.0.5=h1de35cc_0
|
||||
- gdal=2.2.4=py37h6440ff4_1
|
||||
- geos=3.6.2=h5470d99_2
|
||||
- gettext=0.19.8.1=h15daf44_3
|
||||
- giflib=5.1.4=h1de35cc_1
|
||||
- glib=2.56.2=hd9629dc_0
|
||||
- hdf4=4.2.13=h39711bb_2
|
||||
- hdf5=1.10.2=hfa1e0ec_1
|
||||
- icu=58.2=h4b95b61_1
|
||||
- intel-openmp=2019.0=118
|
||||
- jpeg=9b=he5867d9_2
|
||||
- json-c=0.13.1=h3efe00b_0
|
||||
- kealib=1.4.7=h40e48e4_6
|
||||
- kiwisolver=1.0.1=py37h0a44026_0
|
||||
- krb5=1.16.1=h24a3359_6
|
||||
- libboost=1.67.0=hebc422b_4
|
||||
- libcurl=7.61.0=hf30b1f0_0
|
||||
- libcxx=4.0.1=h579ed51_0
|
||||
- libcxxabi=4.0.1=hebd6815_0
|
||||
- libdap4=3.19.1=h3d3e54a_0
|
||||
- libedit=3.1.20170329=hb402a30_2
|
||||
- libffi=3.2.1=h475c297_4
|
||||
- libgdal=2.2.4=h7b1ea53_1
|
||||
- libgfortran=3.0.1=h93005f0_2
|
||||
- libiconv=1.15=hdd342a3_7
|
||||
- libkml=1.3.0=hbe12b63_4
|
||||
- libnetcdf=4.6.1=h4e6abe9_1
|
||||
- libpng=1.6.34=he12f830_0
|
||||
- libpq=10.5=hf30b1f0_0
|
||||
- libspatialite=4.3.0a=ha12ebda_19
|
||||
- libssh2=1.8.0=h322a93b_4
|
||||
- libtiff=4.0.9=hcb84e12_2
|
||||
- libuuid=1.0.3=h6bb4b03_2
|
||||
- libxml2=2.9.8=hab757c2_1
|
||||
- matplotlib=2.2.3=py37h54f8f79_0
|
||||
- mkl=2019.0=118
|
||||
- mkl_fft=1.0.4=py37h5d10147_1
|
||||
- mkl_random=1.0.1=py37h5d10147_1
|
||||
- munch=2.3.2=py37_0
|
||||
- ncurses=6.1=h0a44026_0
|
||||
- numpy=1.15.1=py37h6a91979_0
|
||||
- numpy-base=1.15.1=py37h8a80b8c_0
|
||||
- openjpeg=2.3.0=hb95cd4c_1
|
||||
- openssl=1.0.2p=h1de35cc_0
|
||||
- pcre=8.42=h378b8a2_0
|
||||
- pip=10.0.1=py37_0
|
||||
- pixman=0.34.0=hca0a616_3
|
||||
- poppler=0.65.0=ha097c24_1
|
||||
- poppler-data=0.4.9=0
|
||||
- proj4=5.0.1=h1de35cc_0
|
||||
- pyparsing=2.2.0=py37_1
|
||||
- python=3.7.0=hc167b69_0
|
||||
- python-dateutil=2.7.3=py37_0
|
||||
- pytz=2018.5=py37_0
|
||||
- readline=7.0=h1de35cc_5
|
||||
- setuptools=40.2.0=py37_0
|
||||
- shapely=1.6.4=py37h20de77a_0
|
||||
- six=1.11.0=py37_1
|
||||
- sqlite=3.24.0=ha441bb4_0
|
||||
- tk=8.6.8=ha441bb4_0
|
||||
- tornado=5.1=py37h1de35cc_0
|
||||
- wheel=0.31.1=py37_0
|
||||
- xerces-c=3.2.1=h44e365a_0
|
||||
- xz=5.2.4=h1de35cc_4
|
||||
- zlib=1.2.11=hf3cbc9b_2
|
||||
prefix: /usr/local/miniconda3/envs/proj
|
||||
|
||||
Regular → Executable
+91
-54
@@ -1,5 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
'''
|
||||
Plot map data in different projections supported by PROJ.4
|
||||
Plot map data in different projections supported by PROJ.
|
||||
|
||||
Call with:
|
||||
|
||||
@@ -41,30 +42,28 @@ or "line". The rest of the inputs are fairly free form.
|
||||
Change PROJ to path on your local system before running the script.
|
||||
'''
|
||||
|
||||
from __future__ import print_function
|
||||
from __future__ import division
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import os.path
|
||||
import shutil
|
||||
import sys
|
||||
import json
|
||||
import subprocess
|
||||
import functools
|
||||
from pathlib import Path
|
||||
|
||||
import geojson
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.patches import Polygon
|
||||
import fiona
|
||||
from shapely.geometry import Polygon
|
||||
from shapely.geometry import MultiPolygon
|
||||
from shapely.geometry import MultiPolygon, Polygon, box as Box
|
||||
from shapely.geometry import shape
|
||||
from shapely.ops import transform
|
||||
from descartes import PolygonPatch
|
||||
|
||||
PROJ_COMMAND = os.environ.get('PROJ_EXE', '../../src/proj')
|
||||
if not os.path.exists(PROJ_COMMAND):
|
||||
PROJ = shutil.which(PROJ_COMMAND)
|
||||
PROJ = shutil.which('proj')
|
||||
if PROJ is None:
|
||||
raise ValueError("specify PROJ_EXE or modify PATH to find proj")
|
||||
else:
|
||||
PROJ = PROJ_COMMAND
|
||||
PROJ_LIB = os.environ.get('PROJ_LIB', '../../data')
|
||||
@@ -240,31 +239,46 @@ def resample_polygon(polygon):
|
||||
return Polygon(ext, rings)
|
||||
|
||||
|
||||
def plot_with_interruptions(axes, x, y, delta_cut=1e100, **kwargs):
|
||||
"""
|
||||
Plot x/y with proper splitting for interrupted projections.
|
||||
"""
|
||||
_x = np.atleast_1d(x)
|
||||
_y = np.atleast_1d(y)
|
||||
|
||||
dx = np.nan_to_num(_x[1: ]) - np.nan_to_num(_x[0: -1])
|
||||
dy = np.nan_to_num(_y[1: ]) - np.nan_to_num(_y[0: -1])
|
||||
split, = ((np.abs(dx) > delta_cut) | (np.abs(dy) > delta_cut)).nonzero()
|
||||
split = np.append(split, _x.size - 1)
|
||||
split += 1
|
||||
|
||||
last_part = 0
|
||||
for part in split:
|
||||
axes.plot(x[last_part: part],
|
||||
y[last_part: part],
|
||||
**kwargs)
|
||||
last_part = part
|
||||
|
||||
|
||||
def plotproj(plotdef, data, outdir):
|
||||
'''
|
||||
Plot map.
|
||||
'''
|
||||
axes = plt.axes()
|
||||
|
||||
bounds = (plotdef['lonmin'], plotdef['latmin'], plotdef['lonmax'], plotdef['latmax'])
|
||||
for geom in data.filter(bbox=bounds):
|
||||
temp_pol = shape(geom['geometry'])
|
||||
|
||||
box = Polygon([
|
||||
(plotdef['lonmin'], plotdef['latmin']),
|
||||
(plotdef['lonmin'], plotdef['latmax']),
|
||||
(plotdef['lonmax'], plotdef['latmax']),
|
||||
(plotdef['lonmax'], plotdef['latmin']),
|
||||
])
|
||||
try:
|
||||
temp_pol = temp_pol.intersection(box)
|
||||
except Exception as e:
|
||||
box = Box(
|
||||
plotdef['lonmin'], plotdef['latmin'],
|
||||
plotdef['lonmax'], plotdef['latmax'])
|
||||
for feat in data["features"]:
|
||||
geom = shape(feat["geometry"])
|
||||
if not geom.intersects(box):
|
||||
continue
|
||||
|
||||
temp_pol = geom.intersection(box)
|
||||
|
||||
if plotdef['type'] == 'poly':
|
||||
if isinstance(temp_pol, MultiPolygon):
|
||||
polys = [resample_polygon(polygon) for polygon in temp_pol]
|
||||
polys = [resample_polygon(polygon) for polygon in temp_pol.geoms]
|
||||
pol = MultiPolygon(polys)
|
||||
else:
|
||||
pol = resample_polygon(temp_pol)
|
||||
@@ -282,7 +296,8 @@ def plotproj(plotdef, data, outdir):
|
||||
pass
|
||||
else:
|
||||
x, y = proj_geom.xy
|
||||
axes.plot(x, y, color=COLOR_COAST, linewidth=0.5)
|
||||
plot_with_interruptions(axes, x, y, color=COLOR_COAST, linewidth=0.5,
|
||||
delta_cut=plotdef.get('delta_cut', 1e100))
|
||||
|
||||
# Plot frame
|
||||
frame = [
|
||||
@@ -293,7 +308,8 @@ def plotproj(plotdef, data, outdir):
|
||||
line = project(line, plotdef['projstring'])
|
||||
x = line[:, 0]
|
||||
y = line[:, 1]
|
||||
axes.plot(x, y, '-k')
|
||||
plot_with_interruptions(axes, x, y, color='black', linestyle='-',
|
||||
delta_cut=plotdef.get('delta_cut', 1e6))
|
||||
|
||||
graticule = build_graticule(
|
||||
plotdef['lonmin'],
|
||||
@@ -307,7 +323,28 @@ def plotproj(plotdef, data, outdir):
|
||||
feature = project(feature, plotdef['projstring'])
|
||||
x = feature[:, 0]
|
||||
y = feature[:, 1]
|
||||
axes.plot(x, y, color=COLOR_GRAT, linewidth=0.4)
|
||||
plot_with_interruptions(axes, x, y, color=COLOR_GRAT, linewidth=0.4,
|
||||
delta_cut=plotdef.get('delta_cut', 1e6))
|
||||
|
||||
# Plot interrupted boundaries if necessary
|
||||
interrupted_lines = []
|
||||
if 'top_interrupted_lons' in plotdef:
|
||||
for lon in plotdef['top_interrupted_lons']:
|
||||
for delta in [-0.0001, 0.0001]:
|
||||
merid = meridian(lon + delta, 0.0, plotdef['latmax'])
|
||||
interrupted_lines.append(project(merid, plotdef['projstring']))
|
||||
|
||||
if 'bottom_interrupted_lons' in plotdef:
|
||||
for lon in plotdef['bottom_interrupted_lons']:
|
||||
for delta in [-0.0001, 0.0001]:
|
||||
merid = meridian(lon + delta, plotdef['latmin'], 0)
|
||||
interrupted_lines.append(project(merid, plotdef['projstring']))
|
||||
|
||||
for line in interrupted_lines:
|
||||
x = line[:, 0]
|
||||
y = line[:, 1]
|
||||
plot_with_interruptions(axes, x, y, color=COLOR_GRAT, linewidth=0.4,
|
||||
delta_cut=plotdef.get('delta_cut', 1e100))
|
||||
|
||||
# Switch off the axis lines...
|
||||
plt.axis('off')
|
||||
@@ -326,9 +363,12 @@ def plotproj(plotdef, data, outdir):
|
||||
# Make sure the plot is not stretched
|
||||
axes.set_aspect('equal')
|
||||
|
||||
if not os.path.exists(outdir):
|
||||
os.makedirs(outdir)
|
||||
plt.savefig(outdir + '/' + plotdef['filename'],
|
||||
outdir = Path(outdir)
|
||||
if not outdir.exists():
|
||||
outdir.mkdir(parents=True)
|
||||
if not outdir.is_dir():
|
||||
raise OSError("outdir is not a directory")
|
||||
plt.savefig(outdir / plotdef['filename'],
|
||||
dpi=400,
|
||||
bbox_inches='tight')
|
||||
|
||||
@@ -338,36 +378,22 @@ def plotproj(plotdef, data, outdir):
|
||||
plt.close()
|
||||
|
||||
|
||||
def main():
|
||||
def main(plotdefs, outdir, plots=[]):
|
||||
'''
|
||||
Main function of plotting script.
|
||||
|
||||
Parses json-file with plot setups and runs the plotting
|
||||
for each plot setup.
|
||||
'''
|
||||
plotdefs = json.loads(Path(plotdefs).read_text())
|
||||
|
||||
data = {
|
||||
('line', 'low'): fiona.open(LINE_LOW),
|
||||
('line', 'med'): fiona.open(LINE_MED),
|
||||
('poly', 'low'): fiona.open(POLY_LOW),
|
||||
('poly', 'med'): fiona.open(POLY_MED),
|
||||
('line', 'low'): geojson.loads(Path(LINE_LOW).read_text()),
|
||||
('line', 'med'): geojson.loads(Path(LINE_MED).read_text()),
|
||||
('poly', 'low'): geojson.loads(Path(POLY_LOW).read_text()),
|
||||
('poly', 'med'): geojson.loads(Path(POLY_MED).read_text()),
|
||||
}
|
||||
|
||||
if os.path.exists(sys.argv[1]):
|
||||
# first argument is the JSON plot definition setup file
|
||||
with open(sys.argv[1]) as plotsetup:
|
||||
plotdefs = json.load(plotsetup)
|
||||
else:
|
||||
raise ValueError('No plot definition file entered')
|
||||
|
||||
plots = []
|
||||
# second argument is the output dir
|
||||
outdir = sys.argv[2]
|
||||
|
||||
# subsecond arguments are (optional) names of plot in plotdef.json
|
||||
if len(sys.argv) > 3:
|
||||
plots = sys.argv[3:len(sys.argv)]
|
||||
|
||||
for i, plotdef in enumerate(plotdefs):
|
||||
if plots != [] and plotdef['name'] not in plots:
|
||||
continue
|
||||
@@ -379,9 +405,20 @@ def main():
|
||||
|
||||
plotproj(plotdef, data[(plotdef['type'], plotdef['res'])], outdir)
|
||||
|
||||
for key in data:
|
||||
data[key].close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
parser = argparse.ArgumentParser(
|
||||
description=__doc__,
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter)
|
||||
parser.add_argument(
|
||||
'plotdefs',
|
||||
help='A JSON file with setup for each auto-generated plot')
|
||||
parser.add_argument(
|
||||
'outdir',
|
||||
help='Directory to put the plots in.')
|
||||
parser.add_argument(
|
||||
'plots', nargs='*',
|
||||
help='A list of plot names within the plotdefs file. '
|
||||
'More than one plotname can be given at once.')
|
||||
args = parser.parse_args()
|
||||
sys.exit(main(**vars(args)))
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
|
||||
python3 plot.py plotdefs.json images/
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
export PROJ_LIB="$HOME/.local/share/proj"
|
||||
|
||||
cd docs/plot
|
||||
python plot.py plotdefs.json images
|
||||
cd ../..
|
||||
|
||||
mkdir -p docs/source/operations/projections/images/
|
||||
cp -r docs/plot/images/* docs/source/operations/projections/images/
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
# https://github.com/readthedocs/readthedocs.org/pull/9888
|
||||
READTHEDOCS_OUTPUT="_readthedocs"
|
||||
find ${READTHEDOCS_OUTPUT} -type d
|
||||
READTHEDOCS_OUTPUT_HTML="${READTHEDOCS_OUTPUT}/html"
|
||||
|
||||
# Undoes the hack done in scripts/doxygen.sh
|
||||
sed "s/io::Convention_/io::Convention/g" < ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/io.html | sed "s/>Convention_/>Convention/g" | sed "s/_WKT2/WKT2/g" | sed "s/_WKT1/WKT1/g" > ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/io.html.tmp
|
||||
mv ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/io.html.tmp ${READTHEDOCS_OUTPUT_HTML}/development/reference/cpp/io.html
|
||||
|
||||
# Copy JSON schemas for public consumption
|
||||
READTHEDOCS_OUTPUT_SCHEMAS="${READTHEDOCS_OUTPUT_HTML}/schemas"
|
||||
cp -r schemas ${READTHEDOCS_OUTPUT_SCHEMAS}
|
||||
cp ./data/triangulation.schema.json ${READTHEDOCS_OUTPUT_SCHEMAS}
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
|
||||
cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=$HOME/.local ..
|
||||
|
||||
ninja install
|
||||
@@ -60,7 +60,7 @@ Coding style
|
||||
^^^^^^^^^^^^
|
||||
|
||||
The parts of the code base that has started its life as C++ is formatted with
|
||||
``clang-format`` using the sript ``scripts/reformat_cpp.sh``. This is mostly
|
||||
``clang-format`` using the script ``scripts/reformat_cpp.sh``. This is mostly
|
||||
contained to the code in `src/iso19111/` but a few other `.cpp`-files are
|
||||
covered as well.
|
||||
|
||||
|
||||
+18
-17
@@ -14,7 +14,6 @@
|
||||
|
||||
import sys
|
||||
import os
|
||||
import datetime
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
@@ -43,6 +42,9 @@ extensions = [
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# BibTeX configuration
|
||||
bibtex_bibfiles = ['references.bib']
|
||||
|
||||
# The suffix(es) of source filenames.
|
||||
# You can specify multiple suffix as a list of string:
|
||||
# source_suffix = ['.rst', '.md']
|
||||
@@ -62,29 +64,25 @@ project = 'PROJ'
|
||||
# See CITATION file
|
||||
title = 'PROJ coordinate transformation software library'
|
||||
author = 'PROJ contributors'
|
||||
|
||||
now = datetime.datetime.now()
|
||||
copyright = u'1983-{0}'.format(now.year)
|
||||
copyright = u'1983-2021'
|
||||
|
||||
# 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'
|
||||
|
||||
# use same |release| as |version|
|
||||
release = version
|
||||
version = '7.2'
|
||||
release = '7.2.1'
|
||||
data_version = '1.4'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#
|
||||
# This is also used if you do content translation via gettext catalogs.
|
||||
# Usually you set "language" from the command line for these cases.
|
||||
language = None
|
||||
# language = 'en'
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
#today = ''
|
||||
today = 'January 2021'
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
#today_fmt = '%B %d, %Y'
|
||||
|
||||
@@ -188,16 +186,16 @@ html_favicon = '../images/favicon.png'
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
htm_css_files = [
|
||||
'theme_overrides.css', # override wide tables in RTD theme
|
||||
]
|
||||
|
||||
html_context = {
|
||||
'display_github': True,
|
||||
'theme_vcs_pageview_mode': 'edit',
|
||||
'github_user': 'OSGeo',
|
||||
'github_repo': 'PROJ',
|
||||
# TODO: edit when switching active branch
|
||||
'github_version': '/7.1/docs/source/',
|
||||
'css_files': [
|
||||
'_static/theme_overrides.css', # override wide tables in RTD theme
|
||||
],
|
||||
'github_version': '/7.2/docs/source/',
|
||||
}
|
||||
|
||||
# Add any extra paths that contain custom files (such as robots.txt or
|
||||
@@ -270,6 +268,8 @@ preamble = r"""
|
||||
\ifdefined\DeclareUnicodeCharacter
|
||||
\DeclareUnicodeCharacter{2032}{$'$}% prime
|
||||
\fi
|
||||
|
||||
\usepackage[notbib]{tocbibind}
|
||||
"""
|
||||
|
||||
latex_elements = {
|
||||
@@ -281,7 +281,8 @@ latex_elements = {
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
'preamble': preamble,
|
||||
'inputenc':'\\usepackage[utf8]{inputenc}'
|
||||
'inputenc': r'\usepackage[utf8]{inputenc}',
|
||||
'makeindex': r'\usepackage[columns=1]{idxlayout}\makeindex',
|
||||
|
||||
# Latex figure (float) alignment
|
||||
#'figure_align': 'htbp',
|
||||
|
||||
@@ -30,8 +30,8 @@ Go bindings and idiomatic wrapper for PROJ
|
||||
|
||||
Julia
|
||||
=====
|
||||
`Proj4.jl <https://github.com/JuliaGeo/Proj4.jl>`_"
|
||||
Low-level bindings and a Julian API over PROJ.
|
||||
`Proj4.jl <https://github.com/JuliaGeo/Proj4.jl>`_:
|
||||
Julia bindings and idiomatic wrapper for PROJ.
|
||||
|
||||
TCL
|
||||
========
|
||||
|
||||
@@ -3,5 +3,5 @@
|
||||
General documentation
|
||||
---------------------
|
||||
|
||||
.. doxygenfile:: general_doc.dox.reworked.h
|
||||
.. doxygenpage:: general_doc
|
||||
:project: doxygen_api
|
||||
|
||||
@@ -180,7 +180,7 @@ paragraph for more details.
|
||||
coordinate reference systems.
|
||||
|
||||
This is the same as :c:func:`proj_create_crs_to_crs` except that the source and
|
||||
target CRS are passed as PJ* objects which must of the CRS variety.
|
||||
target CRS are passed as PJ* objects which must be of the CRS variety.
|
||||
|
||||
:param `options`: should be set to NULL currently.
|
||||
|
||||
@@ -268,7 +268,7 @@ Coordinate transformation
|
||||
3. of length one, i.e. a constant, which will be treated as a fully
|
||||
populated array of that constant value
|
||||
|
||||
.. note:: Even though he coordinate components are named :c:data:`x`, :c:data:`y`,
|
||||
.. note:: Even though the coordinate components are named :c:data:`x`, :c:data:`y`,
|
||||
:c:data:`z` and :c:data:`t`, axis ordering of the to and from CRS
|
||||
is respected. Transformations exhibit the same behavior
|
||||
as if they were gathered in a :c:type:`PJ_COORD` struct.
|
||||
@@ -352,7 +352,7 @@ Coordinate transformation
|
||||
|
||||
|
||||
|
||||
.. c:function:: size_t proj_trans_array(PJ *P, PJ_DIRECTION direction, size_t n, PJ_COORD *coord)
|
||||
.. c:function:: int proj_trans_array(PJ *P, PJ_DIRECTION direction, size_t n, PJ_COORD *coord)
|
||||
|
||||
Batch transform an array of :c:type:`PJ_COORD`.
|
||||
|
||||
@@ -362,7 +362,7 @@ Coordinate transformation
|
||||
:type `direction`: PJ_DIRECTION
|
||||
:param n: Number of coordinates in :c:data:`coord`
|
||||
:type n: `size_t`
|
||||
:returns: :c:type:`size_t` 0 if all observations are transformed without error, otherwise returns error number
|
||||
:returns: `int` 0 if all observations are transformed without error, otherwise returns error number
|
||||
|
||||
|
||||
Error reporting
|
||||
@@ -783,6 +783,17 @@ Setting custom I/O functions
|
||||
|
||||
.. doxygenfunction:: proj_context_set_sqlite3_vfs_name
|
||||
:project: doxygen_api
|
||||
|
||||
.. c:function:: void proj_context_set_search_paths (PJ_CONTEXT *ctx , int count_paths, const char* const* paths)
|
||||
|
||||
Sets the resource files search paths.
|
||||
|
||||
:param ctx: Threading context.
|
||||
:type ctx: :c:type:`PJ_CONTEXT` *
|
||||
:param `count_paths`: Number of paths.
|
||||
:type `count_paths`: `int`
|
||||
:param `paths`: Array of paths.
|
||||
:type `paths`: `const char* const*`
|
||||
|
||||
|
||||
Network related functionality
|
||||
|
||||
+21
-14
@@ -13,18 +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`_
|
||||
* **PDF Manual** `proj.pdf`_
|
||||
* **2021-01-01** `proj-7.2.1.tar.gz`_ (`md5`_)
|
||||
* **2021-01-01** `proj-data-1.4.tar.gz`_
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -37,6 +27,10 @@ Current Release
|
||||
Past Releases
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
* **2020-11-01** `proj-7.2.0.tar.gz`_
|
||||
* **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,16 @@ Past Releases
|
||||
* **2015-09-13** `proj-4.9.2.tar.gz`_
|
||||
* **2015-03-04** `proj-4.9.1.tar.gz`_
|
||||
|
||||
* **2020-11-01** `proj-data-1.3.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 +73,10 @@ Past Releases
|
||||
* **2018-03-01** `proj-datumgrid-oceania-1.1.zip`_
|
||||
* **2018-03-01** `proj-datumgrid-oceania-1.0.zip`_
|
||||
|
||||
.. _`proj-7.2.1.tar.gz`: https://download.osgeo.org/proj/proj-7.2.1.tar.gz
|
||||
.. _`md5`: https://download.osgeo.org/proj/proj-7.2.1.tar.gz.md5
|
||||
.. _`proj-7.2.0.tar.gz`: https://download.osgeo.org/proj/proj-7.2.0.tar.gz
|
||||
.. _`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 +95,13 @@ 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.4.tar.gz`: https://download.osgeo.org/proj/proj-data-1.4.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
|
||||
@@ -113,4 +121,3 @@ Past Releases
|
||||
.. _`proj-datumgrid-oceania-1.1.zip`: https://download.osgeo.org/proj/proj-datumgrid-oceania-1.1.zip
|
||||
.. _`proj-datumgrid-oceania-1.2.zip`: https://download.osgeo.org/proj/proj-datumgrid-oceania-1.2.zip
|
||||
.. _`proj-datumgrid-world-1.0.zip`: https://download.osgeo.org/proj/proj-datumgrid-world-1.0.zip
|
||||
.. _`proj.pdf`: https://raw.githubusercontent.com/OSGeo/PROJ/gh-pages/proj.pdf
|
||||
|
||||
@@ -30,8 +30,3 @@ PROJ
|
||||
You can download the source code for PROJ on the :ref:`download section<download>`
|
||||
and find links to prepackaged executables in the
|
||||
:ref:`installation section<install>`.
|
||||
|
||||
In addition to this website the PROJ documentation is also available in `PDF`_
|
||||
form.
|
||||
|
||||
.. _`PDF`: https://raw.githubusercontent.com/OSGeo/proj.4/gh-pages/proj.pdf
|
||||
|
||||
+193
-58
@@ -3,6 +3,141 @@
|
||||
News
|
||||
###############################################################################
|
||||
|
||||
7.2.1 Release Notes
|
||||
-------------------
|
||||
*January 1st 2021*
|
||||
|
||||
Updates
|
||||
-------
|
||||
|
||||
* Add metadata with the version number of the database layout (`#2474 <https://github.com/OSGeo/PROJ/issues/2474>`_)
|
||||
|
||||
* Split ``coordinateoperation.cpp`` and ``test_operation.cpp`` in several parts (`#2484 <https://github.com/OSGeo/PROJ/issues/2484>`_)
|
||||
|
||||
* Update to EPSG v10.008 (`#2490 <https://github.com/OSGeo/PROJ/issues/2490>`_)
|
||||
|
||||
* Added the NKG 2008 and 2020 transformations in ``proj.db`` (`#2495 <https://github.com/OSGeo/PROJ/issues/2495>`_)
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
|
||||
* Set ``CURL_ENABLED`` definition on projinfo build (`#2405 <https://github.com/OSGeo/PROJ/issues/2405>`_)
|
||||
|
||||
* :c:func:`createBoundCRSToWGS84IfPossible()`: make it return same result with a CRS
|
||||
built from EPSG code or WKT1 (`#2412 <https://github.com/OSGeo/PROJ/issues/2412>`_)
|
||||
|
||||
* WKT2 parsing: several fixes related to map projection parameter units (`#2428 <https://github.com/OSGeo/PROJ/issues/2428>`_)
|
||||
|
||||
* :c:func:`createOperation()`: make it work properly when one of the CRS is a BoundCRS of
|
||||
a DerivedGeographicCRS (``+proj=ob_tran +o_proj=lonlat +towgs84=....``) (`#2441 <https://github.com/OSGeo/PROJ/issues/2441>`_)
|
||||
|
||||
* WKT parsing: fix ingestion of WKT with a Geocentric CRS as the base of the
|
||||
projected CRS (`#2443 <https://github.com/OSGeo/PROJ/issues/2443>`_)
|
||||
|
||||
* ``GeographicCRS::_isEquivalentTo(EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS)``:
|
||||
make it work when comparing easting,northing,up and northing,easting,up (`#2446 <https://github.com/OSGeo/PROJ/issues/2446>`_)
|
||||
|
||||
* :c:func:`createOperation()`: add a ballpark vertical transformation when dealing
|
||||
with ``GEOIDMODEL[]`` (`#2449 <https://github.com/OSGeo/PROJ/issues/2449>`_)
|
||||
|
||||
* Use same arguments to printf format string for both radians and degrees in
|
||||
output by cct (`#2453 <https://github.com/OSGeo/PROJ/issues/2453>`_)
|
||||
|
||||
* PRIMEM WKT handling: fixes on import for 'sexagesimal DMS' or from WKT1:GDAL/ESRI
|
||||
when GEOGCS UNIT != Degree; morph to ESRI the PRIMEM name on export (`#2455 <https://github.com/OSGeo/PROJ/issues/2455>`_)
|
||||
|
||||
* :c:func:`createObjectsFromName()`: in exact match, make looking for 'ETRS89 / UTM zone 32N'
|
||||
return only the exact match (`#2462 <https://github.com/OSGeo/PROJ/issues/2462>`_)
|
||||
|
||||
* Inverse tmerc spherical: fix wrong sign of latitude when lat_0 is used (`#2469 <https://github.com/OSGeo/PROJ/issues/2469>`_)
|
||||
|
||||
* Add option to allow export of Geographic/Projected 3D CRS in WKT1_GDAL (`#2470 <https://github.com/OSGeo/PROJ/issues/2470>`_)
|
||||
|
||||
* Fix building ``proj.db`` with SQLite built with ``-DSQLITE_DQS=0`` (`#2480 <https://github.com/OSGeo/PROJ/issues/2480>`_)
|
||||
|
||||
* Include JSON Schema files in CMake builds (`#2485 <https://github.com/OSGeo/PROJ/issues/2485>`_)
|
||||
|
||||
* :c:func:`createOperations()`: fix inconsistent chaining exception when transforming from BoundCRS of projected CRS based on NTF Paris to BoundCRS of geog CRS NTF Paris (`#2486 <https://github.com/OSGeo/PROJ/issues/2486>`_)
|
||||
|
||||
|
||||
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/PROJ/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/PROJ/issues/2395>`_)
|
||||
|
||||
* :ref:`tinshift` for triangulation-based transformations (`#2344 <https://github.com/OSGeo/PROJ/issues/2344>`_)
|
||||
|
||||
* Added ellipsoidal formulation of :ref:`ortho` (`#2361 <https://github.com/OSGeo/PROJ/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/PROJ/issues/2370>`_)
|
||||
|
||||
* Added Finland tinshift operations (`#2392 <https://github.com/OSGeo/PROJ/issues/2392>`_)
|
||||
|
||||
* Added transformation from JGD2011 Geographic 3D to JGD2011
|
||||
height using GSIGEO2011 (`#2393 <https://github.com/OSGeo/PROJ/issues/2393>`_)
|
||||
|
||||
* Improve CompoundCRS identification and name morphing in VerticalCRS
|
||||
with ESRI WKT1 (`#2386 <https://github.com/OSGeo/PROJ/issues/2386>`_)
|
||||
|
||||
* Added OGC:CRS27 and OGC:CRS83 CRS entries for NAD27 and NAD83
|
||||
in longitude, latitude order (`#2350 <https://github.com/OSGeo/PROJ/issues/2350>`_)
|
||||
|
||||
+ **API**
|
||||
|
||||
* Added temporal, engineering, and parametric datum :c:type:`PJ_TYPE` enumerations (`#2274 <https://github.com/OSGeo/PROJ/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/PROJ/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/PROJ/issues/2365>`_)
|
||||
|
||||
* :cpp:func:`promoteTo3D()`: add a remark with the original CRS identifier (`#2369 <https://github.com/OSGeo/PROJ/issues/2369>`_)
|
||||
|
||||
* Added :c:func:`proj_context_clone` (`#2383 <https://github.com/OSGeo/PROJ/issues/2383>`_)
|
||||
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
|
||||
* Avoid core dumps when copying contexts in certain scenarios (`#2324 <https://github.com/OSGeo/PROJ/issues/2324>`_)
|
||||
|
||||
* :c:func:`proj_trans()`: reset errno before attemptying a retry with a new
|
||||
coordinate operation (`#2353 <https://github.com/OSGeo/PROJ/issues/2353>`_)
|
||||
|
||||
* PROJJSON schema corrected to allow prime meridians values with
|
||||
explicitly stating a unit (degrees assumed) (`#2354 <https://github.com/OSGeo/PROJ/issues/2354>`_)
|
||||
|
||||
* Adjust :cpp:func:`createBoundCRSToWGS84IfPossible()` and operation filtering
|
||||
(for POSGAR 2007 to WGS84 issues) (`#2357 <https://github.com/OSGeo/PROJ/issues/2357>`_)
|
||||
|
||||
* :cpp:func:`createOperations()`: several fixes affecting NAD83 -> NAD83(2011) (`#2364 <https://github.com/OSGeo/PROJ/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/PROJ/issues/2389>`_)
|
||||
|
||||
|
||||
7.1.1 Release Notes
|
||||
++++++++++++++++++++++++++++++++++++++++
|
||||
*September 1st 2020*
|
||||
@@ -11,36 +146,36 @@ News
|
||||
Updates
|
||||
-------
|
||||
|
||||
* Added various Brazillian grids to the database (`#2277 <https://github.com/OSGeo/issues/2277>`_)
|
||||
* Added various Brazillian grids to the database (`#2277 <https://github.com/OSGeo/PROJ/issues/2277>`_)
|
||||
|
||||
* Added geoid file for Canary Islands to the database (`#2312 <https://github.com/OSGeo/issues/2312>`_)
|
||||
* Added geoid file for Canary Islands to the database (`#2312 <https://github.com/OSGeo/PROJ/issues/2312>`_)
|
||||
|
||||
* Updated EPSG database to version 9.8.15 (`#2310 <https://github.com/OSGeo/issues/2310>`_)
|
||||
* Updated EPSG database to version 9.8.15 (`#2310 <https://github.com/OSGeo/PROJ/issues/2310>`_)
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
|
||||
* WKT parser: do not raise warning when parsing a WKT2:2015 TIMECRS
|
||||
whose TIMEUNIT is at the CS level, and not inside (`#2281 <https://github.com/OSGeo/issues/2281>`_)
|
||||
whose TIMEUNIT is at the CS level, and not inside (`#2281 <https://github.com/OSGeo/PROJ/issues/2281>`_)
|
||||
|
||||
* Parse '+proj=something_not_latlong +vunits=' without +geoidgrids as a
|
||||
Projected3D CRS and not a compound CRS with a unknown datum (`#2289 <https://github.com/OSGeo/issues/2289>`_)
|
||||
Projected3D CRS and not a compound CRS with a unknown datum (`#2289 <https://github.com/OSGeo/PROJ/issues/2289>`_)
|
||||
|
||||
* C API: Avoid crashing due to missing SANITIZE_CTX() in entry points (`#2293 <https://github.com/OSGeo/issues/2293>`_)
|
||||
* C API: Avoid crashing due to missing SANITIZE_CTX() in entry points (`#2293 <https://github.com/OSGeo/PROJ/issues/2293>`_)
|
||||
|
||||
* CMake build: Check "target_clones" before use (`#2297 <https://github.com/OSGeo/issues/2297>`_)
|
||||
* CMake build: Check "target_clones" before use (`#2297 <https://github.com/OSGeo/PROJ/issues/2297>`_)
|
||||
|
||||
* PROJ string export of +proj=krovak +czech: make sure we export +czech… (`#2301 <https://github.com/OSGeo/issues/2301>`_)
|
||||
* PROJ string export of +proj=krovak +czech: make sure we export +czech… (`#2301 <https://github.com/OSGeo/PROJ/issues/2301>`_)
|
||||
|
||||
* Helmert 2D: do not require a useless +convention= parameter (`#2305 <https://github.com/OSGeo/issues/2305>`_)
|
||||
* Helmert 2D: do not require a useless +convention= parameter (`#2305 <https://github.com/OSGeo/PROJ/issues/2305>`_)
|
||||
|
||||
* Fix a few spelling errors ("vgridshit" vs. "vgridshift") (`#2307 <https://github.com/OSGeo/issues/2307>`_)
|
||||
* Fix a few spelling errors ("vgridshit" vs. "vgridshift") (`#2307 <https://github.com/OSGeo/PROJ/issues/2307>`_)
|
||||
|
||||
* Fix ability to identify EPSG:2154 as a candidate for 'RGF93_Lambert_93' (`#2316 <https://github.com/OSGeo/issues/2316>`_)
|
||||
* Fix ability to identify EPSG:2154 as a candidate for 'RGF93_Lambert_93' (`#2316 <https://github.com/OSGeo/PROJ/issues/2316>`_)
|
||||
|
||||
* WKT importer: tune for Oracle WKT and 'Lambert Conformal Conic' (`#2322 <https://github.com/OSGeo/issues/2322>`_)
|
||||
* WKT importer: tune for Oracle WKT and 'Lambert Conformal Conic' (`#2322 <https://github.com/OSGeo/PROJ/issues/2322>`_)
|
||||
|
||||
* Revert compiler generated Fused Multiply Addition optimized routines (`#2328 <https://github.com/OSGeo/issues/2328>`_)
|
||||
* Revert compiler generated Fused Multiply Addition optimized routines (`#2328 <https://github.com/OSGeo/PROJ/issues/2328>`_)
|
||||
|
||||
|
||||
|
||||
@@ -57,7 +192,7 @@ Updates
|
||||
|
||||
+ **New projections**
|
||||
|
||||
* Add square conformal projections from libproject (`#2148 <https://github.com/OSGeo/issues/2148>`_):
|
||||
* Add square conformal projections from libproject (`#2148 <https://github.com/OSGeo/PROJ/issues/2148>`_):
|
||||
|
||||
- :ref:`adams_hemi`
|
||||
|
||||
@@ -70,117 +205,117 @@ Updates
|
||||
- :ref:`peirce_q`
|
||||
|
||||
* Adams Square II: map ESRI WKT to PROJ string, and implement iterative
|
||||
inverse method (`#2157 <https://github.com/OSGeo/issues/2157>`_)
|
||||
inverse method (`#2157 <https://github.com/OSGeo/PROJ/issues/2157>`_)
|
||||
|
||||
* Added :ref:`igh_o` projection (`#2226 <https://github.com/OSGeo/issues/2226>`_)
|
||||
* Added :ref:`igh_o` projection (`#2226 <https://github.com/OSGeo/PROJ/issues/2226>`_)
|
||||
|
||||
* Add :ref:`wink2` inverse by generic inversion of forward method (`#2243 <https://github.com/OSGeo/issues/2243>`_)
|
||||
* Add :ref:`wink2` inverse by generic inversion of forward method (`#2243 <https://github.com/OSGeo/PROJ/issues/2243>`_)
|
||||
|
||||
+ **Database**
|
||||
|
||||
* Update to EPSG 9.8.12, ESRI 10.8.1 and import scope and remarks for
|
||||
conversion (`#2238 <https://github.com/OSGeo/issues/2238>`_) (#2267)
|
||||
conversion (`#2238 <https://github.com/OSGeo/PROJ/issues/2238>`_) (#2267)
|
||||
|
||||
* Map the Behrman projection to ``cae`` when converting ESRI CRSes (`#1986 <https://github.com/OSGeo/issues/1986>`_)
|
||||
* Map the Behrman projection to ``cae`` when converting ESRI CRSes (`#1986 <https://github.com/OSGeo/PROJ/issues/1986>`_)
|
||||
|
||||
* Support conversion of Flat_Polar_Quartic projection method (`#1987 <https://github.com/OSGeo/issues/1987>`_)
|
||||
* Support conversion of Flat_Polar_Quartic projection method (`#1987 <https://github.com/OSGeo/PROJ/issues/1987>`_)
|
||||
|
||||
* Register 4 new Austrian height grids (see https://github.com/OSGeo/PROJ-data/pull/13)
|
||||
and handle 'Vertical Offset by Grid Interpolation (BEV AT)' method (`#1989 <https://github.com/OSGeo/issues/1989>`_)
|
||||
and handle 'Vertical Offset by Grid Interpolation (BEV AT)' method (`#1989 <https://github.com/OSGeo/PROJ/issues/1989>`_)
|
||||
|
||||
* Add ESRI projection method mappings for Mercator_Variant_A, Mercator_Variant_B
|
||||
and Transverse_Cylindrical_Equal_Area and various grid mappings (`#2020 <https://github.com/OSGeo/issues/2020>`_) (#2195)
|
||||
and Transverse_Cylindrical_Equal_Area and various grid mappings (`#2020 <https://github.com/OSGeo/PROJ/issues/2020>`_) (#2195)
|
||||
|
||||
* Map ESRI Transverse_Mercator_Complex to Transverse Mercator (`#2040 <https://github.com/OSGeo/issues/2040>`_)
|
||||
* Map ESRI Transverse_Mercator_Complex to Transverse Mercator (`#2040 <https://github.com/OSGeo/PROJ/issues/2040>`_)
|
||||
|
||||
* Register grids for New Caledonia (see https://github.com/OSGeo/PROJ-data/pull/16) (`#2051 <https://github.com/OSGeo/issues/2051>`_) (#2239)
|
||||
* Register grids for New Caledonia (see https://github.com/OSGeo/PROJ-data/pull/16) (`#2051 <https://github.com/OSGeo/PROJ/issues/2051>`_) (#2239)
|
||||
|
||||
* Register NZGD2000 -> ITRF96 transformation for NZGD2000 database (`#2248 <https://github.com/OSGeo/issues/2248>`_)
|
||||
* Register NZGD2000 -> ITRF96 transformation for NZGD2000 database (`#2248 <https://github.com/OSGeo/PROJ/issues/2248>`_)
|
||||
|
||||
* Register geoid file for UK added
|
||||
(see https://github.com/OSGeo//PROJ-data/pull/25() (`#2250 <https://github.com/OSGeo/issues/2250>`_)
|
||||
(see https://github.com/OSGeo//PROJ-data/pull/25() (`#2250 <https://github.com/OSGeo/PROJ/issues/2250>`_)
|
||||
|
||||
* Register Slovakian geoid transformations with needed code changes (`#2259 <https://github.com/OSGeo/issues/2259>`_)
|
||||
* Register Slovakian geoid transformations with needed code changes (`#2259 <https://github.com/OSGeo/PROJ/issues/2259>`_)
|
||||
|
||||
* Register Spanish SPED2ETV2 grid for ED50->ETRS89 (`#2261 <https://github.com/OSGeo/issues/2261>`_)
|
||||
* Register Spanish SPED2ETV2 grid for ED50->ETRS89 (`#2261 <https://github.com/OSGeo/PROJ/issues/2261>`_)
|
||||
|
||||
+ **API**
|
||||
|
||||
* Add API function :c:func:`proj_get_units_from_database()` (`#2065 <https://github.com/OSGeo/issues/2065>`_)
|
||||
* Add API function :c:func:`proj_get_units_from_database()` (`#2065 <https://github.com/OSGeo/PROJ/issues/2065>`_)
|
||||
|
||||
* Add API function :c:func:`proj_get_suggested_operation()` (`#2068 <https://github.com/OSGeo/issues/2068>`_)
|
||||
* Add API function :c:func:`proj_get_suggested_operation()` (`#2068 <https://github.com/OSGeo/PROJ/issues/2068>`_)
|
||||
|
||||
* Add API functions :c:func:`proj_degree_input()` and :c:func:`proj_degree_output()` (`#2144 <https://github.com/OSGeo/issues/2144>`_)
|
||||
* Add API functions :c:func:`proj_degree_input()` and :c:func:`proj_degree_output()` (`#2144 <https://github.com/OSGeo/PROJ/issues/2144>`_)
|
||||
|
||||
* Moved :c:func:`proj_context_get_url_endpoint()` & :c:func:`proj_context_get_user_writable_directory()`
|
||||
from ``proj_experimental.h`` to ``proj.h`` (`#2162 <https://github.com/OSGeo/issues/2162>`_)
|
||||
from ``proj_experimental.h`` to ``proj.h`` (`#2162 <https://github.com/OSGeo/PROJ/issues/2162>`_)
|
||||
|
||||
* :c:func:`createFromUserInput()`: allow compound CRS with the 2 parts given by names,
|
||||
e.g. 'WGS 84 + EGM96 height' (`#2126 <https://github.com/OSGeo/issues/2126>`_)
|
||||
e.g. 'WGS 84 + EGM96 height' (`#2126 <https://github.com/OSGeo/PROJ/issues/2126>`_)
|
||||
|
||||
* :c:func:`createOperations()`: when converting CompoundCRS<-->Geographic3DCrs, do not
|
||||
use discard change of ellipsoidal height if a Helmert transformation is
|
||||
involved (`#2227 <https://github.com/OSGeo/issues/2227>`_)
|
||||
involved (`#2227 <https://github.com/OSGeo/PROJ/issues/2227>`_)
|
||||
|
||||
+ **Optimizations**
|
||||
|
||||
* ``tmerc/utm``: add a +algo=auto/evenden_snyder/poder_engsager parameter (`#2030 <https://github.com/OSGeo/issues/2030>`_)
|
||||
* ``tmerc/utm``: add a +algo=auto/evenden_snyder/poder_engsager parameter (`#2030 <https://github.com/OSGeo/PROJ/issues/2030>`_)
|
||||
|
||||
* Extended ``tmerc`` (Poder/Engsager): speed optimizations (`#2036 <https://github.com/OSGeo/issues/2036>`_)
|
||||
* Extended ``tmerc`` (Poder/Engsager): speed optimizations (`#2036 <https://github.com/OSGeo/PROJ/issues/2036>`_)
|
||||
|
||||
* Approximate ``tmerc`` (Snyder): speed optimizations (`#2039 <https://github.com/OSGeo/issues/2039>`_)
|
||||
* Approximate ``tmerc`` (Snyder): speed optimizations (`#2039 <https://github.com/OSGeo/PROJ/issues/2039>`_)
|
||||
|
||||
* :c:func:`pj_phi2()`: speed-up computation (and thus inverse ellipsoidal Mercator and LCC) (`#2052 <https://github.com/OSGeo/issues/2052>`_)
|
||||
* :c:func:`pj_phi2()`: speed-up computation (and thus inverse ellipsoidal Mercator and LCC) (`#2052 <https://github.com/OSGeo/PROJ/issues/2052>`_)
|
||||
|
||||
* Inverse ``cart``: speed-up computation by 33% (`#2145 <https://github.com/OSGeo/issues/2145>`_)
|
||||
* Inverse ``cart``: speed-up computation by 33% (`#2145 <https://github.com/OSGeo/PROJ/issues/2145>`_)
|
||||
|
||||
* Extended ``tmerc``: speed-up forward path by ~5% (`#2147 <https://github.com/OSGeo/issues/2147>`_)
|
||||
* Extended ``tmerc``: speed-up forward path by ~5% (`#2147 <https://github.com/OSGeo/PROJ/issues/2147>`_)
|
||||
|
||||
+ **Various**
|
||||
|
||||
* Follow PDAL's CMake RPATH strategy (`#2009 <https://github.com/OSGeo/issues/2009>`_)
|
||||
* Follow PDAL's CMake RPATH strategy (`#2009 <https://github.com/OSGeo/PROJ/issues/2009>`_)
|
||||
|
||||
* WKT import/export: add support for WKT1_ESRI VERTCS synta (`#2024 <https://github.com/OSGeo/issues/2024>`_)
|
||||
* WKT import/export: add support for WKT1_ESRI VERTCS synta (`#2024 <https://github.com/OSGeo/PROJ/issues/2024>`_)
|
||||
|
||||
* :program:`projinfo`: add a ``--hide-ballpark`` option (`#2127 <https://github.com/OSGeo/issues/2127>`_)
|
||||
* :program:`projinfo`: add a ``--hide-ballpark`` option (`#2127 <https://github.com/OSGeo/PROJ/issues/2127>`_)
|
||||
|
||||
* :program:`gie`: implement a strict mode with ``<gie-strict> </gie-strict>`` (`#2168 <https://github.com/OSGeo/issues/2168>`_)
|
||||
* :program:`gie`: implement a strict mode with ``<gie-strict> </gie-strict>`` (`#2168 <https://github.com/OSGeo/PROJ/issues/2168>`_)
|
||||
|
||||
* Allow importing WKT1 COMPD_CS with a VERT_DATUM[Ellipsoid,2002] (`#2229 <https://github.com/OSGeo/issues/2229>`_)
|
||||
* Allow importing WKT1 COMPD_CS with a VERT_DATUM[Ellipsoid,2002] (`#2229 <https://github.com/OSGeo/PROJ/issues/2229>`_)
|
||||
|
||||
* Add runtime checking that sqlite3 is >= 3.11 (`#2235 <https://github.com/OSGeo/issues/2235>`_)
|
||||
* Add runtime checking that sqlite3 is >= 3.11 (`#2235 <https://github.com/OSGeo/PROJ/issues/2235>`_)
|
||||
|
||||
|
||||
Bug fixes
|
||||
---------
|
||||
|
||||
* :cpp:func:`createOperations()`: do not remove ballpark transformation if there are only grid
|
||||
based operations, even if they cover the whole area of use (`#2155 <https://github.com/OSGeo/issues/2155>`_)
|
||||
based operations, even if they cover the whole area of use (`#2155 <https://github.com/OSGeo/PROJ/issues/2155>`_)
|
||||
|
||||
* :cpp:func:`createFromProjString()`: handle default parameters of '+krovak +type=crs', and
|
||||
handle ``+czech`` correctly (`#2200 <https://github.com/OSGeo/issues/2200>`_)
|
||||
handle ``+czech`` correctly (`#2200 <https://github.com/OSGeo/PROJ/issues/2200>`_)
|
||||
|
||||
* :cpp:func:`ProjectedCRS::identify()`: fix identification of EPSG:3059 (`#2215 <https://github.com/OSGeo/issues/2215>`_)
|
||||
* :cpp:func:`ProjectedCRS::identify()`: fix identification of EPSG:3059 (`#2215 <https://github.com/OSGeo/PROJ/issues/2215>`_)
|
||||
|
||||
* Database: add a 'WGS84' alias for the EPSG:4326 CRS (`#2218 <https://github.com/OSGeo/issues/2218>`_)
|
||||
* Database: add a 'WGS84' alias for the EPSG:4326 CRS (`#2218 <https://github.com/OSGeo/PROJ/issues/2218>`_)
|
||||
|
||||
* Fixes related to CompoundCRS and BoundCRS (`#2222 <https://github.com/OSGeo/issues/2222>`_)
|
||||
* Fixes related to CompoundCRS and BoundCRS (`#2222 <https://github.com/OSGeo/PROJ/issues/2222>`_)
|
||||
|
||||
* Avoid 2 warnings about missing database indices (`#2223 <https://github.com/OSGeo/issues/2223>`_)
|
||||
* Avoid 2 warnings about missing database indices (`#2223 <https://github.com/OSGeo/PROJ/issues/2223>`_)
|
||||
|
||||
* Make ``projinfo --3d --boundcrs-to-wgs84`` work better (`#2224 <https://github.com/OSGeo/issues/2224>`_)
|
||||
* Make ``projinfo --3d --boundcrs-to-wgs84`` work better (`#2224 <https://github.com/OSGeo/PROJ/issues/2224>`_)
|
||||
|
||||
* Many fixes regarding BoundCRS, CompoundCRS, Geographic3D CRS with
|
||||
non-metre units (`#2234 <https://github.com/OSGeo/issues/2234>`_)
|
||||
non-metre units (`#2234 <https://github.com/OSGeo/PROJ/issues/2234>`_)
|
||||
|
||||
* Fix identification of (one of the) ESRI WKT formulations of EPSG:3035 (`#2240 <https://github.com/OSGeo/issues/2240>`_)
|
||||
* Fix identification of (one of the) ESRI WKT formulations of EPSG:3035 (`#2240 <https://github.com/OSGeo/PROJ/issues/2240>`_)
|
||||
|
||||
* Avoid using deprecated and removed Windows API function with Mingw32 (`#2246 <https://github.com/OSGeo/issues/2246>`_)
|
||||
* Avoid using deprecated and removed Windows API function with Mingw32 (`#2246 <https://github.com/OSGeo/PROJ/issues/2246>`_)
|
||||
|
||||
* :cpp:func:`normalizeForVisualization()`: make it switch axis for EPSG:5482
|
||||
(RSRGD2000 / RSPS2000) (`#2256 <https://github.com/OSGeo/issues/2256>`_)
|
||||
(RSRGD2000 / RSPS2000) (`#2256 <https://github.com/OSGeo/PROJ/issues/2256>`_)
|
||||
|
||||
* Fix access violation in :c:func:`proj_context_get_database_metadata()` (`#2260 <https://github.com/OSGeo/issues/2260>`_)
|
||||
* Fix access violation in :c:func:`proj_context_get_database_metadata()` (`#2260 <https://github.com/OSGeo/PROJ/issues/2260>`_)
|
||||
|
||||
|
||||
7.0.1 Release Notes
|
||||
|
||||
@@ -21,7 +21,7 @@ Convert geodetic coordinates to cartesian coordinates (in the forward path).
|
||||
This conversion converts geodetic coordinate values (longitude, latitude,
|
||||
elevation above ellipsoid) to their geocentric (X, Y, Z) representation, where
|
||||
the first axis (X) points from the Earth centre to the point of longitude=0,
|
||||
latitude=0, the second axis (Y) points from the Earth centrer to the point of
|
||||
latitude=0, the second axis (Y) points from the Earth centre to the point of
|
||||
longitude=90, latitude=0 and the third axis (Z) points to the North pole.
|
||||
|
||||
Usage
|
||||
|
||||
@@ -27,7 +27,7 @@ This document is meant as a plain text explanation of the code for developers,
|
||||
but also as a in-depth examination of what happens under the hood for curious PROJ
|
||||
users. It is important to keep in mind that it is not meant to be the ultimate
|
||||
source of truth of how coordinate operations should be computed. There are clearly
|
||||
implementation choices and compromises that can be questionned.
|
||||
implementation choices and compromises that can be questioned.
|
||||
|
||||
Let us start with an example to research operations between the NAD27 and NAD83
|
||||
geographic CRS:
|
||||
@@ -123,7 +123,7 @@ must be retained or discarded:
|
||||
|
||||
The sorting algorithm determines the order of relevance of the operations we got.
|
||||
A comparison function compares pair of operations to determine which of the
|
||||
two is the most releavant. This is implemented by the :cpp:func:`operator ()`
|
||||
two is the most relevant. This is implemented by the :cpp:func:`operator ()`
|
||||
method of the SortFunction structure.
|
||||
When comparing two operations, the following criteria are used. The tests are
|
||||
performed in the order they are listed below:
|
||||
@@ -163,7 +163,7 @@ In a number of situations, the source and/or target CRS do not have an identifie
|
||||
The first step is to try to find in the ``proj.db`` a CRS of the same nature of
|
||||
the CRS to identify and whose name exactly matches the one provided to the
|
||||
:c:func:`createOperations` method. If there is exactly one match and that the CRS are
|
||||
"computationnaly" equivalent, then use the code of the CRS for further computations.
|
||||
"computationally" equivalent, then use the code of the CRS for further computations.
|
||||
|
||||
If this search did not succeed, or if the previous case with known CRS identifiers
|
||||
did not result in matches in the database, the search will be based on the
|
||||
@@ -195,7 +195,7 @@ one can define a geographic 2D CRS (latitude, longitude), a geographic 3D crs
|
||||
case, the EPSG dataset has also included two extra definitions corresponding to a
|
||||
longitude, latitude, [ellipsoidal height] coordinate system, as found in the official
|
||||
French IGNF registry. This IGNF registry has also definitions for a geographic 2D
|
||||
CRS (with an extra subtelty with an entry using decimal degree as unit and another
|
||||
CRS (with an extra subtlety with an entry using decimal degree as unit and another
|
||||
one degree-minute-second), geographic 3D and geocentric.
|
||||
|
||||
For EPSG:6258, there are 7 matching (non-deprecated) geodetic CRSs:
|
||||
|
||||
@@ -43,7 +43,9 @@ Parameters
|
||||
|
||||
.. option:: +orient=<string>
|
||||
|
||||
Can be set to either ``isea`` or ``pole``.
|
||||
Can be set to either ``isea`` or ``pole``. See Snyder's Figure 12 for pole orientation :cite:`Snyder1992`.
|
||||
|
||||
*Defaults to isea*
|
||||
|
||||
.. option:: +azi=<value>
|
||||
|
||||
@@ -62,6 +64,8 @@ Parameters
|
||||
.. option:: +mode=<string>
|
||||
|
||||
Can be either ``plane``, ``di``, ``dd`` or ``hex``.
|
||||
|
||||
*Defaults to plane*
|
||||
|
||||
.. include:: ../options/lon_0.rst
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ Universal Transverse Mercator (UTM)
|
||||
|
||||
The Universal Transverse Mercator is a system of map projections divided into
|
||||
sixty zones across the globe, with each zone corresponding to 6 degrees of
|
||||
longigude.
|
||||
longitude.
|
||||
|
||||
+---------------------+----------------------------------------------------------+
|
||||
| **Classification** | Transverse cylindrical, conformal |
|
||||
@@ -37,7 +37,7 @@ to which specific parameters, such as central meridians, have been applied.
|
||||
The Earth is divided into 60 zones each generally 6° wide in longitude.
|
||||
Bounding meridians are evenly divisible by 6°, and zones are
|
||||
numbered from 1 to 60 proceeding east from the 180th meridian from Greenwich
|
||||
with minor exceptions [Snyder1987]_.
|
||||
with minor exceptions :cite:`Snyder1987`.
|
||||
|
||||
Usage
|
||||
#####
|
||||
|
||||
@@ -64,7 +64,7 @@ Parameters
|
||||
Mathematical definition
|
||||
#######################
|
||||
|
||||
The formulas describing the Mercator projection are all taken from G. Evenden's libproj manuals [Evenden2005]_.
|
||||
The formulas describing the Mercator projection are all taken from G. Evenden's libproj manuals :cite:`Evenden2005`.
|
||||
|
||||
Forward projection
|
||||
==================
|
||||
|
||||
@@ -7,7 +7,7 @@ Affine transformation
|
||||
.. versionadded:: 6.0.0
|
||||
|
||||
The affine transformation applies translation and scaling/rotation terms on the
|
||||
x,y,z coordinates, and translation and scaling on the temporal cordinate.
|
||||
x,y,z coordinates, and translation and scaling on the temporal coordinate.
|
||||
|
||||
+---------------------+----------------------------------------------------------+
|
||||
| **Alias** | affine |
|
||||
|
||||
@@ -56,7 +56,7 @@ Required
|
||||
Example
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Transformating a point with the LINZ NZGD2000 deformation model:
|
||||
Transforming a point with the LINZ NZGD2000 deformation model:
|
||||
|
||||
::
|
||||
|
||||
|
||||
@@ -167,7 +167,7 @@ represented as a grid of velocities in three dimensions. Coordinate corrections
|
||||
applied in cartesian space. For a given coordinate, :math:`(X, Y, Z)`, velocities
|
||||
:math:`(V_X, V_Y, V_Z)` can be interpolated from the gridded model. The time span
|
||||
between :math:`t_{obs}` and :math:`t_c` determine the magnitude of the coordinate
|
||||
correcton as seen in eq. :eq:`apply_velocity` below.
|
||||
correction as seen in eq. :eq:`apply_velocity` below.
|
||||
|
||||
.. math::
|
||||
:label: apply_velocity
|
||||
|
||||
@@ -349,7 +349,7 @@ For :math:`\mathbf{R}`, this yields:
|
||||
\end{bmatrix}
|
||||
|
||||
|
||||
Using the small angle approxition the rotation matrix can be simplified to
|
||||
Using the small angle approximation the rotation matrix can be simplified to
|
||||
|
||||
.. math::
|
||||
:label: rot_approx
|
||||
|
||||
@@ -17,7 +17,7 @@ Horner polynomial evaluation
|
||||
+-----------------+-------------------------------------------------------------------+
|
||||
|
||||
The Horner polynomial evaluation scheme is used for transformations between reference
|
||||
frames where one or both are inhomogenous or internally distorted. This will typically
|
||||
frames where one or both are inhomogeneous or internally distorted. This will typically
|
||||
be reference frames created before the introduction of space geodetic techniques such
|
||||
as GPS.
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ Required
|
||||
Example
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
Transformating a point with the Finland EPSG:2393 ("KKJ / Finland Uniform
|
||||
Transforming a point with the Finland EPSG:2393 ("KKJ / Finland Uniform
|
||||
Coordinate System") projected CRS to EPSG:3067 ("ETRS89 / TM35FIN(E,N)")
|
||||
|
||||
::
|
||||
|
||||
@@ -126,7 +126,7 @@ Optional
|
||||
Z_{target} = Z_{source} + multiplier \times gridvalue
|
||||
|
||||
The multiplier can be used to control whether the gridvalue should be added
|
||||
or sustracted, and if unit conversion must be done (the multiplied gridvalue
|
||||
or subtracted, and if unit conversion must be done (the multiplied gridvalue
|
||||
must be expressed in metre).
|
||||
|
||||
Note that the default is `-1.0` for historical reasons.
|
||||
|
||||
@@ -151,7 +151,7 @@ proj-datumgrid
|
||||
series of packages are not maintained anymore and are only kept available for
|
||||
legacy purposes.
|
||||
|
||||
For a functioning builds of PROJ prior to version 7, installation of the
|
||||
For a functioning build of PROJ prior to version 7, installation of the
|
||||
`proj-datumgrid <https://github.com/OSGeo/proj-datumgrid>`_ is needed. If you
|
||||
have installed PROJ from a package system chances are that this will already be
|
||||
done for you. The *proj-datumgrid* package provides transformation grids that
|
||||
@@ -197,7 +197,7 @@ includes grids that have global extent, e.g. the global geoid model EGM08.
|
||||
|
||||
All packages above come in different versions, e.g proj-datumgrid-1.8 or
|
||||
proj-datumgrid-europe-1.4. The `-latest` packages are symbolic links to the
|
||||
latest version of a given packages. That means that the link
|
||||
latest version of a given package. That means that the link
|
||||
https://download.osgeo.org/proj/proj-datumgrid-north-america-latest.zip is
|
||||
equivalent to https://download.osgeo.org/proj/proj-datumgrid-north-america-1.2.zip
|
||||
(as of the time of writing this).
|
||||
@@ -278,7 +278,7 @@ than one foot over the last two decades).
|
||||
Getting and building HTDP
|
||||
................................................................................
|
||||
|
||||
The HTDP modelling program is in written FORTRAN. The source and documentation
|
||||
The HTDP modelling program is written in FORTRAN. The source and documentation
|
||||
can be found on the HTDP page at http://www.ngs.noaa.gov/TOOLS/Htdp/Htdp.shtml
|
||||
|
||||
On linux systems it will be necessary to install `gfortran` or some FORTRAN
|
||||
@@ -322,10 +322,10 @@ Usage
|
||||
[-htdp <path_to_exe>] [-wrkdir <dirpath>] [-kwf]
|
||||
-o <output_grid_name>
|
||||
|
||||
-griddef: by default the following values for roughly the continental USA
|
||||
at a six minute step size are used:
|
||||
-127 50 -66 25 251 611
|
||||
-kwf: keep working files in the working directory for review.
|
||||
-griddef: by default the following values for roughly the continental USA
|
||||
at a six minute step size are used:
|
||||
-127 50 -66 25 251 611
|
||||
-kwf: keep working files in the working directory for review.
|
||||
|
||||
::
|
||||
|
||||
|
||||
@@ -155,6 +155,11 @@ class PROJ_GCC_DLL CRS : public common::ObjectUsage,
|
||||
const;
|
||||
|
||||
PROJ_INTERNAL bool hasImplicitCS() const;
|
||||
|
||||
PROJ_INTERNAL static CRSNNPtr
|
||||
getResolvedCRS(const CRSNNPtr &crs,
|
||||
const io::AuthorityFactoryPtr &authFactory,
|
||||
metadata::ExtentPtr &extentOut);
|
||||
//! @endcond
|
||||
|
||||
protected:
|
||||
@@ -335,6 +340,11 @@ class PROJ_GCC_DLL GeodeticCRS : virtual public SingleCRS,
|
||||
PROJ_INTERNAL std::list<std::pair<CRSNNPtr, int>>
|
||||
_identify(const io::AuthorityFactoryPtr &authorityFactory) const override;
|
||||
|
||||
PROJ_INTERNAL bool
|
||||
_isEquivalentToNoTypeCheck(const util::IComparable *other,
|
||||
util::IComparable::Criterion criterion,
|
||||
const io::DatabaseContextPtr &dbContext) const;
|
||||
|
||||
INLINED_MAKE_SHARED
|
||||
|
||||
private:
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
SUBDIRS = nlohmann
|
||||
|
||||
noinst_HEADERS = \
|
||||
coordinateoperation_constants.hpp \
|
||||
coordinateoperation_internal.hpp \
|
||||
esri_projection_mappings.hpp \
|
||||
coordinatesystem_internal.hpp \
|
||||
internal.hpp \
|
||||
io_internal.hpp \
|
||||
|
||||
@@ -342,6 +342,10 @@ class PROJ_GCC_DLL WKTFormatter {
|
||||
|
||||
PROJ_INTERNAL void ingestWKTNode(const WKTNodeNNPtr &node);
|
||||
|
||||
PROJ_INTERNAL WKTFormatter &
|
||||
setAllowEllipsoidalHeightAsVerticalCRS(bool allow) noexcept;
|
||||
PROJ_INTERNAL bool isAllowedEllipsoidalHeightAsVerticalCRS() const noexcept;
|
||||
|
||||
//! @endcond
|
||||
|
||||
protected:
|
||||
|
||||
@@ -213,6 +213,14 @@ template <typename T> using nn_shared_ptr = nn<std::shared_ptr<T>>;
|
||||
// To avoid formatting differences between clang-format 3.8 and 7
|
||||
#define PROJ_NOEXCEPT noexcept
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
// isOfExactType<MyType>(*p) checks that the type of *p is exactly MyType
|
||||
template <typename TemplateT, typename ObjectT>
|
||||
inline bool isOfExactType(const ObjectT &o) {
|
||||
return typeid(TemplateT).hash_code() == typeid(o).hash_code();
|
||||
}
|
||||
//! @endcond
|
||||
|
||||
/** \brief Loose transposition of [std::optional]
|
||||
* (https://en.cppreference.com/w/cpp/utility/optional) available from C++17. */
|
||||
template <class T> class optional {
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "CCT" "1" "Nov 01, 2020" "7.2.0" "PROJ"
|
||||
.TH "CCT" "1" "Dec 25, 2020" "7.2.1" "PROJ"
|
||||
.SH NAME
|
||||
cct \- Coordinate Conversion and Transformation
|
||||
.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "CS2CS" "1" "Nov 01, 2020" "7.2.0" "PROJ"
|
||||
.TH "CS2CS" "1" "Dec 25, 2020" "7.2.1" "PROJ"
|
||||
.SH NAME
|
||||
cs2cs \- Cartographic coordinate system filter
|
||||
.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "GEOD" "1" "Nov 01, 2020" "7.2.0" "PROJ"
|
||||
.TH "GEOD" "1" "Dec 25, 2020" "7.2.1" "PROJ"
|
||||
.SH NAME
|
||||
geod \- Geodesic computations
|
||||
.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "GIE" "1" "Nov 01, 2020" "7.2.0" "PROJ"
|
||||
.TH "GIE" "1" "Dec 25, 2020" "7.2.1" "PROJ"
|
||||
.SH NAME
|
||||
gie \- The Geospatial Integrity Investigation Environment
|
||||
.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "PROJ" "1" "Nov 01, 2020" "7.2.0" "PROJ"
|
||||
.TH "PROJ" "1" "Dec 25, 2020" "7.2.1" "PROJ"
|
||||
.SH NAME
|
||||
proj \- Cartographic projection filter
|
||||
.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "PROJINFO" "1" "Nov 01, 2020" "7.2.0" "PROJ"
|
||||
.TH "PROJINFO" "1" "Dec 25, 2020" "7.2.1" "PROJ"
|
||||
.SH NAME
|
||||
projinfo \- Geodetic object and coordinate operation queries
|
||||
.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
.\" Man page generated from reStructuredText.
|
||||
.
|
||||
.TH "PROJSYNC" "1" "Nov 01, 2020" "7.2.0" "PROJ"
|
||||
.TH "PROJSYNC" "1" "Dec 25, 2020" "7.2.1" "PROJ"
|
||||
.SH NAME
|
||||
projsync \- Downloading tool of resource files
|
||||
.
|
||||
|
||||
@@ -401,6 +401,9 @@ def fill_helmert_transformation(proj_db_cursor):
|
||||
assert param_code[6] == 8611
|
||||
assert param_uom_code[3] == param_uom_code[4]
|
||||
assert param_uom_code[3] == param_uom_code[5]
|
||||
for i in range(7):
|
||||
assert param_uom_code[i] is not None
|
||||
|
||||
if n_params == 8: # Time-specific transformation
|
||||
assert param_code[7] == 1049, (code, name, param_code[7])
|
||||
param_value[14] = param_value[7]
|
||||
@@ -438,6 +441,8 @@ def fill_helmert_transformation(proj_db_cursor):
|
||||
assert param_uom_code[7] == param_uom_code[9]
|
||||
assert param_uom_code[10] == param_uom_code[11]
|
||||
assert param_uom_code[10] == param_uom_code[12]
|
||||
for i in range(15):
|
||||
assert param_uom_code[i] is not None, (code, name, i, param_name[i])
|
||||
|
||||
arg = (EPSG_AUTHORITY, code, name,
|
||||
remarks,
|
||||
|
||||
@@ -751,7 +751,19 @@ def generate_mapping(WKT2_name, esri_proj_name, Params, suffix=''):
|
||||
all_projs.append([esri_proj_name, WKT2_name_s, c_name])
|
||||
else:
|
||||
all_projs.append([esri_proj_name, WKT2_name, c_name])
|
||||
print('static const ESRIParamMapping %s[] = { ' % c_name)
|
||||
|
||||
qualifier = 'static '
|
||||
if c_name in ('paramsESRI_Plate_Carree',
|
||||
'paramsESRI_Equidistant_Cylindrical',
|
||||
'paramsESRI_Gauss_Kruger',
|
||||
'paramsESRI_Transverse_Mercator',
|
||||
'paramsESRI_Hotine_Oblique_Mercator_Azimuth_Natural_Origin',
|
||||
'paramsESRI_Rectified_Skew_Orthomorphic_Natural_Origin',
|
||||
'paramsESRI_Hotine_Oblique_Mercator_Azimuth_Center',
|
||||
'paramsESRI_Rectified_Skew_Orthomorphic_Center'):
|
||||
qualifier = ''
|
||||
|
||||
print(qualifier + 'const ESRIParamMapping %s[] = { ' % c_name)
|
||||
for param in Params:
|
||||
for param_name in param:
|
||||
param_value = param[param_name]
|
||||
@@ -803,25 +815,23 @@ print("""
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef FROM_COORDINATE_OPERATION_CPP
|
||||
#error This file should only be included from coordinateoperation.cpp
|
||||
#ifndef FROM_PROJ_CPP
|
||||
#define FROM_PROJ_CPP
|
||||
#endif
|
||||
|
||||
#ifndef ESRI_PROJECTION_MAPPINGS_HH_INCLUDED
|
||||
#define ESRI_PROJECTION_MAPPINGS_HH_INCLUDED
|
||||
#include "esriparammappings.hpp"
|
||||
#include "proj_constants.h"
|
||||
|
||||
#include "coordinateoperation_internal.hpp"
|
||||
#include "proj/internal/internal.hpp"
|
||||
|
||||
NS_PROJ_START
|
||||
|
||||
using namespace internal;
|
||||
|
||||
namespace operation {
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// anonymous namespace
|
||||
namespace {
|
||||
|
||||
using namespace ::NS_PROJ;
|
||||
using namespace ::NS_PROJ::operation;
|
||||
|
||||
""")
|
||||
|
||||
for item in config:
|
||||
@@ -841,6 +851,7 @@ for item in config:
|
||||
count += 1
|
||||
print('')
|
||||
|
||||
|
||||
print('static const ESRIMethodMapping esriMappings[] = {')
|
||||
for esri_proj_name, WKT2_name, c_name in all_projs:
|
||||
if WKT2_name.startswith('EPSG_'):
|
||||
@@ -852,11 +863,32 @@ for esri_proj_name, WKT2_name, c_name in all_projs:
|
||||
print('};')
|
||||
|
||||
print("""
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
} // namespace {
|
||||
const ESRIMethodMapping *getEsriMappings(size_t &nElts) {
|
||||
nElts = sizeof(esriMappings) / sizeof(esriMappings[0]);
|
||||
return esriMappings;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
std::vector<const ESRIMethodMapping *>
|
||||
getMappingsFromESRI(const std::string &esri_name) {
|
||||
std::vector<const ESRIMethodMapping *> res;
|
||||
for (const auto &mapping : esriMappings) {
|
||||
if (ci_equal(esri_name, mapping.esri_name)) {
|
||||
res.push_back(&mapping);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
//! @endcond
|
||||
|
||||
#endif // ESRI_PROJECTION_MAPPINGS_HH_INCLUDED
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
} // namespace operation
|
||||
NS_PROJ_END
|
||||
|
||||
""")
|
||||
|
||||
+12
-24
@@ -18,6 +18,15 @@ TOPDIR="$SCRIPT_DIR/.."
|
||||
|
||||
pushd "${TOPDIR}" > /dev/null || exit
|
||||
|
||||
doxygen_version_cmd=$(doxygen --version)
|
||||
# remove extra info after space
|
||||
doxygen_version=${doxygen_version_cmd%% *}
|
||||
|
||||
echo "Doxygen version $doxygen_version"
|
||||
if test $doxygen_version = "1.8.17" ; then
|
||||
echo "Doxygen 1.8.17 is incompatible" && /bin/false;
|
||||
fi
|
||||
|
||||
# HTML generation
|
||||
# Check that doxygen runs warning free
|
||||
rm -rf docs/build/html/
|
||||
@@ -30,40 +39,19 @@ else
|
||||
fi
|
||||
|
||||
|
||||
# XML generation (for Breathe)
|
||||
mkdir -p docs/build/tmp_breathe
|
||||
python scripts/generate_breathe_friendly_general_doc.py
|
||||
rm -rf docs/build/xml/
|
||||
|
||||
# Ugly hack to workaround a bug of Doxygen 1.8.17 that erroneously detect proj_network_get_header_value_cbk_type/ as a variable
|
||||
sed "s/const char\* (\*proj_network_get_header_value_cbk_type/CONST_CHAR\* (\*proj_network_get_header_value_cbk_type/" < src/proj.h > docs/build/tmp_breathe/proj.h
|
||||
|
||||
(cat Doxyfile; printf "GENERATE_HTML=NO\nGENERATE_XML=YES\nINPUT= src/iso19111 include/proj docs/build/tmp_breathe/proj.h src/filemanager.cpp src/networkfilemanager.cpp docs/build/tmp_breathe/general_doc.dox.reworked.h") | doxygen - > docs/build/tmp_breathe/docs_log.txt 2>&1
|
||||
if grep -i warning docs/build/tmp_breathe/docs_log.txt; then
|
||||
echo "Doxygen warnings found" && cat docs/build/tmp_breathe/docs_log.txt && /bin/false;
|
||||
(cat Doxyfile; printf "GENERATE_HTML=NO\nGENERATE_XML=YES\nINPUT= src/iso19111 src/iso19111/operation include/proj src/proj.h src/filemanager.cpp src/networkfilemanager.cpp src/general_doc.dox") | doxygen - > docs/build/docs_log.txt 2>&1
|
||||
if grep -i warning docs/build/docs_log.txt; then
|
||||
echo "Doxygen warnings found" && cat docs/build/docs_log.txt && /bin/false;
|
||||
else
|
||||
echo "No Doxygen warnings found";
|
||||
fi
|
||||
|
||||
for i in ${TOPDIR}/docs/build/xml/*; do
|
||||
|
||||
# Fix Breathe error on Doxygen XML
|
||||
# Type must be either just a name or a typedef-like declaration.
|
||||
# If just a name:
|
||||
# Invalid definition: Expected end of definition. [error at 32]
|
||||
# osgeo::proj::common::MeasurePtr = typedef std::shared_ptr<Measure>
|
||||
sed "s/ = typedef /=/g" < $i > $i.tmp;
|
||||
mv $i.tmp $i
|
||||
done
|
||||
|
||||
# There is a confusion for Breathe between PROJStringFormatter::Convention and WKTFormatter:Convention
|
||||
sed "s/Convention/Convention_/g" < ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1io_1_1WKTFormatter.xml | sed "s/WKT2_2018/_WKT2_2018/g" | sed "s/WKT2_2019/_WKT2_2019/g" | sed "s/WKT2_2015/_WKT2_2015/g" | sed "s/WKT1_GDAL/_WKT1_GDAL/g" | sed "s/WKT1_ESRI/_WKT1_ESRI/g" > ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1io_1_1WKTFormatter.xml.tmp
|
||||
mv ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1io_1_1WKTFormatter.xml.tmp ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1io_1_1WKTFormatter.xml
|
||||
|
||||
# Ugly hack to workaround a bug of Doxygen 1.8.17 that erroneously detect proj_network_get_header_value_cbk_type/ as a variable
|
||||
sed "s/CONST_CHAR/const char/" < ${TOPDIR}/docs/build/xml/proj_8h.xml > ${TOPDIR}/docs/build/xml/proj_8h.xml.tmp
|
||||
mv ${TOPDIR}/docs/build/xml/proj_8h.xml.tmp ${TOPDIR}/docs/build/xml/proj_8h.xml
|
||||
|
||||
# Hack for Breathe 4.17.0 issue that is confused by osgeo::proj::common::UnitOfMeasure::Type::NONE (enumeration value of Type) and osgeo::proj::common::UnitOfMeasure::NONE (member value), whereas 4.16.0 works fine.
|
||||
# Filed as https://github.com/michaeljones/breathe/issues/518
|
||||
sed "s/ <name>NONE<\/name>/ <name>Type::NONE<\/name>/" < ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1common_1_1UnitOfMeasure.xml > ${TOPDIR}/docs/build/xml/classosgeo_1_1proj_1_1common_1_1UnitOfMeasure.xml.tmp
|
||||
|
||||
@@ -1,130 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
###############################################################################
|
||||
# $Id$
|
||||
#
|
||||
# Project: PROJ
|
||||
# Purpose: Rework general_doc.dox in a Breathe friendly (hacky) way
|
||||
# Author: Even Rouault <even.rouault at spatialys.com>
|
||||
#
|
||||
###############################################################################
|
||||
# Copyright (c) 2018, Even Rouault <even.rouault at spatialys.com>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a
|
||||
# copy of this software and associated documentation files (the "Software"),
|
||||
# to deal in the Software without restriction, including without limitation
|
||||
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
# and/or sell copies of the Software, and to permit persons to whom the
|
||||
# Software is furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included
|
||||
# in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
# DEALINGS IN THE SOFTWARE.
|
||||
###############################################################################
|
||||
|
||||
import os
|
||||
|
||||
# HACK HACK HACK
|
||||
# Transform a .dox with section, subsection, etc.. in fake namespaces
|
||||
# since Breathe cannot handle such sections and references to them
|
||||
|
||||
script_dir_name = os.path.dirname(os.path.realpath(__file__))
|
||||
general_doc_dox = os.path.join(os.path.dirname(
|
||||
script_dir_name), 'src', 'general_doc.dox')
|
||||
general_doc_dox_reworked_h = os.path.join(os.path.dirname(
|
||||
script_dir_name), 'docs/build/tmp_breathe', 'general_doc.dox.reworked.h')
|
||||
|
||||
out = open(general_doc_dox_reworked_h, 'wt')
|
||||
|
||||
|
||||
class Section:
|
||||
|
||||
def __init__(self):
|
||||
self.name = None
|
||||
self.title = None
|
||||
self.content = ''
|
||||
self.children = []
|
||||
pass
|
||||
|
||||
def serialize(self, out):
|
||||
out.write("/** \\brief %s\n" % self.title)
|
||||
out.write("\n")
|
||||
out.write("%s\n" % self.content)
|
||||
out.write("*/\n")
|
||||
out.write("namespace %s {\n" % self.name)
|
||||
out.write("}\n")
|
||||
for child in self.children:
|
||||
child.serialize(out)
|
||||
|
||||
|
||||
stack = []
|
||||
current = None
|
||||
|
||||
for line in open(general_doc_dox, 'rt').readlines():
|
||||
line = line.strip()
|
||||
if line == '/*!' or line == '*/':
|
||||
continue
|
||||
|
||||
if line.startswith('\page'):
|
||||
|
||||
tokens = line.split(' ')
|
||||
new = Section()
|
||||
new.name = tokens[1]
|
||||
new.title = ' '.join(tokens[2:])
|
||||
current = new
|
||||
stack.append(new)
|
||||
continue
|
||||
|
||||
if line.startswith('\section'):
|
||||
|
||||
stack = stack[0:1]
|
||||
current = stack[-1]
|
||||
|
||||
tokens = line.split(' ')
|
||||
new = Section()
|
||||
new.name = tokens[1]
|
||||
new.title = ' '.join(tokens[2:])
|
||||
current.children.append(new)
|
||||
current = new
|
||||
stack.append(new)
|
||||
continue
|
||||
|
||||
if line.startswith('\subsection'):
|
||||
|
||||
stack = stack[0:2]
|
||||
current = stack[-1]
|
||||
|
||||
tokens = line.split(' ')
|
||||
new = Section()
|
||||
new.name = tokens[1]
|
||||
new.title = ' '.join(tokens[2:])
|
||||
current.children.append(new)
|
||||
current = new
|
||||
stack.append(new)
|
||||
continue
|
||||
|
||||
if line.startswith('\subsubsection'):
|
||||
|
||||
stack = stack[0:3]
|
||||
current = stack[-1]
|
||||
|
||||
tokens = line.split(' ')
|
||||
new = Section()
|
||||
new.name = tokens[1]
|
||||
new.title = ' '.join(tokens[2:])
|
||||
current.children.append(new)
|
||||
current = new
|
||||
stack.append(new)
|
||||
continue
|
||||
|
||||
if current:
|
||||
current.content += line + '\n'
|
||||
|
||||
for child in stack[0].children:
|
||||
child.serialize(out)
|
||||
@@ -16,7 +16,10 @@ esac
|
||||
TOPDIR="$SCRIPT_DIR/.."
|
||||
|
||||
for i in "$TOPDIR"/include/proj/*.hpp "$TOPDIR"/include/proj/internal/*.hpp \
|
||||
"$TOPDIR"/src/iso19111/*.cpp "$TOPDIR"/test/unit/*.cpp \
|
||||
"$TOPDIR"/src/iso19111/*.cpp \
|
||||
"$TOPDIR"/src/iso19111/operation/*.cpp \
|
||||
"$TOPDIR"/src/iso19111/operation/*.hpp \
|
||||
"$TOPDIR"/test/unit/*.cpp \
|
||||
"$TOPDIR"/src/apps/projinfo.cpp "$TOPDIR"/src/apps/projsync.cpp \
|
||||
"$TOPDIR"/src/tracing.cpp "$TOPDIR"/src/grids.hpp "$TOPDIR"/src/grids.cpp \
|
||||
"$TOPDIR"/src/filemanager.hpp "$TOPDIR"/src/filemanager.cpp \
|
||||
|
||||
+18
-2
@@ -52,7 +52,7 @@ geodtest_LDADD = libproj.la
|
||||
|
||||
lib_LTLIBRARIES = libproj.la
|
||||
|
||||
libproj_la_LDFLAGS = -no-undefined -version-info 21:0:2
|
||||
libproj_la_LDFLAGS = -no-undefined -version-info 21:1:2
|
||||
libproj_la_LIBADD = @SQLITE3_LIBS@ @TIFF_LIBS@ @CURL_LIBS@
|
||||
|
||||
libproj_la_SOURCES = \
|
||||
@@ -65,7 +65,23 @@ libproj_la_SOURCES = \
|
||||
iso19111/crs.cpp \
|
||||
iso19111/datum.cpp \
|
||||
iso19111/coordinatesystem.cpp \
|
||||
iso19111/coordinateoperation.cpp \
|
||||
iso19111/operation/concatenatedoperation.cpp \
|
||||
iso19111/operation/coordinateoperation_internal.hpp \
|
||||
iso19111/operation/coordinateoperation_private.hpp \
|
||||
iso19111/operation/coordinateoperationfactory.cpp \
|
||||
iso19111/operation/conversion.cpp \
|
||||
iso19111/operation/esriparammappings.hpp \
|
||||
iso19111/operation/esriparammappings.cpp \
|
||||
iso19111/operation/operationmethod_private.hpp \
|
||||
iso19111/operation/oputils.hpp \
|
||||
iso19111/operation/oputils.cpp \
|
||||
iso19111/operation/parammappings.hpp \
|
||||
iso19111/operation/parammappings.cpp \
|
||||
iso19111/operation/projbasedoperation.cpp \
|
||||
iso19111/operation/singleoperation.cpp \
|
||||
iso19111/operation/transformation.cpp \
|
||||
iso19111/operation/vectorofvaluesparams.hpp \
|
||||
iso19111/operation/vectorofvaluesparams.cpp \
|
||||
iso19111/io.cpp \
|
||||
iso19111/internal.cpp \
|
||||
iso19111/factory.cpp \
|
||||
|
||||
+15
-3
@@ -385,12 +385,22 @@ int main(int argc, char **argv) {
|
||||
colmax = MAX(colmax, columns_xyzt[i]);
|
||||
comment = column(buf, colmax+1);
|
||||
}
|
||||
/* remove the line feed from comment, as logger() above, invoked
|
||||
by print() below (output), will add one */
|
||||
size_t len = strlen(comment);
|
||||
if (len >= 1)
|
||||
comment[len - 1] = '\0';
|
||||
comment_delimiter = (comment && *comment) ? whitespace : blank_comment;
|
||||
|
||||
/* Time to print the result */
|
||||
if (proj_angular_output (P, direction)) {
|
||||
point.lpzt.lam = proj_todeg (point.lpzt.lam);
|
||||
point.lpzt.phi = proj_todeg (point.lpzt.phi);
|
||||
/* use same arguments to printf format string for both radians and
|
||||
degrees; convert radians to degrees before printing */
|
||||
if (proj_angular_output (P, direction) ||
|
||||
proj_degree_output (P, direction)) {
|
||||
if (proj_angular_output (P, direction)) {
|
||||
point.lpzt.lam = proj_todeg (point.lpzt.lam);
|
||||
point.lpzt.phi = proj_todeg (point.lpzt.phi);
|
||||
}
|
||||
print (PJ_LOG_NONE, "%14.*f %14.*f %12.*f %12.4f%s%s",
|
||||
decimals_angles, point.xyzt.x,
|
||||
decimals_angles, point.xyzt.y,
|
||||
@@ -405,6 +415,8 @@ int main(int argc, char **argv) {
|
||||
decimals_distances, point.xyzt.z,
|
||||
point.xyzt.t, comment_delimiter, comment
|
||||
);
|
||||
if( fout == stdout )
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
proj_destroy(P);
|
||||
|
||||
@@ -217,6 +217,7 @@ static void process(FILE *fid)
|
||||
printf("%s", s);
|
||||
else
|
||||
printf("\n");
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -124,6 +124,7 @@ process(FILE *fid) {
|
||||
(void)fputs(rtodms(pline, al21, 0, 0), stdout);
|
||||
}
|
||||
(void)fputs(s, stdout);
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -171,6 +171,7 @@ static void process(FILE *fid) {
|
||||
(void)fputs("\t<* * * * * *>", stdout);
|
||||
}
|
||||
(void)fputs(bin_in ? "\n" : s, stdout);
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -286,6 +287,8 @@ static void vprocess(FILE *fid) {
|
||||
(void)fputs(proj_rtodms(pline, facs.meridian_convergence, 0, 0), stdout);
|
||||
(void)printf(" [ %.8f ]\n", facs.meridian_convergence * RAD_TO_DEG);
|
||||
(void)printf("Max-min (Tissot axis a-b) scale error: %.5f %.5f\n\n", facs.tissot_semimajor, facs.tissot_semiminor);
|
||||
|
||||
fflush(stdout);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+14
-4
@@ -689,6 +689,7 @@ static void outputOperations(
|
||||
|
||||
std::vector<CoordinateOperationNNPtr> list;
|
||||
size_t spatialCriterionPartialIntersectionResultCount = 0;
|
||||
bool spatialCriterionPartialIntersectionMoreRelevant = false;
|
||||
try {
|
||||
auto authFactory =
|
||||
dbContext
|
||||
@@ -714,10 +715,15 @@ static void outputOperations(
|
||||
ctxt->setSpatialCriterion(
|
||||
CoordinateOperationContext::SpatialCriterion::
|
||||
PARTIAL_INTERSECTION);
|
||||
spatialCriterionPartialIntersectionResultCount =
|
||||
CoordinateOperationFactory::create()
|
||||
->createOperations(nnSourceCRS, nnTargetCRS, ctxt)
|
||||
.size();
|
||||
auto list2 =
|
||||
CoordinateOperationFactory::create()->createOperations(
|
||||
nnSourceCRS, nnTargetCRS, ctxt);
|
||||
spatialCriterionPartialIntersectionResultCount = list2.size();
|
||||
if (spatialCriterionPartialIntersectionResultCount == 1 &&
|
||||
list.size() == 1 &&
|
||||
list2[0]->nameStr() != list[0]->nameStr()) {
|
||||
spatialCriterionPartialIntersectionMoreRelevant = true;
|
||||
}
|
||||
} catch (const std::exception &) {
|
||||
}
|
||||
}
|
||||
@@ -736,6 +742,10 @@ static void outputOperations(
|
||||
"more results ("
|
||||
<< spatialCriterionPartialIntersectionResultCount << ")"
|
||||
<< std::endl;
|
||||
} else if (spatialCriterionPartialIntersectionMoreRelevant) {
|
||||
std::cout << "Note: using '--spatial-test intersects' would bring "
|
||||
"more relevant results."
|
||||
<< std::endl;
|
||||
}
|
||||
if (summary) {
|
||||
for (const auto &op : list) {
|
||||
|
||||
@@ -15,3 +15,7 @@ install(TARGETS binprojinfo
|
||||
if(MSVC AND BUILD_SHARED_LIBS)
|
||||
target_compile_definitions(binprojinfo PRIVATE PROJ_MSVC_DLL_IMPORT=1)
|
||||
endif()
|
||||
|
||||
if(CURL_ENABLED)
|
||||
target_compile_definitions(binprojinfo PRIVATE -DCURL_ENABLED)
|
||||
endif()
|
||||
|
||||
+33
-8
@@ -1418,6 +1418,13 @@ const char *proj_get_id_code(const PJ *obj, int index) {
|
||||
* variants, for WKT1_GDAL for ProjectedCRS with easting/northing ordering
|
||||
* (otherwise stripped), but not for WKT1_ESRI. Setting to YES will output
|
||||
* them unconditionally, and to NO will omit them unconditionally.</li>
|
||||
* <li>STRICT=YES/NO. Default is YES. If NO, a Geographic 3D CRS can be for
|
||||
* example exported as WKT1_GDAL with 3 axes, whereas this is normally not
|
||||
* allowed.</li>
|
||||
* <li>ALLOW_ELLIPSOIDAL_HEIGHT_AS_VERTICAL_CRS=YES/NO. Default is NO. If set
|
||||
* to YES and type == PJ_WKT1_GDAL, a Geographic 3D CRS or a Projected 3D CRS
|
||||
* will be exported as a compound CRS whose vertical part represents an
|
||||
* ellipsoidal height (for example for use with LAS 1.4 WKT1).</li>
|
||||
* </ul>
|
||||
* @return a string, or NULL in case of error.
|
||||
*/
|
||||
@@ -1468,6 +1475,11 @@ const char *proj_as_wkt(PJ_CONTEXT *ctx, const PJ *obj, PJ_WKT_TYPE type,
|
||||
}
|
||||
} else if ((value = getOptionValue(*iter, "STRICT="))) {
|
||||
formatter->setStrict(ci_equal(value, "YES"));
|
||||
} else if ((value = getOptionValue(
|
||||
*iter,
|
||||
"ALLOW_ELLIPSOIDAL_HEIGHT_AS_VERTICAL_CRS="))) {
|
||||
formatter->setAllowEllipsoidalHeightAsVerticalCRS(
|
||||
ci_equal(value, "YES"));
|
||||
} else {
|
||||
std::string msg("Unknown option :");
|
||||
msg += *iter;
|
||||
@@ -2049,6 +2061,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.
|
||||
@@ -4438,8 +4452,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 +4493,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
|
||||
@@ -7986,6 +8005,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.
|
||||
@@ -8017,6 +8039,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.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+89
-11
@@ -533,8 +533,12 @@ CRSNNPtr CRS::createBoundCRSToWGS84IfPossible(
|
||||
auto authFactory = io::AuthorityFactory::create(
|
||||
NN_NO_CHECK(dbContext),
|
||||
authority == "any" ? std::string() : authority);
|
||||
metadata::ExtentPtr extentResolved(extent);
|
||||
if (!extent) {
|
||||
getResolvedCRS(thisAsCRS, authFactory, extentResolved);
|
||||
}
|
||||
auto ctxt = operation::CoordinateOperationContext::create(
|
||||
authFactory, extent, 0.0);
|
||||
authFactory, extentResolved, 0.0);
|
||||
ctxt->setAllowUseIntermediateCRS(allowIntermediateCRSUse);
|
||||
// ctxt->setSpatialCriterion(
|
||||
// operation::CoordinateOperationContext::SpatialCriterion::PARTIAL_INTERSECTION);
|
||||
@@ -1616,6 +1620,34 @@ static bool exportAsESRIWktCompoundCRSWithEllipsoidalHeight(
|
||||
vertCRSList.front()->_exportToWKT(formatter);
|
||||
return true;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// Try to format a Geographic/ProjectedCRS 3D CRS as a
|
||||
// GEOGCS[]/PROJCS[],VERTCS["Ellipsoid (metre)",DATUM["Ellipsoid",2002],...]
|
||||
static bool exportAsWKT1CompoundCRSWithEllipsoidalHeight(
|
||||
const CRSNNPtr &base2DCRS,
|
||||
const cs::CoordinateSystemAxisNNPtr &verticalAxis,
|
||||
io::WKTFormatter *formatter) {
|
||||
std::string verticalCRSName = "Ellipsoid (";
|
||||
verticalCRSName += verticalAxis->unit().name();
|
||||
verticalCRSName += ')';
|
||||
auto vertDatum = datum::VerticalReferenceFrame::create(
|
||||
util::PropertyMap()
|
||||
.set(common::IdentifiedObject::NAME_KEY, "Ellipsoid")
|
||||
.set("VERT_DATUM_TYPE", "2002"));
|
||||
auto vertCRS = VerticalCRS::create(
|
||||
util::PropertyMap().set(common::IdentifiedObject::NAME_KEY,
|
||||
verticalCRSName),
|
||||
vertDatum.as_nullable(), nullptr,
|
||||
cs::VerticalCS::create(util::PropertyMap(), verticalAxis));
|
||||
formatter->startNode(io::WKTConstants::COMPD_CS, false);
|
||||
formatter->addQuotedString(base2DCRS->nameStr() + " + " + verticalCRSName);
|
||||
base2DCRS->_exportToWKT(formatter);
|
||||
vertCRS->_exportToWKT(formatter);
|
||||
formatter->endNode();
|
||||
return true;
|
||||
}
|
||||
//! @endcond
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -1683,6 +1715,13 @@ void GeodeticCRS::_exportToWKT(io::WKTFormatter *formatter) const {
|
||||
return;
|
||||
}
|
||||
|
||||
if (formatter->isAllowedEllipsoidalHeightAsVerticalCRS()) {
|
||||
if (exportAsWKT1CompoundCRSWithEllipsoidalHeight(
|
||||
geogCRS2D, axisList[2], formatter)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
io::FormattingException::Throw(
|
||||
"WKT1 does not support Geographic 3D CRS.");
|
||||
}
|
||||
@@ -1920,13 +1959,21 @@ getStandardCriterion(util::IComparable::Criterion criterion) {
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
bool GeodeticCRS::_isEquivalentTo(
|
||||
const util::IComparable *other, util::IComparable::Criterion criterion,
|
||||
const io::DatabaseContextPtr &dbContext) const {
|
||||
if (other == nullptr || !util::isOfExactType<GeodeticCRS>(*other)) {
|
||||
return false;
|
||||
}
|
||||
return _isEquivalentToNoTypeCheck(other, criterion, dbContext);
|
||||
}
|
||||
|
||||
bool GeodeticCRS::_isEquivalentToNoTypeCheck(
|
||||
const util::IComparable *other, util::IComparable::Criterion criterion,
|
||||
const io::DatabaseContextPtr &dbContext) const {
|
||||
const auto standardCriterion = getStandardCriterion(criterion);
|
||||
auto otherGeodCRS = dynamic_cast<const GeodeticCRS *>(other);
|
||||
|
||||
// TODO test velocityModel
|
||||
return otherGeodCRS != nullptr &&
|
||||
SingleCRS::baseIsEquivalentTo(other, standardCriterion, dbContext);
|
||||
return SingleCRS::baseIsEquivalentTo(other, standardCriterion, dbContext);
|
||||
}
|
||||
//! @endcond
|
||||
|
||||
@@ -2482,12 +2529,13 @@ bool GeographicCRS::is2DPartOf3D(util::nn<const GeographicCRS *> other,
|
||||
bool GeographicCRS::_isEquivalentTo(
|
||||
const util::IComparable *other, util::IComparable::Criterion criterion,
|
||||
const io::DatabaseContextPtr &dbContext) const {
|
||||
auto otherGeogCRS = dynamic_cast<const GeographicCRS *>(other);
|
||||
if (otherGeogCRS == nullptr) {
|
||||
if (other == nullptr || !util::isOfExactType<GeographicCRS>(*other)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const auto standardCriterion = getStandardCriterion(criterion);
|
||||
if (GeodeticCRS::_isEquivalentTo(other, standardCriterion, dbContext)) {
|
||||
if (GeodeticCRS::_isEquivalentToNoTypeCheck(other, standardCriterion,
|
||||
dbContext)) {
|
||||
return true;
|
||||
}
|
||||
if (criterion !=
|
||||
@@ -2506,7 +2554,29 @@ bool GeographicCRS::_isEquivalentTo(
|
||||
cs::EllipsoidalCS::AxisOrder::LONG_EAST_LAT_NORTH
|
||||
? cs::EllipsoidalCS::createLatitudeLongitude(unit)
|
||||
: cs::EllipsoidalCS::createLongitudeLatitude(unit))
|
||||
->GeodeticCRS::_isEquivalentTo(other, standardCriterion, dbContext);
|
||||
->GeodeticCRS::_isEquivalentToNoTypeCheck(other, standardCriterion,
|
||||
dbContext);
|
||||
}
|
||||
if (axisOrder ==
|
||||
cs::EllipsoidalCS::AxisOrder::LONG_EAST_LAT_NORTH_HEIGHT_UP ||
|
||||
axisOrder ==
|
||||
cs::EllipsoidalCS::AxisOrder::LAT_NORTH_LONG_EAST_HEIGHT_UP) {
|
||||
const auto &angularUnit = coordinateSystem()->axisList()[0]->unit();
|
||||
const auto &linearUnit = coordinateSystem()->axisList()[2]->unit();
|
||||
return GeographicCRS::create(
|
||||
util::PropertyMap().set(common::IdentifiedObject::NAME_KEY,
|
||||
nameStr()),
|
||||
datum(), datumEnsemble(),
|
||||
axisOrder == cs::EllipsoidalCS::AxisOrder::
|
||||
LONG_EAST_LAT_NORTH_HEIGHT_UP
|
||||
? cs::EllipsoidalCS::
|
||||
createLatitudeLongitudeEllipsoidalHeight(
|
||||
angularUnit, linearUnit)
|
||||
: cs::EllipsoidalCS::
|
||||
createLongitudeLatitudeEllipsoidalHeight(
|
||||
angularUnit, linearUnit))
|
||||
->GeodeticCRS::_isEquivalentToNoTypeCheck(other, standardCriterion,
|
||||
dbContext);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -3605,6 +3675,14 @@ void ProjectedCRS::_exportToWKT(io::WKTFormatter *formatter) const {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!formatter->useESRIDialect() &&
|
||||
formatter->isAllowedEllipsoidalHeightAsVerticalCRS()) {
|
||||
if (exportAsWKT1CompoundCRSWithEllipsoidalHeight(
|
||||
projCRS2D, axisList[2], formatter)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
io::FormattingException::Throw(
|
||||
"Projected 3D CRS can only be exported since WKT2:2019");
|
||||
}
|
||||
@@ -3885,8 +3963,7 @@ ProjectedCRS::create(const util::PropertyMap &properties,
|
||||
bool ProjectedCRS::_isEquivalentTo(
|
||||
const util::IComparable *other, util::IComparable::Criterion criterion,
|
||||
const io::DatabaseContextPtr &dbContext) const {
|
||||
auto otherProjCRS = dynamic_cast<const ProjectedCRS *>(other);
|
||||
return otherProjCRS != nullptr &&
|
||||
return other != nullptr && util::isOfExactType<ProjectedCRS>(*other) &&
|
||||
DerivedCRS::_isEquivalentTo(other, criterion, dbContext);
|
||||
}
|
||||
|
||||
@@ -5111,7 +5188,8 @@ BoundCRSNNPtr BoundCRS::createFromNadgrids(const CRSNNPtr &baseCRSIn,
|
||||
" (with Greenwich prime meridian)"),
|
||||
sourceGeographicCRS->datumNonNull(nullptr)->ellipsoid(),
|
||||
util::optional<std::string>(), datum::PrimeMeridian::GREENWICH),
|
||||
sourceGeographicCRS->coordinateSystem());
|
||||
cs::EllipsoidalCS::createLatitudeLongitude(
|
||||
common::UnitOfMeasure::DEGREE));
|
||||
}
|
||||
std::string transformationName = transformationSourceCRS->nameStr();
|
||||
transformationName += " to WGS84";
|
||||
|
||||
@@ -352,6 +352,23 @@ void PrimeMeridian::_exportToWKT(
|
||||
if (!(isWKT2 && formatter->primeMeridianOmittedIfGreenwich() &&
|
||||
l_name == "Greenwich")) {
|
||||
formatter->startNode(io::WKTConstants::PRIMEM, !identifiers().empty());
|
||||
|
||||
if (formatter->useESRIDialect()) {
|
||||
bool aliasFound = false;
|
||||
const auto &dbContext = formatter->databaseContext();
|
||||
if (dbContext) {
|
||||
auto l_alias = dbContext->getAliasFromOfficialName(
|
||||
l_name, "prime_meridian", "ESRI");
|
||||
if (!l_alias.empty()) {
|
||||
l_name = l_alias;
|
||||
aliasFound = true;
|
||||
}
|
||||
}
|
||||
if (!aliasFound) {
|
||||
l_name = io::WKTFormatter::morphNameToESRI(l_name);
|
||||
}
|
||||
}
|
||||
|
||||
formatter->addQuotedString(l_name);
|
||||
const auto &l_long = longitude();
|
||||
if (formatter->primeMeridianInDegree()) {
|
||||
|
||||
@@ -39,12 +39,14 @@
|
||||
#include "proj/metadata.hpp"
|
||||
#include "proj/util.hpp"
|
||||
|
||||
#include "proj/internal/coordinateoperation_internal.hpp"
|
||||
#include "proj/internal/internal.hpp"
|
||||
#include "proj/internal/io_internal.hpp"
|
||||
#include "proj/internal/lru_cache.hpp"
|
||||
#include "proj/internal/tracing.hpp"
|
||||
|
||||
#include "operation/coordinateoperation_internal.hpp"
|
||||
#include "operation/parammappings.hpp"
|
||||
|
||||
#include "sqlite3_utils.hpp"
|
||||
|
||||
#include <cmath>
|
||||
@@ -94,6 +96,12 @@ namespace io {
|
||||
#define GEOG_3D_SINGLE_QUOTED "'geographic 3D'"
|
||||
#define GEOCENTRIC_SINGLE_QUOTED "'geocentric'"
|
||||
|
||||
// See data/sql/metadata.sql for the semantics of those constants
|
||||
constexpr int DATABASE_LAYOUT_VERSION_MAJOR = 1;
|
||||
// If the code depends on the new additions, then DATABASE_LAYOUT_VERSION_MINOR
|
||||
// must be incremented.
|
||||
constexpr int DATABASE_LAYOUT_VERSION_MINOR = 0;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
struct SQLValues {
|
||||
@@ -270,6 +278,8 @@ struct DatabaseContext::Private {
|
||||
lru11::Cache<std::string, std::list<std::string>> cacheAliasNames_{
|
||||
CACHE_SIZE};
|
||||
|
||||
void checkDatabaseLayout();
|
||||
|
||||
static void insertIntoCache(LRUCacheOfObjects &cache,
|
||||
const std::string &code,
|
||||
const util::BaseObjectPtr &obj);
|
||||
@@ -548,6 +558,61 @@ void DatabaseContext::Private::open(const std::string &databasePath,
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void DatabaseContext::Private::checkDatabaseLayout() {
|
||||
auto res = run("SELECT key, value FROM metadata WHERE key IN "
|
||||
"('DATABASE.LAYOUT.VERSION.MAJOR', "
|
||||
"'DATABASE.LAYOUT.VERSION.MINOR')");
|
||||
if (res.size() != 2) {
|
||||
// The database layout of PROJ 7.2 that shipped with EPSG v10.003 is
|
||||
// at the time of writing still compatible of the one we support.
|
||||
static_assert(
|
||||
// cppcheck-suppress knownConditionTrueFalse
|
||||
DATABASE_LAYOUT_VERSION_MAJOR == 1 &&
|
||||
// cppcheck-suppress knownConditionTrueFalse
|
||||
DATABASE_LAYOUT_VERSION_MINOR == 0,
|
||||
"remove that assertion and below lines next time we upgrade "
|
||||
"database structure");
|
||||
res = run("SELECT 1 FROM metadata WHERE key = 'EPSG.VERSION' AND "
|
||||
"value = 'v10.003'");
|
||||
if (!res.empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
throw FactoryException(
|
||||
databasePath_ +
|
||||
" lacks DATABASE.LAYOUT.VERSION.MAJOR / "
|
||||
"DATABASE.LAYOUT.VERSION.MINOR "
|
||||
"metadata. It comes from another PROJ installation.");
|
||||
}
|
||||
int nMajor = 0;
|
||||
int nMinor = 0;
|
||||
for (const auto &row : res) {
|
||||
if (row[0] == "DATABASE.LAYOUT.VERSION.MAJOR") {
|
||||
nMajor = atoi(row[1].c_str());
|
||||
} else if (row[0] == "DATABASE.LAYOUT.VERSION.MINOR") {
|
||||
nMinor = atoi(row[1].c_str());
|
||||
}
|
||||
}
|
||||
if (nMajor != DATABASE_LAYOUT_VERSION_MAJOR) {
|
||||
throw FactoryException(databasePath_ +
|
||||
" contains DATABASE.LAYOUT.VERSION.MAJOR = " +
|
||||
toString(nMajor) + " whereas " +
|
||||
toString(DATABASE_LAYOUT_VERSION_MAJOR) +
|
||||
" is expected. "
|
||||
"It comes from another PROJ installation.");
|
||||
}
|
||||
if (nMinor < DATABASE_LAYOUT_VERSION_MINOR) {
|
||||
throw FactoryException(databasePath_ +
|
||||
" contains DATABASE.LAYOUT.VERSION.MINOR = " +
|
||||
toString(nMinor) + " whereas a number >= " +
|
||||
toString(DATABASE_LAYOUT_VERSION_MINOR) +
|
||||
" is expected. "
|
||||
"It comes from another PROJ installation.");
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void DatabaseContext::Private::setHandle(sqlite3 *sqlite_handle) {
|
||||
|
||||
assert(sqlite_handle);
|
||||
@@ -865,6 +930,7 @@ DatabaseContext::create(const std::string &databasePath,
|
||||
if (!auxiliaryDatabasePaths.empty()) {
|
||||
dbCtx->getPrivate()->attachExtraDatabases(auxiliaryDatabasePaths);
|
||||
}
|
||||
dbCtx->getPrivate()->checkDatabaseLayout();
|
||||
return dbCtx;
|
||||
}
|
||||
|
||||
@@ -6019,6 +6085,8 @@ AuthorityFactory::createObjectsFromNameEx(
|
||||
auto sqlRes = d->run(sql, params);
|
||||
bool isFirst = true;
|
||||
bool firstIsDeprecated = false;
|
||||
bool foundExactMatch = false;
|
||||
std::size_t hashCodeFirstMatch = 0;
|
||||
for (const auto &row : sqlRes) {
|
||||
const auto &name = row[3];
|
||||
if (approximateMatch) {
|
||||
@@ -6082,11 +6150,38 @@ AuthorityFactory::createObjectsFromNameEx(
|
||||
}
|
||||
throw std::runtime_error("Unsupported table_name");
|
||||
};
|
||||
res.emplace_back(PairObjectName(getObject(table_name, code), name));
|
||||
const auto obj = getObject(table_name, code);
|
||||
if (metadata::Identifier::canonicalizeName(obj->nameStr()) ==
|
||||
canonicalizedSearchedName) {
|
||||
foundExactMatch = true;
|
||||
}
|
||||
|
||||
const auto objPtr = obj.get();
|
||||
if (res.empty()) {
|
||||
hashCodeFirstMatch = typeid(*objPtr).hash_code();
|
||||
} else if (hashCodeFirstMatch != typeid(*objPtr).hash_code()) {
|
||||
hashCodeFirstMatch = 0;
|
||||
}
|
||||
|
||||
res.emplace_back(PairObjectName(obj, name));
|
||||
if (limitResultCount > 0 && res.size() == limitResultCount) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If we found a name that is an exact match, and all objects have the
|
||||
// same type, and we are not in approximate mode, only keep the objet(s)
|
||||
// with the exact name match.
|
||||
if (foundExactMatch && hashCodeFirstMatch != 0 && !approximateMatch) {
|
||||
std::list<PairObjectName> resTmp;
|
||||
for (const auto &pair : res) {
|
||||
if (metadata::Identifier::canonicalizeName(
|
||||
pair.first->nameStr()) == canonicalizedSearchedName) {
|
||||
resTmp.emplace_back(pair);
|
||||
}
|
||||
}
|
||||
res = std::move(resTmp);
|
||||
}
|
||||
}
|
||||
|
||||
auto sortLambda = [](const PairObjectName &a, const PairObjectName &b) {
|
||||
|
||||
+185
-21
@@ -53,7 +53,11 @@
|
||||
#include "proj/metadata.hpp"
|
||||
#include "proj/util.hpp"
|
||||
|
||||
#include "proj/internal/coordinateoperation_internal.hpp"
|
||||
#include "operation/coordinateoperation_internal.hpp"
|
||||
#include "operation/esriparammappings.hpp"
|
||||
#include "operation/oputils.hpp"
|
||||
#include "operation/parammappings.hpp"
|
||||
|
||||
#include "proj/internal/coordinatesystem_internal.hpp"
|
||||
#include "proj/internal/internal.hpp"
|
||||
#include "proj/internal/io_internal.hpp"
|
||||
@@ -140,6 +144,7 @@ struct WKTFormatter::Private {
|
||||
bool primeMeridianInDegree_ = false;
|
||||
bool use2019Keywords_ = false;
|
||||
bool useESRIDialect_ = false;
|
||||
bool allowEllipsoidalHeightAsVerticalCRS_ = false;
|
||||
OutputAxisRule outputAxis_ = WKTFormatter::OutputAxisRule::YES;
|
||||
};
|
||||
Params params_{};
|
||||
@@ -251,6 +256,8 @@ WKTFormatter::setOutputAxis(OutputAxisRule outputAxisIn) noexcept {
|
||||
*
|
||||
* The default is strict mode, in which case a FormattingException can be
|
||||
* thrown.
|
||||
* In non-strict mode, a Geographic 3D CRS can be for example exported as
|
||||
* WKT1_GDAL with 3 axes, whereas this is normally not allowed.
|
||||
*/
|
||||
WKTFormatter &WKTFormatter::setStrict(bool strictIn) noexcept {
|
||||
d->params_.strict_ = strictIn;
|
||||
@@ -264,6 +271,32 @@ bool WKTFormatter::isStrict() const noexcept { return d->params_.strict_; }
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
|
||||
/** \brief Set whether the formatter should export, in WKT1, a Geographic or
|
||||
* Projected 3D CRS as a compound CRS whose vertical part represents an
|
||||
* ellipsoidal height.
|
||||
*/
|
||||
WKTFormatter &
|
||||
WKTFormatter::setAllowEllipsoidalHeightAsVerticalCRS(bool allow) noexcept {
|
||||
d->params_.allowEllipsoidalHeightAsVerticalCRS_ = allow;
|
||||
return *this;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/** \brief Return whether the formatter should export, in WKT1, a Geographic or
|
||||
* Projected 3D CRS as a compound CRS whose vertical part represents an
|
||||
* ellipsoidal height.
|
||||
*/
|
||||
bool WKTFormatter::isAllowedEllipsoidalHeightAsVerticalCRS() const noexcept {
|
||||
return d->params_.allowEllipsoidalHeightAsVerticalCRS_;
|
||||
}
|
||||
|
||||
//! @endcond
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/** Returns the WKT string from the formatter. */
|
||||
const std::string &WKTFormatter::toString() const {
|
||||
if (d->indentLevel_ > 0 || d->level_ > 0) {
|
||||
@@ -1979,14 +2012,80 @@ PrimeMeridianNNPtr WKTParser::Private::buildPrimeMeridian(
|
||||
try {
|
||||
double angleValue = asDouble(children[1]);
|
||||
|
||||
// Correct for GDAL WKT1 departure
|
||||
// Correct for GDAL WKT1 and WKT1-ESRI departure
|
||||
if (name == "Paris" && std::fabs(angleValue - 2.33722917) < 1e-8 &&
|
||||
unit == UnitOfMeasure::GRAD) {
|
||||
unit._isEquivalentTo(UnitOfMeasure::GRAD,
|
||||
util::IComparable::Criterion::EQUIVALENT)) {
|
||||
angleValue = 2.5969213;
|
||||
} else {
|
||||
static const struct {
|
||||
const char *name;
|
||||
int deg;
|
||||
int min;
|
||||
double sec;
|
||||
} primeMeridiansDMS[] = {
|
||||
{"Lisbon", -9, 7, 54.862}, {"Bogota", -74, 4, 51.3},
|
||||
{"Madrid", -3, 41, 14.55}, {"Rome", 12, 27, 8.4},
|
||||
{"Bern", 7, 26, 22.5}, {"Jakarta", 106, 48, 27.79},
|
||||
{"Ferro", -17, 40, 0}, {"Brussels", 4, 22, 4.71},
|
||||
{"Stockholm", 18, 3, 29.8}, {"Athens", 23, 42, 58.815},
|
||||
{"Oslo", 10, 43, 22.5}, {"Paris RGS", 2, 20, 13.95},
|
||||
{"Paris_RGS", 2, 20, 13.95}};
|
||||
|
||||
// Current epsg.org output may use the EPSG:9110 "sexagesimal DMS"
|
||||
// unit and a DD.MMSSsss value, but this will likely be changed to
|
||||
// use decimal degree.
|
||||
// Or WKT1 may for example use the Paris RGS decimal degree value
|
||||
// but with a GEOGCS with UNIT["Grad"]
|
||||
for (const auto &pmDef : primeMeridiansDMS) {
|
||||
if (name == pmDef.name) {
|
||||
double dmsAsDecimalValue =
|
||||
(pmDef.deg >= 0 ? 1 : -1) *
|
||||
(std::abs(pmDef.deg) + pmDef.min / 100. +
|
||||
pmDef.sec / 10000.);
|
||||
double dmsAsDecimalDegreeValue =
|
||||
(pmDef.deg >= 0 ? 1 : -1) *
|
||||
(std::abs(pmDef.deg) + pmDef.min / 60. +
|
||||
pmDef.sec / 3600.);
|
||||
if (std::fabs(angleValue - dmsAsDecimalValue) < 1e-8 ||
|
||||
std::fabs(angleValue - dmsAsDecimalDegreeValue) <
|
||||
1e-8) {
|
||||
angleValue = dmsAsDecimalDegreeValue;
|
||||
unit = UnitOfMeasure::DEGREE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto &properties = buildProperties(node);
|
||||
if (dbContext_ && esriStyle_) {
|
||||
std::string outTableName;
|
||||
std::string codeFromAlias;
|
||||
std::string authNameFromAlias;
|
||||
auto authFactory = AuthorityFactory::create(NN_NO_CHECK(dbContext_),
|
||||
std::string());
|
||||
auto officialName = authFactory->getOfficialNameFromAlias(
|
||||
name, "prime_meridian", "ESRI", false, outTableName,
|
||||
authNameFromAlias, codeFromAlias);
|
||||
if (!officialName.empty()) {
|
||||
properties.set(IdentifiedObject::NAME_KEY, officialName);
|
||||
if (!authNameFromAlias.empty()) {
|
||||
auto identifiers = ArrayOfBaseObject::create();
|
||||
identifiers->add(Identifier::create(
|
||||
codeFromAlias,
|
||||
PropertyMap()
|
||||
.set(Identifier::CODESPACE_KEY, authNameFromAlias)
|
||||
.set(Identifier::AUTHORITY_KEY,
|
||||
authNameFromAlias)));
|
||||
properties.set(IdentifiedObject::IDENTIFIERS_KEY,
|
||||
identifiers);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Angle angle(angleValue, unit);
|
||||
return PrimeMeridian::create(buildProperties(node), angle);
|
||||
return PrimeMeridian::create(properties, angle);
|
||||
} catch (const std::exception &e) {
|
||||
throw buildRethrow(__FUNCTION__, e);
|
||||
}
|
||||
@@ -2098,9 +2197,15 @@ GeodeticReferenceFrameNNPtr WKTParser::Private::buildGeodeticReferenceFrame(
|
||||
return false;
|
||||
};
|
||||
|
||||
if (name == "WGS_1984") {
|
||||
// Remap GDAL WGS_1984 to EPSG v9 "World Geodetic System 1984" official
|
||||
// name.
|
||||
// Also remap EPSG v10 datum ensemble names to non-ensemble EPSG v9
|
||||
if (name == "WGS_1984" || name == "World Geodetic System 1984 ensemble") {
|
||||
properties.set(IdentifiedObject::NAME_KEY,
|
||||
GeodeticReferenceFrame::EPSG_6326->nameStr());
|
||||
} else if (name == "European Terrestrial Reference System 1989 ensemble") {
|
||||
properties.set(IdentifiedObject::NAME_KEY,
|
||||
"European Terrestrial Reference System 1989");
|
||||
} else if (starts_with(name, "D_")) {
|
||||
esriStyle_ = true;
|
||||
const char *tableNameForAlias = nullptr;
|
||||
@@ -2734,6 +2839,9 @@ WKTParser::Private::buildGeodeticCRS(const WKTNodeNNPtr &node) {
|
||||
throw ParsingException("Missing DATUM or ENSEMBLE node");
|
||||
}
|
||||
|
||||
// Do that now so that esriStyle_ can be set before buildPrimeMeridian()
|
||||
auto props = buildProperties(node);
|
||||
|
||||
auto &dynamicNode = nodeP->lookForChild(WKTConstants::DYNAMIC);
|
||||
|
||||
auto &csNode = nodeP->lookForChild(WKTConstants::CS_);
|
||||
@@ -2771,7 +2879,6 @@ WKTParser::Private::buildGeodeticCRS(const WKTNodeNNPtr &node) {
|
||||
angularUnit = primeMeridian->longitude().unit();
|
||||
}
|
||||
|
||||
auto props = buildProperties(node);
|
||||
addExtensionProj4ToProp(nodeP, props);
|
||||
|
||||
// No explicit AXIS node ? (WKT1)
|
||||
@@ -2790,6 +2897,32 @@ WKTParser::Private::buildGeodeticCRS(const WKTNodeNNPtr &node) {
|
||||
.as_nullable()
|
||||
: nullptr;
|
||||
auto cs = buildCS(csNode, node, angularUnit);
|
||||
|
||||
// If there's no CS[] node, typically for a BASEGEODCRS of a projected CRS,
|
||||
// in a few rare cases, this might be a Geocentric CRS, and thus a
|
||||
// Cartesian CS, and not the ellipsoidalCS we assumed above. The only way
|
||||
// to figure that is to resolve the CRS from its code...
|
||||
if (isNull(csNode) && dbContext_ &&
|
||||
ci_equal(nodeName, WKTConstants::BASEGEODCRS)) {
|
||||
const auto &nodeChildren = nodeP->children();
|
||||
for (const auto &subNode : nodeChildren) {
|
||||
const auto &subNodeName(subNode->GP()->value());
|
||||
if (ci_equal(subNodeName, WKTConstants::ID) ||
|
||||
ci_equal(subNodeName, WKTConstants::AUTHORITY)) {
|
||||
auto id = buildId(subNode, true, false);
|
||||
if (id) {
|
||||
try {
|
||||
auto authFactory = AuthorityFactory::create(
|
||||
NN_NO_CHECK(dbContext_), *id->codeSpace());
|
||||
auto dbCRS = authFactory->createGeodeticCRS(id->code());
|
||||
cs = dbCRS->coordinateSystem();
|
||||
} catch (const util::Exception &) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto ellipsoidalCS = nn_dynamic_pointer_cast<EllipsoidalCS>(cs);
|
||||
if (ellipsoidalCS) {
|
||||
if (ci_equal(nodeName, WKTConstants::GEOCCS)) {
|
||||
@@ -2940,7 +3073,8 @@ UnitOfMeasure WKTParser::Private::guessUnitForParameter(
|
||||
const UnitOfMeasure &defaultAngularUnit) {
|
||||
UnitOfMeasure unit;
|
||||
// scale must be first because of 'Scale factor on pseudo standard parallel'
|
||||
if (ci_find(paramName, "scale") != std::string::npos) {
|
||||
if (ci_find(paramName, "scale") != std::string::npos ||
|
||||
ci_find(paramName, "scaling factor") != std::string::npos) {
|
||||
unit = UnitOfMeasure::SCALE_UNITY;
|
||||
} else if (ci_find(paramName, "latitude") != std::string::npos ||
|
||||
ci_find(paramName, "longitude") != std::string::npos ||
|
||||
@@ -3872,8 +4006,16 @@ WKTParser::Private::buildProjectedCRS(const WKTNodeNNPtr &node) {
|
||||
return createPseudoMercator(props, NN_NO_CHECK(cartesianCS));
|
||||
}
|
||||
|
||||
auto linearUnit = buildUnitInSubNode(node, UnitOfMeasure::Type::LINEAR);
|
||||
auto angularUnit = baseGeodCRS->coordinateSystem()->axisList()[0]->unit();
|
||||
// For WKT2, if there is no explicit parameter unit, use metre for linear
|
||||
// units and degree for angular units
|
||||
auto linearUnit =
|
||||
!isNull(conversionNode)
|
||||
? UnitOfMeasure::METRE
|
||||
: buildUnitInSubNode(node, UnitOfMeasure::Type::LINEAR);
|
||||
auto angularUnit =
|
||||
!isNull(conversionNode)
|
||||
? UnitOfMeasure::DEGREE
|
||||
: baseGeodCRS->coordinateSystem()->axisList()[0]->unit();
|
||||
|
||||
auto conversion =
|
||||
!isNull(conversionNode)
|
||||
@@ -4097,7 +4239,8 @@ createBoundCRSSourceTransformationCRS(const crs::CRSPtr &sourceCRS,
|
||||
sourceGeographicCRS->datum()->ellipsoid(),
|
||||
util::optional<std::string>(),
|
||||
datum::PrimeMeridian::GREENWICH),
|
||||
sourceGeographicCRS->coordinateSystem())
|
||||
cs::EllipsoidalCS::createLatitudeLongitude(
|
||||
common::UnitOfMeasure::DEGREE))
|
||||
.as_nullable();
|
||||
}
|
||||
} else {
|
||||
@@ -4941,6 +5084,10 @@ class JSONParser {
|
||||
TransformationNNPtr buildTransformation(const json &j);
|
||||
ConcatenatedOperationNNPtr buildConcatenatedOperation(const json &j);
|
||||
|
||||
void buildGeodeticDatumOrDatumEnsemble(const json &j,
|
||||
GeodeticReferenceFramePtr &datum,
|
||||
DatumEnsemblePtr &datumEnsemble);
|
||||
|
||||
static util::optional<std::string> getAnchor(const json &j) {
|
||||
util::optional<std::string> anchor;
|
||||
if (j.contains("anchor")) {
|
||||
@@ -5400,9 +5547,9 @@ BaseObjectNNPtr JSONParser::create(const json &j)
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
GeographicCRSNNPtr JSONParser::buildGeographicCRS(const json &j) {
|
||||
GeodeticReferenceFramePtr datum;
|
||||
DatumEnsemblePtr datumEnsemble;
|
||||
void JSONParser::buildGeodeticDatumOrDatumEnsemble(
|
||||
const json &j, GeodeticReferenceFramePtr &datum,
|
||||
DatumEnsemblePtr &datumEnsemble) {
|
||||
if (j.contains("datum")) {
|
||||
auto datumJ = getObject(j, "datum");
|
||||
datum = util::nn_dynamic_pointer_cast<GeodeticReferenceFrame>(
|
||||
@@ -5415,6 +5562,14 @@ GeographicCRSNNPtr JSONParser::buildGeographicCRS(const json &j) {
|
||||
datumEnsemble =
|
||||
buildDatumEnsemble(getObject(j, "datum_ensemble")).as_nullable();
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
GeographicCRSNNPtr JSONParser::buildGeographicCRS(const json &j) {
|
||||
GeodeticReferenceFramePtr datum;
|
||||
DatumEnsemblePtr datumEnsemble;
|
||||
buildGeodeticDatumOrDatumEnsemble(j, datum, datumEnsemble);
|
||||
auto csJ = getObject(j, "coordinate_system");
|
||||
auto ellipsoidalCS =
|
||||
util::nn_dynamic_pointer_cast<EllipsoidalCS>(buildCS(csJ));
|
||||
@@ -5428,12 +5583,9 @@ GeographicCRSNNPtr JSONParser::buildGeographicCRS(const json &j) {
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
GeodeticCRSNNPtr JSONParser::buildGeodeticCRS(const json &j) {
|
||||
auto datumJ = getObject(j, "datum");
|
||||
if (getType(datumJ) != "GeodeticReferenceFrame") {
|
||||
throw ParsingException("Unsupported type for datum.");
|
||||
}
|
||||
auto datum = buildGeodeticReferenceFrame(datumJ);
|
||||
GeodeticReferenceFramePtr datum;
|
||||
DatumEnsemblePtr datumEnsemble;
|
||||
buildGeodeticDatumOrDatumEnsemble(j, datum, datumEnsemble);
|
||||
auto csJ = getObject(j, "coordinate_system");
|
||||
auto cs = buildCS(csJ);
|
||||
auto props = buildProperties(j);
|
||||
@@ -5468,7 +5620,13 @@ GeodeticCRSNNPtr JSONParser::buildGeodeticCRS(const json &j) {
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
ProjectedCRSNNPtr JSONParser::buildProjectedCRS(const json &j) {
|
||||
auto baseCRS = buildGeographicCRS(getObject(j, "base_crs"));
|
||||
auto jBaseCRS = getObject(j, "base_crs");
|
||||
auto jBaseCS = getObject(jBaseCRS, "coordinate_system");
|
||||
auto baseCS = buildCS(jBaseCS);
|
||||
auto baseCRS = dynamic_cast<EllipsoidalCS *>(baseCS.get()) != nullptr
|
||||
? util::nn_static_pointer_cast<GeodeticCRS>(
|
||||
buildGeographicCRS(jBaseCRS))
|
||||
: buildGeodeticCRS(jBaseCRS);
|
||||
auto csJ = getObject(j, "coordinate_system");
|
||||
auto cartesianCS = util::nn_dynamic_pointer_cast<CartesianCS>(buildCS(csJ));
|
||||
if (!cartesianCS) {
|
||||
@@ -5975,6 +6133,12 @@ static BaseObjectNNPtr createFromUserInput(const std::string &text,
|
||||
const DatabaseContextPtr &dbContext,
|
||||
bool usePROJ4InitRules,
|
||||
PJ_CONTEXT *ctx) {
|
||||
std::size_t idxFirstCharNotSpace = text.find_first_not_of(" \t\r\n");
|
||||
if (idxFirstCharNotSpace > 0 && idxFirstCharNotSpace != std::string::npos) {
|
||||
return createFromUserInput(text.substr(idxFirstCharNotSpace), dbContext,
|
||||
usePROJ4InitRules, ctx);
|
||||
}
|
||||
|
||||
if (!text.empty() && text[0] == '{') {
|
||||
json j;
|
||||
try {
|
||||
@@ -9460,8 +9624,8 @@ CRSNNPtr PROJStringParser::Private::buildProjectedCRS(
|
||||
std::string methodName = "PROJ " + step.name;
|
||||
for (const auto ¶m : step.paramValues) {
|
||||
if (is_in_stringlist(param.key,
|
||||
"wktext,no_defs,datum,ellps,a,b,R,towgs84,"
|
||||
"nadgrids,geoidgrids,"
|
||||
"wktext,no_defs,datum,ellps,a,b,R,f,rf,"
|
||||
"towgs84,nadgrids,geoidgrids,"
|
||||
"units,to_meter,vunits,vto_meter,type")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,710 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Project: PROJ
|
||||
* Purpose: ISO19111:2019 implementation
|
||||
* Author: Even Rouault <even dot rouault at spatialys dot com>
|
||||
*
|
||||
******************************************************************************
|
||||
* Copyright (c) 2018, Even Rouault <even dot rouault at spatialys dot com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef FROM_PROJ_CPP
|
||||
#define FROM_PROJ_CPP
|
||||
#endif
|
||||
|
||||
#include "proj/common.hpp"
|
||||
#include "proj/coordinateoperation.hpp"
|
||||
#include "proj/crs.hpp"
|
||||
#include "proj/io.hpp"
|
||||
#include "proj/metadata.hpp"
|
||||
#include "proj/util.hpp"
|
||||
|
||||
#include "proj/internal/internal.hpp"
|
||||
#include "proj/internal/io_internal.hpp"
|
||||
|
||||
#include "coordinateoperation_internal.hpp"
|
||||
#include "oputils.hpp"
|
||||
|
||||
// PROJ include order is sensitive
|
||||
// clang-format off
|
||||
#include "proj.h"
|
||||
#include "proj_internal.h" // M_PI
|
||||
// clang-format on
|
||||
|
||||
#include "proj_json_streaming_writer.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cassert>
|
||||
#include <cmath>
|
||||
#include <cstring>
|
||||
#include <memory>
|
||||
#include <set>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
using namespace NS_PROJ::internal;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
NS_PROJ_START
|
||||
namespace operation {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
struct ConcatenatedOperation::Private {
|
||||
std::vector<CoordinateOperationNNPtr> operations_{};
|
||||
bool computedName_ = false;
|
||||
|
||||
explicit Private(const std::vector<CoordinateOperationNNPtr> &operationsIn)
|
||||
: operations_(operationsIn) {}
|
||||
Private(const Private &) = default;
|
||||
};
|
||||
//! @endcond
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
ConcatenatedOperation::~ConcatenatedOperation() = default;
|
||||
//! @endcond
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
ConcatenatedOperation::ConcatenatedOperation(const ConcatenatedOperation &other)
|
||||
: CoordinateOperation(other),
|
||||
d(internal::make_unique<Private>(*(other.d))) {}
|
||||
//! @endcond
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
ConcatenatedOperation::ConcatenatedOperation(
|
||||
const std::vector<CoordinateOperationNNPtr> &operationsIn)
|
||||
: CoordinateOperation(), d(internal::make_unique<Private>(operationsIn)) {}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/** \brief Return the operation steps of the concatenated operation.
|
||||
*
|
||||
* @return the operation steps.
|
||||
*/
|
||||
const std::vector<CoordinateOperationNNPtr> &
|
||||
ConcatenatedOperation::operations() const {
|
||||
return d->operations_;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
static bool compareStepCRS(const crs::CRS *a, const crs::CRS *b) {
|
||||
const auto &aIds = a->identifiers();
|
||||
const auto &bIds = b->identifiers();
|
||||
if (aIds.size() == 1 && bIds.size() == 1 &&
|
||||
aIds[0]->code() == bIds[0]->code() &&
|
||||
*aIds[0]->codeSpace() == *bIds[0]->codeSpace()) {
|
||||
return true;
|
||||
}
|
||||
return a->_isEquivalentTo(b, util::IComparable::Criterion::EQUIVALENT);
|
||||
}
|
||||
//! @endcond
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/** \brief Instantiate a ConcatenatedOperation
|
||||
*
|
||||
* @param properties See \ref general_properties. At minimum the name should
|
||||
* be
|
||||
* defined.
|
||||
* @param operationsIn Vector of the CoordinateOperation steps.
|
||||
* @param accuracies Vector of positional accuracy (might be empty).
|
||||
* @return new Transformation.
|
||||
* @throws InvalidOperation
|
||||
*/
|
||||
ConcatenatedOperationNNPtr ConcatenatedOperation::create(
|
||||
const util::PropertyMap &properties,
|
||||
const std::vector<CoordinateOperationNNPtr> &operationsIn,
|
||||
const std::vector<metadata::PositionalAccuracyNNPtr>
|
||||
&accuracies) // throw InvalidOperation
|
||||
{
|
||||
if (operationsIn.size() < 2) {
|
||||
throw InvalidOperation(
|
||||
"ConcatenatedOperation must have at least 2 operations");
|
||||
}
|
||||
crs::CRSPtr lastTargetCRS;
|
||||
|
||||
crs::CRSPtr interpolationCRS;
|
||||
bool interpolationCRSValid = true;
|
||||
for (size_t i = 0; i < operationsIn.size(); i++) {
|
||||
auto l_sourceCRS = operationsIn[i]->sourceCRS();
|
||||
auto l_targetCRS = operationsIn[i]->targetCRS();
|
||||
|
||||
if (interpolationCRSValid) {
|
||||
auto subOpInterpCRS = operationsIn[i]->interpolationCRS();
|
||||
if (interpolationCRS == nullptr)
|
||||
interpolationCRS = subOpInterpCRS;
|
||||
else if (subOpInterpCRS == nullptr ||
|
||||
!(subOpInterpCRS->isEquivalentTo(
|
||||
interpolationCRS.get(),
|
||||
util::IComparable::Criterion::EQUIVALENT))) {
|
||||
interpolationCRS = nullptr;
|
||||
interpolationCRSValid = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (l_sourceCRS == nullptr || l_targetCRS == nullptr) {
|
||||
throw InvalidOperation("At least one of the operation lacks a "
|
||||
"source and/or target CRS");
|
||||
}
|
||||
if (i >= 1) {
|
||||
if (!compareStepCRS(l_sourceCRS.get(), lastTargetCRS.get())) {
|
||||
#ifdef DEBUG_CONCATENATED_OPERATION
|
||||
std::cerr << "Step " << i - 1 << ": "
|
||||
<< operationsIn[i - 1]->nameStr() << std::endl;
|
||||
std::cerr << "Step " << i << ": " << operationsIn[i]->nameStr()
|
||||
<< std::endl;
|
||||
{
|
||||
auto f(io::WKTFormatter::create(
|
||||
io::WKTFormatter::Convention::WKT2_2019));
|
||||
std::cerr << "Source CRS of step " << i << ":" << std::endl;
|
||||
std::cerr << l_sourceCRS->exportToWKT(f.get()) << std::endl;
|
||||
}
|
||||
{
|
||||
auto f(io::WKTFormatter::create(
|
||||
io::WKTFormatter::Convention::WKT2_2019));
|
||||
std::cerr << "Target CRS of step " << i - 1 << ":"
|
||||
<< std::endl;
|
||||
std::cerr << lastTargetCRS->exportToWKT(f.get())
|
||||
<< std::endl;
|
||||
}
|
||||
#endif
|
||||
throw InvalidOperation(
|
||||
"Inconsistent chaining of CRS in operations");
|
||||
}
|
||||
}
|
||||
lastTargetCRS = l_targetCRS;
|
||||
}
|
||||
auto op = ConcatenatedOperation::nn_make_shared<ConcatenatedOperation>(
|
||||
operationsIn);
|
||||
op->assignSelf(op);
|
||||
op->setProperties(properties);
|
||||
op->setCRSs(NN_NO_CHECK(operationsIn[0]->sourceCRS()),
|
||||
NN_NO_CHECK(operationsIn.back()->targetCRS()),
|
||||
interpolationCRS);
|
||||
op->setAccuracies(accuracies);
|
||||
#ifdef DEBUG_CONCATENATED_OPERATION
|
||||
{
|
||||
auto f(
|
||||
io::WKTFormatter::create(io::WKTFormatter::Convention::WKT2_2019));
|
||||
std::cerr << "ConcatenatedOperation::create()" << std::endl;
|
||||
std::cerr << op->exportToWKT(f.get()) << std::endl;
|
||||
}
|
||||
#endif
|
||||
return op;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void ConcatenatedOperation::fixStepsDirection(
|
||||
const crs::CRSNNPtr &concatOpSourceCRS,
|
||||
const crs::CRSNNPtr &concatOpTargetCRS,
|
||||
std::vector<CoordinateOperationNNPtr> &operationsInOut) {
|
||||
|
||||
// Set of heuristics to assign CRS to steps, and possibly reverse them.
|
||||
|
||||
const auto isGeographic = [](const crs::CRS *crs) -> bool {
|
||||
return dynamic_cast<const crs::GeographicCRS *>(crs) != nullptr;
|
||||
};
|
||||
|
||||
const auto isGeocentric = [](const crs::CRS *crs) -> bool {
|
||||
auto geodCRS = dynamic_cast<const crs::GeodeticCRS *>(crs);
|
||||
if (geodCRS && geodCRS->coordinateSystem()->axisList().size() == 3)
|
||||
return true;
|
||||
return false;
|
||||
};
|
||||
|
||||
for (size_t i = 0; i < operationsInOut.size(); ++i) {
|
||||
auto &op = operationsInOut[i];
|
||||
auto l_sourceCRS = op->sourceCRS();
|
||||
auto l_targetCRS = op->targetCRS();
|
||||
auto conv = dynamic_cast<const Conversion *>(op.get());
|
||||
if (conv && i == 0 && !l_sourceCRS && !l_targetCRS) {
|
||||
auto derivedCRS =
|
||||
dynamic_cast<const crs::DerivedCRS *>(concatOpSourceCRS.get());
|
||||
if (derivedCRS) {
|
||||
if (i + 1 < operationsInOut.size()) {
|
||||
// use the sourceCRS of the next operation as our target CRS
|
||||
l_targetCRS = operationsInOut[i + 1]->sourceCRS();
|
||||
// except if it looks like the next operation should
|
||||
// actually be reversed !!!
|
||||
if (l_targetCRS &&
|
||||
!compareStepCRS(l_targetCRS.get(),
|
||||
derivedCRS->baseCRS().get()) &&
|
||||
operationsInOut[i + 1]->targetCRS() &&
|
||||
compareStepCRS(
|
||||
operationsInOut[i + 1]->targetCRS().get(),
|
||||
derivedCRS->baseCRS().get())) {
|
||||
l_targetCRS = operationsInOut[i + 1]->targetCRS();
|
||||
}
|
||||
}
|
||||
if (!l_targetCRS) {
|
||||
l_targetCRS = derivedCRS->baseCRS().as_nullable();
|
||||
}
|
||||
auto invConv =
|
||||
util::nn_dynamic_pointer_cast<InverseConversion>(op);
|
||||
auto nn_targetCRS = NN_NO_CHECK(l_targetCRS);
|
||||
if (invConv) {
|
||||
invConv->inverse()->setCRSs(nn_targetCRS, concatOpSourceCRS,
|
||||
nullptr);
|
||||
op->setCRSs(concatOpSourceCRS, nn_targetCRS, nullptr);
|
||||
} else {
|
||||
op->setCRSs(nn_targetCRS, concatOpSourceCRS, nullptr);
|
||||
op = op->inverse();
|
||||
}
|
||||
} else if (i + 1 < operationsInOut.size()) {
|
||||
/* coverity[copy_paste_error] */
|
||||
l_targetCRS = operationsInOut[i + 1]->sourceCRS();
|
||||
if (l_targetCRS) {
|
||||
op->setCRSs(concatOpSourceCRS, NN_NO_CHECK(l_targetCRS),
|
||||
nullptr);
|
||||
}
|
||||
}
|
||||
} else if (conv && i + 1 == operationsInOut.size() && !l_sourceCRS &&
|
||||
!l_targetCRS) {
|
||||
auto derivedCRS =
|
||||
dynamic_cast<const crs::DerivedCRS *>(concatOpTargetCRS.get());
|
||||
if (derivedCRS) {
|
||||
if (i >= 1) {
|
||||
// use the sourceCRS of the previous operation as our source
|
||||
// CRS
|
||||
l_sourceCRS = operationsInOut[i - 1]->targetCRS();
|
||||
// except if it looks like the previous operation should
|
||||
// actually be reversed !!!
|
||||
if (l_sourceCRS &&
|
||||
!compareStepCRS(l_sourceCRS.get(),
|
||||
derivedCRS->baseCRS().get()) &&
|
||||
operationsInOut[i - 1]->sourceCRS() &&
|
||||
compareStepCRS(
|
||||
operationsInOut[i - 1]->sourceCRS().get(),
|
||||
derivedCRS->baseCRS().get())) {
|
||||
l_targetCRS = operationsInOut[i - 1]->sourceCRS();
|
||||
}
|
||||
}
|
||||
if (!l_sourceCRS) {
|
||||
l_sourceCRS = derivedCRS->baseCRS().as_nullable();
|
||||
}
|
||||
op->setCRSs(NN_NO_CHECK(l_sourceCRS), concatOpTargetCRS,
|
||||
nullptr);
|
||||
} else if (i >= 1) {
|
||||
l_sourceCRS = operationsInOut[i - 1]->targetCRS();
|
||||
if (l_sourceCRS) {
|
||||
derivedCRS = dynamic_cast<const crs::DerivedCRS *>(
|
||||
l_sourceCRS.get());
|
||||
if (conv->isEquivalentTo(
|
||||
derivedCRS->derivingConversion().get(),
|
||||
util::IComparable::Criterion::EQUIVALENT)) {
|
||||
op->setCRSs(concatOpTargetCRS, NN_NO_CHECK(l_sourceCRS),
|
||||
nullptr);
|
||||
op = op->inverse();
|
||||
}
|
||||
op->setCRSs(NN_NO_CHECK(l_sourceCRS), concatOpTargetCRS,
|
||||
nullptr);
|
||||
}
|
||||
}
|
||||
} else if (conv && i > 0 && i < operationsInOut.size() - 1) {
|
||||
// For an intermediate conversion, use the target CRS of the
|
||||
// previous step and the source CRS of the next step
|
||||
l_sourceCRS = operationsInOut[i - 1]->targetCRS();
|
||||
l_targetCRS = operationsInOut[i + 1]->sourceCRS();
|
||||
if (l_sourceCRS && l_targetCRS) {
|
||||
op->setCRSs(NN_NO_CHECK(l_sourceCRS), NN_NO_CHECK(l_targetCRS),
|
||||
nullptr);
|
||||
}
|
||||
} else if (!conv && l_sourceCRS && l_targetCRS) {
|
||||
|
||||
// Transformations might be mentioned in their forward directions,
|
||||
// whereas we should instead use the reverse path.
|
||||
auto prevOpTarget = (i == 0) ? concatOpSourceCRS.as_nullable()
|
||||
: operationsInOut[i - 1]->targetCRS();
|
||||
if (compareStepCRS(l_sourceCRS.get(), prevOpTarget.get())) {
|
||||
// do nothing
|
||||
} else if (compareStepCRS(l_targetCRS.get(), prevOpTarget.get())) {
|
||||
op = op->inverse();
|
||||
}
|
||||
// Below is needed for EPSG:9103 which chains NAD83(2011) geographic
|
||||
// 2D with NAD83(2011) geocentric
|
||||
else if (l_sourceCRS->nameStr() == prevOpTarget->nameStr() &&
|
||||
((isGeographic(l_sourceCRS.get()) &&
|
||||
isGeocentric(prevOpTarget.get())) ||
|
||||
(isGeocentric(l_sourceCRS.get()) &&
|
||||
isGeographic(prevOpTarget.get())))) {
|
||||
auto newOp(Conversion::createGeographicGeocentric(
|
||||
NN_NO_CHECK(prevOpTarget), NN_NO_CHECK(l_sourceCRS)));
|
||||
operationsInOut.insert(operationsInOut.begin() + i, newOp);
|
||||
} else if (l_targetCRS->nameStr() == prevOpTarget->nameStr() &&
|
||||
((isGeographic(l_targetCRS.get()) &&
|
||||
isGeocentric(prevOpTarget.get())) ||
|
||||
(isGeocentric(l_targetCRS.get()) &&
|
||||
isGeographic(prevOpTarget.get())))) {
|
||||
auto newOp(Conversion::createGeographicGeocentric(
|
||||
NN_NO_CHECK(prevOpTarget), NN_NO_CHECK(l_targetCRS)));
|
||||
operationsInOut.insert(operationsInOut.begin() + i, newOp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!operationsInOut.empty()) {
|
||||
auto l_sourceCRS = operationsInOut.front()->sourceCRS();
|
||||
if (l_sourceCRS &&
|
||||
!compareStepCRS(l_sourceCRS.get(), concatOpSourceCRS.get())) {
|
||||
throw InvalidOperation("The source CRS of the first step of "
|
||||
"concatenated operation is not the same "
|
||||
"as the source CRS of the concatenated "
|
||||
"operation itself");
|
||||
}
|
||||
|
||||
auto l_targetCRS = operationsInOut.back()->targetCRS();
|
||||
if (l_targetCRS &&
|
||||
!compareStepCRS(l_targetCRS.get(), concatOpTargetCRS.get())) {
|
||||
if (l_targetCRS->nameStr() == concatOpTargetCRS->nameStr() &&
|
||||
((isGeographic(l_targetCRS.get()) &&
|
||||
isGeocentric(concatOpTargetCRS.get())) ||
|
||||
(isGeocentric(l_targetCRS.get()) &&
|
||||
isGeographic(concatOpTargetCRS.get())))) {
|
||||
auto newOp(Conversion::createGeographicGeocentric(
|
||||
NN_NO_CHECK(l_targetCRS), concatOpTargetCRS));
|
||||
operationsInOut.push_back(newOp);
|
||||
} else {
|
||||
throw InvalidOperation("The target CRS of the last step of "
|
||||
"concatenated operation is not the same "
|
||||
"as the target CRS of the concatenated "
|
||||
"operation itself");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//! @endcond
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/** \brief Instantiate a ConcatenatedOperation, or return a single
|
||||
* coordinate
|
||||
* operation.
|
||||
*
|
||||
* This computes its accuracy from the sum of its member operations, its
|
||||
* extent
|
||||
*
|
||||
* @param operationsIn Vector of the CoordinateOperation steps.
|
||||
* @param checkExtent Whether we should check the non-emptyness of the
|
||||
* intersection
|
||||
* of the extents of the operations
|
||||
* @throws InvalidOperation
|
||||
*/
|
||||
CoordinateOperationNNPtr ConcatenatedOperation::createComputeMetadata(
|
||||
const std::vector<CoordinateOperationNNPtr> &operationsIn,
|
||||
bool checkExtent) // throw InvalidOperation
|
||||
{
|
||||
util::PropertyMap properties;
|
||||
|
||||
if (operationsIn.size() == 1) {
|
||||
return operationsIn[0];
|
||||
}
|
||||
|
||||
std::vector<CoordinateOperationNNPtr> flattenOps;
|
||||
bool hasBallparkTransformation = false;
|
||||
for (const auto &subOp : operationsIn) {
|
||||
hasBallparkTransformation |= subOp->hasBallparkTransformation();
|
||||
auto subOpConcat =
|
||||
dynamic_cast<const ConcatenatedOperation *>(subOp.get());
|
||||
if (subOpConcat) {
|
||||
auto subOps = subOpConcat->operations();
|
||||
for (const auto &subSubOp : subOps) {
|
||||
flattenOps.emplace_back(subSubOp);
|
||||
}
|
||||
} else {
|
||||
flattenOps.emplace_back(subOp);
|
||||
}
|
||||
}
|
||||
|
||||
// Remove consecutive inverse operations
|
||||
if (flattenOps.size() > 2) {
|
||||
std::vector<size_t> indices;
|
||||
for (size_t i = 0; i < flattenOps.size(); ++i)
|
||||
indices.push_back(i);
|
||||
while (true) {
|
||||
bool bHasChanged = false;
|
||||
for (size_t i = 0; i + 1 < indices.size(); ++i) {
|
||||
if (flattenOps[indices[i]]->_isEquivalentTo(
|
||||
flattenOps[indices[i + 1]]->inverse().get(),
|
||||
util::IComparable::Criterion::EQUIVALENT) &&
|
||||
flattenOps[indices[i]]->sourceCRS()->_isEquivalentTo(
|
||||
flattenOps[indices[i + 1]]->targetCRS().get(),
|
||||
util::IComparable::Criterion::EQUIVALENT)) {
|
||||
indices.erase(indices.begin() + i, indices.begin() + i + 2);
|
||||
bHasChanged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// We bail out if indices.size() == 2, because potentially
|
||||
// the last 2 remaining ones could auto-cancel, and we would have
|
||||
// to have a special case for that (and this happens in practice).
|
||||
if (!bHasChanged || indices.size() <= 2)
|
||||
break;
|
||||
}
|
||||
if (indices.size() < flattenOps.size()) {
|
||||
std::vector<CoordinateOperationNNPtr> flattenOpsNew;
|
||||
for (size_t i = 0; i < indices.size(); ++i) {
|
||||
flattenOpsNew.emplace_back(flattenOps[indices[i]]);
|
||||
}
|
||||
flattenOps = std::move(flattenOpsNew);
|
||||
}
|
||||
}
|
||||
|
||||
if (flattenOps.size() == 1) {
|
||||
return flattenOps[0];
|
||||
}
|
||||
|
||||
properties.set(common::IdentifiedObject::NAME_KEY,
|
||||
computeConcatenatedName(flattenOps));
|
||||
|
||||
bool emptyIntersection = false;
|
||||
auto extent = getExtent(flattenOps, false, emptyIntersection);
|
||||
if (checkExtent && emptyIntersection) {
|
||||
std::string msg(
|
||||
"empty intersection of area of validity of concatenated "
|
||||
"operations");
|
||||
throw InvalidOperationEmptyIntersection(msg);
|
||||
}
|
||||
if (extent) {
|
||||
properties.set(common::ObjectUsage::DOMAIN_OF_VALIDITY_KEY,
|
||||
NN_NO_CHECK(extent));
|
||||
}
|
||||
|
||||
std::vector<metadata::PositionalAccuracyNNPtr> accuracies;
|
||||
const double accuracy = getAccuracy(flattenOps);
|
||||
if (accuracy >= 0.0) {
|
||||
accuracies.emplace_back(
|
||||
metadata::PositionalAccuracy::create(toString(accuracy)));
|
||||
}
|
||||
|
||||
auto op = create(properties, flattenOps, accuracies);
|
||||
op->setHasBallparkTransformation(hasBallparkTransformation);
|
||||
op->d->computedName_ = true;
|
||||
return op;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
CoordinateOperationNNPtr ConcatenatedOperation::inverse() const {
|
||||
std::vector<CoordinateOperationNNPtr> inversedOperations;
|
||||
auto l_operations = operations();
|
||||
inversedOperations.reserve(l_operations.size());
|
||||
for (const auto &operation : l_operations) {
|
||||
inversedOperations.emplace_back(operation->inverse());
|
||||
}
|
||||
std::reverse(inversedOperations.begin(), inversedOperations.end());
|
||||
|
||||
auto properties = createPropertiesForInverse(this, false, false);
|
||||
if (d->computedName_) {
|
||||
properties.set(common::IdentifiedObject::NAME_KEY,
|
||||
computeConcatenatedName(inversedOperations));
|
||||
}
|
||||
|
||||
auto op =
|
||||
create(properties, inversedOperations, coordinateOperationAccuracies());
|
||||
op->d->computedName_ = d->computedName_;
|
||||
op->setHasBallparkTransformation(hasBallparkTransformation());
|
||||
return op;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
void ConcatenatedOperation::_exportToWKT(io::WKTFormatter *formatter) const {
|
||||
const bool isWKT2 = formatter->version() == io::WKTFormatter::Version::WKT2;
|
||||
if (!isWKT2 || !formatter->use2019Keywords()) {
|
||||
throw io::FormattingException(
|
||||
"Transformation can only be exported to WKT2:2019");
|
||||
}
|
||||
|
||||
formatter->startNode(io::WKTConstants::CONCATENATEDOPERATION,
|
||||
!identifiers().empty());
|
||||
formatter->addQuotedString(nameStr());
|
||||
|
||||
if (formatter->use2019Keywords()) {
|
||||
const auto &version = operationVersion();
|
||||
if (version.has_value()) {
|
||||
formatter->startNode(io::WKTConstants::VERSION, false);
|
||||
formatter->addQuotedString(*version);
|
||||
formatter->endNode();
|
||||
}
|
||||
}
|
||||
|
||||
exportSourceCRSAndTargetCRSToWKT(this, formatter);
|
||||
|
||||
const bool canExportOperationId =
|
||||
!(formatter->idOnTopLevelOnly() && formatter->topLevelHasId());
|
||||
|
||||
const bool hasDomains = !domains().empty();
|
||||
if (hasDomains) {
|
||||
formatter->pushDisableUsage();
|
||||
}
|
||||
|
||||
for (const auto &operation : operations()) {
|
||||
formatter->startNode(io::WKTConstants::STEP, false);
|
||||
if (canExportOperationId && !operation->identifiers().empty()) {
|
||||
// fake that top node has no id, so that the operation id is
|
||||
// considered
|
||||
formatter->pushHasId(false);
|
||||
operation->_exportToWKT(formatter);
|
||||
formatter->popHasId();
|
||||
} else {
|
||||
operation->_exportToWKT(formatter);
|
||||
}
|
||||
formatter->endNode();
|
||||
}
|
||||
|
||||
if (hasDomains) {
|
||||
formatter->popDisableUsage();
|
||||
}
|
||||
|
||||
ObjectUsage::baseExportToWKT(formatter);
|
||||
formatter->endNode();
|
||||
}
|
||||
//! @endcond
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
void ConcatenatedOperation::_exportToJSON(
|
||||
io::JSONFormatter *formatter) const // throw(FormattingException)
|
||||
{
|
||||
auto writer = formatter->writer();
|
||||
auto objectContext(formatter->MakeObjectContext("ConcatenatedOperation",
|
||||
!identifiers().empty()));
|
||||
|
||||
writer->AddObjKey("name");
|
||||
auto l_name = nameStr();
|
||||
if (l_name.empty()) {
|
||||
writer->Add("unnamed");
|
||||
} else {
|
||||
writer->Add(l_name);
|
||||
}
|
||||
|
||||
writer->AddObjKey("source_crs");
|
||||
formatter->setAllowIDInImmediateChild();
|
||||
sourceCRS()->_exportToJSON(formatter);
|
||||
|
||||
writer->AddObjKey("target_crs");
|
||||
formatter->setAllowIDInImmediateChild();
|
||||
targetCRS()->_exportToJSON(formatter);
|
||||
|
||||
writer->AddObjKey("steps");
|
||||
{
|
||||
auto parametersContext(writer->MakeArrayContext(false));
|
||||
for (const auto &operation : operations()) {
|
||||
formatter->setAllowIDInImmediateChild();
|
||||
operation->_exportToJSON(formatter);
|
||||
}
|
||||
}
|
||||
|
||||
ObjectUsage::baseExportToJSON(formatter);
|
||||
}
|
||||
|
||||
//! @endcond
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
CoordinateOperationNNPtr ConcatenatedOperation::_shallowClone() const {
|
||||
auto op =
|
||||
ConcatenatedOperation::nn_make_shared<ConcatenatedOperation>(*this);
|
||||
std::vector<CoordinateOperationNNPtr> ops;
|
||||
for (const auto &subOp : d->operations_) {
|
||||
ops.emplace_back(subOp->shallowClone());
|
||||
}
|
||||
op->d->operations_ = ops;
|
||||
op->assignSelf(op);
|
||||
op->setCRSs(this, false);
|
||||
return util::nn_static_pointer_cast<CoordinateOperation>(op);
|
||||
}
|
||||
//! @endcond
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
void ConcatenatedOperation::_exportToPROJString(
|
||||
io::PROJStringFormatter *formatter) const // throw(FormattingException)
|
||||
{
|
||||
for (const auto &operation : operations()) {
|
||||
operation->_exportToPROJString(formatter);
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
bool ConcatenatedOperation::_isEquivalentTo(
|
||||
const util::IComparable *other, util::IComparable::Criterion criterion,
|
||||
const io::DatabaseContextPtr &dbContext) const {
|
||||
auto otherCO = dynamic_cast<const ConcatenatedOperation *>(other);
|
||||
if (otherCO == nullptr ||
|
||||
(criterion == util::IComparable::Criterion::STRICT &&
|
||||
!ObjectUsage::_isEquivalentTo(other, criterion, dbContext))) {
|
||||
return false;
|
||||
}
|
||||
const auto &steps = operations();
|
||||
const auto &otherSteps = otherCO->operations();
|
||||
if (steps.size() != otherSteps.size()) {
|
||||
return false;
|
||||
}
|
||||
for (size_t i = 0; i < steps.size(); i++) {
|
||||
if (!steps[i]->_isEquivalentTo(otherSteps[i].get(), criterion,
|
||||
dbContext)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
//! @endcond
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
std::set<GridDescription> ConcatenatedOperation::gridsNeeded(
|
||||
const io::DatabaseContextPtr &databaseContext,
|
||||
bool considerKnownGridsAsAvailable) const {
|
||||
std::set<GridDescription> res;
|
||||
for (const auto &operation : operations()) {
|
||||
const auto l_gridsNeeded = operation->gridsNeeded(
|
||||
databaseContext, considerKnownGridsAsAvailable);
|
||||
for (const auto &gridDesc : l_gridsNeeded) {
|
||||
res.insert(gridDesc);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
} // namespace operation
|
||||
NS_PROJ_END
|
||||
File diff suppressed because it is too large
Load Diff
+9
-47
@@ -43,53 +43,6 @@ NS_PROJ_START
|
||||
|
||||
namespace operation {
|
||||
|
||||
struct ParamMapping {
|
||||
const char *wkt2_name;
|
||||
const int epsg_code;
|
||||
const char *wkt1_name;
|
||||
const common::UnitOfMeasure::Type unit_type;
|
||||
const char *proj_name;
|
||||
};
|
||||
|
||||
struct MethodMapping {
|
||||
const char *wkt2_name;
|
||||
const int epsg_code;
|
||||
const char *wkt1_name;
|
||||
const char *proj_name_main;
|
||||
const char *proj_name_aux;
|
||||
const ParamMapping *const *params;
|
||||
};
|
||||
|
||||
const MethodMapping *getMapping(int epsg_code) noexcept;
|
||||
const MethodMapping *getMappingFromWKT1(const std::string &wkt1_name) noexcept;
|
||||
const MethodMapping *getMapping(const char *wkt2_name) noexcept;
|
||||
const MethodMapping *getMapping(const OperationMethod *method) noexcept;
|
||||
std::vector<const MethodMapping *>
|
||||
getMappingsFromPROJName(const std::string &projName);
|
||||
const ParamMapping *getMappingFromWKT1(const MethodMapping *mapping,
|
||||
const std::string &wkt1_name);
|
||||
bool areEquivalentParameters(const std::string &a, const std::string &b);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
struct ESRIParamMapping {
|
||||
const char *esri_name;
|
||||
const char *wkt2_name;
|
||||
int epsg_code;
|
||||
const char *fixed_value;
|
||||
bool is_fixed_value;
|
||||
};
|
||||
|
||||
struct ESRIMethodMapping {
|
||||
const char *esri_name;
|
||||
const char *wkt2_name;
|
||||
int epsg_code;
|
||||
const ESRIParamMapping *const params;
|
||||
};
|
||||
|
||||
std::vector<const ESRIMethodMapping *>
|
||||
getMappingsFromESRI(const std::string &esri_name);
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
bool isAxisOrderReversal(int methodEPSGCode);
|
||||
@@ -303,6 +256,15 @@ class PROJBasedOperation : public SingleOperation {
|
||||
bool inverse_ = false;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class InvalidOperationEmptyIntersection : public InvalidOperation {
|
||||
public:
|
||||
explicit InvalidOperationEmptyIntersection(const std::string &message);
|
||||
InvalidOperationEmptyIntersection(
|
||||
const InvalidOperationEmptyIntersection &other);
|
||||
~InvalidOperationEmptyIntersection() override;
|
||||
};
|
||||
} // namespace operation
|
||||
|
||||
NS_PROJ_END
|
||||
@@ -0,0 +1,88 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* Project: PROJ
|
||||
* Purpose: ISO19111:2019 implementation
|
||||
* Author: Even Rouault <even dot rouault at spatialys dot com>
|
||||
*
|
||||
******************************************************************************
|
||||
* Copyright (c) 2018, Even Rouault <even dot rouault at spatialys dot com>
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included
|
||||
* in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef COORDINATEROPERATION_PRIVATE_HPP
|
||||
#define COORDINATEROPERATION_PRIVATE_HPP
|
||||
|
||||
#include "proj/coordinateoperation.hpp"
|
||||
#include "proj/util.hpp"
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
NS_PROJ_START
|
||||
namespace operation {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
struct CoordinateOperation::Private {
|
||||
util::optional<std::string> operationVersion_{};
|
||||
std::vector<metadata::PositionalAccuracyNNPtr>
|
||||
coordinateOperationAccuracies_{};
|
||||
std::weak_ptr<crs::CRS> sourceCRSWeak_{};
|
||||
std::weak_ptr<crs::CRS> targetCRSWeak_{};
|
||||
crs::CRSPtr interpolationCRS_{};
|
||||
util::optional<common::DataEpoch> sourceCoordinateEpoch_{};
|
||||
util::optional<common::DataEpoch> targetCoordinateEpoch_{};
|
||||
bool hasBallparkTransformation_ = false;
|
||||
bool use3DHelmert_ = false;
|
||||
|
||||
// do not set this for a ProjectedCRS.definingConversion
|
||||
struct CRSStrongRef {
|
||||
crs::CRSNNPtr sourceCRS_;
|
||||
crs::CRSNNPtr targetCRS_;
|
||||
CRSStrongRef(const crs::CRSNNPtr &sourceCRSIn,
|
||||
const crs::CRSNNPtr &targetCRSIn)
|
||||
: sourceCRS_(sourceCRSIn), targetCRS_(targetCRSIn) {}
|
||||
};
|
||||
std::unique_ptr<CRSStrongRef> strongRef_{};
|
||||
|
||||
Private() = default;
|
||||
Private(const Private &other)
|
||||
: operationVersion_(other.operationVersion_),
|
||||
coordinateOperationAccuracies_(other.coordinateOperationAccuracies_),
|
||||
sourceCRSWeak_(other.sourceCRSWeak_),
|
||||
targetCRSWeak_(other.targetCRSWeak_),
|
||||
interpolationCRS_(other.interpolationCRS_),
|
||||
sourceCoordinateEpoch_(other.sourceCoordinateEpoch_),
|
||||
targetCoordinateEpoch_(other.targetCoordinateEpoch_),
|
||||
hasBallparkTransformation_(other.hasBallparkTransformation_),
|
||||
strongRef_(other.strongRef_ ? internal::make_unique<CRSStrongRef>(
|
||||
*(other.strongRef_))
|
||||
: nullptr) {}
|
||||
|
||||
Private &operator=(const Private &) = delete;
|
||||
};
|
||||
//! @endcond
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
} // namespace operation
|
||||
NS_PROJ_END
|
||||
|
||||
#endif // COORDINATEROPERATION_PRIVATE_HPP
|
||||
File diff suppressed because it is too large
Load Diff
+73
-58
@@ -29,26 +29,24 @@
|
||||
* DEALINGS IN THE SOFTWARE.
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef FROM_COORDINATE_OPERATION_CPP
|
||||
#error This file should only be included from coordinateoperation.cpp
|
||||
#ifndef FROM_PROJ_CPP
|
||||
#define FROM_PROJ_CPP
|
||||
#endif
|
||||
|
||||
#ifndef ESRI_PROJECTION_MAPPINGS_HH_INCLUDED
|
||||
#define ESRI_PROJECTION_MAPPINGS_HH_INCLUDED
|
||||
#include "esriparammappings.hpp"
|
||||
#include "proj_constants.h"
|
||||
|
||||
#include "coordinateoperation_internal.hpp"
|
||||
#include "proj/internal/internal.hpp"
|
||||
|
||||
NS_PROJ_START
|
||||
|
||||
using namespace internal;
|
||||
|
||||
namespace operation {
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// anonymous namespace
|
||||
namespace {
|
||||
|
||||
using namespace ::NS_PROJ;
|
||||
using namespace ::NS_PROJ::operation;
|
||||
|
||||
static const ESRIParamMapping paramsESRI_Plate_Carree[] = {
|
||||
const ESRIParamMapping paramsESRI_Plate_Carree[] = {
|
||||
{"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING,
|
||||
EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false},
|
||||
{"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING,
|
||||
@@ -57,7 +55,7 @@ static const ESRIParamMapping paramsESRI_Plate_Carree[] = {
|
||||
EPSG_CODE_PARAMETER_LONGITUDE_OF_NATURAL_ORIGIN, "0.0", false},
|
||||
{nullptr, nullptr, 0, "0.0", false}};
|
||||
|
||||
static const ESRIParamMapping paramsESRI_Equidistant_Cylindrical[] = {
|
||||
const ESRIParamMapping paramsESRI_Equidistant_Cylindrical[] = {
|
||||
{"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING,
|
||||
EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false},
|
||||
{"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING,
|
||||
@@ -88,7 +86,7 @@ static const ESRIParamMapping paramsESRI_Mercator[] = {
|
||||
EPSG_CODE_PARAMETER_LATITUDE_1ST_STD_PARALLEL, "0.0", false},
|
||||
{nullptr, nullptr, 0, "0.0", false}};
|
||||
|
||||
static const ESRIParamMapping paramsESRI_Gauss_Kruger[] = {
|
||||
const ESRIParamMapping paramsESRI_Gauss_Kruger[] = {
|
||||
{"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING,
|
||||
EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false},
|
||||
{"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING,
|
||||
@@ -101,7 +99,7 @@ static const ESRIParamMapping paramsESRI_Gauss_Kruger[] = {
|
||||
EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false},
|
||||
{nullptr, nullptr, 0, "0.0", false}};
|
||||
|
||||
static const ESRIParamMapping paramsESRI_Transverse_Mercator[] = {
|
||||
const ESRIParamMapping paramsESRI_Transverse_Mercator[] = {
|
||||
{"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING,
|
||||
EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false},
|
||||
{"False_Northing", EPSG_NAME_PARAMETER_FALSE_NORTHING,
|
||||
@@ -492,7 +490,7 @@ static const ESRIParamMapping
|
||||
EPSG_CODE_PARAMETER_LATITUDE_OF_NATURAL_ORIGIN, "0.0", false},
|
||||
{nullptr, nullptr, 0, "0.0", false}};
|
||||
|
||||
static const ESRIParamMapping
|
||||
const ESRIParamMapping
|
||||
paramsESRI_Hotine_Oblique_Mercator_Azimuth_Natural_Origin[] = {
|
||||
{"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING,
|
||||
EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false},
|
||||
@@ -508,21 +506,20 @@ static const ESRIParamMapping
|
||||
EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false},
|
||||
{nullptr, nullptr, 0, "0.0", false}};
|
||||
|
||||
static const ESRIParamMapping
|
||||
paramsESRI_Hotine_Oblique_Mercator_Azimuth_Center[] = {
|
||||
{"False_Easting", EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_EASTING_PROJECTION_CENTRE, "0.0", false},
|
||||
{"False_Northing", EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_NORTHING_PROJECTION_CENTRE, "0.0", false},
|
||||
{"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE,
|
||||
EPSG_CODE_PARAMETER_SCALE_FACTOR_INITIAL_LINE, "0.0", false},
|
||||
{"Azimuth", EPSG_NAME_PARAMETER_AZIMUTH_INITIAL_LINE,
|
||||
EPSG_CODE_PARAMETER_AZIMUTH_INITIAL_LINE, "0.0", false},
|
||||
{"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, "0.0", false},
|
||||
{"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false},
|
||||
{nullptr, nullptr, 0, "0.0", false}};
|
||||
const ESRIParamMapping paramsESRI_Hotine_Oblique_Mercator_Azimuth_Center[] = {
|
||||
{"False_Easting", EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_EASTING_PROJECTION_CENTRE, "0.0", false},
|
||||
{"False_Northing", EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_NORTHING_PROJECTION_CENTRE, "0.0", false},
|
||||
{"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE,
|
||||
EPSG_CODE_PARAMETER_SCALE_FACTOR_INITIAL_LINE, "0.0", false},
|
||||
{"Azimuth", EPSG_NAME_PARAMETER_AZIMUTH_INITIAL_LINE,
|
||||
EPSG_CODE_PARAMETER_AZIMUTH_INITIAL_LINE, "0.0", false},
|
||||
{"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, "0.0", false},
|
||||
{"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false},
|
||||
{nullptr, nullptr, 0, "0.0", false}};
|
||||
|
||||
static const ESRIParamMapping paramsESRI_Double_Stereographic[] = {
|
||||
{"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING,
|
||||
@@ -706,29 +703,11 @@ static const ESRIParamMapping paramsESRI_Stereographic_South_Pole[] = {
|
||||
EPSG_CODE_PARAMETER_LATITUDE_STD_PARALLEL, "0.0", false},
|
||||
{nullptr, nullptr, 0, "0.0", false}};
|
||||
|
||||
static const ESRIParamMapping
|
||||
paramsESRI_Rectified_Skew_Orthomorphic_Natural_Origin[] = {
|
||||
{"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},
|
||||
{"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE,
|
||||
EPSG_CODE_PARAMETER_SCALE_FACTOR_INITIAL_LINE, "0.0", false},
|
||||
{"Azimuth", EPSG_NAME_PARAMETER_AZIMUTH_INITIAL_LINE,
|
||||
EPSG_CODE_PARAMETER_AZIMUTH_INITIAL_LINE, "0.0", false},
|
||||
{"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, "0.0", false},
|
||||
{"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false},
|
||||
{"XY_Plane_Rotation", EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID,
|
||||
EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID, "0.0", false},
|
||||
{nullptr, nullptr, 0, "0.0", false}};
|
||||
|
||||
static const ESRIParamMapping paramsESRI_Rectified_Skew_Orthomorphic_Center[] =
|
||||
{{"False_Easting", EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_EASTING_PROJECTION_CENTRE, "0.0", false},
|
||||
{"False_Northing", EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_NORTHING_PROJECTION_CENTRE, "0.0", false},
|
||||
const ESRIParamMapping paramsESRI_Rectified_Skew_Orthomorphic_Natural_Origin[] =
|
||||
{{"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},
|
||||
{"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE,
|
||||
EPSG_CODE_PARAMETER_SCALE_FACTOR_INITIAL_LINE, "0.0", false},
|
||||
{"Azimuth", EPSG_NAME_PARAMETER_AZIMUTH_INITIAL_LINE,
|
||||
@@ -741,6 +720,23 @@ static const ESRIParamMapping paramsESRI_Rectified_Skew_Orthomorphic_Center[] =
|
||||
EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID, "0.0", false},
|
||||
{nullptr, nullptr, 0, "0.0", false}};
|
||||
|
||||
const ESRIParamMapping paramsESRI_Rectified_Skew_Orthomorphic_Center[] = {
|
||||
{"False_Easting", EPSG_NAME_PARAMETER_EASTING_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_EASTING_PROJECTION_CENTRE, "0.0", false},
|
||||
{"False_Northing", EPSG_NAME_PARAMETER_NORTHING_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_NORTHING_PROJECTION_CENTRE, "0.0", false},
|
||||
{"Scale_Factor", EPSG_NAME_PARAMETER_SCALE_FACTOR_INITIAL_LINE,
|
||||
EPSG_CODE_PARAMETER_SCALE_FACTOR_INITIAL_LINE, "0.0", false},
|
||||
{"Azimuth", EPSG_NAME_PARAMETER_AZIMUTH_INITIAL_LINE,
|
||||
EPSG_CODE_PARAMETER_AZIMUTH_INITIAL_LINE, "0.0", false},
|
||||
{"Longitude_Of_Center", EPSG_NAME_PARAMETER_LONGITUDE_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_LONGITUDE_PROJECTION_CENTRE, "0.0", false},
|
||||
{"Latitude_Of_Center", EPSG_NAME_PARAMETER_LATITUDE_PROJECTION_CENTRE,
|
||||
EPSG_CODE_PARAMETER_LATITUDE_PROJECTION_CENTRE, "0.0", false},
|
||||
{"XY_Plane_Rotation", EPSG_NAME_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID,
|
||||
EPSG_CODE_PARAMETER_ANGLE_RECTIFIED_TO_SKEW_GRID, "0.0", false},
|
||||
{nullptr, nullptr, 0, "0.0", false}};
|
||||
|
||||
static const ESRIParamMapping paramsESRI_Goode_Homolosine_alt1[] = {
|
||||
{"False_Easting", EPSG_NAME_PARAMETER_FALSE_EASTING,
|
||||
EPSG_CODE_PARAMETER_FALSE_EASTING, "0.0", false},
|
||||
@@ -1101,8 +1097,27 @@ static const ESRIMethodMapping esriMappings[] = {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
} // namespace {
|
||||
const ESRIMethodMapping *getEsriMappings(size_t &nElts) {
|
||||
nElts = sizeof(esriMappings) / sizeof(esriMappings[0]);
|
||||
return esriMappings;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
std::vector<const ESRIMethodMapping *>
|
||||
getMappingsFromESRI(const std::string &esri_name) {
|
||||
std::vector<const ESRIMethodMapping *> res;
|
||||
for (const auto &mapping : esriMappings) {
|
||||
if (ci_equal(esri_name, mapping.esri_name)) {
|
||||
res.push_back(&mapping);
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
//! @endcond
|
||||
|
||||
#endif // ESRI_PROJECTION_MAPPINGS_HH_INCLUDED
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
} // namespace operation
|
||||
NS_PROJ_END
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user