Compare commits
81
Commits
rouault-patch-1
...
9.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39514f8c83 | ||
|
|
a74c8abedc | ||
|
|
3b51a53167 | ||
|
|
127583f178 | ||
|
|
f3dc0b9d7b | ||
|
|
40ad841fc0 | ||
|
|
edcf4b9cf1 | ||
|
|
d14152776f | ||
|
|
37ba5c740c | ||
|
|
f6ce1c4da3 | ||
|
|
9c3a7189b5 | ||
|
|
122c02017f | ||
|
|
1ce3616a78 | ||
|
|
b76d31141e | ||
|
|
91af7479ac | ||
|
|
9515621638 | ||
|
|
be739414a0 | ||
|
|
132fad89c8 | ||
|
|
835814e766 | ||
|
|
7419b665fe | ||
|
|
289e884e6d | ||
|
|
ede4ca0b3b | ||
|
|
bc055e4ce5 | ||
|
|
e18edc17c9 | ||
|
|
103ff97eac | ||
|
|
e8e4002d71 | ||
|
|
0546bfd4d2 | ||
|
|
d61c19b689 | ||
|
|
19e81b82d4 | ||
|
|
6d1ef3b8f5 | ||
|
|
d6e7540556 | ||
|
|
1603818386 | ||
|
|
f314e720a9 | ||
|
|
a758633653 | ||
|
|
b0e32f1f6c | ||
|
|
356a6c8339 | ||
|
|
9c5d055d97 | ||
|
|
77ea2c0daa | ||
|
|
c3f0f8a375 | ||
|
|
bc043ba7c4 | ||
|
|
8fe3fce568 | ||
|
|
9846c4342e | ||
|
|
792e9fca4f | ||
|
|
be6753e57a | ||
|
|
a029bc9390 | ||
|
|
2ca47878cb | ||
|
|
8de6f36faf | ||
|
|
cd1a949a82 | ||
|
|
a89a36adf6 | ||
|
|
8c0c12de06 | ||
|
|
490879231a | ||
|
|
968554557b | ||
|
|
da5552145c | ||
|
|
d42eb3fe7c | ||
|
|
85d0fb5c50 | ||
|
|
6b3b5af117 | ||
|
|
83ac360900 | ||
|
|
cc10acf1ed | ||
|
|
2c40daeb97 | ||
|
|
96e454af3f | ||
|
|
43b67a9780 | ||
|
|
7e3c04bc3f | ||
|
|
b788b49a7d | ||
|
|
ff7813fef5 | ||
|
|
70c7f57ae8 | ||
|
|
7465986ad0 | ||
|
|
8050dee985 | ||
|
|
bf31da45c9 | ||
|
|
3acb96c581 | ||
|
|
c8a2f60ffa | ||
|
|
c0e281e801 | ||
|
|
26b1fc1e98 | ||
|
|
0be1f575f1 | ||
|
|
122b9de144 | ||
|
|
1d842f678b | ||
|
|
b4b7a34a85 | ||
|
|
a196c415e0 | ||
|
|
334507f214 | ||
|
|
f39c6a7e09 | ||
|
|
6d58ee54f9 | ||
|
|
0878f00f19 |
@@ -1,6 +1,13 @@
|
||||
name: Clang Linux
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
name: Clang Static Analyzer
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
name: Code Checks
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
name: Conda
|
||||
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: '*'
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
name: Docker
|
||||
|
||||
on: [push, pull_request, workflow_dispatch]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
workflow_dispatch:
|
||||
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
name: Linux GCC 32bit
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
name: Linux GCC 5.4
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
name: MacOS build
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
name: mingw_w64 build
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
name: Windows build
|
||||
|
||||
on: [push, pull_request]
|
||||
on:
|
||||
push:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
pull_request:
|
||||
paths-ignore:
|
||||
- 'docs/**'
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }}
|
||||
|
||||
@@ -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/9.1 -- docs/ .readthedocs.yaml;
|
||||
then
|
||||
exit 183;
|
||||
fi
|
||||
- (git --no-pager log --pretty="tformat:%s -- %b" -1 | grep -viqP "skip ci|ci skip") || 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
|
||||
+2
-2
@@ -115,7 +115,7 @@ message(STATUS "Configuring PROJ:")
|
||||
#PROJ version information
|
||||
################################################################################
|
||||
include(ProjVersion)
|
||||
proj_version(MAJOR 9 MINOR 1 PATCH 0)
|
||||
proj_version(MAJOR 9 MINOR 1 PATCH 1)
|
||||
set(PROJ_SOVERSION 25)
|
||||
set(PROJ_BUILD_VERSION "${PROJ_SOVERSION}.${PROJ_VERSION}")
|
||||
|
||||
@@ -295,7 +295,7 @@ include(ProjInstallPath)
|
||||
# By default GNUInstallDirs will use the upper case project name
|
||||
# for CMAKE_INSTALL_DOCDIR, resulting in something like share/doc/PROJ
|
||||
# instead of share/doc/proj which historically have been the path used
|
||||
# by the project.
|
||||
# by the project.
|
||||
# Here force the use of a lower case project name and reset after
|
||||
# GNUInstallDirs has done its thing
|
||||
set(PROJECT_NAME_ORIGINAL "${PROJECT_NAME}")
|
||||
|
||||
@@ -1440,17 +1440,6 @@ EXT_LINKS_IN_WINDOW = NO
|
||||
|
||||
FORMULA_FONTSIZE = 10
|
||||
|
||||
# Use the FORMULA_TRANPARENT tag to determine whether or not the images
|
||||
# generated for formulas are transparent PNGs. Transparent PNGs are not
|
||||
# supported properly for IE 6.0, but are supported on all modern browsers.
|
||||
#
|
||||
# Note that when changing this option you need to delete any form_*.png files in
|
||||
# the HTML output directory before the changes have effect.
|
||||
# The default value is: YES.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
FORMULA_TRANSPARENT = YES
|
||||
|
||||
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
|
||||
# http://www.mathjax.org) which uses client side Javascript for the rendering
|
||||
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
|
||||
@@ -2150,23 +2139,6 @@ HAVE_DOT = YES
|
||||
|
||||
DOT_NUM_THREADS = 0
|
||||
|
||||
# When you want a differently looking font in the dot files that doxygen
|
||||
# generates you can specify the font name using DOT_FONTNAME. You need to make
|
||||
# sure dot is able to find the font, which can be done by putting it in a
|
||||
# standard location or by setting the DOTFONTPATH environment variable or by
|
||||
# setting DOT_FONTPATH to the directory containing the font.
|
||||
# The default value is: Helvetica.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_FONTNAME = Helvetica
|
||||
|
||||
# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
|
||||
# dot graphs.
|
||||
# Minimum value: 4, maximum value: 24, default value: 10.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_FONTSIZE = 10
|
||||
|
||||
# By default doxygen will tell dot to use the default font as specified with
|
||||
# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
|
||||
# the path where dot can find it using this tag.
|
||||
@@ -2376,18 +2348,6 @@ DOT_GRAPH_MAX_NODES = 50
|
||||
|
||||
MAX_DOT_GRAPH_DEPTH = 0
|
||||
|
||||
# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
|
||||
# background. This is disabled by default, because dot on Windows does not seem
|
||||
# to support this out of the box.
|
||||
#
|
||||
# Warning: Depending on the platform used, enabling this option may lead to
|
||||
# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
|
||||
# read).
|
||||
# The default value is: NO.
|
||||
# This tag requires that the tag HAVE_DOT is set to YES.
|
||||
|
||||
DOT_TRANSPARENT = NO
|
||||
|
||||
# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
|
||||
# files in one run (i.e. multiple -o and -T options on the command line). This
|
||||
# makes dot run faster, but since only newer versions of dot (>1.8.10) support
|
||||
|
||||
@@ -1,3 +1,66 @@
|
||||
9.1.1 Release Notes
|
||||
-------------------
|
||||
|
||||
Updates
|
||||
--------
|
||||
|
||||
o Database: register at_bev_AT_GIS_GRID_2021_09_28 grid (#3442)
|
||||
|
||||
Bug fixes
|
||||
----------
|
||||
|
||||
o Implement alterGeodeticCRS and stripVerticalComponent for DerivedProjected (#3482)
|
||||
|
||||
o Various improvements to handling of DerivedProjectedCRS
|
||||
(#3482, #3477, #3342, #3319, #3317)
|
||||
|
||||
o Add missing <cstdint> includes (#3459)
|
||||
|
||||
o cs2cs: better validate value of -W option (#3453)
|
||||
|
||||
o DatabaseContext::lookForGridInfo(): fix caching of filenames and set
|
||||
correct URLs (#3448)
|
||||
|
||||
o Database: register in grid_alternatives grids from PROJ-data that have no
|
||||
corresponding transformation record (#3446)
|
||||
|
||||
o cass projection: fix forward computation of easting (#3433)
|
||||
|
||||
o Implement Geographic/Vertical Offset conversions (#3413)
|
||||
|
||||
o vandg projection: handle +over to extend the validity domain outside of
|
||||
|lon|>180deg (#3427)
|
||||
|
||||
o eqdc projection: avoid floating point division by zero in non-nominal case (#3415)
|
||||
|
||||
o createOperations(): fix issues when transforming between Geog3D and
|
||||
DerivedGeog3D CRS with Geographic3D offsets method (#3411)
|
||||
|
||||
o VerticalCRS::_isEquivalentTo(): do not consider VerticalCRS and
|
||||
DerivedVerticalCRS as equivalent (#3408)
|
||||
|
||||
o cct and cs2cs: Avoid problems when encountering UTF-8 BOM characters at
|
||||
beginning of input files (#3395)
|
||||
|
||||
o createFromUserInput(): Improved lookup when approximate name is provided (#3371)
|
||||
|
||||
o projinfo / cs2cs : auto promotion to 3D of CRS specified by name (#3367)
|
||||
|
||||
o findsOpsInRegistryWithIntermediate(): make it work when source/target geodetic
|
||||
CRS has no known id (#3365)
|
||||
|
||||
o createOperations(): emulate PROJ < 6 behavior when doing geocentric <-->
|
||||
geographic transformation between datum with unknown transformation (#3361)
|
||||
|
||||
o Fix issue when transforming from/into a WKT2 Bound VerticalCRS with a
|
||||
'Geographic3D to GravityRelatedHeight' method (#3355)
|
||||
|
||||
o proj_normalize_for_visualization(): take into account FORCE_OVER property
|
||||
from source operation (#3350)
|
||||
|
||||
o Link geodtest against libm when available (#3341)
|
||||
|
||||
|
||||
9.1.0 Release Notes
|
||||
-------------------
|
||||
|
||||
@@ -10,13 +73,13 @@
|
||||
|
||||
o Update ESRI objects to version 3.0.0 (#3257)
|
||||
|
||||
o Generate null transformation between geodetic/vertical datum ensemble and
|
||||
o Generate null transformation between geodetic/vertical datum ensemble and
|
||||
its members (#3266)
|
||||
|
||||
o Add fk delete cascade to database tables for improved customizability
|
||||
of the database (#3237)
|
||||
|
||||
o Add Svalbard geoid grid no_kv_arcgp-2006-sk to grid alternatives (#3292)
|
||||
o Add Svalbard geoid grid no_kv_arcgp-2006-sk to grid alternatives (#3292)
|
||||
|
||||
o Added French grid fr_ign_RAF20 to grid alternatives (#3228)
|
||||
|
||||
@@ -42,31 +105,31 @@
|
||||
+ Optimizations
|
||||
|
||||
o NTv2 and GTX grid readers: add a cache of lines to speed-up (#3241)
|
||||
|
||||
|
||||
o IComparable::isEquivalentTo() optimizations (#3233)
|
||||
|
||||
+ Various Updates
|
||||
|
||||
o createOperations() / proj_trans(): better take into account area of
|
||||
o createOperations() / proj_trans(): better take into account area of
|
||||
interest name / do not only keep first returned coordinate operation (#3282)
|
||||
|
||||
o createOperations(): take into account axis unit and inversion of target
|
||||
o createOperations(): take into account axis unit and inversion of target
|
||||
DerivedProjectedCRS (#3281)
|
||||
|
||||
o Allow a Compound CRS with derived projected (#3283)
|
||||
|
||||
o Make "Vertical Offset and Slope" method usable as a deriving conversion of
|
||||
o Make "Vertical Offset and Slope" method usable as a deriving conversion of
|
||||
a DerivedVerticalCRS (#3270)
|
||||
|
||||
o PROJ pipeline generator: recognize opposite Helmert transformations using
|
||||
a different convention (#3265)
|
||||
|
||||
o createOperations(): prefer simpler pipelines / affects WGS 84 to
|
||||
o createOperations(): prefer simpler pipelines / affects WGS 84 to
|
||||
GDA94/GDA2020 (#3248)
|
||||
|
||||
|
||||
o Make it possible to determine which grid files were actually used during a
|
||||
transformation (#3180)
|
||||
|
||||
|
||||
o Transformation: no longer do vertical trasnformation when doing compound CRS
|
||||
to 2D CRS / add --3d to cs2cs (#3119)
|
||||
|
||||
@@ -79,16 +142,16 @@
|
||||
|
||||
Bug fixes
|
||||
--------
|
||||
|
||||
|
||||
o projinfo: fix crash on --list-crs when proj.db cannot be opened (#3290)
|
||||
|
||||
o getCRSInfoList(): fix retrieval of projected_crs given by text_definition
|
||||
only (#3289)
|
||||
|
||||
o WKT parser: fix issue when parsing some WKT1 with
|
||||
o WKT parser: fix issue when parsing some WKT1 with
|
||||
Hotine_Oblique_Mercator_Azimuth_Center and ignoring rectified_grid_angle (#3280)
|
||||
|
||||
o WKT1 import: better deal when the angular unit of the GEOGCS[] of the
|
||||
o WKT1 import: better deal when the angular unit of the GEOGCS[] of the
|
||||
PROJCS[] doesn't match the one from the database (#3274)
|
||||
|
||||
o createOperations(): avoid potential infinite recursions (#3264)
|
||||
@@ -102,8 +165,8 @@
|
||||
towgs84 to gencentric CRS (#3231)
|
||||
|
||||
o createOperations(): fix infinite recursion in a complex case (#3226)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
9.0.1 Release Notes
|
||||
-------------------
|
||||
|
||||
@@ -10,6 +10,7 @@ VALUES
|
||||
|
||||
-- at_bev - Austria Bundesamt für Eich- und Vermessungswessen
|
||||
('AT_GIS_GRID.gsb','at_bev_AT_GIS_GRID.tif','AT_GIS_GRID.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/at_bev_AT_GIS_GRID.tif',1,1,NULL),
|
||||
('AT_GIS_GRID_2021_09_28.gsb','at_bev_AT_GIS_GRID_2021_09_28.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/at_bev_AT_GIS_GRID_2021_09_28.tif',1,1,NULL),
|
||||
('GV_HoehenGrid_V1.csv','at_bev_GV_Hoehengrid_V1.tif',NULL,'GTiff','vgridshift',0,NULL,'https://cdn.proj.org/at_bev_GV_Hoehengrid_V1.tif',1,1,NULL),
|
||||
('GEOID_GRS80_Oesterreich.csv','at_bev_GEOID_GRS80_Oesterreich.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/at_bev_GEOID_GRS80_Oesterreich.tif',1,1,NULL),
|
||||
('GEOID_BESSEL_Oesterreich.csv','at_bev_GEOID_BESSEL_Oesterreich.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/at_bev_GEOID_BESSEL_Oesterreich.tif',1,1,NULL),
|
||||
@@ -81,6 +82,8 @@ VALUES
|
||||
('SK27-98.gsb','ca_nrc_SK27-98.tif','SK27-98.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_SK27-98.tif',1,1,NULL),
|
||||
('SK83-98.gsb','ca_nrc_SK83-98.tif','SK83-98.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_SK83-98.tif',1,1,NULL),
|
||||
('TOR27CSv1.GSB','ca_nrc_TO27CSv1.tif','TO27CSv1.GSB','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/ca_nrc_TO27CSv1.tif',1,1,NULL),
|
||||
('NAD83v6VG.gvb','ca_nrc_NAD83v6VG.tif',NULL,'GTiff','velocity_grid',0,NULL,'https://cdn.proj.org/ca_nrc_NAD83v6VG.tif',1,1,NULL),
|
||||
('NAD83v70VG.gvb','ca_nrc_NAD83v70VG.tif',NULL,'GTiff','velocity_grid',0,NULL,'https://cdn.proj.org/ca_nrc_NAD83v70VG.tif',1,1,NULL),
|
||||
|
||||
-- ca_que - Ministère de l'Énergie et des Ressources naturelles du Québec
|
||||
-- two grid names in EPSG point to the same file distributed by NRCan
|
||||
@@ -171,6 +174,19 @@ VALUES
|
||||
('ggguy00.txt','fr_ign_ggguy15.tif','ggguy15.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggguy15.tif',1,1,NULL),
|
||||
('ggm00.txt','fr_ign_ggm00v2.tif','ggm00v2.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggm00v2.tif',1,1,NULL),
|
||||
('GGSPM06v1.mnt','fr_ign_ggspm06v1.tif','ggspm06v1.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggspm06v1.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_CGVD2013RGSPM06.tif','fr_ign_CGVD2013RGSPM06.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_CGVD2013RGSPM06.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf02-Maiao.tif','fr_ign_ggpf02-Maiao.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf02-Maiao.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf02-Tupai.tif','fr_ign_ggpf02-Tupai.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf02-Tupai.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf05-HivaOa.tif','fr_ign_ggpf05-HivaOa.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf05-HivaOa.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf05-Nuku.tif','fr_ign_ggpf05-Nuku.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf05-Nuku.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Gambier.tif','fr_ign_ggpf08-Gambier.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Gambier.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Hao.tif','fr_ign_ggpf08-Hao.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Hao.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Mataiva.tif','fr_ign_ggpf08-Mataiva.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Mataiva.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Raivavae.tif','fr_ign_ggpf08-Raivavae.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Raivavae.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Reao.tif','fr_ign_ggpf08-Reao.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Reao.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Rurutu.tif','fr_ign_ggpf08-Rurutu.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Rurutu.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Tikehau.tif','fr_ign_ggpf08-Tikehau.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Tikehau.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-fr_ign_ggpf08-Tubuai.tif','fr_ign_ggpf08-Tubuai.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/fr_ign_ggpf08-Tubuai.tif',1,1,NULL),
|
||||
|
||||
-- is_lmi - National Land Survey of Iceland
|
||||
('Icegeoid_ISN2004.gri','is_lmi_Icegeoid_ISN2004.tif','Icegeoid_ISN2004.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/is_lmi_Icegeoid_ISN2004.tif',1,1,NULL),
|
||||
@@ -178,6 +194,7 @@ VALUES
|
||||
('Icegeoid_ISN2016.gri','is_lmi_Icegeoid_ISN2016.tif','Icegeoid_ISN2016.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/is_lmi_Icegeoid_ISN2016.tif',1,1,NULL),
|
||||
('ISN93_ISN2016.gsb','is_lmi_ISN93_ISN2016.tif','ISN93_ISN2016.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/is_lmi_ISN93_ISN2016.tif',1,1,NULL),
|
||||
('ISN2004_ISN2016.gsb','is_lmi_ISN2004_ISN2016.tif','ISN2004_ISN2016.gsb','GTiff','hgridshift',0,NULL,'https://cdn.proj.org/is_lmi_ISN2004_ISN2016.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-is_lmi_ISN_vel_beta.tif','is_lmi_ISN_vel_beta.tif',NULL,'GTiff','velocity_grid',0,NULL,'https://cdn.proj.org/is_lmi_ISN_vel_beta.tif',1,1,NULL),
|
||||
|
||||
-- jp_gsi - Geospatial Information Authority of Japan
|
||||
('jp_gsi_gsigeo2011.tif','jp_gsi_gsigeo2011.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/jp_gsi_gsigeo2011.tif',1,1,NULL),
|
||||
@@ -281,6 +298,12 @@ VALUES
|
||||
('vertconc.94','us_noaa_vertconc.tif','vertconc.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/us_noaa_vertconc.tif',1,1,NULL),
|
||||
('vertcone.94','us_noaa_vertcone.tif','vertcone.gtx','GTiff','vgridshift',0,NULL,'https://cdn.proj.org/us_noaa_vertcone.tif',1,1,NULL),
|
||||
-- US GEOID99 height models. Not mapped: Alaska: g1999a01.gtx to g1999a04.gtx. Hawaii: g1999h01.gtx, Puerto Rico: g1999p01.gtx
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g1999a01.bin','us_noaa_g1999a01.tif','g1999a01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999a01.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g1999a02.bin','us_noaa_g1999a02.tif','g1999a02.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999a02.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g1999a03.bin','us_noaa_g1999a03.tif','g1999a03.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999a03.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g1999a04.bin','us_noaa_g1999a04.tif','g1999a04.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999a04.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g1999p01.bin','us_noaa_g1999p01.tif','g1999p01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999p01.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g1999h01.bin','us_noaa_g1999h01.tif','g1999h01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999h01.tif',1,1,NULL),
|
||||
('g1999u01.bin','us_noaa_g1999u01.tif','g1999u01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u01.tif',1,1,NULL),
|
||||
('g1999u02.bin','us_noaa_g1999u02.tif','g1999u02.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u02.tif',1,1,NULL),
|
||||
('g1999u03.bin','us_noaa_g1999u03.tif','g1999u03.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u03.tif',1,1,NULL),
|
||||
@@ -290,7 +313,12 @@ VALUES
|
||||
('g1999u07.bin','us_noaa_g1999u07.tif','g1999u07.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u07.tif',1,1,NULL),
|
||||
('g1999u08.bin','us_noaa_g1999u08.tif','g1999u08.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g1999u08.tif',1,1,NULL),
|
||||
-- US GEOID03 height models. Not mapped: Alaska: g2003a01.gtx to g2003a04.gtx. Hawaii: g2003h01.gtx. Puerto Rico: g2003p01.gtx
|
||||
('geoid03_conus.bin','us_noaa_geoid03_conus.tif','geoid03_conus.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_geoid03_conus.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g2003a01.bin','us_noaa_g2003a01.tif','g2003a01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2003a01.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g2003a02.bin','us_noaa_g2003a02.tif','g2003a02.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2003a02.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g2003a03.bin','us_noaa_g2003a03.tif','g2003a03.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2003a03.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g2003a04.bin','us_noaa_g2003a04.tif','g2003a04.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2003a04.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g2003p01.bin','us_noaa_g2003p01.tif','g2003p01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2003p01.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g2003h01.bin','us_noaa_g2003h01.tif','g2003h01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2003h01.tif',1,1,NULL),('geoid03_conus.bin','us_noaa_geoid03_conus.tif','geoid03_conus.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_geoid03_conus.tif',1,1,NULL),
|
||||
-- US GEOID06 height models
|
||||
('geoid06_ak.bin','us_noaa_geoid06_ak.tif','geoid06_ak.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_geoid06_ak.tif',1,1,NULL),
|
||||
-- US GEOID09 height models.Not mapped: Hawaii: g2009h01.gtx
|
||||
@@ -299,6 +327,7 @@ VALUES
|
||||
('g2009g01.bin','us_noaa_g2009g01.tif','g2009g01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2009g01.tif',1,1,NULL),
|
||||
('g2009s01.bin','us_noaa_g2009s01.tif','g2009s01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2009s01.tif',1,1,NULL),
|
||||
('g2009p01.bin','us_noaa_g2009p01.tif','g2009p01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2009p01.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g2009h01.bin','us_noaa_g2009h01.tif','g2009h01.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2009h01.tif',1,1,NULL),
|
||||
-- US GEOID12B height models
|
||||
-- CONUS
|
||||
('g2012bu0.bin','us_noaa_g2012bu0.tif','g2012bu0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2012bu0.tif',1,1,NULL),
|
||||
@@ -310,10 +339,19 @@ VALUES
|
||||
('g2012bg0.bin','us_noaa_g2012bg0.tif','g2012bg0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2012bg0.tif',1,1,NULL),
|
||||
-- American Samoa
|
||||
('g2012bs0.bin','us_noaa_g2012bs0.tif','g2012bs0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2012bs0.tif',1,1,NULL),
|
||||
-- Hawaii
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-g2012bh0.bin','us_noaa_g2012bh0.tif','g2012bh0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2012bh0.tif',1,1,NULL),
|
||||
|
||||
-- US GEOID18 height models
|
||||
('g2018u0.bin','us_noaa_g2018u0.tif','g2018u0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2018u0.tif',1,1,NULL),
|
||||
('g2018p0.bin','us_noaa_g2018p0.tif','g2018p0.gtx','GTiff','geoid_like',0,NULL,'https://cdn.proj.org/us_noaa_g2018p0.tif',1,1,NULL),
|
||||
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-us_noaa_flhpgn.tif','us_noaa_flhpgn.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/us_noaa_flhpgn.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-us_noaa_mdhpgn.tif','us_noaa_mdhpgn.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/us_noaa_mdhpgn.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-us_noaa_tnhpgn.tif','us_noaa_tnhpgn.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/us_noaa_tnhpgn.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-us_noaa_wihpgn.tif','us_noaa_wihpgn.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/us_noaa_wihpgn.tif',1,1,NULL),
|
||||
('NOT-YET-IN-GRID-TRANSFORMATION-us_noaa_wohpgn.tif','us_noaa_wohpgn.tif',NULL,'GTiff','hgridshift',0,NULL,'https://cdn.proj.org/us_noaa_wohpgn.tif',1,1,NULL),
|
||||
|
||||
-- za_cdngi - Chief Directorate: National Geospatial Information (CD:NGI) South Africa
|
||||
('SAGEOID2010.dat','za_cdngi_sageoid2010.tif',NULL,'GTiff','geoid_like',0,NULL,'https://cdn.proj.org/za_cdngi_sageoid2010.tif',1,1,NULL)
|
||||
;
|
||||
|
||||
@@ -18,4 +18,4 @@ INSERT INTO "metadata" VALUES('PROJ.VERSION', '${PROJ_VERSION}');
|
||||
|
||||
-- Version of the PROJ-data package with which this database is the most
|
||||
-- compatible.
|
||||
INSERT INTO "metadata" VALUES('PROJ_DATA.VERSION', '1.11');
|
||||
INSERT INTO "metadata" VALUES('PROJ_DATA.VERSION', '1.12');
|
||||
|
||||
@@ -39,7 +39,7 @@ jobs:
|
||||
miniforge-variant: Mambaforge
|
||||
miniforge-version: latest
|
||||
use-mamba: true
|
||||
environment-file: docs/plot/environment.yml
|
||||
environment-file: docs/environment.yml
|
||||
activate-environment: proj
|
||||
|
||||
- name: Plot
|
||||
@@ -19,14 +19,14 @@ RUN sed -i -e 's/# en_GB.UTF-8 UTF-8/en_GB.UTF-8 UTF-8/' /etc/locale.gen && \
|
||||
ENV LANG en_GB.UTF-8
|
||||
|
||||
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y curl flex bison && \
|
||||
curl -LOs https://doxygen.nl/files/doxygen-1.9.3.src.tar.gz && \
|
||||
tar xvzf doxygen-1.9.3.src.tar.gz && \
|
||||
rm -rf doxygen-1.9.3.src.tar.gz && \
|
||||
cd doxygen-1.9.3 && \
|
||||
curl -LOs https://doxygen.nl/files/doxygen-1.9.5.src.tar.gz && \
|
||||
tar xvzf doxygen-1.9.5.src.tar.gz && \
|
||||
rm -rf doxygen-1.9.5.src.tar.gz && \
|
||||
cd doxygen-1.9.5 && \
|
||||
mkdir build && \
|
||||
cd build && \
|
||||
cmake .. -DCMAKE_INSTALL_PREFIX=/usr && \
|
||||
make -j$(nproc) && \
|
||||
make install && \
|
||||
cd ../.. && \
|
||||
rm -rf doxygen-1.9.3
|
||||
rm -rf doxygen-1.9.5
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
name: proj
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- descartes
|
||||
- geojson
|
||||
- matplotlib
|
||||
- shapely < 1.8
|
||||
- pip
|
||||
- pip:
|
||||
- breathe
|
||||
- pybtex
|
||||
- sphinx-rtd-theme
|
||||
- sphinxcontrib-bibtex
|
||||
- sphinxcontrib-spelling
|
||||
@@ -1,8 +0,0 @@
|
||||
name: proj
|
||||
channels:
|
||||
- conda-forge
|
||||
dependencies:
|
||||
- descartes
|
||||
- geojson
|
||||
- matplotlib
|
||||
- shapely < 1.8
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
export PATH="$HOME/.local/bin:$PATH"
|
||||
export PROJ_DATA="$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
|
||||
@@ -0,0 +1,14 @@
|
||||
from sphinx.domains.std import StandardDomain
|
||||
|
||||
class MyStandardDomain(StandardDomain):
|
||||
|
||||
def resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode):
|
||||
if typ == 'program':
|
||||
typ = 'ref'
|
||||
return StandardDomain.resolve_xref(self, env, fromdocname, builder, typ, target, node, contnode)
|
||||
|
||||
def setup(app):
|
||||
# Override the "program" role to be an alias of "ref"
|
||||
MyStandardDomain.roles["program"] = StandardDomain.roles["ref"]
|
||||
app.add_domain(MyStandardDomain, override=True)
|
||||
return { 'parallel_read_safe': True, 'parallel_write_safe': True }
|
||||
@@ -72,7 +72,7 @@ The following control parameters can appear in any order:
|
||||
|
||||
.. versionadded:: 5.2.0
|
||||
|
||||
Specify the number of decimals in the output.
|
||||
Specify the number of decimals to round to in the output.
|
||||
|
||||
.. option:: -I
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ The following control parameters can appear in any order:
|
||||
|
||||
.. versionadded:: 5.2.0
|
||||
|
||||
Specify the number of decimals in the output.
|
||||
Specify the number of decimals to round to in the output.
|
||||
|
||||
.. option:: -e <string>
|
||||
|
||||
@@ -137,7 +137,7 @@ The following control parameters can appear in any order:
|
||||
|
||||
Where *n* is the number of significant fractional digits to employ for seconds
|
||||
output. When ``-W`` is employed the fields will be constant width
|
||||
with leading zeroes.
|
||||
with leading zeroes. Valid range: -W0 through -W8.
|
||||
|
||||
.. option:: -v
|
||||
|
||||
@@ -284,8 +284,12 @@ The x-y output data will appear as three lines of:
|
||||
|
||||
::
|
||||
|
||||
1402293.44 5076292.68 0.00
|
||||
1402285.98 5076292.42 0.00
|
||||
|
||||
.. note::
|
||||
|
||||
To get those exact values, you have need to have all current grids installed
|
||||
locally or use networking capabilities mentioned above.
|
||||
|
||||
Using EPSG CRS codes
|
||||
--------------------
|
||||
@@ -312,7 +316,7 @@ UTM Zone 31N/WGS 84 with WGS84 ellipsoidal height
|
||||
|
||||
::
|
||||
|
||||
echo 45 2 0 | cs2cs "WGS 84 + EGM96 height" "WGS 84 / UTM zone 31N"
|
||||
echo 45 2 0 | cs2cs "WGS 84 + EGM96 height" "WGS 84 / UTM zone 31N" --3d
|
||||
|
||||
outputs
|
||||
|
||||
@@ -321,6 +325,12 @@ outputs
|
||||
421184.70 4983436.77 50.69
|
||||
|
||||
|
||||
.. note::
|
||||
|
||||
To get those exact values, you have need to have the EGM96 grid installed
|
||||
locally or use networking capabilities mentioned above.
|
||||
|
||||
|
||||
.. only:: man
|
||||
|
||||
See also
|
||||
|
||||
@@ -4,6 +4,12 @@
|
||||
geod
|
||||
================================================================================
|
||||
|
||||
.. _invgeod:
|
||||
|
||||
================================================================================
|
||||
invgeod
|
||||
================================================================================
|
||||
|
||||
Synopsis
|
||||
********
|
||||
|
||||
|
||||
@@ -4,6 +4,12 @@
|
||||
proj
|
||||
================================================================================
|
||||
|
||||
.. _invproj:
|
||||
|
||||
================================================================================
|
||||
invproj
|
||||
================================================================================
|
||||
|
||||
.. only:: html
|
||||
|
||||
Cartographic projection filter.
|
||||
@@ -41,7 +47,7 @@ The following control parameters can appear in any order
|
||||
|
||||
.. versionadded:: 5.2.0
|
||||
|
||||
Specify the number of decimals in the output.
|
||||
Specify the number of decimals to round to in the output.
|
||||
|
||||
.. option:: -i
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ or PROJJSON string).
|
||||
|
||||
It can also be used to query coordinate operations available between two CRS.
|
||||
|
||||
The program is named with some reference to the GDAL :program:`gdalsrsinfo` that offers
|
||||
The program is named with some reference to the GDAL `gdalsrsinfo <https://gdal.org/programs/gdalsrsinfo.html>`__ utility that offers
|
||||
partly similar services.
|
||||
|
||||
|
||||
@@ -296,6 +296,9 @@ The following control parameters can appear in any order:
|
||||
geographic,geographic_2d,geographic_3d,vertical,projected,compound.
|
||||
Affected by options :option:`--authority`, :option:`--area`, :option:`--bbox` and :option:`--spatial-test`
|
||||
|
||||
A visual alternative is the webpage
|
||||
`CRS Explorer <https://crs-explorer.proj.org/?all=true>`_ .
|
||||
|
||||
.. option:: --3d
|
||||
|
||||
.. versionadded:: 6.3
|
||||
|
||||
@@ -149,7 +149,7 @@ Examples
|
||||
|
||||
projsync --all
|
||||
|
||||
2. Download resource files covering specified point and attributing to an agency
|
||||
2. Download resource files covering specified point and attributed to an agency
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
|
||||
@@ -125,21 +125,21 @@ Preliminary step: install clang. For example:
|
||||
mv clang+llvm-9.0.0-x86_64-linux-gnu-ubuntu-18.04 clang+llvm-9
|
||||
export PATH=$PWD/clang+llvm-9/bin:$PATH
|
||||
|
||||
Configure PROJ with the :program:`scan-build` utility of clang:
|
||||
Configure PROJ with the `scan-build <https://clang-analyzer.llvm.org/scan-build.html>`__ utility of clang:
|
||||
|
||||
::
|
||||
mkdir csa_build
|
||||
cd csa_build
|
||||
scan-build cmake ..
|
||||
|
||||
Build using :program:`scan-build`:
|
||||
Build using ``scan-build``:
|
||||
|
||||
::
|
||||
|
||||
scan-build make [-j8]
|
||||
|
||||
If CSA finds errors, they will be emitted during the build. And in which case,
|
||||
at the end of the build process, :program:`scan-build` will emit a warning message
|
||||
at the end of the build process, ``scan-build`` will emit a warning message
|
||||
indicating errors have been found and how to display the error report. This
|
||||
is with something like
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ pass a proposal.
|
||||
|
||||
List of PSC Members
|
||||
-------------------
|
||||
(up-to-date as of 2018-06)
|
||||
(up-to-date as of 2023-01)
|
||||
|
||||
* Kristian Evers `@kbevers <https://github.com/kbevers>`_ (DK) **Chair**
|
||||
* Howard Butler `@hobu <https://github.com/hobu>`_ (USA)
|
||||
@@ -45,6 +45,7 @@ List of PSC Members
|
||||
* Thomas Knudsen `@busstoptaktik <https://github.com/busstoptaktik>`_ (DK)
|
||||
* Even Rouault `@rouault <https://github.com/rouault>`_ (FR)
|
||||
* Kurt Schwehr `@schwehr <https://github.com/schwehr>`_ (USA)
|
||||
* Alan Snow `@snowman2 <https://github.com/snowman2>`_ (USA)
|
||||
* Frank Warmerdam `@warmerdam <https://github.com/warmerdam>`_ (USA) **Emeritus**
|
||||
|
||||
Detailed Process
|
||||
|
||||
+15
-6
@@ -35,9 +35,11 @@ import bibstyle
|
||||
extensions = [
|
||||
'sphinx.ext.mathjax',
|
||||
'sphinxcontrib.bibtex',
|
||||
'sphinxcontrib.jquery',
|
||||
'sphinxcontrib.spelling',
|
||||
'breathe',
|
||||
'redirects',
|
||||
'program_with_link',
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
@@ -77,8 +79,8 @@ copyright = u'1983-{0}'.format(now.year)
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
version = '9.1.0'
|
||||
data_version = '1.11'
|
||||
version = '9.1.1'
|
||||
data_version = '1.12'
|
||||
|
||||
# use same |release| as |version|
|
||||
release = version
|
||||
@@ -130,6 +132,10 @@ highlight_language = 'none'
|
||||
# If true, `todo` and `todoList` produce output, else they produce nothing.
|
||||
todo_include_todos = False
|
||||
|
||||
# Prevents double hyphen (--) to be replaced by Unicode long dash character
|
||||
# Cf https://stackoverflow.com/questions/15258831/how-to-handle-two-dashes-in-rest
|
||||
smartquotes = False
|
||||
|
||||
# Replacement macros for use in code-blocks etc. With inspiration from
|
||||
# https://github.com/sphinx-doc/sphinx/issues/4054#issuecomment-329097229
|
||||
def replace_words(app, docname, source):
|
||||
@@ -200,13 +206,13 @@ htm_css_files = [
|
||||
'theme_overrides.css', # override wide tables in RTD theme
|
||||
]
|
||||
|
||||
# display "Edit on GitHub"
|
||||
html_context = {
|
||||
'display_github': True,
|
||||
'theme_vcs_pageview_mode': 'edit',
|
||||
'github_user': 'OSGeo',
|
||||
'github_repo': 'PROJ',
|
||||
# TODO: edit when switching active branch
|
||||
'github_version': '9.1/docs/source/',
|
||||
'github_version': '9.1',
|
||||
'conf_py_path': '/docs/source/',
|
||||
}
|
||||
|
||||
# Add any extra paths that contain custom files (such as robots.txt or
|
||||
@@ -279,6 +285,8 @@ preamble = r"""
|
||||
\ifdefined\DeclareUnicodeCharacter
|
||||
\DeclareUnicodeCharacter{2032}{$'$}% prime
|
||||
\fi
|
||||
|
||||
\usepackage[notbib]{tocbibind}
|
||||
"""
|
||||
|
||||
latex_elements = {
|
||||
@@ -290,7 +298,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',
|
||||
|
||||
@@ -31,8 +31,8 @@ Rust bindings for the latest stable version of PROJ
|
||||
|
||||
Go (Golang)
|
||||
===========
|
||||
`go-proj <https://github.com/everystreet/go-proj>`_:
|
||||
Go bindings and idiomatic wrapper for PROJ
|
||||
`go-proj <https://github.com/twpayne/go-proj>`_:
|
||||
Go bindings for PROJ.
|
||||
|
||||
Julia
|
||||
=====
|
||||
|
||||
@@ -102,6 +102,7 @@ The same program implemented using PROJ 6:
|
||||
return 0;
|
||||
}
|
||||
|
||||
Further examples of using the PROJ API are in the :doc:`quick start <quickstart>` document.
|
||||
|
||||
Function mapping from old to new API
|
||||
###############################################################################
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
Quick start
|
||||
================================================================================
|
||||
|
||||
This is a short introduction to the PROJ API. In the following section we
|
||||
create a simple program that transforms a geodetic coordinate to UTM and back
|
||||
again. The program is explained a few lines at a time. The complete program can
|
||||
be seen at the end of the section.
|
||||
This is a short introduction to the PROJ API. In the following section
|
||||
we create two simple programs that illustrate how to transform points
|
||||
between two different coordinate systems, and how to convert between
|
||||
projected and geodetic (geographic) coordinates for a single
|
||||
coordinate system. Explanations for individual code sniplets and the
|
||||
full programs are provided.
|
||||
|
||||
See the following sections for more in-depth descriptions of different parts of
|
||||
the PROJ API or consult the :doc:`API reference <reference/index>` for specifics.
|
||||
@@ -46,7 +48,11 @@ Next we create the :c:type:`PJ` transformation object ``P`` with the function
|
||||
:dedent: 4
|
||||
|
||||
Here we have set up a transformation from geographic coordinates to UTM zone
|
||||
32N.
|
||||
32N. In general, this is a transformation between two different coordinate reference systems
|
||||
(one of which is here in geographic coordinates). The related function
|
||||
:c:func:`proj_create` can be used to set up transformations that are not available through
|
||||
the PROJ database, for instance for converting geodetic coordinates to a custom definition
|
||||
of a map projection.
|
||||
|
||||
:c:func:`proj_create_crs_to_crs` takes as its arguments:
|
||||
|
||||
@@ -197,4 +203,12 @@ A complete compilable version of the example code can be seen below:
|
||||
:language: c
|
||||
:linenos:
|
||||
:lines: 39-
|
||||
|
||||
The following example illustrates how to convert between a CRS and
|
||||
geodetic coordinates for that CRS.
|
||||
|
||||
.. literalinclude:: ../../../examples/crs_to_geodetic.c
|
||||
:language: c
|
||||
:linenos:
|
||||
:lines: 9-
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
Data types
|
||||
================================================================================
|
||||
|
||||
This section describes the numerous data types in use in PROJ.4. As a rule
|
||||
of thumb PROJ.4 data types are prefixed with ``PJ_``, or in one particular case,
|
||||
This section describes the numerous data types in use in PROJ. As a rule
|
||||
of thumb PROJ data types are prefixed with ``PJ_``, or in one particular case,
|
||||
is simply called :c:type:`PJ`. A few notable exceptions can be traced
|
||||
back to the very early days of PROJ.4 when the ``PJ_`` prefix was not
|
||||
back to the very early days of PROJ when the ``PJ_`` prefix was not
|
||||
consistently used.
|
||||
|
||||
Transformation objects
|
||||
@@ -16,7 +16,7 @@ Transformation objects
|
||||
.. c:type:: PJ
|
||||
|
||||
Object containing everything related to a given projection or transformation.
|
||||
As a user of the PROJ.4 library you are only exposed to pointers to this
|
||||
As a user of the PROJ library you are only exposed to pointers to this
|
||||
object and the contents is hidden behind the public API. :c:type:`PJ` objects
|
||||
are created with :c:func:`proj_create` and destroyed with
|
||||
:c:func:`proj_destroy`.
|
||||
@@ -51,7 +51,7 @@ Transformation objects
|
||||
|
||||
.. c:type:: PJ_CONTEXT
|
||||
|
||||
Context objects enable safe multi-threaded usage of PROJ.4. Each :c:type:`PJ`
|
||||
Context objects enable safe multi-threaded usage of PROJ. Each :c:type:`PJ`
|
||||
object is connected to a context (if not specified, the default context is
|
||||
used). All operations within a context should be performed in the same thread.
|
||||
:c:type:`PJ_CONTEXT` objects are created with :c:func:`proj_context_create`
|
||||
@@ -525,7 +525,7 @@ List structures
|
||||
|
||||
.. c:type:: PJ_OPERATIONS
|
||||
|
||||
Description a PROJ.4 operation
|
||||
Description a PROJ operation
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
@@ -550,7 +550,7 @@ List structures
|
||||
|
||||
.. c:type:: PJ_ELLPS
|
||||
|
||||
Description of ellipsoids defined in PROJ.4
|
||||
Description of ellipsoids defined in PROJ
|
||||
|
||||
.. code-block:: C
|
||||
|
||||
|
||||
@@ -13,9 +13,8 @@ distribution of the source code and various resource file archives. See
|
||||
Current Release
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
* **2022-09-01** `proj-9.1.0.tar.gz`_ (`md5`_)
|
||||
* **2022-09-01** `proj-data-1.11.tar.gz`_
|
||||
* **PDF Manual** `proj.pdf`_
|
||||
* **2022-12-01** `proj-9.1.1.tar.gz`_ (`md5`_)
|
||||
* **2022-12-01** `proj-data-1.12.tar.gz`_
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -28,8 +27,9 @@ Current Release
|
||||
Past Releases
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
* **2022-09-01** `proj-9.1.0.tar.gz`_
|
||||
* **2022-06-15** `proj-9.0.1.tar.gz`_
|
||||
* **2022-03-01** `proj-9.0.0.tar.gz`_
|
||||
* **2022-03-01** `proj-9.0.0.tar.gz`_
|
||||
* **2022-01-01** `proj-8.2.1.tar.gz`_
|
||||
* **2021-11-01** `proj-8.2.0.tar.gz`_
|
||||
* **2021-09-01** `proj-8.1.1.tar.gz`_
|
||||
@@ -58,6 +58,7 @@ Past Releases
|
||||
* **2015-09-13** `proj-4.9.2.tar.gz`_
|
||||
* **2015-03-04** `proj-4.9.1.tar.gz`_
|
||||
|
||||
* **2022-09-01** `proj-data-1.11.tar.gz`_
|
||||
* **2022-06-15** `proj-data-1.10.tar.gz`_
|
||||
* **2022-03-01** `proj-data-1.9.tar.gz`_
|
||||
* **2021-11-01** `proj-data-1.8.tar.gz`_
|
||||
@@ -90,8 +91,9 @@ Past Releases
|
||||
* **2018-03-01** `proj-datumgrid-oceania-1.1.zip`_
|
||||
* **2018-03-01** `proj-datumgrid-oceania-1.0.zip`_
|
||||
|
||||
.. _`proj-9.1.1.tar.gz`: https://download.osgeo.org/proj/proj-9.1.1.tar.gz
|
||||
.. _`md5`: https://download.osgeo.org/proj/proj-9.1.1.tar.gz.md5
|
||||
.. _`proj-9.1.0.tar.gz`: https://download.osgeo.org/proj/proj-9.1.0.tar.gz
|
||||
.. _`md5`: https://download.osgeo.org/proj/proj-9.1.0.tar.gz.md5
|
||||
.. _`proj-9.0.1.tar.gz`: https://download.osgeo.org/proj/proj-9.0.1.tar.gz
|
||||
.. _`proj-9.0.0.tar.gz`: https://download.osgeo.org/proj/proj-9.0.0.tar.gz
|
||||
.. _`proj-8.2.1.tar.gz`: https://download.osgeo.org/proj/proj-8.2.1.tar.gz
|
||||
@@ -123,6 +125,7 @@ Past Releases
|
||||
.. _`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.12.tar.gz`: https://download.osgeo.org/proj/proj-data-1.12.tar.gz
|
||||
.. _`proj-data-1.11.tar.gz`: https://download.osgeo.org/proj/proj-data-1.11.tar.gz
|
||||
.. _`proj-data-1.10.tar.gz`: https://download.osgeo.org/proj/proj-data-1.10.tar.gz
|
||||
.. _`proj-data-1.9.tar.gz`: https://download.osgeo.org/proj/proj-data-1.9.tar.gz
|
||||
@@ -155,4 +158,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
|
||||
|
||||
+11
-3
@@ -23,7 +23,7 @@ separate column.
|
||||
|
||||
If your data is stored in a common geodata file format chances are that
|
||||
you can use `GDAL <https://gdal.org/>`_ as a frontend to PROJ and transform your data with the
|
||||
:program:`ogr2ogr` application.
|
||||
`ogr2ogr <https://gdal.org/programs/ogr2ogr.html>`__ application.
|
||||
|
||||
Can I transform from *abc* to *xyz*?
|
||||
--------------------------------------------------------------------------------
|
||||
@@ -49,8 +49,7 @@ ETRS89/UTM32N (EPSG:25832) and ETRS89/DKTM1 (EPSG:4093):
|
||||
+step +proj=tmerc +lat_0=0 +lon_0=9 +k=0.99998 +x_0=200000 +y_0=-5000000
|
||||
+ellps=GRS80
|
||||
|
||||
See the :program:`projinfo` :ref:`documentation <projinfo>` for more info on
|
||||
how to use it.
|
||||
See the :program:`projinfo` documentation for more info on how to use it.
|
||||
|
||||
Coordinate reference system *xyz* is not in the EPSG registry, what do I do?
|
||||
--------------------------------------------------------------------------------
|
||||
@@ -99,6 +98,15 @@ erroneous transformations.
|
||||
For compatibility reasons PROJ supports several WKT dialects
|
||||
(see :option:`projinfo -o`). If possible WKT2 should be used.
|
||||
|
||||
Which CRS apply to a given location?
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
You can use the webpage
|
||||
`CRS Explorer <https://crs-explorer.proj.org/>`_
|
||||
to view a list of all coordinate reference systems in `proj.db`, and
|
||||
filter by type, authority, name and location (clicking on the map). It provides
|
||||
WKTs for every coordinate reference system and quick links to epsg.org.
|
||||
|
||||
Why is the axis ordering in PROJ not consistent?
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -31,8 +31,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
|
||||
|
||||
@@ -84,7 +84,7 @@ accomplished by executing the following command::
|
||||
C:\temp\osgeo4w-setup.exe -q -k -r -A -s https://download.osgeo.org/osgeo4w/v2/ -P proj
|
||||
|
||||
.. _`OSGeo4W`: https://trac.osgeo.org/osgeo4w/
|
||||
.. _`64 bit`: https://download.osgeo.org/osgeo4w/osgeo4w-setup.exe
|
||||
.. _`64 bit`: https://download.osgeo.org/osgeo4w/v2/osgeo4w-setup.exe
|
||||
|
||||
Linux
|
||||
--------------------------------------------------------------------------------
|
||||
@@ -102,14 +102,14 @@ On Debian and similar systems (e.g. Ubuntu) the APT package manager is used::
|
||||
Fedora
|
||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
On Fedora the :program:`dnf` package manager is used::
|
||||
On Fedora the ``dnf`` package manager is used::
|
||||
|
||||
sudo dnf install proj
|
||||
|
||||
Red Hat
|
||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
On Red Hat based system packages are installed with :program:`yum`::
|
||||
On Red Hat based system packages are installed with ``yum``::
|
||||
|
||||
sudo yum install proj
|
||||
|
||||
@@ -206,9 +206,8 @@ can be modified to suit the users needs. See :ref:`projsync` for more options.
|
||||
|
||||
As an alternative on systems where network access is disabled, the
|
||||
:ref:`proj-data <datumgrid>`
|
||||
package can be downloaded and added to the :envvar:`PROJ_DATA` directory
|
||||
(called ``PROJ_LIB`` before PROJ 9.1)
|
||||
|
||||
package can be downloaded and its content decompressed into one of the
|
||||
directories where PROJ looks for :ref:`resources <resource_files>`
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -3,6 +3,71 @@
|
||||
News
|
||||
###############################################################################
|
||||
|
||||
|
||||
9.1.1 Release Notes
|
||||
++++++++++++++++++++
|
||||
*December 1st 2022*
|
||||
|
||||
Updates
|
||||
--------
|
||||
|
||||
* Database: register ``at_bev_AT_GIS_GRID_2021_09_28`` grid (`#3442 <https://github.com/OSGeo/PROJ/issues/3442>`_)
|
||||
|
||||
Bug fixes
|
||||
----------
|
||||
|
||||
* Implement ``alterGeodeticCRS`` and ``stripVerticalComponent`` for ``DerivedProjected`` (`#3482 <https://github.com/OSGeo/PROJ/issues/3482>`_)
|
||||
|
||||
* Various improvements to handling of ``DerivedProjectedCRS``
|
||||
(`#3482 <https://github.com/OSGeo/PROJ/issues/3482>`_, `#3477 <https://github.com/OSGeo/PROJ/issues/3477>`_ , `#3342 <https://github.com/OSGeo/PROJ/issues/3342>`_ , `#3319 <https://github.com/OSGeo/PROJ/issues/3319>`_, `#3317 <https://github.com/OSGeo/PROJ/issues/3317>`_)
|
||||
|
||||
* Add missing ``<cstdint>`` includes (`#3459 <https://github.com/OSGeo/PROJ/issues/3459>`_)
|
||||
|
||||
* cs2cs: better validate value of ``-W`` option (`#3453 <https://github.com/OSGeo/PROJ/issues/3453>`_)
|
||||
|
||||
* ``DatabaseContext::lookForGridInfo()``: fix caching of filenames and set
|
||||
correct URLs (`#3448 <https://github.com/OSGeo/PROJ/issues/3448>`_)
|
||||
|
||||
* Database: register in ``grid_alternatives`` grids from PROJ-data that have no
|
||||
corresponding transformation record (`#3446 <https://github.com/OSGeo/PROJ/issues/3446>`_)
|
||||
|
||||
* ``cass`` projection: fix forward computation of easting (`#3433 <https://github.com/OSGeo/PROJ/issues/3433>`_)
|
||||
|
||||
* Implement ``Geographic/Vertical Offset`` conversions (`#3413 <https://github.com/OSGeo/PROJ/issues/3413>`_)
|
||||
|
||||
* ``vandg`` projection: handle ``+over`` to extend the validity domain outside of ``|lon|>180deg`` (`#3427 <https://github.com/OSGeo/PROJ/issues/3427>`_)
|
||||
|
||||
* ``eqdc`` projection: avoid floating point division by zero in non-nominal case (`#3415 <https://github.com/OSGeo/PROJ/issues/3415>`_)
|
||||
|
||||
* :cpp:func:`createOperations()`: fix issues when transforming between ``Geog3D`` and
|
||||
``DerivedGeog3D`` CRS with ``Geographic3D`` offsets method (`#3411 <https://github.com/OSGeo/PROJ/issues/3411>`_)
|
||||
|
||||
* :cpp:func:`VerticalCRS::_isEquivalentTo()`: do not consider ``VerticalCRS`` and
|
||||
``DerivedVerticalCRS`` as equivalent (`#3408 <https://github.com/OSGeo/PROJ/issues/3408>`_)
|
||||
|
||||
* cct and cs2cs: Avoid problems when encountering UTF-8 `BOM`` characters at
|
||||
beginning of input files (`#3395 <https://github.com/OSGeo/PROJ/issues/3395>`_)
|
||||
|
||||
* :cpp:func:`createFromUserInput()`: Improved lookup when approximate name is provided (`#3371 <https://github.com/OSGeo/PROJ/issues/3371>`_)
|
||||
|
||||
* projinfo / cs2cs : auto promotion to 3D of CRS specified by name (`#3367 <https://github.com/OSGeo/PROJ/issues/3367>`_)
|
||||
|
||||
* :cpp:func:`findsOpsInRegistryWithIntermediate()`: make it work when source/target geodetic
|
||||
CRS has no known id (`#3365 <https://github.com/OSGeo/PROJ/issues/3365>`_)
|
||||
|
||||
* :cpp:func:`createOperations()`: emulate PROJ < 6 behavior when doing geocentric <-->
|
||||
geographic transformation between datum with unknown transformation (`#3361 <https://github.com/OSGeo/PROJ/issues/3361>`_)
|
||||
|
||||
* Fix issue when transforming from/into a WKT2 Bound ``VerticalCRS`` with a
|
||||
'Geographic3D to GravityRelatedHeight' method (`#3355 <https://github.com/OSGeo/PROJ/issues/3355>`_)
|
||||
|
||||
* :c:func:`proj_normalize_for_visualization()`: take into account ``FORCE_OVER`` property
|
||||
from source operation (`#3350 <https://github.com/OSGeo/PROJ/issues/3350>`_)
|
||||
|
||||
* Link geodtest against libm when available (`#3341 <https://github.com/OSGeo/PROJ/issues/3341>`_)
|
||||
|
||||
|
||||
|
||||
9.1.0 Release Notes
|
||||
+++++++++++++++++++
|
||||
*September 1st 2022*
|
||||
|
||||
@@ -8,6 +8,6 @@
|
||||
The default convention is to interpret this value as decimal degrees. To
|
||||
specify radians instead, follow the value with the "r" character.
|
||||
|
||||
Example: `+lat_0=1.5708r`
|
||||
Example: `+lat_0=1.570796r`
|
||||
|
||||
See :ref:`Projection Units <projection_units>` for more information.
|
||||
|
||||
@@ -8,6 +8,6 @@
|
||||
The default convention is to interpret this value as decimal degrees. To
|
||||
specify radians instead, follow the value with the "r" character.
|
||||
|
||||
Example: `+lat_1=1.5708r`
|
||||
Example: `+lat_1=1.570796r`
|
||||
|
||||
See :ref:`Projection Units <projection_units>` for more information.
|
||||
|
||||
@@ -8,6 +8,6 @@
|
||||
The default convention is to interpret this value as decimal degrees. To
|
||||
specify radians instead, follow the value with the "r" character.
|
||||
|
||||
Example: `+lat_2=1.5708r`
|
||||
Example: `+lat_2=1.570796r`
|
||||
|
||||
See :ref:`Projection Units <projection_units>` for more information.
|
||||
|
||||
@@ -9,6 +9,6 @@
|
||||
The default convention is to interpret this value as decimal degrees. To
|
||||
specify radians instead, follow the value with the "r" character.
|
||||
|
||||
Example: `+lat_ts=1.5708r`
|
||||
Example: `+lat_ts=1.570796r`
|
||||
|
||||
See :ref:`Projection Units <projection_units>` for more information.
|
||||
|
||||
@@ -8,6 +8,6 @@
|
||||
The default convention is to interpret this value as decimal degrees. To
|
||||
specify radians instead, follow the value with the "r" character.
|
||||
|
||||
Example: `+lon_0=1.5708r`
|
||||
Example: `+lon_0=1.570796r`
|
||||
|
||||
See :ref:`Projection Units <projection_units>` for more information.
|
||||
|
||||
@@ -35,7 +35,7 @@ Required
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
For the Oblique Cylindrical Equal Area projection a pole of rotation is needed.
|
||||
The pole can be defined in two ways: By a point and azimuth or by providing to
|
||||
The pole can be defined in two ways: By a point and azimuth or by providing two
|
||||
points that make up the pole.
|
||||
|
||||
Point & azimuth
|
||||
|
||||
@@ -124,11 +124,13 @@ Central point and azimuth method
|
||||
|
||||
.. option:: +lonc=<value>
|
||||
|
||||
Longitude of the central point.
|
||||
Longitude of the projection centre. Note that this value is used to
|
||||
override the :option:`+lon_0` parameter, so the latter should not be
|
||||
specified as it would get ignored.
|
||||
|
||||
.. option:: +lat_0=<value>
|
||||
|
||||
Latitude of the central point.
|
||||
Latitude of the projection centre.
|
||||
|
||||
Two point method
|
||||
--------------------------------------------------------------------------------
|
||||
@@ -166,8 +168,6 @@ Optional
|
||||
|
||||
.. include:: ../options/k_0.rst
|
||||
|
||||
.. include:: ../options/lon_0.rst
|
||||
|
||||
.. include:: ../options/x_0.rst
|
||||
|
||||
.. include:: ../options/y_0.rst
|
||||
|
||||
@@ -215,7 +215,7 @@ Superscripts of vectors denote the reference frame the coordinates in the vector
|
||||
|
||||
The simplest version of the Helmert transform is the 2D case. In the 2-dimensional
|
||||
case only the horizontal coordinates are changed. The coordinates can be
|
||||
translated, rotated and scale. Translation is controlled with the `x` and `y`
|
||||
translated, rotated and scaled. Translation is controlled with the `x` and `y`
|
||||
parameters. The rotation is determined by `theta` and the scale is controlled with
|
||||
the `s` parameters.
|
||||
|
||||
@@ -331,7 +331,7 @@ The three rotation matrices can be combined in one:
|
||||
.. math::
|
||||
|
||||
\begin{align}
|
||||
\mathbf{R} = \mathbf{R_X} \mathbf{R_Y} \mathbf{R_Y}
|
||||
\mathbf{R} = \mathbf{R_X} \mathbf{R_Y} \mathbf{R_Z}
|
||||
\end{align}
|
||||
|
||||
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
Volume = {2019},
|
||||
Address = {Geneva, CH},
|
||||
Institution = {International Organization for Standardization},
|
||||
Url = {http://docs.opengeospatial.org/as/18-005r4/18-005r4.html}
|
||||
Url = {http://docs.opengeospatial.org/as/18-005r5/18-005r5.html}
|
||||
}
|
||||
|
||||
@Article{Jenny2015,
|
||||
|
||||
@@ -323,7 +323,7 @@ compiler. For Ubuntu something like the following should work.
|
||||
apt-get install gfortran
|
||||
|
||||
To compile the program do something like the following to produce the binary
|
||||
:program:`htdp` from the source code.
|
||||
``htdp`` from the source code.
|
||||
|
||||
::
|
||||
|
||||
@@ -369,13 +369,13 @@ Usage
|
||||
The goal of :file:`crs2crs2grid.py` is to produce a grid shift file for a designated
|
||||
region. The region is defined using the ``-griddef`` switch. When missing a
|
||||
continental US region is used. The script creates a set of sample points for
|
||||
the grid definition, runs :program:`htdp` against it and then parses the
|
||||
the grid definition, runs ``htdp`` against it and then parses the
|
||||
resulting points and computes a point by point shift to encode into the final
|
||||
grid shift file. By default it is assumed that :program:`htdp` is in the
|
||||
grid shift file. By default it is assumed that ``htdp`` is in the
|
||||
executable path. If not, please provide the path to the executable using the
|
||||
``-htdp`` switch.
|
||||
|
||||
The :program:`htdp` program supports transformations between many CRSes and for each (or
|
||||
The ``htdp`` program supports transformations between many CRSes and for each (or
|
||||
most?) of them you need to provide a date at which the CRS is fixed. The full
|
||||
set of CRS Ids available in the HTDP program are:
|
||||
|
||||
|
||||
@@ -35,8 +35,7 @@ is an easy way to inspect such grid files:
|
||||
to readers that are not official GeoTIFF 1.1 compliant.
|
||||
|
||||
- Files hosted on the CDN will use a Geographic 2D CRS for the GeoTIFF GeoKeys.
|
||||
That CRS is intended to be the interpolation CRS as defined in
|
||||
`OGC Abstract Specification Topic 2 <http://docs.opengeospatial.org/as/18-005r4/18-005r4.html>`_,
|
||||
That CRS is intended to be the interpolation CRS as defined in :cite:`ISO19111`,
|
||||
that is the CRS to which grid values are referred to.
|
||||
|
||||
Given that they will nominally be related to the EPSG dataset, the `GeodeticCRSGeoKey
|
||||
|
||||
@@ -9,8 +9,7 @@ Introduction
|
||||
|
||||
PROJJSON is a JSON encoding of
|
||||
`WKT2:2019 / ISO-19162:2019: Geographic information - Well-known text representation of coordinate reference systems <http://docs.opengeospatial.org/is/18-010r7/18-010r7.html>`_,
|
||||
which itself implements the model of
|
||||
`OGC Topic 2: Referencing by coordinates abstract specification / ISO-19111:2019 <http://docs.opengeospatial.org/as/18-005r4/18-005r4.html>`_.
|
||||
which itself implements the model of :cite:`ISO19111`.
|
||||
Apart from the difference of encodings, the semantics is intended to be exactly
|
||||
the same as WKT2:2019, and PROJJSON can be morphed losslessly from/into WKT2:2019.
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ suffix to input values.
|
||||
|
||||
Example of use. The longitude of the central meridian ``+lon_0=90``, can also be expressed more explictly
|
||||
with units of decimal degrees as ``+lon_0=90d`` or in radian
|
||||
units as ``+lon_0=1.5708r`` (approximately).
|
||||
units as ``+lon_0=1.570796r`` (approximately).
|
||||
|
||||
|
||||
False Easting/Northing
|
||||
|
||||
@@ -35,7 +35,7 @@ utility :program:`proj` we can convert the geodetic coordinates to projected spa
|
||||
If called as above :program:`proj` will be in interactive mode, letting you
|
||||
type the input data manually and getting a response presented on screen.
|
||||
:program:`proj` works as any UNIX filter though, which means that you can also
|
||||
pipe data to the utility, for instance by using the :program:`echo` command:
|
||||
pipe data to the utility, for instance by using the ``echo`` command:
|
||||
|
||||
::
|
||||
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
/*******************************************************************************
|
||||
Example code that illustrates how to convert between a CRS and
|
||||
geodetic coordnates for that CRS.
|
||||
|
||||
Note: This file is in-lined in the documentation. Any changes must be
|
||||
reflected in docs/source/development/quickstart.rst
|
||||
|
||||
*******************************************************************************/
|
||||
#include <proj.h>
|
||||
#include <stdio.h>
|
||||
#include <math.h>
|
||||
|
||||
int main (void) {
|
||||
|
||||
/* Create the context. */
|
||||
/* You may set C=PJ_DEFAULT_CTX if you are sure you will */
|
||||
/* use PJ objects from only one thread */
|
||||
PJ_CONTEXT *C = proj_context_create();
|
||||
|
||||
/* Create a projection. */
|
||||
PJ *P = proj_create(C, "+proj=utm +zone=32 +datum=WGS84 +type=crs");
|
||||
|
||||
if (0 == P) {
|
||||
fprintf(stderr, "Failed to create transformation object.\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Get the geodetic CRS for that projection. */
|
||||
PJ *G = proj_crs_get_geodetic_crs(C, P);
|
||||
|
||||
/* Create the transform from geodetic to projected coordinates.*/
|
||||
PJ_AREA *A = NULL;
|
||||
const char *const *options = NULL;
|
||||
PJ *G2P = proj_create_crs_to_crs_from_pj(C, G, P, A, options);
|
||||
|
||||
/* Longitude and latitude of Copenhagen, in degrees. */
|
||||
double lon = 12.0, lat = 55.0;
|
||||
|
||||
/* Prepare the input */
|
||||
PJ_COORD c_in;
|
||||
c_in.lpzt.z = 0.0;
|
||||
c_in.lpzt.t = HUGE_VAL; // important only for time-dependent projections
|
||||
c_in.lp.lam = lon;
|
||||
c_in.lp.phi = lat;
|
||||
printf ("Input longitude: %g, latitude: %g (degrees)\n", c_in.lp.lam, c_in.lp.phi);
|
||||
|
||||
/* Compute easting and northing */
|
||||
PJ_COORD c_out = proj_trans(G2P, PJ_FWD, c_in);
|
||||
printf ("Output easting: %g, northing: %g (meters)\n", c_out.enu.e, c_out.enu.n);
|
||||
|
||||
/* Apply the inverse transform */
|
||||
PJ_COORD c_inv = proj_trans(G2P, PJ_INV, c_out);
|
||||
printf ("Inverse applied. Longitude: %g, latitude: %g (degrees)\n", c_inv.lp.lam, c_inv.lp.phi);
|
||||
|
||||
/* Clean up */
|
||||
proj_destroy(P);
|
||||
proj_destroy(G);
|
||||
proj_destroy(G2P);
|
||||
proj_context_destroy(C); /* may be omitted in the single threaded case */
|
||||
return 0;
|
||||
}
|
||||
+2
-2
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "CCT" "1" "Sep 1, 2022" "9.1.0" "PROJ"
|
||||
.TH "CCT" "1" "Dec 1st, 2022" "9.1.1" "PROJ"
|
||||
.SH NAME
|
||||
cct \- Coordinate Conversion and Transformation
|
||||
.SH SYNOPSIS
|
||||
@@ -113,7 +113,7 @@ Specify input columns for (up to) 4 input parameters. Defaults to 1,2,3,4.
|
||||
New in version 5.2.0.
|
||||
|
||||
.sp
|
||||
Specify the number of decimals in the output.
|
||||
Specify the number of decimals to round to in the output.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
|
||||
+21
-5
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "CS2CS" "1" "Sep 1, 2022" "9.1.0" "PROJ"
|
||||
.TH "CS2CS" "1" "Dec 1st, 2022" "9.1.1" "PROJ"
|
||||
.SH NAME
|
||||
cs2cs \- Cartographic coordinate system filter
|
||||
.SH SYNOPSIS
|
||||
@@ -114,7 +114,7 @@ ASCII input only. (# is the default value).
|
||||
New in version 5.2.0.
|
||||
|
||||
.sp
|
||||
Specify the number of decimals in the output.
|
||||
Specify the number of decimals to round to in the output.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
@@ -192,7 +192,7 @@ output (when the option is not specified, \fB\-w3\fP is assumed).
|
||||
.B \-W<n>
|
||||
Where \fIn\fP is the number of significant fractional digits to employ for seconds
|
||||
output. When \fB\-W\fP is employed the fields will be constant width
|
||||
with leading zeroes.
|
||||
with leading zeroes. Valid range: \-W0 through \-W8.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
@@ -348,11 +348,19 @@ The x\-y output data will appear as three lines of:
|
||||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
1402293.44 5076292.68 0.00
|
||||
1402285.98 5076292.42 0.00
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.sp
|
||||
\fBNOTE:\fP
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
To get those exact values, you have need to have all current grids installed
|
||||
locally or use networking capabilities mentioned above.
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.SS Using EPSG CRS codes
|
||||
.sp
|
||||
Transforming from WGS 84 latitude/longitude (in that order) to UTM Zone 31N/WGS 84
|
||||
@@ -389,7 +397,7 @@ UTM Zone 31N/WGS 84 with WGS84 ellipsoidal height
|
||||
.sp
|
||||
.nf
|
||||
.ft C
|
||||
echo 45 2 0 | cs2cs \(dqWGS 84 + EGM96 height\(dq \(dqWGS 84 / UTM zone 31N\(dq
|
||||
echo 45 2 0 | cs2cs \(dqWGS 84 + EGM96 height\(dq \(dqWGS 84 / UTM zone 31N\(dq \-\-3d
|
||||
.ft P
|
||||
.fi
|
||||
.UNINDENT
|
||||
@@ -406,6 +414,14 @@ outputs
|
||||
.fi
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.sp
|
||||
\fBNOTE:\fP
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
To get those exact values, you have need to have the EGM96 grid installed
|
||||
locally or use networking capabilities mentioned above.
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.SH SEE ALSO
|
||||
.sp
|
||||
\fBproj(1)\fP, \fBcct(1)\fP, \fBgeod(1)\fP, \fBgie(1)\fP, \fBprojinfo(1)\fP, \fBprojsync(1)\fP
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "GEOD" "1" "Sep 1, 2022" "9.1.0" "PROJ"
|
||||
.TH "GEOD" "1" "Dec 1st, 2022" "9.1.1" "PROJ"
|
||||
.SH NAME
|
||||
geod \- Geodesic computations
|
||||
.SH SYNOPSIS
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "GIE" "1" "Sep 1, 2022" "9.1.0" "PROJ"
|
||||
.TH "GIE" "1" "Dec 1st, 2022" "9.1.1" "PROJ"
|
||||
.SH NAME
|
||||
gie \- The Geospatial Integrity Investigation Environment
|
||||
.SH SYNOPSIS
|
||||
|
||||
+2
-2
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "PROJ" "1" "Sep 1, 2022" "9.1.0" "PROJ"
|
||||
.TH "PROJ" "1" "Dec 1st, 2022" "9.1.1" "PROJ"
|
||||
.SH NAME
|
||||
proj \- Cartographic projection filter
|
||||
.SH SYNOPSIS
|
||||
@@ -61,7 +61,7 @@ and allows bypassing formatting operations.
|
||||
.B \-d <n>
|
||||
.UNINDENT
|
||||
.sp
|
||||
New in version 5.2.0: Specify the number of decimals in the output.
|
||||
New in version 5.2.0: Specify the number of decimals to round to in the output.
|
||||
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "PROJINFO" "1" "Sep 1, 2022" "9.1.0" "PROJ"
|
||||
.TH "PROJINFO" "1" "Dec 1st, 2022" "9.1.1" "PROJ"
|
||||
.SH NAME
|
||||
projinfo \- Geodetic object and coordinate operation queries
|
||||
.SH SYNOPSIS
|
||||
|
||||
+2
-2
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||
..
|
||||
.TH "PROJSYNC" "1" "Sep 1, 2022" "9.1.0" "PROJ"
|
||||
.TH "PROJSYNC" "1" "Dec 1st, 2022" "9.1.1" "PROJ"
|
||||
.SH NAME
|
||||
projsync \- Downloading tool of resource files
|
||||
.SH SYNOPSIS
|
||||
@@ -195,7 +195,7 @@ projsync \-\-all
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.IP 2. 3
|
||||
Download resource files covering specified point and attributing to an agency
|
||||
Download resource files covering specified point and attributed to an agency
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
|
||||
@@ -457,7 +457,7 @@
|
||||
|
||||
"dynamic_geodetic_reference_frame": {
|
||||
"type": "object",
|
||||
"allOf": [{ "$ref": "#/definitions/geodetic_reference_frame" }],
|
||||
"allOf": [{ "$ref": "#/definitions/object_usage" }],
|
||||
"properties": {
|
||||
"type": { "type": "string", "enum": ["DynamicGeodeticReferenceFrame"] },
|
||||
"name": {},
|
||||
@@ -481,7 +481,7 @@
|
||||
|
||||
"dynamic_vertical_reference_frame": {
|
||||
"type": "object",
|
||||
"allOf": [{ "$ref": "#/definitions/vertical_reference_frame" }],
|
||||
"allOf": [{ "$ref": "#/definitions/object_usage" }],
|
||||
"properties": {
|
||||
"type": { "type": "string", "enum": ["DynamicVerticalReferenceFrame"] },
|
||||
"name": {},
|
||||
|
||||
+9
-4
@@ -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/
|
||||
@@ -29,10 +38,6 @@ else
|
||||
echo "No Doxygen warnings found";
|
||||
fi
|
||||
|
||||
if test $(doxygen --version) = "1.8.17" ; then
|
||||
echo "Doxygen 1.8.17 is incompatible" && /bin/false;
|
||||
fi
|
||||
|
||||
rm -rf docs/build/xml/
|
||||
|
||||
(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/4D_api.cpp src/general_doc.dox") | doxygen - > docs/build/docs_log.txt 2>&1
|
||||
|
||||
+4
-2
@@ -574,11 +574,13 @@ int main(int argc, char **argv) {
|
||||
case 'w': /* -W for constant field width */
|
||||
{
|
||||
char c = arg[1];
|
||||
if (c != 0 && isdigit(c)) {
|
||||
// Check that the value is in the [0, 8] range
|
||||
if (c >= '0' && c <= '8' &&
|
||||
((arg[2] == 0 || !(arg[2] >= '0' && arg[2] <= '9')))) {
|
||||
set_rtodms(c - '0', *arg == 'W');
|
||||
++arg;
|
||||
} else
|
||||
emess(1, "-W argument missing or non-digit");
|
||||
emess(1, "-W argument missing or not in range [0,8]");
|
||||
continue;
|
||||
}
|
||||
case 'f': /* alternate output format degrees or xy */
|
||||
|
||||
+9
-2
@@ -27,8 +27,15 @@ emess(int code, const char *fmt, ...) {
|
||||
va_start(args, fmt);
|
||||
/* prefix program name, if given */
|
||||
if (emess_dat.Prog_name != nullptr)
|
||||
(void)fprintf(stderr,"%s\n<%s>: ",pj_get_release(),
|
||||
emess_dat.Prog_name);
|
||||
{
|
||||
// For unit test purposes, allow PROJ_DISPLAY_PROGRAM_NAME=NO
|
||||
const char* pszDisplayProgramName = getenv("PROJ_DISPLAY_PROGRAM_NAME");
|
||||
if( !(pszDisplayProgramName && strcmp(pszDisplayProgramName, "NO") == 0) )
|
||||
{
|
||||
(void)fprintf(stderr,"%s\n<%s>: ",pj_get_release(),
|
||||
emess_dat.Prog_name);
|
||||
}
|
||||
}
|
||||
/* print file name and line, if given */
|
||||
if (emess_dat.File_name != nullptr && *emess_dat.File_name) {
|
||||
(void)fprintf(stderr,"while processing file: %s", emess_dat.File_name);
|
||||
|
||||
+2
-2
@@ -82,8 +82,8 @@ reference systems.
|
||||
|
||||
This is the revision mostly used for PROJ C++ modelling.
|
||||
|
||||
[OGC 18-005r4, 2019-02-08, ISO 19111:2019]
|
||||
(http://docs.opengeospatial.org/as/18-005r4/18-005r4.html)
|
||||
[OGC 18-005r5, 2021-07-02, ISO 19111:2019]
|
||||
(http://docs.opengeospatial.org/as/18-005r5/18-005r5.html)
|
||||
|
||||
\subsubsection ISO_19111_2007 ISO 19111:2007
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
*
|
||||
* Starts with initial guess provided by user in lpInitial
|
||||
*/
|
||||
PJ_LP pj_generic_inverse_2d(PJ_XY xy, PJ *P, PJ_LP lpInitial) {
|
||||
PJ_LP pj_generic_inverse_2d(PJ_XY xy, PJ *P, PJ_LP lpInitial, double deltaXYTolerance) {
|
||||
PJ_LP lp = lpInitial;
|
||||
double deriv_lam_X = 0;
|
||||
double deriv_lam_Y = 0;
|
||||
@@ -51,7 +51,7 @@ PJ_LP pj_generic_inverse_2d(PJ_XY xy, PJ *P, PJ_LP lpInitial) {
|
||||
PJ_XY xyApprox = P->fwd(lp, P);
|
||||
const double deltaX = xyApprox.x - xy.x;
|
||||
const double deltaY = xyApprox.y - xy.y;
|
||||
if (fabs(deltaX) < 1e-10 && fabs(deltaY) < 1e-10) {
|
||||
if (fabs(deltaX) < deltaXYTolerance && fabs(deltaY) < deltaXYTolerance) {
|
||||
return lp;
|
||||
}
|
||||
|
||||
|
||||
+79
-30
@@ -275,20 +275,27 @@ createPropertyMap(const common::IdentifiedObject *obj) {
|
||||
|
||||
//! @cond Doxygen_Suppress
|
||||
CRSNNPtr CRS::alterGeodeticCRS(const GeodeticCRSNNPtr &newGeodCRS) const {
|
||||
auto geodCRS = dynamic_cast<const GeodeticCRS *>(this);
|
||||
if (geodCRS) {
|
||||
if (dynamic_cast<const GeodeticCRS *>(this)) {
|
||||
return newGeodCRS;
|
||||
}
|
||||
|
||||
auto projCRS = dynamic_cast<const ProjectedCRS *>(this);
|
||||
if (projCRS) {
|
||||
if (auto projCRS = dynamic_cast<const ProjectedCRS *>(this)) {
|
||||
return ProjectedCRS::create(createPropertyMap(this), newGeodCRS,
|
||||
projCRS->derivingConversion(),
|
||||
projCRS->coordinateSystem());
|
||||
}
|
||||
|
||||
auto compoundCRS = dynamic_cast<const CompoundCRS *>(this);
|
||||
if (compoundCRS) {
|
||||
if (auto derivedProjCRS = dynamic_cast<const DerivedProjectedCRS *>(this)) {
|
||||
auto newProjCRS =
|
||||
NN_CHECK_ASSERT(util::nn_dynamic_pointer_cast<ProjectedCRS>(
|
||||
derivedProjCRS->baseCRS()->alterGeodeticCRS(newGeodCRS)));
|
||||
|
||||
return DerivedProjectedCRS::create(createPropertyMap(this), newProjCRS,
|
||||
derivedProjCRS->derivingConversion(),
|
||||
derivedProjCRS->coordinateSystem());
|
||||
}
|
||||
|
||||
if (auto compoundCRS = dynamic_cast<const CompoundCRS *>(this)) {
|
||||
std::vector<CRSNNPtr> components;
|
||||
for (const auto &subCrs : compoundCRS->componentReferenceSystems()) {
|
||||
components.emplace_back(subCrs->alterGeodeticCRS(newGeodCRS));
|
||||
@@ -706,8 +713,7 @@ CRSNNPtr CRS::stripVerticalComponent() const {
|
||||
auto self = NN_NO_CHECK(
|
||||
std::dynamic_pointer_cast<CRS>(shared_from_this().as_nullable()));
|
||||
|
||||
auto geogCRS = dynamic_cast<const GeographicCRS *>(this);
|
||||
if (geogCRS) {
|
||||
if (auto geogCRS = dynamic_cast<const GeographicCRS *>(this)) {
|
||||
const auto &axisList = geogCRS->coordinateSystem()->axisList();
|
||||
if (axisList.size() == 3) {
|
||||
auto cs = cs::EllipsoidalCS::create(util::PropertyMap(),
|
||||
@@ -718,8 +724,8 @@ CRSNNPtr CRS::stripVerticalComponent() const {
|
||||
geogCRS->datum(), geogCRS->datumEnsemble(), cs));
|
||||
}
|
||||
}
|
||||
auto projCRS = dynamic_cast<const ProjectedCRS *>(this);
|
||||
if (projCRS) {
|
||||
|
||||
if (auto projCRS = dynamic_cast<const ProjectedCRS *>(this)) {
|
||||
const auto &axisList = projCRS->coordinateSystem()->axisList();
|
||||
if (axisList.size() == 3) {
|
||||
auto cs = cs::CartesianCS::create(util::PropertyMap(), axisList[0],
|
||||
@@ -730,6 +736,21 @@ CRSNNPtr CRS::stripVerticalComponent() const {
|
||||
projCRS->baseCRS(), projCRS->derivingConversion(), cs));
|
||||
}
|
||||
}
|
||||
|
||||
if (auto derivedProjCRS = dynamic_cast<const DerivedProjectedCRS *>(this)) {
|
||||
const auto &axisList = derivedProjCRS->coordinateSystem()->axisList();
|
||||
if (axisList.size() == 3) {
|
||||
auto cs = cs::CartesianCS::create(util::PropertyMap(), axisList[0],
|
||||
axisList[1]);
|
||||
return util::nn_static_pointer_cast<CRS>(
|
||||
DerivedProjectedCRS::create(
|
||||
util::PropertyMap().set(common::IdentifiedObject::NAME_KEY,
|
||||
nameStr()),
|
||||
derivedProjCRS->baseCRS(),
|
||||
derivedProjCRS->derivingConversion(), cs));
|
||||
}
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@@ -871,26 +892,32 @@ static bool mustAxisOrderBeSwitchedForVisualizationInternal(
|
||||
|
||||
bool CRS::mustAxisOrderBeSwitchedForVisualization() const {
|
||||
|
||||
const CompoundCRS *compoundCRS = dynamic_cast<const CompoundCRS *>(this);
|
||||
if (compoundCRS) {
|
||||
if (const CompoundCRS *compoundCRS =
|
||||
dynamic_cast<const CompoundCRS *>(this)) {
|
||||
const auto &comps = compoundCRS->componentReferenceSystems();
|
||||
if (!comps.empty()) {
|
||||
return comps[0]->mustAxisOrderBeSwitchedForVisualization();
|
||||
}
|
||||
}
|
||||
|
||||
const GeographicCRS *geogCRS = dynamic_cast<const GeographicCRS *>(this);
|
||||
if (geogCRS) {
|
||||
if (const GeographicCRS *geogCRS =
|
||||
dynamic_cast<const GeographicCRS *>(this)) {
|
||||
return mustAxisOrderBeSwitchedForVisualizationInternal(
|
||||
geogCRS->coordinateSystem()->axisList());
|
||||
}
|
||||
|
||||
const ProjectedCRS *projCRS = dynamic_cast<const ProjectedCRS *>(this);
|
||||
if (projCRS) {
|
||||
if (const ProjectedCRS *projCRS =
|
||||
dynamic_cast<const ProjectedCRS *>(this)) {
|
||||
return mustAxisOrderBeSwitchedForVisualizationInternal(
|
||||
projCRS->coordinateSystem()->axisList());
|
||||
}
|
||||
|
||||
if (const DerivedProjectedCRS *derivedProjCRS =
|
||||
dynamic_cast<const DerivedProjectedCRS *>(this)) {
|
||||
return mustAxisOrderBeSwitchedForVisualizationInternal(
|
||||
derivedProjCRS->coordinateSystem()->axisList());
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1009,8 +1036,8 @@ CRSNNPtr CRS::applyAxisOrderReversal(const char *nameSuffix) const {
|
||||
return props;
|
||||
};
|
||||
|
||||
const CompoundCRS *compoundCRS = dynamic_cast<const CompoundCRS *>(this);
|
||||
if (compoundCRS) {
|
||||
if (const CompoundCRS *compoundCRS =
|
||||
dynamic_cast<const CompoundCRS *>(this)) {
|
||||
const auto &comps = compoundCRS->componentReferenceSystems();
|
||||
if (!comps.empty()) {
|
||||
std::vector<CRSNNPtr> newComps;
|
||||
@@ -1026,8 +1053,8 @@ CRSNNPtr CRS::applyAxisOrderReversal(const char *nameSuffix) const {
|
||||
}
|
||||
}
|
||||
|
||||
const GeographicCRS *geogCRS = dynamic_cast<const GeographicCRS *>(this);
|
||||
if (geogCRS) {
|
||||
if (const GeographicCRS *geogCRS =
|
||||
dynamic_cast<const GeographicCRS *>(this)) {
|
||||
const auto &axisList = geogCRS->coordinateSystem()->axisList();
|
||||
auto cs =
|
||||
axisList.size() == 2
|
||||
@@ -1040,8 +1067,8 @@ CRSNNPtr CRS::applyAxisOrderReversal(const char *nameSuffix) const {
|
||||
geogCRS->datumEnsemble(), cs));
|
||||
}
|
||||
|
||||
const ProjectedCRS *projCRS = dynamic_cast<const ProjectedCRS *>(this);
|
||||
if (projCRS) {
|
||||
if (const ProjectedCRS *projCRS =
|
||||
dynamic_cast<const ProjectedCRS *>(this)) {
|
||||
const auto &axisList = projCRS->coordinateSystem()->axisList();
|
||||
auto cs =
|
||||
axisList.size() == 2
|
||||
@@ -1054,6 +1081,20 @@ CRSNNPtr CRS::applyAxisOrderReversal(const char *nameSuffix) const {
|
||||
projCRS->derivingConversion(), cs));
|
||||
}
|
||||
|
||||
if (const DerivedProjectedCRS *derivedProjCRS =
|
||||
dynamic_cast<const DerivedProjectedCRS *>(this)) {
|
||||
const auto &axisList = derivedProjCRS->coordinateSystem()->axisList();
|
||||
auto cs =
|
||||
axisList.size() == 2
|
||||
? cs::CartesianCS::create(util::PropertyMap(), axisList[1],
|
||||
axisList[0])
|
||||
: cs::CartesianCS::create(util::PropertyMap(), axisList[1],
|
||||
axisList[0], axisList[2]);
|
||||
return util::nn_static_pointer_cast<CRS>(DerivedProjectedCRS::create(
|
||||
createProperties(), derivedProjCRS->baseCRS(),
|
||||
derivedProjCRS->derivingConversion(), cs));
|
||||
}
|
||||
|
||||
throw util::UnsupportedOperationException(
|
||||
"axis order reversal not supported on this type of CRS");
|
||||
}
|
||||
@@ -1062,8 +1103,8 @@ CRSNNPtr CRS::applyAxisOrderReversal(const char *nameSuffix) const {
|
||||
|
||||
CRSNNPtr CRS::normalizeForVisualization() const {
|
||||
|
||||
const CompoundCRS *compoundCRS = dynamic_cast<const CompoundCRS *>(this);
|
||||
if (compoundCRS) {
|
||||
if (const CompoundCRS *compoundCRS =
|
||||
dynamic_cast<const CompoundCRS *>(this)) {
|
||||
const auto &comps = compoundCRS->componentReferenceSystems();
|
||||
if (!comps.empty() &&
|
||||
comps[0]->mustAxisOrderBeSwitchedForVisualization()) {
|
||||
@@ -1071,22 +1112,30 @@ CRSNNPtr CRS::normalizeForVisualization() const {
|
||||
}
|
||||
}
|
||||
|
||||
const GeographicCRS *geogCRS = dynamic_cast<const GeographicCRS *>(this);
|
||||
if (geogCRS) {
|
||||
if (const GeographicCRS *geogCRS =
|
||||
dynamic_cast<const GeographicCRS *>(this)) {
|
||||
const auto &axisList = geogCRS->coordinateSystem()->axisList();
|
||||
if (mustAxisOrderBeSwitchedForVisualizationInternal(axisList)) {
|
||||
return applyAxisOrderReversal(NORMALIZED_AXIS_ORDER_SUFFIX_STR);
|
||||
}
|
||||
}
|
||||
|
||||
const ProjectedCRS *projCRS = dynamic_cast<const ProjectedCRS *>(this);
|
||||
if (projCRS) {
|
||||
if (const ProjectedCRS *projCRS =
|
||||
dynamic_cast<const ProjectedCRS *>(this)) {
|
||||
const auto &axisList = projCRS->coordinateSystem()->axisList();
|
||||
if (mustAxisOrderBeSwitchedForVisualizationInternal(axisList)) {
|
||||
return applyAxisOrderReversal(NORMALIZED_AXIS_ORDER_SUFFIX_STR);
|
||||
}
|
||||
}
|
||||
|
||||
if (const DerivedProjectedCRS *derivedProjCRS =
|
||||
dynamic_cast<const DerivedProjectedCRS *>(this)) {
|
||||
const auto &axisList = derivedProjCRS->coordinateSystem()->axisList();
|
||||
if (mustAxisOrderBeSwitchedForVisualizationInternal(axisList)) {
|
||||
return applyAxisOrderReversal(NORMALIZED_AXIS_ORDER_SUFFIX_STR);
|
||||
}
|
||||
}
|
||||
|
||||
return NN_NO_CHECK(
|
||||
std::static_pointer_cast<CRS>(shared_from_this().as_nullable()));
|
||||
}
|
||||
@@ -5092,7 +5141,7 @@ CompoundCRSNNPtr CompoundCRS::create(const util::PropertyMap &properties,
|
||||
auto comp1Vert = dynamic_cast<const VerticalCRS *>(comp1);
|
||||
auto comp1Eng = dynamic_cast<const EngineeringCRS *>(comp1);
|
||||
// Loose validation based on
|
||||
// http://docs.opengeospatial.org/as/18-005r4/18-005r4.html#34
|
||||
// http://docs.opengeospatial.org/as/18-005r5/18-005r5.html#34
|
||||
bool ok = false;
|
||||
const bool comp1IsVertOrEng1 =
|
||||
comp1Vert ||
|
||||
@@ -5125,7 +5174,7 @@ CompoundCRSNNPtr CompoundCRS::create(const util::PropertyMap &properties,
|
||||
throw InvalidCompoundCRSException(
|
||||
"components of the compound CRS do not belong to one of the "
|
||||
"allowed combinations of "
|
||||
"http://docs.opengeospatial.org/as/18-005r4/18-005r4.html#34");
|
||||
"http://docs.opengeospatial.org/as/18-005r5/18-005r5.html#34");
|
||||
}
|
||||
|
||||
auto compoundCRS(CompoundCRS::nn_make_shared<CompoundCRS>(components));
|
||||
|
||||
+53
-13
@@ -48,6 +48,7 @@
|
||||
#include "operation/coordinateoperation_internal.hpp"
|
||||
#include "operation/parammappings.hpp"
|
||||
|
||||
#include "filemanager.hpp"
|
||||
#include "sqlite3_utils.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
@@ -3261,14 +3262,16 @@ bool DatabaseContext::lookForGridInfo(
|
||||
directDownload = false;
|
||||
|
||||
fullFilename.resize(2048);
|
||||
if (d->pjCtxt() == nullptr) {
|
||||
d->setPjCtxt(pj_get_default_ctx());
|
||||
auto ctxt = d->pjCtxt();
|
||||
if (ctxt == nullptr) {
|
||||
ctxt = pj_get_default_ctx();
|
||||
d->setPjCtxt(ctxt);
|
||||
}
|
||||
int errno_before = proj_context_errno(d->pjCtxt());
|
||||
gridAvailable =
|
||||
pj_find_file(d->pjCtxt(), projFilename.c_str(), &fullFilename[0],
|
||||
fullFilename.size() - 1) != 0;
|
||||
proj_context_errno_set(d->pjCtxt(), errno_before);
|
||||
int errno_before = proj_context_errno(ctxt);
|
||||
gridAvailable = NS_PROJ::FileManager::open_resource_file(
|
||||
ctxt, projFilename.c_str(), &fullFilename[0],
|
||||
fullFilename.size() - 1) != nullptr;
|
||||
proj_context_errno_set(ctxt, errno_before);
|
||||
fullFilename.resize(strlen(fullFilename.c_str()));
|
||||
|
||||
auto res =
|
||||
@@ -3301,12 +3304,12 @@ bool DatabaseContext::lookForGridInfo(
|
||||
old_proj_grid_name == projFilename) {
|
||||
std::string fullFilenameNewName;
|
||||
fullFilenameNewName.resize(2048);
|
||||
errno_before = proj_context_errno(d->pjCtxt());
|
||||
errno_before = proj_context_errno(ctxt);
|
||||
bool gridAvailableWithNewName =
|
||||
pj_find_file(d->pjCtxt(), proj_grid_name.c_str(),
|
||||
pj_find_file(ctxt, proj_grid_name.c_str(),
|
||||
&fullFilenameNewName[0],
|
||||
fullFilenameNewName.size() - 1) != 0;
|
||||
proj_context_errno_set(d->pjCtxt(), errno_before);
|
||||
proj_context_errno_set(ctxt, errno_before);
|
||||
fullFilenameNewName.resize(strlen(fullFilenameNewName.c_str()));
|
||||
if (gridAvailableWithNewName) {
|
||||
gridAvailable = true;
|
||||
@@ -3319,7 +3322,6 @@ bool DatabaseContext::lookForGridInfo(
|
||||
gridAvailable = true;
|
||||
}
|
||||
|
||||
info.fullFilename = fullFilename;
|
||||
info.packageName = packageName;
|
||||
std::string endpoint(proj_context_get_url_endpoint(d->pjCtxt()));
|
||||
if (!endpoint.empty() && starts_with(url, "https://cdn.proj.org/")) {
|
||||
@@ -3328,10 +3330,18 @@ bool DatabaseContext::lookForGridInfo(
|
||||
}
|
||||
url = endpoint + url.substr(strlen("https://cdn.proj.org/"));
|
||||
}
|
||||
info.url = url;
|
||||
info.directDownload = directDownload;
|
||||
info.openLicense = openLicense;
|
||||
} else {
|
||||
if (starts_with(fullFilename, "http://") ||
|
||||
starts_with(fullFilename, "https://")) {
|
||||
url = fullFilename;
|
||||
fullFilename.clear();
|
||||
}
|
||||
}
|
||||
|
||||
info.fullFilename = fullFilename;
|
||||
info.url = url;
|
||||
info.gridAvailable = gridAvailable;
|
||||
info.found = ret;
|
||||
d->cache(key, info);
|
||||
@@ -3938,8 +3948,38 @@ util::PropertyMap AuthorityFactory::Private::createPropertiesSearchUsages(
|
||||
bool AuthorityFactory::Private::rejectOpDueToMissingGrid(
|
||||
const operation::CoordinateOperationNNPtr &op,
|
||||
bool considerKnownGridsAsAvailable) {
|
||||
|
||||
struct DisableNetwork {
|
||||
const DatabaseContextNNPtr &m_dbContext;
|
||||
bool m_old_network_enabled;
|
||||
|
||||
explicit DisableNetwork(const DatabaseContextNNPtr &l_context)
|
||||
: m_dbContext(l_context) {
|
||||
auto ctxt = m_dbContext->d->pjCtxt();
|
||||
if (ctxt == nullptr) {
|
||||
ctxt = pj_get_default_ctx();
|
||||
m_dbContext->d->setPjCtxt(ctxt);
|
||||
}
|
||||
m_old_network_enabled =
|
||||
proj_context_is_network_enabled(ctxt) != FALSE;
|
||||
if (m_old_network_enabled)
|
||||
proj_context_set_enable_network(ctxt, false);
|
||||
}
|
||||
|
||||
~DisableNetwork() {
|
||||
if (m_old_network_enabled) {
|
||||
auto ctxt = m_dbContext->d->pjCtxt();
|
||||
proj_context_set_enable_network(ctxt, true);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
auto &l_context = context();
|
||||
// Temporarily disable networking as we are only interested in known grids
|
||||
DisableNetwork disabler(l_context);
|
||||
|
||||
for (const auto &gridDesc :
|
||||
op->gridsNeeded(context(), considerKnownGridsAsAvailable)) {
|
||||
op->gridsNeeded(l_context, considerKnownGridsAsAvailable)) {
|
||||
if (!gridDesc.available) {
|
||||
return true;
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -733,8 +733,9 @@ static TransformationNNPtr createFifteenParamsTransform(
|
||||
* the sign of
|
||||
* the rotation terms is inverted.
|
||||
*
|
||||
* This method is defined as [EPSG:1053]
|
||||
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::1053)
|
||||
* This method is defined as
|
||||
* <a href="https://epsg.org/coord-operation-method_1053/index.html">
|
||||
* EPSG:1053</a>.
|
||||
*
|
||||
* @param properties See \ref general_properties of the Transformation.
|
||||
* At minimum the name should be defined.
|
||||
@@ -809,8 +810,9 @@ TransformationNNPtr Transformation::createTimeDependentPositionVector(
|
||||
* of
|
||||
* the rotation terms is inverted.
|
||||
*
|
||||
* This method is defined as [EPSG:1056]
|
||||
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::1056)
|
||||
* This method is defined as
|
||||
* <a href="https://epsg.org/coord-operation-method_1056/index.html">
|
||||
* EPSG:1056</a>.
|
||||
*
|
||||
* @param properties See \ref general_properties of the Transformation.
|
||||
* At minimum the name should be defined.
|
||||
@@ -916,8 +918,9 @@ static TransformationNNPtr _createMolodensky(
|
||||
*
|
||||
* @see createAbridgedMolodensky() for a related method.
|
||||
*
|
||||
* This method is defined as [EPSG:9604]
|
||||
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9604)
|
||||
* This method is defined as
|
||||
* <a href="https://epsg.org/coord-operation-method_9604/index.html">
|
||||
* EPSG:9604</a>.
|
||||
*
|
||||
* @param properties See \ref general_properties of the Transformation.
|
||||
* At minimum the name should be defined.
|
||||
@@ -952,8 +955,9 @@ TransformationNNPtr Transformation::createMolodensky(
|
||||
*
|
||||
* @see createdMolodensky() for a related method.
|
||||
*
|
||||
* This method is defined as [EPSG:9605]
|
||||
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9605)
|
||||
* This method is defined as
|
||||
* <a href="https://epsg.org/coord-operation-method_9605/index.html">
|
||||
* EPSG:9605</a>.
|
||||
*
|
||||
* @param properties See \ref general_properties of the Transformation.
|
||||
* At minimum the name should be defined.
|
||||
@@ -1147,9 +1151,10 @@ buildAccuracyZero() {
|
||||
|
||||
/** \brief Instantiate a transformation with method Longitude rotation
|
||||
*
|
||||
* This method is defined as [EPSG:9601]
|
||||
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9601)
|
||||
* *
|
||||
* This method is defined as
|
||||
* <a href="https://epsg.org/coord-operation-method_9601/index.html">
|
||||
* EPSG:9601</a>.
|
||||
*
|
||||
* @param properties See \ref general_properties of the Transformation.
|
||||
* At minimum the name should be defined.
|
||||
* @param sourceCRSIn Source CRS.
|
||||
@@ -1173,9 +1178,10 @@ TransformationNNPtr Transformation::createLongitudeRotation(
|
||||
|
||||
/** \brief Instantiate a transformation with method Geographic 2D offsets
|
||||
*
|
||||
* This method is defined as [EPSG:9619]
|
||||
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9619)
|
||||
* *
|
||||
* This method is defined as
|
||||
* <a href="https://epsg.org/coord-operation-method_9619/index.html">
|
||||
* EPSG:9619</a>.
|
||||
*
|
||||
* @param properties See \ref general_properties of the Transformation.
|
||||
* At minimum the name should be defined.
|
||||
* @param sourceCRSIn Source CRS.
|
||||
@@ -1203,9 +1209,10 @@ TransformationNNPtr Transformation::createGeographic2DOffsets(
|
||||
|
||||
/** \brief Instantiate a transformation with method Geographic 3D offsets
|
||||
*
|
||||
* This method is defined as [EPSG:9660]
|
||||
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9660)
|
||||
* *
|
||||
* This method is defined as
|
||||
* <a href="https://epsg.org/coord-operation-method_9660/index.html">
|
||||
* EPSG:9660</a>.
|
||||
*
|
||||
* @param properties See \ref general_properties of the Transformation.
|
||||
* At minimum the name should be defined.
|
||||
* @param sourceCRSIn Source CRS.
|
||||
@@ -1237,9 +1244,10 @@ TransformationNNPtr Transformation::createGeographic3DOffsets(
|
||||
* height
|
||||
* offsets
|
||||
*
|
||||
* This method is defined as [EPSG:9618]
|
||||
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9618)
|
||||
* *
|
||||
* This method is defined as
|
||||
* <a href="https://epsg.org/coord-operation-method_9618/index.html">
|
||||
* EPSG:9618</a>.
|
||||
*
|
||||
* @param properties See \ref general_properties of the Transformation.
|
||||
* At minimum the name should be defined.
|
||||
* @param sourceCRSIn Source CRS.
|
||||
@@ -1270,9 +1278,10 @@ TransformationNNPtr Transformation::createGeographic2DWithHeightOffsets(
|
||||
|
||||
/** \brief Instantiate a transformation with method Vertical Offset.
|
||||
*
|
||||
* This method is defined as [EPSG:9616]
|
||||
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::9616)
|
||||
* *
|
||||
* This method is defined as
|
||||
* <a href="https://epsg.org/coord-operation-method_9616/index.html">
|
||||
* EPSG:9616</a>.
|
||||
*
|
||||
* @param properties See \ref general_properties of the Transformation.
|
||||
* At minimum the name should be defined.
|
||||
* @param sourceCRSIn Source CRS.
|
||||
@@ -1297,8 +1306,9 @@ TransformationNNPtr Transformation::createVerticalOffset(
|
||||
/** \brief Instantiate a transformation based on the Change of Vertical Unit
|
||||
* method.
|
||||
*
|
||||
* This method is defined as [EPSG:1069]
|
||||
* (https://www.epsg-registry.org/export.htm?gml=urn:ogc:def:method:EPSG::1069)
|
||||
* This method is defined as
|
||||
* <a href="https://epsg.org/coord-operation-method_1069/index.html">
|
||||
* EPSG:1069</a> [DEPRECATED].
|
||||
*
|
||||
* @param properties See \ref general_properties of the conversion. If the name
|
||||
* is not provided, it is automatically set.
|
||||
|
||||
+1
-1
@@ -174,7 +174,7 @@ extern "C" {
|
||||
/* The version numbers should be updated with every release! **/
|
||||
#define PROJ_VERSION_MAJOR 9
|
||||
#define PROJ_VERSION_MINOR 1
|
||||
#define PROJ_VERSION_PATCH 0
|
||||
#define PROJ_VERSION_PATCH 1
|
||||
|
||||
/* Note: the following 3 defines have been introduced in PROJ 8.0.1 */
|
||||
/* Macro to compute a PROJ version number from its components */
|
||||
|
||||
+1
-1
@@ -872,7 +872,7 @@ void pj_clear_vgridshift_knowngrids_cache();
|
||||
|
||||
void pj_clear_sqlite_cache();
|
||||
|
||||
PJ_LP pj_generic_inverse_2d(PJ_XY xy, PJ *P, PJ_LP lpInitial);
|
||||
PJ_LP pj_generic_inverse_2d(PJ_XY xy, PJ *P, PJ_LP lpInitial, double deltaXYTolerance);
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <cstdint>
|
||||
|
||||
#define CPL_DLL
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#define proj_area_create internal_proj_area_create
|
||||
#define proj_area_destroy internal_proj_area_destroy
|
||||
#define proj_area_set_bbox internal_proj_area_set_bbox
|
||||
#define proj_area_set_name internal_proj_area_set_name
|
||||
#define proj_as_projjson internal_proj_as_projjson
|
||||
#define proj_as_proj_string internal_proj_as_proj_string
|
||||
#define proj_assign_context internal_proj_assign_context
|
||||
@@ -268,6 +269,7 @@
|
||||
#define proj_operation_factory_context_set_allowed_intermediate_crs internal_proj_operation_factory_context_set_allowed_intermediate_crs
|
||||
#define proj_operation_factory_context_set_allow_use_intermediate_crs internal_proj_operation_factory_context_set_allow_use_intermediate_crs
|
||||
#define proj_operation_factory_context_set_area_of_interest internal_proj_operation_factory_context_set_area_of_interest
|
||||
#define proj_operation_factory_context_set_area_of_interest_name internal_proj_operation_factory_context_set_area_of_interest_name
|
||||
#define proj_operation_factory_context_set_crs_extent_use internal_proj_operation_factory_context_set_crs_extent_use
|
||||
#define proj_operation_factory_context_set_desired_accuracy internal_proj_operation_factory_context_set_desired_accuracy
|
||||
#define proj_operation_factory_context_set_discard_superseded internal_proj_operation_factory_context_set_discard_superseded
|
||||
@@ -286,7 +288,9 @@
|
||||
#define proj_torad internal_proj_torad
|
||||
#define proj_trans internal_proj_trans
|
||||
#define proj_trans_array internal_proj_trans_array
|
||||
#define proj_trans_bounds internal_proj_trans_bounds
|
||||
#define proj_trans_generic internal_proj_trans_generic
|
||||
#define proj_trans_get_last_used_operation internal_proj_trans_get_last_used_operation
|
||||
#define proj_unit_list_destroy internal_proj_unit_list_destroy
|
||||
#define proj_uom_get_info_from_database internal_proj_uom_get_info_from_database
|
||||
#define proj_xy_dist internal_proj_xy_dist
|
||||
|
||||
@@ -296,7 +296,9 @@ static PJ_LP adams_inverse(PJ_XY xy, PJ *P)
|
||||
lp.lam = fabs(lp.phi) >= M_HALFPI ? 0 :
|
||||
std::max(std::min(xy.x / 2.62205760 / cos(lp.phi), 1.0), -1.0) * M_PI;
|
||||
|
||||
return pj_generic_inverse_2d(xy, P, lp);
|
||||
|
||||
constexpr double deltaXYTolerance = 1e-10;
|
||||
return pj_generic_inverse_2d(xy, P, lp, deltaXYTolerance);
|
||||
}
|
||||
|
||||
static PJ_LP peirce_q_square_inverse(PJ_XY xy, PJ *P)
|
||||
@@ -339,7 +341,9 @@ static PJ_LP peirce_q_square_inverse(PJ_XY xy, PJ *P)
|
||||
}
|
||||
else /* if( xy.x <= 0 && xy.y <= 0 ) */
|
||||
lp.lam = -M_PI / 2;
|
||||
return pj_generic_inverse_2d(xy, P, lp);
|
||||
|
||||
constexpr double deltaXYTolerance = 1e-10;
|
||||
return pj_generic_inverse_2d(xy, P, lp, deltaXYTolerance);
|
||||
}
|
||||
|
||||
static PJ_LP peirce_q_diamond_inverse(PJ_XY xy, PJ *P)
|
||||
@@ -382,7 +386,8 @@ static PJ_LP peirce_q_diamond_inverse(PJ_XY xy, PJ *P)
|
||||
lp.phi = -M_PI / 4;
|
||||
}
|
||||
|
||||
return pj_generic_inverse_2d(xy, P, lp);
|
||||
constexpr double deltaXYTolerance = 1e-10;
|
||||
return pj_generic_inverse_2d(xy, P, lp, deltaXYTolerance);
|
||||
}
|
||||
|
||||
static PJ *setup(PJ *P, projection_type mode) {
|
||||
|
||||
@@ -43,7 +43,7 @@ static PJ_XY cass_e_forward (PJ_LP lp, PJ *P) { /* Ellipsoidal, forward
|
||||
const double A2 = A * A;
|
||||
|
||||
xy.x = nu * A * (1. - A2 * T *
|
||||
(C1 - (8. - T + 8. * C) * A2 * C2));
|
||||
(C1 + (8. - T + 8. * C) * A2 * C2));
|
||||
xy.y = M - Q->m0 + nu * tanphi * A2 *
|
||||
(.5 + (5. - T + 6. * C) * A2 * C3);
|
||||
if( Q->hyperbolic )
|
||||
@@ -82,13 +82,13 @@ static PJ_LP cass_e_inverse (PJ_XY xy, PJ *P) { /* Ellipsoidal, inverse
|
||||
lp.lam = D * (1. + T1 * D2 *
|
||||
(-C4 + (1. + 3. * T1) * D2 * C5)) / cos (phi1);
|
||||
|
||||
if( Q->hyperbolic )
|
||||
{
|
||||
// EPSG guidance note 7-2 suggests a custom approximation for the
|
||||
// 'Vanua Levu 1915 / Vanua Levu Grid' case, but better use the
|
||||
// generic inversion method
|
||||
lp = pj_generic_inverse_2d(xy, P, lp);
|
||||
}
|
||||
// EPSG guidance note 7-2 suggests a custom approximation for the
|
||||
// 'Vanua Levu 1915 / Vanua Levu Grid' case, but better use the
|
||||
// generic inversion method
|
||||
// Actually use it in the non-hyperbolic case. It enables to make the
|
||||
// 5108.gie roundtripping tests to success, with at most 2 iterations.
|
||||
constexpr double deltaXYTolerance = 1e-12;
|
||||
lp = pj_generic_inverse_2d(xy, P, lp, deltaXYTolerance);
|
||||
|
||||
return lp;
|
||||
}
|
||||
|
||||
@@ -119,8 +119,12 @@ PJ *PROJECTION(eqdc) {
|
||||
if (secant) { /* secant cone */
|
||||
sinphi = sin(Q->phi2);
|
||||
cosphi = cos(Q->phi2);
|
||||
Q->n = (m1 - pj_msfn(sinphi, cosphi, P->es)) /
|
||||
(pj_mlfn(Q->phi2, sinphi, cosphi, Q->en) - ml1);
|
||||
const double ml2 = pj_mlfn(Q->phi2, sinphi, cosphi, Q->en);
|
||||
if (ml1 == ml2) {
|
||||
proj_log_error(P, _("Eccentricity too close to 1"));
|
||||
return destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
|
||||
}
|
||||
Q->n = (m1 - pj_msfn(sinphi, cosphi, P->es)) / (ml2 - ml1);
|
||||
if (Q->n == 0) {
|
||||
// Not quite, but es is very close to 1...
|
||||
proj_log_error(P, _("Invalid value for eccentricity"));
|
||||
|
||||
@@ -185,6 +185,12 @@ PJ *PROJECTION(omerc) {
|
||||
return pj_default_destructor(P, PROJ_ERR_INVALID_OP_ILLEGAL_ARG_VALUE);
|
||||
}
|
||||
}
|
||||
|
||||
if( pj_param(P->ctx, P->params, "rlon_0").i )
|
||||
{
|
||||
proj_log_trace(P, _("lon_0 is ignored."));
|
||||
}
|
||||
|
||||
com = sqrt(P->one_es);
|
||||
if (fabs(P->phi0) > EPS) {
|
||||
sinph0 = sin(P->phi0);
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
|
||||
#include <errno.h>
|
||||
#include <cmath>
|
||||
#include <cstdint>
|
||||
|
||||
#include "proj.h"
|
||||
#include "proj_internal.h"
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// Changes to handle +over are: Copyright 2011-2014 Morelli Informatik
|
||||
|
||||
#define PJ_LIB__
|
||||
#include "proj.h"
|
||||
#include "proj_internal.h"
|
||||
@@ -22,6 +24,9 @@ static PJ_XY vandg_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar
|
||||
proj_errno_set(P, PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN);
|
||||
return xy;
|
||||
}
|
||||
int sign = 1;
|
||||
if( P->over && fabs(lp.lam) > M_PI )
|
||||
sign = -1;
|
||||
if (p2 > 1.)
|
||||
p2 = 1.;
|
||||
if (fabs(lp.phi) <= TOL) {
|
||||
@@ -32,7 +37,7 @@ static PJ_XY vandg_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar
|
||||
xy.y = M_PI * tan(.5 * asin(p2));
|
||||
if (lp.phi < 0.) xy.y = -xy.y;
|
||||
} else {
|
||||
al = .5 * fabs(M_PI / lp.lam - lp.lam / M_PI); // A from (29-3)
|
||||
al = .5 * sign * fabs(M_PI / lp.lam - lp.lam / M_PI); // A from (29-3)
|
||||
al2 = al * al; // A^2
|
||||
g = sqrt(1. - p2 * p2); // cos(theta)
|
||||
g = g / (p2 + g - 1.); // G from (29-4)
|
||||
@@ -50,7 +55,7 @@ static PJ_XY vandg_s_forward (PJ_LP lp, PJ *P) { /* Spheroidal, forwar
|
||||
xy.x = g - p2; // G - P^2
|
||||
g = p2 + al2; // P^2 + A^2
|
||||
// (29-1)
|
||||
xy.x = M_PI * (al * xy.x + sqrt(al2 * xy.x * xy.x - g * (g2 - p2))) / g;
|
||||
xy.x = M_PI * fabs(al * xy.x + sqrt(al2 * xy.x * xy.x - g * (g2 - p2))) / g;
|
||||
if (lp.lam < 0.) xy.x = -xy.x;
|
||||
xy.y = fabs(xy.x / M_PI);
|
||||
// y from (29-2) has been expressed in terms of x here
|
||||
@@ -102,6 +107,10 @@ static PJ_LP vandg_s_inverse (PJ_XY xy, PJ *P) { /* Spheroidal, invers
|
||||
t = fabs(d);
|
||||
if ((t - TOL) <= 1.) {
|
||||
d = t > 1. ? (d > 0. ? 0. : M_PI) : acos(d); // 3*theta1 (29-17)
|
||||
if( r > PISQ ) {
|
||||
// This code path is triggered for coordinates generated in the forward path when |lon|>180deg and +over
|
||||
d = M_TWOPI - d;
|
||||
}
|
||||
// (29-18) but change pi/3 to 4*pi/3 to flip sign of cos
|
||||
lp.phi = M_PI * (m * cos(d * THIRD + PI4_3) - THIRD * c2);
|
||||
if (xy.y < 0.) lp.phi = -lp.phi;
|
||||
|
||||
@@ -48,7 +48,8 @@ static PJ_LP wink2_s_inverse(PJ_XY xy, PJ *P)
|
||||
lpInit.phi = xy.y;
|
||||
lpInit.lam = xy.x;
|
||||
|
||||
return pj_generic_inverse_2d(xy, P, lpInit);
|
||||
constexpr double deltaXYTolerance = 1e-10;
|
||||
return pj_generic_inverse_2d(xy, P, lpInit, deltaXYTolerance);
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ char const pj_release[] =
|
||||
STR(PROJ_VERSION_MAJOR)"."
|
||||
STR(PROJ_VERSION_MINOR)"."
|
||||
STR(PROJ_VERSION_PATCH)", "
|
||||
"September 1st, 2022";
|
||||
"December 1st, 2022";
|
||||
|
||||
const char *pj_get_release() {
|
||||
return pj_release;
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@ proj_add_gie_test("GIGS-5104" "gigs/5104.gie")
|
||||
proj_add_gie_test("GIGS-5105.2" "gigs/5105.2.gie")
|
||||
proj_add_gie_test("GIGS-5106" "gigs/5106.gie")
|
||||
proj_add_gie_test("GIGS-5107" "gigs/5107.gie")
|
||||
#proj_add_gie_test("GIGS-5108" "gigs/5108.gie")
|
||||
proj_add_gie_test("GIGS-5108" "gigs/5108.gie")
|
||||
proj_add_gie_test("GIGS-5109" "gigs/5109.gie")
|
||||
#proj_add_gie_test("GIGS-5110" "gigs/5110.gie")
|
||||
proj_add_gie_test("GIGS-5111.1" "gigs/5111.1.gie")
|
||||
|
||||
@@ -1066,6 +1066,42 @@ echo "##############################################################" >> ${OUT}
|
||||
echo "Test input file with UTF-8 BOM marker" >> ${OUT}
|
||||
$EXE -d 3 -E EPSG:4326 EPSG:32631 ${TEST_CLI_DIR}/input_with_utf8_bom.txt >> ${OUT}
|
||||
|
||||
echo "##############################################################" >> ${OUT}
|
||||
echo "Test cs2cs -W0" >> ${OUT}
|
||||
#
|
||||
$EXE -W0 +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 -E >>${OUT} <<EOF
|
||||
0 0
|
||||
EOF
|
||||
|
||||
echo "##############################################################" >> ${OUT}
|
||||
echo "Test cs2cs -W8" >> ${OUT}
|
||||
#
|
||||
$EXE -W8 +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 -E >>${OUT} <<EOF
|
||||
0 0
|
||||
EOF
|
||||
|
||||
echo "##############################################################" >> ${OUT}
|
||||
echo "Test cs2cs -W" >> ${OUT}
|
||||
#
|
||||
PROJ_DISPLAY_PROGRAM_NAME=NO $EXE -W +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 -E >>${OUT} 2>&1 <<EOF
|
||||
0 0
|
||||
EOF
|
||||
|
||||
echo "##############################################################" >> ${OUT}
|
||||
echo "Test cs2cs -W9" >> ${OUT}
|
||||
#
|
||||
PROJ_DISPLAY_PROGRAM_NAME=NO $EXE -W9 +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 -E >>${OUT} 2>&1 <<EOF
|
||||
0 0
|
||||
EOF
|
||||
|
||||
echo "##############################################################" >> ${OUT}
|
||||
echo "Test cs2cs -W10" >> ${OUT}
|
||||
#
|
||||
PROJ_DISPLAY_PROGRAM_NAME=NO $EXE -W10 +proj=latlong +datum=WGS84 +to +proj=latlong +datum=WGS84 -E >>${OUT} 2>&1 <<EOF
|
||||
0 0
|
||||
EOF
|
||||
|
||||
|
||||
# Done!
|
||||
# do 'diff' with distribution results
|
||||
echo "diff ${OUT} with ${OUT}.dist"
|
||||
|
||||
@@ -513,3 +513,24 @@ Check that we promote CRS specified by name to 3D when the other one is 3D
|
||||
##############################################################
|
||||
Test input file with UTF-8 BOM marker
|
||||
0 3 0 500000.000 0.000 0.000
|
||||
##############################################################
|
||||
Test cs2cs -W0
|
||||
0 0 0d00'00"E 0d00'00"N 0.000
|
||||
##############################################################
|
||||
Test cs2cs -W8
|
||||
0 0 0d00'00.00000000"E 0d00'00.00000000"N 0.000
|
||||
##############################################################
|
||||
Test cs2cs -W
|
||||
|
||||
-W argument missing or not in range [0,8]
|
||||
program abnormally terminated
|
||||
##############################################################
|
||||
Test cs2cs -W9
|
||||
|
||||
-W argument missing or not in range [0,8]
|
||||
program abnormally terminated
|
||||
##############################################################
|
||||
Test cs2cs -W10
|
||||
|
||||
-W argument missing or not in range [0,8]
|
||||
program abnormally terminated
|
||||
|
||||
+51
-1
@@ -850,6 +850,18 @@ expect -0.001790493 0.000895247
|
||||
accept -200 -100
|
||||
expect -0.001790493 -0.000895247
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
# test point from EPSG Guidance Note 7.2
|
||||
operation +proj=cass +lat_0=10.4416666666667 +lon_0=-61.3333333333333 \
|
||||
+x_0=86501.46392052 +y_0=65379.0134283 \
|
||||
+a=6378293.64520876 +b=6356617.98767984 +to_meter=0.201166195164
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
tolerance 0.1 mm
|
||||
accept -62 10
|
||||
expect 66644.94040882 82536.21873655
|
||||
roundtrip 1
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
# Hyperbolic variant: test point from EPSG Guidance Note 7.2
|
||||
operation +proj=cass +hyperbolic +a=6378306.376305601 +rf=293.466307 \
|
||||
@@ -859,7 +871,7 @@ operation +proj=cass +hyperbolic +a=6378306.376305601 +rf=293.466307 \
|
||||
|
||||
tolerance 0.1 mm
|
||||
accept 179.99433652777776 -16.841456527777776
|
||||
expect 16015.289017555102 13369.660053668682
|
||||
expect 16015.28901692 13369.66005367
|
||||
roundtrip 1
|
||||
|
||||
===============================================================================
|
||||
@@ -1375,6 +1387,9 @@ expect failure errno invalid_op_illegal_arg_value
|
||||
operation +proj=eqdc +R=1 +lat_1=1e-9
|
||||
expect failure errno invalid_op_illegal_arg_value
|
||||
|
||||
operation +proj=eqdc +lat_1=1 +ellps=GRS80 +b=.1
|
||||
expect failure errno invalid_op_illegal_arg_value
|
||||
|
||||
===============================================================================
|
||||
# Euler
|
||||
# Conic, Sph
|
||||
@@ -6839,6 +6854,12 @@ expect -223395.249543407 111704.596633675
|
||||
accept -2 -1
|
||||
expect -223395.249543407 -111704.596633675
|
||||
|
||||
accept 179.9 50
|
||||
expect 18549161.7268 7731305.7162
|
||||
|
||||
accept 180.1 50
|
||||
expect -18549161.7268 7731305.7162
|
||||
|
||||
direction inverse
|
||||
accept 200 100
|
||||
expect 0.001790494 0.000895247
|
||||
@@ -6856,6 +6877,35 @@ direction inverse
|
||||
accept 0 -1e100
|
||||
expect failure errno coord_transfm_outside_projection_domain
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
operation +proj=vandg +a=6400000 +over
|
||||
-------------------------------------------------------------------------------
|
||||
tolerance 0.25 mm
|
||||
|
||||
accept 2 1
|
||||
expect 223395.249543407 111704.596633675
|
||||
roundtrip 1
|
||||
|
||||
accept 179.9 50
|
||||
expect 18549161.7268 7731305.7162
|
||||
roundtrip 10
|
||||
|
||||
accept 180.1 50
|
||||
expect 18569963.6471 7734997.6218
|
||||
roundtrip 10
|
||||
|
||||
accept 180.1 -50
|
||||
expect 18569963.6471 -7734997.6218
|
||||
roundtrip 10
|
||||
|
||||
accept -180.1 50
|
||||
expect -18569963.6471 7734997.6218
|
||||
roundtrip 10
|
||||
|
||||
accept -180.1 -50
|
||||
expect -18569963.6471 -7734997.6218
|
||||
roundtrip 10
|
||||
|
||||
|
||||
===============================================================================
|
||||
# van der Grinten II
|
||||
|
||||
@@ -4,18 +4,19 @@ Test 5108, Cassini-Soldner, v2-0_2011-06-28.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
<gie-strict>
|
||||
|
||||
use_proj4_init_rules true
|
||||
|
||||
# GDM2000
|
||||
<4742> +proj=longlat +ellps=GRS80 <>
|
||||
# <4742> +proj=longlat +ellps=GRS80 <>
|
||||
|
||||
# GDM2000 / Johor Grid
|
||||
<3377> +proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m <>
|
||||
|
||||
|
||||
<gie>
|
||||
# <3377> +proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m <>
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
operation +proj=pipeline
|
||||
+step +init=epsg:4742 +inv
|
||||
operation +proj=pipeline \
|
||||
+step +init=epsg:4742 +inv \
|
||||
+step +init=epsg:3377
|
||||
--------------------------------------------------------------------------------
|
||||
tolerance 0.05 m
|
||||
@@ -87,8 +88,8 @@ accept 104 5
|
||||
expect 48630.563 327067.097
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
operation +proj=pipeline
|
||||
+step +init=epsg:3377 +inv
|
||||
operation +proj=pipeline \
|
||||
+step +init=epsg:3377 +inv \
|
||||
+step +init=epsg:4742
|
||||
--------------------------------------------------------------------------------
|
||||
tolerance 0.05 m
|
||||
@@ -160,8 +161,8 @@ accept 48630.563 327067.097
|
||||
expect 104 5
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
operation +proj=pipeline
|
||||
+step +init=epsg:4742 +inv
|
||||
operation +proj=pipeline \
|
||||
+step +init=epsg:4742 +inv \
|
||||
+step +init=epsg:3377
|
||||
--------------------------------------------------------------------------------
|
||||
tolerance 0.006 m
|
||||
@@ -232,4 +233,4 @@ tolerance 0.006 m
|
||||
accept 104 5
|
||||
roundtrip 1000
|
||||
|
||||
</gie>
|
||||
</gie-strict>
|
||||
@@ -1631,6 +1631,36 @@ TEST_F(CApi, proj_coordoperation_get_grid_used) {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
TEST_F(CApi, proj_coordoperation_get_grid_used_fullname_caching) {
|
||||
// Test bugfix for
|
||||
// https://github.com/OSGeo/PROJ/issues/3444#issuecomment-1309499342
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
const char *proj_string =
|
||||
"proj=vgridshift grids=tests/test_vgrid_int16.tif";
|
||||
PJ *P = proj_create(m_ctxt, proj_string);
|
||||
ObjectKeeper keeper(P);
|
||||
|
||||
const char *shortName = nullptr;
|
||||
const char *fullName = nullptr;
|
||||
const char *packageName = nullptr;
|
||||
const char *url = nullptr;
|
||||
int directDownload = 0;
|
||||
int openLicense = 0;
|
||||
int available = 0;
|
||||
|
||||
proj_coordoperation_get_grid_used(m_ctxt, P, 0, &shortName, &fullName,
|
||||
&packageName, &url, &directDownload,
|
||||
&openLicense, &available);
|
||||
|
||||
EXPECT_EQ(std::string(shortName), "tests/test_vgrid_int16.tif");
|
||||
EXPECT_TRUE(std::string(fullName).find("tests/test_vgrid_int16.tif") !=
|
||||
std::string::npos)
|
||||
<< std::string(fullName);
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
TEST_F(CApi, proj_coordoperation_is_instantiable) {
|
||||
auto op = proj_create_from_database(m_ctxt, "EPSG", "1671",
|
||||
PJ_CATEGORY_COORDINATE_OPERATION, true,
|
||||
|
||||
@@ -4218,6 +4218,20 @@ static DerivedProjectedCRSNNPtr createDerivedProjectedCRS() {
|
||||
CartesianCS::createEastingNorthing(UnitOfMeasure::METRE));
|
||||
}
|
||||
|
||||
static DerivedProjectedCRSNNPtr createDerivedProjectedCRSNorthingEasting() {
|
||||
|
||||
auto derivingConversion = Conversion::create(
|
||||
PropertyMap().set(IdentifiedObject::NAME_KEY, "unnamed"),
|
||||
PropertyMap().set(IdentifiedObject::NAME_KEY, "PROJ unimplemented"),
|
||||
std::vector<OperationParameterNNPtr>{},
|
||||
std::vector<ParameterValueNNPtr>{});
|
||||
|
||||
return DerivedProjectedCRS::create(
|
||||
PropertyMap().set(IdentifiedObject::NAME_KEY, "derived projectedCRS"),
|
||||
createProjected(), derivingConversion,
|
||||
CartesianCS::createNorthingEasting(UnitOfMeasure::FOOT));
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
static DerivedVerticalCRSNNPtr createDerivedVerticalCRS() {
|
||||
@@ -6438,6 +6452,20 @@ TEST(crs, crs_stripVerticalComponent) {
|
||||
ASSERT_TRUE(projCRS != nullptr);
|
||||
EXPECT_EQ(projCRS->coordinateSystem()->axisList().size(), 2U);
|
||||
}
|
||||
|
||||
{
|
||||
auto crs3D =
|
||||
createDerivedProjectedCRS()->promoteTo3D(std::string(), nullptr);
|
||||
auto derivedProj3D =
|
||||
nn_dynamic_pointer_cast<DerivedProjectedCRS>(crs3D);
|
||||
ASSERT_TRUE(derivedProj3D != nullptr);
|
||||
EXPECT_EQ(derivedProj3D->coordinateSystem()->axisList().size(), 3U);
|
||||
|
||||
auto derivedProj2D = nn_dynamic_pointer_cast<DerivedProjectedCRS>(
|
||||
derivedProj3D->stripVerticalComponent());
|
||||
ASSERT_TRUE(derivedProj2D != nullptr);
|
||||
EXPECT_EQ(derivedProj2D->coordinateSystem()->axisList().size(), 2U);
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -6474,6 +6502,15 @@ TEST(crs, crs_alterGeodeticCRS) {
|
||||
createVerticalCRS()->alterGeodeticCRS(GeographicCRS::EPSG_4979);
|
||||
EXPECT_TRUE(crs->isEquivalentTo(createVerticalCRS().get()));
|
||||
}
|
||||
|
||||
{
|
||||
auto crs = createDerivedProjectedCRS()->alterGeodeticCRS(
|
||||
GeographicCRS::EPSG_4979);
|
||||
auto derivedProjCRS = dynamic_cast<DerivedProjectedCRS *>(crs.get());
|
||||
ASSERT_TRUE(derivedProjCRS != nullptr);
|
||||
EXPECT_TRUE(derivedProjCRS->baseCRS()->baseCRS()->isEquivalentTo(
|
||||
GeographicCRS::EPSG_4979.get()));
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -6858,6 +6895,77 @@ TEST(crs, promoteTo3D_and_demoteTo2D) {
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
TEST(crs, normalizeForVisualization_derivedprojected_operation) {
|
||||
auto crs = createDerivedProjectedCRSNorthingEasting();
|
||||
|
||||
auto op = CoordinateOperationFactory::create()->createOperation(
|
||||
GeographicCRS::EPSG_4326, crs);
|
||||
|
||||
auto proj_string =
|
||||
"+proj=pipeline +step +proj=axisswap +order=2,1 +step "
|
||||
"+proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=utm +zone=31 "
|
||||
"+ellps=WGS84 +step +proj=unimplemented +step +proj=unitconvert "
|
||||
"+xy_in=m +xy_out=ft +step +proj=axisswap +order=2,1";
|
||||
|
||||
ASSERT_TRUE(op != nullptr);
|
||||
EXPECT_EQ(op->exportToPROJString(PROJStringFormatter::create().get()),
|
||||
proj_string);
|
||||
|
||||
auto opNormalized = op->normalizeForVisualization();
|
||||
auto proj_string_normalized =
|
||||
"+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad +step "
|
||||
"+proj=utm +zone=31 +ellps=WGS84 +step +proj=unimplemented +step "
|
||||
"+proj=unitconvert +xy_in=m +xy_out=ft";
|
||||
EXPECT_EQ(
|
||||
opNormalized->exportToPROJString(PROJStringFormatter::create().get()),
|
||||
proj_string_normalized);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
TEST(crs, normalizeForVisualization_derivedprojected) {
|
||||
|
||||
auto crs = createDerivedProjectedCRSNorthingEasting();
|
||||
|
||||
{
|
||||
const auto &axisList = crs->coordinateSystem()->axisList();
|
||||
ASSERT_EQ(axisList.size(), 2U);
|
||||
EXPECT_EQ(axisList[0]->direction(),
|
||||
osgeo::proj::cs::AxisDirection::NORTH);
|
||||
EXPECT_EQ(axisList[1]->direction(),
|
||||
osgeo::proj::cs::AxisDirection::EAST);
|
||||
}
|
||||
|
||||
{
|
||||
auto normalized = nn_dynamic_pointer_cast<SingleCRS>(
|
||||
crs->normalizeForVisualization());
|
||||
const auto &normalizedAxisList =
|
||||
normalized->coordinateSystem()->axisList();
|
||||
ASSERT_EQ(normalizedAxisList.size(), 2U);
|
||||
EXPECT_EQ(normalizedAxisList[0]->direction(),
|
||||
osgeo::proj::cs::AxisDirection::EAST);
|
||||
EXPECT_EQ(normalizedAxisList[1]->direction(),
|
||||
osgeo::proj::cs::AxisDirection::NORTH);
|
||||
}
|
||||
|
||||
{
|
||||
auto normalized3D = nn_dynamic_pointer_cast<SingleCRS>(
|
||||
crs->promoteTo3D(std::string(), nullptr)
|
||||
->normalizeForVisualization());
|
||||
const auto &normalized3DAxisList =
|
||||
normalized3D->coordinateSystem()->axisList();
|
||||
ASSERT_EQ(normalized3DAxisList.size(), 3U);
|
||||
EXPECT_EQ(normalized3DAxisList[0]->direction(),
|
||||
osgeo::proj::cs::AxisDirection::EAST);
|
||||
EXPECT_EQ(normalized3DAxisList[1]->direction(),
|
||||
osgeo::proj::cs::AxisDirection::NORTH);
|
||||
EXPECT_EQ(normalized3DAxisList[2]->direction(),
|
||||
osgeo::proj::cs::AxisDirection::UP);
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
TEST(crs, projected_normalizeForVisualization_do_not_mess_deriving_conversion) {
|
||||
|
||||
auto authFactory =
|
||||
|
||||
@@ -1926,4 +1926,52 @@ TEST(networking, file_api) {
|
||||
|
||||
#endif
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
#ifdef CURL_ENABLED
|
||||
|
||||
TEST(networking, proj_coordoperation_get_grid_used) {
|
||||
if (!networkAccessOK) {
|
||||
return;
|
||||
}
|
||||
|
||||
auto ctx = proj_context_create();
|
||||
proj_grid_cache_set_enable(ctx, false);
|
||||
proj_context_set_enable_network(ctx, true);
|
||||
|
||||
// Test bugfix for
|
||||
// https://github.com/OSGeo/PROJ/issues/3444#issuecomment-1309499342
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
// This file is not in grid_alternatives, but in the CDN
|
||||
const char *proj_string =
|
||||
"proj=vgridshift grids=nz_linz_nzgd2000-c120100904-grid01.tif";
|
||||
PJ *P = proj_create(ctx, proj_string);
|
||||
|
||||
const char *shortName = nullptr;
|
||||
const char *fullName = nullptr;
|
||||
const char *packageName = nullptr;
|
||||
const char *url = nullptr;
|
||||
int directDownload = 0;
|
||||
int openLicense = 0;
|
||||
int available = 0;
|
||||
|
||||
proj_coordoperation_get_grid_used(ctx, P, 0, &shortName, &fullName,
|
||||
&packageName, &url, &directDownload,
|
||||
&openLicense, &available);
|
||||
|
||||
EXPECT_EQ(std::string(shortName),
|
||||
"nz_linz_nzgd2000-c120100904-grid01.tif");
|
||||
EXPECT_EQ(std::string(fullName), "");
|
||||
EXPECT_EQ(
|
||||
std::string(url),
|
||||
"https://cdn.proj.org/nz_linz_nzgd2000-c120100904-grid01.tif");
|
||||
|
||||
proj_destroy(P);
|
||||
}
|
||||
|
||||
proj_context_destroy(ctx);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -6,9 +6,9 @@ echo "$TRAVIS_SECURE_ENV_VARS"
|
||||
./travis/build_docs.sh
|
||||
# Only build and publish docs when changes are made on most recent maintenance branch
|
||||
if test "$TRAVIS_SECURE_ENV_VARS" = "true" -a "$TRAVIS_BRANCH" = "9.1"; then
|
||||
echo "publish website";
|
||||
./travis/add_deploy_key.sh;
|
||||
./travis/deploy_website.sh $TRAVIS_BUILD_DIR/docs/build /tmp;
|
||||
#echo "publish website";
|
||||
#./travis/add_deploy_key.sh;
|
||||
#./travis/deploy_website.sh $TRAVIS_BUILD_DIR/docs/build /tmp;
|
||||
|
||||
# Disabled: see discussion of https://github.com/OSGeo/proj.4/pull/1035
|
||||
# if test "$BUILD_NAME" = "linux_gcc"; then
|
||||
|
||||
Reference in New Issue
Block a user