Compare commits

...
81 Commits
Author SHA1 Message Date
Mike Taves 39514f8c83 Docs: Add sphinxcontrib.jquery extension to fix search function 2023-06-22 13:35:04 +12:00
Mike Taves a74c8abedc Disable AppVeyor and Travis CI 2023-06-22 11:31:31 +12:00
Mike Taves 3b51a53167 Docs: use conf_py_path for "Edit on GitHub" link 2023-06-22 10:52:18 +12:00
Mike Taves 127583f178 Doc/CI: Transition to ReadTheDocs, clean-up previous methods
- Remove HTML references to PDF documentation
- Disable GitHub doc workflow
2023-06-01 11:11:46 +12:00
Kristian Evers f3dc0b9d7b Merge pull request #3683 from tomkom/patch-1
Update helmert.rst
2023-03-28 07:39:17 +02:00
dinomirMT 40ad841fc0 Update helmert.rst
The section on 3D helmert had the specification 2x for R_Y, instead of R_Y and R_Z, Fixing as:


    \begin{align}
        \mathbf{R} = \mathbf{R_X} \mathbf{R_Y} \mathbf{R_Z}
    \end{align}
2023-03-28 14:02:54 +11:00
Kristian Evers edcf4b9cf1 Disable website deployment on 9.1 branch 2023-03-01 10:59:50 +01:00
Kristian Evers d14152776f Merge pull request #3628 from OSGeo/backport-3627-to-9.1
[Backport 9.1] bindings: Use github.com/twpayne/go-proj for Go bindings
2023-02-22 13:50:25 +01:00
Kristian Evers 37ba5c740c Merge pull request #3627 from twpayne/go-bindings
bindings: Use github.com/twpayne/go-proj for Go bindings
2023-02-22 09:41:34 +00:00
Kristian Evers f6ce1c4da3 Merge pull request #3612 from OSGeo/backport-3611-to-9.1
[Backport 9.1] Update link to OSGeo4W Installer
2023-02-06 18:15:27 +01:00
Kristian Evers 9c3a7189b5 Merge pull request #3611 from heidivanparys/osgeo4w_installation
Update link to OSGeo4W Installer
2023-02-06 16:46:42 +00:00
Even Rouault 122c02017f Merge pull request #3605 from OSGeo/backport-3604-to-9.1
[Backport 9.1] Doc: Prevent double hypen (--) to be replaced by Unicode long dash character
2023-02-04 17:00:44 +01:00
Even Rouault 1ce3616a78 Merge pull request #3604 from rouault/double_hyphen_merge
Doc: Prevent double hypen (--) to be replaced by Unicode long dash character
2023-02-04 14:26:03 +00:00
Mike Taves b76d31141e ReadTheDocs: fix branch ref [ci skip] 2023-01-25 23:02:35 +13:00
Mike Taves 91af7479ac ReadTheDocs: update output directory for artefacts
* use more apt, less conda
* show doxygen version
* improve skipping pattern
2023-01-25 13:56:47 +13:00
github-actions[bot]andEven Rouault 9515621638 Merge pull request #3515 from oleg-alexandrov/patch-7 (#3589)
Add example for how to use proj_create().

Co-authored-by: Even Rouault <even.rouault@spatialys.com>
2023-01-24 09:46:15 +13:00
Mike Taves be739414a0 Implement ReadTheDocs for 9.1 (#3553) 2023-01-13 11:34:15 +13:00
Kristian Evers 132fad89c8 Merge pull request #3548 from OSGeo/backport-3544-to-9.1
[Backport 9.1] add Alan to PSC roster
2023-01-11 10:46:38 +01:00
Even Rouault 835814e766 Merge pull request #3544 from hobu/alan-psc-addition
add Alan to PSC roster
2023-01-10 22:26:22 +00:00
Even Rouault 7419b665fe Merge pull request #3540 from OSGeo/rouault-patch-3
install.rst: improve instructions regarding proj-data (fixes #3539)
2023-01-05 02:58:23 +01:00
Even Rouault 289e884e6d install.rst: improve instructions regarding proj-data (fixes #3539) 2023-01-04 17:09:26 +01:00
Even Rouault ede4ca0b3b Merge pull request #3536 from OSGeo/backport-3534-to-9.1
[Backport 9.1] Doc: make 'program' an alias of 'ref'
2023-01-03 00:24:58 +01:00
Even Rouault bc055e4ce5 Merge pull request #3534 from rouault/doc_clickable_program
Doc: make 'program' an alias of 'ref'
2023-01-02 22:57:25 +00:00
Even Rouault e18edc17c9 Merge pull request #3521 from OSGeo/backport-3520-to-9.1
[Backport 9.1] Fix silly documentation issue (quoted value of pi/2 triggers error)
2022-12-20 16:01:28 +01:00
Even Rouault 103ff97eac Merge pull request #3520 from cffk/fix-radian-doc
Fix silly documentation issue (quoted value of pi/2 triggers error)
2022-12-20 14:58:52 +00:00
Oleg Alexandrov e8e4002d71 Mention the proj_create function
Following the PROJ doc is like jumping through many hoops, or if you wish, many reprojections across documents are needed for something coherent to emerge. This addition adds a blurb mentioning the proj_create() function, which is really one of the two workhorses of this library, together with proj_create_crs_to_crs.
2022-12-16 23:05:19 +01:00
Oleg Alexandrov 0546bfd4d2 Add link to "quick start" (#3511) 2022-12-16 23:05:08 +01:00
Even Rouault d61c19b689 schemas/v0.5/projjson.schema.json: fix wrong inheritance that cause validation issues when using a DynamicGeodeticReferenceFrame or DynamicVerticalReferenceFrame 2022-12-16 20:16:29 +01:00
Even Rouault 19e81b82d4 Merge pull request #3504 from OSGeo/backport-3458-to-9.1
[Backport 9.1] Add links to crs-explorer in documentation
2022-12-12 14:25:34 +01:00
Kristian Evers 6d1ef3b8f5 Merge pull request #3458 from jjimenezshaw/links-crs-explorer
Add links to crs-explorer in documentation
2022-12-12 10:33:28 +00:00
Even Rouault d6e7540556 Merge pull request #3492 from OSGeo/rouault-patch-2
datatypes.rst: replace references to PROJ.4 by PROJ
2022-12-03 00:08:41 +01:00
Even Rouault 1603818386 datatypes.rst: replace references to PROJ.4 by PROJ 2022-12-02 16:41:41 +01:00
Kristian Evers f314e720a9 Update version numbers to 9.1.1 and 1.12 in the docs 2022-12-01 10:51:00 +01:00
Kristian Evers a758633653 docs: update news and download links 2022-12-01 10:51:00 +01:00
Kristian Evers b0e32f1f6c Use correct release version (9.1.1) in NEWS 2022-11-25 20:00:38 +01:00
Kristian Evers 356a6c8339 Update NEWS for 9.1.1 release 2022-11-25 18:41:46 +01:00
Kristian Evers 9c5d055d97 Update man-pages from Sphinx-docs 2022-11-25 18:06:17 +01:00
Kristian Evers 77ea2c0daa Update man-pages from Sphinx-docs 2022-11-25 17:57:15 +01:00
Kristian Evers c3f0f8a375 Bump version numbers for 9.1.1 release 2022-11-25 17:55:08 +01:00
Even Rouault bc043ba7c4 Merge pull request #3483 from OSGeo/backport-3482-to-9.1
[Backport 9.1] Implement  alterGeodeticCRS and stripVerticalComponent for DerivedProjected
2022-11-20 12:54:13 +01:00
Even Rouault 8fe3fce568 Merge pull request #3481 from OSGeo/backport-3474-to-9.1
[Backport 9.1] Doc: update references to OGC Topic 2 spec to its r5 revision
2022-11-19 20:34:27 +01:00
Even Rouault 9846c4342e Merge pull request #3480 from OSGeo/backport-3473-to-9.1
[Backport 9.1] omerc: mention in doc that +lon_0 is ignored, align name of +lat_0 and…
2022-11-19 20:34:19 +01:00
Even Rouault 792e9fca4f Merge pull request #3479 from OSGeo/backport-3472-to-9.1
[Backport 9.1] cs2cs.rst: add note regarding grids beeing needed (fixes #3470, #3471)
2022-11-19 20:34:11 +01:00
Even Rouault be6753e57a Merge pull request #3482 from jjimenezshaw/complete-derivedprojected-methods
Implement  alterGeodeticCRS and stripVerticalComponent for DerivedProjected
2022-11-19 19:33:39 +00:00
Even Rouault a029bc9390 Update proj_symbol_rename.h 2022-11-19 12:47:04 +01:00
Even Rouault 2ca47878cb Merge pull request #3474 from rouault/doc_topic2_r5
Doc: update references to OGC Topic 2 spec to its r5 revision
2022-11-19 11:12:58 +00:00
Even Rouault 8de6f36faf Merge pull request #3473 from rouault/fix_3464
omerc: mention in doc that +lon_0 is ignored, align name of +lat_0 and…
2022-11-19 11:12:35 +00:00
Even Rouault cd1a949a82 Merge pull request #3472 from rouault/doc_cs2cs_fix_3470_3471
cs2cs.rst: add note regarding grids beeing needed (fixes #3470, #3471)
2022-11-19 11:12:11 +00:00
Even Rouault a89a36adf6 Merge pull request #3478 from OSGeo/backport-3477-to-9.1
[Backport 9.1] Implement normalizeForVisualization for DerivedProjected
2022-11-19 12:11:18 +01:00
Javier Jimenez Shaw 8c0c12de06 Implement normalizeForVisualization for DerivedProjected (#3477) 2022-11-19 01:31:48 +00:00
github-actions[bot]andMike Taves 490879231a DOC: add TOC to PDF contents, use 1-column index to prevent overprinting (#3475) (#3476)
Co-authored-by: Mike Taves <mwtoews@gmail.com>
2022-11-18 22:44:39 +13:00
Even Rouault 968554557b Merge pull request #3468 from OSGeo/backport-3459-to-9.1
[Backport 9.1] PROJ: add missing <cstdint> includes
2022-11-17 14:23:46 +01:00
Even Rouault da5552145c Merge pull request #3459 from trofi/gcc-13-fix
PROJ: add missing <cstdint> includes
2022-11-15 17:38:28 +00:00
Kristian Evers d42eb3fe7c Merge pull request #3467 from OSGeo/backport-3466-to-9.1
[Backport 9.1] Doc: Clarify meaning of -d flag in CLI apps
2022-11-15 15:28:32 +01:00
Kristian Evers 85d0fb5c50 Merge pull request #3466 from kbevers/doc-rounding
Doc: Clarify meaning of -d flag in CLI apps
2022-11-15 14:09:48 +00:00
Even Rouault 6b3b5af117 Merge pull request #3455 from OSGeo/backport-3453-to-9.1
[Backport 9.1] cs2cs: better validate value of -W option (fixes #3451)
2022-11-12 00:39:34 +01:00
Even Rouault 83ac360900 Merge pull request #3453 from rouault/fix_3451
cs2cs: better validate value of -W option (fixes #3451)
2022-11-11 18:28:44 +00:00
Even Rouault cc10acf1ed Merge pull request #3452 from OSGeo/backport-3450-to-9.1
[Backport 9.1] Update cs2cs.rst
2022-11-11 14:43:44 +01:00
Even Rouault 2c40daeb97 Merge pull request #3450 from jidanni/patch-1
Update cs2cs.rst
2022-11-11 13:35:00 +00:00
Even Rouault 96e454af3f Merge pull request #3449 from OSGeo/backport-3448-to-9.1
[Backport 9.1] Fix 2 issues with DatabaseContext::lookForGridInfo()
2022-11-10 20:23:04 +01:00
Even Rouault 43b67a9780 Merge pull request #3448 from rouault/fix_3444_followup
Fix 2 issues with DatabaseContext::lookForGridInfo()
2022-11-10 12:14:01 +00:00
Even Rouault 7e3c04bc3f Merge pull request #3447 from OSGeo/backport-3446-to-9.1
[Backport 9.1] Database: register in grid_alternatives grids from PROJ-data that have no corresponding transformation record (fixes #3444)
2022-11-09 23:28:30 +01:00
Even Rouault b788b49a7d Merge pull request #3446 from rouault/fix_3444
Database: register in grid_alternatives grids from PROJ-data that have no corresponding transformation record (fixes #3444)
2022-11-09 21:44:28 +00:00
Even Rouault ff7813fef5 Merge pull request #3445 from OSGeo/backport-3442-to-9.1
[Backport 9.1] Database: register at_bev_AT_GIS_GRID_2021_09_28 grid
2022-11-09 13:43:30 +01:00
Even Rouault 70c7f57ae8 Merge pull request #3442 from rouault/at_bev_AT_GIS_GRID_2021_09_28
Database: register at_bev_AT_GIS_GRID_2021_09_28 grid
2022-11-09 09:31:59 +00:00
Even Rouault 7465986ad0 Merge pull request #3440 from OSGeo/backport-3433-to-9.1
[Backport 9.1] cass: fix forward computation of easting (fixes #3432), …
2022-11-08 10:50:50 +01:00
Even Rouault 8050dee985 Merge pull request #3433 from rouault/fix_3432
cass: fix forward computation of easting (fixes #3432), …
2022-11-07 21:11:42 +00:00
Even Rouault bf31da45c9 Merge pull request #3438 from OSGeo/backport-3435-to-9.1
[Backport 9.1] Update ocea.rst
2022-11-06 15:58:12 +01:00
Even Rouault 3acb96c581 Merge pull request #3435 from jidanni/patch-2
Update ocea.rst
2022-11-06 14:37:00 +00:00
Even Rouault c8a2f60ffa Merge pull request #3437 from OSGeo/backport-3434-to-9.1
[Backport 9.1] Update helmert.rst
2022-11-06 15:36:44 +01:00
Even Rouault c0e281e801 Merge pull request #3434 from jidanni/patch-1
Update helmert.rst
2022-11-06 14:36:34 +00:00
Even Rouault 26b1fc1e98 Merge pull request #3429 from OSGeo/backport-3427-to-9.1
[Backport 9.1] vandg projection: handle +over to extend the validity domain outside of |lon|>180deg
2022-11-03 11:32:30 +01:00
Even Rouault 0be1f575f1 Merge pull request #3427 from rouault/vandg_over
vandg projection: handle +over to extend the validity domain outside of |lon|>180deg
2022-11-02 19:21:03 +00:00
Even Rouault 122b9de144 Merge pull request #3426 from OSGeo/backport-3422-to-9.1
[Backport 9.1] Doxyfile: remove warnings with Doxygen 1.9.5
2022-11-02 11:45:54 +01:00
Even Rouault 1d842f678b Merge pull request #3422 from rouault/doxy195_warnings
Doxyfile: remove warnings with Doxygen 1.9.5
2022-11-02 10:31:35 +00:00
Even Rouault b4b7a34a85 Merge pull request #3420 from OSGeo/backport-3419-to-9.1
[Backport 9.1] docs/docbuild/Dockerfile: update to Doxygen 1.9.5
2022-10-30 18:59:33 +01:00
Even Rouault a196c415e0 Merge pull request #3419 from rouault/doxy195
docs/docbuild/Dockerfile: update to Doxygen 1.9.5
2022-10-30 16:26:36 +00:00
Even Rouault 334507f214 Merge pull request #3418 from OSGeo/backport-3415-to-9.1
[Backport 9.1] eqdc: avoid floating point division by zero in non-nominal case. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=52879
2022-10-30 17:26:19 +01:00
Even Rouault f39c6a7e09 Merge pull request #3415 from rouault/fix_ossfuzz_52879
eqdc: avoid floating point division by zero in non-nominal case. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=52879
2022-10-30 14:12:52 +00:00
Even Rouault 6d58ee54f9 Merge pull request #3416 from OSGeo/rouault-patch-2
projsync.rst: fix grammar error
2022-10-30 15:11:54 +01:00
Even Rouault 0878f00f19 projsync.rst: fix grammar error 2022-10-30 10:06:55 +01:00
98 changed files with 1493 additions and 537 deletions
+8 -1
View File
@@ -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 }}
+7 -1
View File
@@ -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 }}
+7 -1
View File
@@ -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 }}
+6 -1
View File
@@ -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 }}
+9 -1
View File
@@ -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 }}
+7 -1
View File
@@ -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 }}
+7 -1
View File
@@ -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 }}
+7 -1
View File
@@ -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 }}
+7 -1
View File
@@ -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 }}
+7 -1
View File
@@ -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 }}
+52
View File
@@ -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
View File
@@ -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}")
-40
View File
@@ -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
+77 -14
View File
@@ -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
-------------------
+39 -1
View File
@@ -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)
;
+1 -1
View File
@@ -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
+5 -5
View File
@@ -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
+15
View File
@@ -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
-8
View File
@@ -1,8 +0,0 @@
name: proj
channels:
- conda-forge
dependencies:
- descartes
- geojson
- matplotlib
- shapely < 1.8
+12
View File
@@ -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/
+16
View File
@@ -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}
+9
View File
@@ -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 }
+1 -1
View File
@@ -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
+14 -4
View File
@@ -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
+6
View File
@@ -4,6 +4,12 @@
geod
================================================================================
.. _invgeod:
================================================================================
invgeod
================================================================================
Synopsis
********
+7 -1
View File
@@ -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
+4 -1
View File
@@ -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
+1 -1
View File
@@ -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
+3 -3
View File
@@ -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
+2 -1
View File
@@ -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
View File
@@ -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',
+2 -2
View File
@@ -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
=====
+1
View File
@@ -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
###############################################################################
+19 -5
View File
@@ -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
+8 -6
View File
@@ -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
View File
@@ -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?
--------------------------------------------------------------------------------
-5
View File
@@ -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
+5 -6
View File
@@ -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>`
+65
View File
@@ -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*
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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
+4 -4
View File
@@ -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}
+1 -1
View File
@@ -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,
+4 -4
View File
@@ -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
+1 -2
View File
@@ -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.
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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:
::
+61
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
+35 -25
View File
@@ -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
View File
@@ -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
View File
@@ -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);
+1
View File
@@ -33,6 +33,7 @@
#include <vector>
#include <string>
#include <cstdint>
#define CPL_DLL
+4
View File
@@ -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
+8 -3
View File
@@ -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) {
+8 -8
View File
@@ -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;
}
+6 -2
View File
@@ -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"));
+6
View File
@@ -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);
+1
View File
@@ -52,6 +52,7 @@
#include <errno.h>
#include <cmath>
#include <cstdint>
#include "proj.h"
#include "proj_internal.h"
+11 -2
View File
@@ -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;
+2 -1
View File
@@ -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
View File
@@ -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
View File
@@ -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")
+36
View File
@@ -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"
+21
View File
@@ -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
View File
@@ -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>
+30
View File
@@ -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,
+108
View File
@@ -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 =
+48
View File
@@ -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
+3 -3
View File
@@ -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