Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

rectObj wrong projection with PROJ > 6 #6478

Closed
WouterVisscher opened this issue Feb 14, 2022 · 15 comments
Closed

rectObj wrong projection with PROJ > 6 #6478

WouterVisscher opened this issue Feb 14, 2022 · 15 comments
Milestone

Comments

@WouterVisscher
Copy link
Contributor

WouterVisscher commented Feb 14, 2022

in short

When executing a WMS/WFS request in a different projection as the source a inaccured rectObj is generated from the &BBOX param and used in the backend query. Resulting in 'missing' objects in a image or features in a FeatureCollection.

some background

We are preparing our stacks for a GDAL/PROJ upgrade when we noticed this behaviour.

the issue

So it seems that with our Mapserver stack + PROJ > 6 (and recent GDAL version) this behaviour manifests.
This doesn't seem to be the case when using PROJ < 6 (like PROJ 5.2.0). The type of backend also doesn't really seem to matter, OGR(GPKG/GeoJSON), PostGIS.

Interesting enough the results, image (for WMS) and features (for WFS), don't seem to be affected. In the sense that the objects in the PNG are in the right place and the features return by the WFS are also projected correctly. They are 'only' missing objects that should have been there.

So the green bbox is the BBOX in EPSG:3857 from the request (WMS or WFS)
And the grey bbox is the one generated by Mapserver and used in the backend for requesting the features.

bbox-shift-org

bbox-shift-zoomedout

Logging of the WMS/WFS request and generated rectObj

wfs-rd-bbox-for-query
wms-rd-bbox-for-query

This effect creates this kind of object popping in a WMS. Because the deviation is always the same it's 'only' really noticeable in the lower zoomlevels. The effects of this miscasting of the BBOX also has a effect on WMS GetFeatureInfo requests.

To be honest this could stil maybe be a config/setting issue in our setup, but because the results that are given back are projected (EPSG:28992 > EPSG:3857) correctly we have a feeling something might be of with the creation of the rectObj.

object_popping

Tech used

Mapserver main, commit 68de818
PROJ Rel. 8.2.1, January 1st, 2022
GDAL GDAL 3.4.1, released 2021/12/27
Debian bullseye

Also with older versions of proj (like 7.1.1) it seems to happen.
And with the latest Mapserver release https://github.com/MapServer/MapServer/tree/rel-7-6-4
Mapfile and data used in example ams.updated.zip

@geographika
Copy link
Member

Possibly related - the pull request #6472 wouldn't apply to this issue, but it may be very similar and missing a reprojection call.

@jmckenna
Copy link
Member

@WouterVisscher can you attach a small test case as a zip archive here? (mapfile snippet, data sample, commands.txt containing the commands to reproduce - you can use mapserv -nh QUERY_STRING="" for your problematic GetMap request and include it in commands.txt

I'm also about to report a PROJ >=6 issue, maybe all 3 reports/findings are the same.

@jmckenna
Copy link
Member

Opps I see your zip above, thanks! Sorry I missed it.

@jmckenna jmckenna added this to the 8.0 Release milestone Feb 14, 2022
@WouterVisscher
Copy link
Contributor Author

For completion, the mapserver config file

CONFIG
  ENV
    MS_MAP_NO_PATH "true"
  END
  MAPS
    MAP1 "/srv/data/ams.map"
  END
END

query strings use for testing:
WFS:
QUERY_STRING="SERVICE=WFS&REQUEST=GetFeature&VERSION=2.0.0&TYPENAMES=bag:pand&STARTINDEX=0&COUNT=1000&SRSNAME=urn:ogc:def:crs:EPSG::3857&BBOX=545287.2873572960962,6867556.049125162885,545689.3385149866808,6868025.580225903541,urn:ogc:def:crs:EPSG::3857"

WMS: QUERY_STRING="SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&BBOX=545287.2873572960962,6867556.049125162885,545689.3385149866808,6868025.580225903541&CRS=EPSG:3857&WIDTH=995&HEIGHT=1162&LAYERS=pand&STYLES=&FORMAT=image/png&TRANSPARENT=TRUE"

@jmckenna
Copy link
Member

Thanks @WouterVisscher, appreciated.
(for your next ticket please include the commands.txt in the zip)

@WouterVisscher
Copy link
Contributor Author

WouterVisscher commented Feb 14, 2022

@jmckenna I can make a new zip with config + commands.txt if you want (and data + mapfile of course)

@jmckenna
Copy link
Member

@WouterVisscher might be good just to make it easier if someone else wants to test. Thanks.

@WouterVisscher
Copy link
Contributor Author

@jmckenna updated the main post with a new zip

@jmckenna
Copy link
Member

@WouterVisscher thanks, sorry to be a pain, ha. Thanks for this.

rouault added a commit to OSGeo/PROJ that referenced this issue Feb 14, 2022
Better deal with importing strings like '+init=epsg:XXXX +over' (refs MapServer/MapServer#6478)
rouault added a commit to rouault/mapserver that referenced this issue Feb 14, 2022
rouault added a commit to rouault/mapserver that referenced this issue Feb 14, 2022
rouault added a commit to rouault/mapserver that referenced this issue Feb 14, 2022
rouault added a commit to rouault/mapserver that referenced this issue Feb 14, 2022
rouault added a commit to rouault/mapserver that referenced this issue Feb 14, 2022
rouault added a commit to rouault/mapserver that referenced this issue Feb 14, 2022
rouault added a commit to rouault/mapserver that referenced this issue Feb 14, 2022
@rouault
Copy link
Contributor

rouault commented Feb 14, 2022

Fix in #6479 + OSGeo/PROJ#3055
A workaround without them might be to expand "+init=epsg:28992" to " +proj=sterea +lat_0=52.1561605555556 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.4171,50.3319,465.5524,-0.398957388243134,0.343987817378283,-1.87740163998045,4.0725 +units=m +no_defs"

@WouterVisscher
Copy link
Contributor Author

WouterVisscher commented Feb 14, 2022

That's fast! 👍🏻
Yup, using "+proj=sterea +lat_0=...." seems to mitigate the behaviour.

rouault added a commit that referenced this issue Feb 16, 2022
msProjectRect(): fix PROJ >= 6 when datum shift is involved (fixes #6478)
rouault added a commit to rouault/mapserver that referenced this issue Feb 16, 2022
rouault added a commit to rouault/mapserver that referenced this issue Feb 16, 2022
rouault added a commit to rouault/mapserver that referenced this issue Feb 16, 2022
jmckenna added a commit that referenced this issue Feb 18, 2022
[Backport 7.6] msProjectRect(): fix PROJ >= 6 when datum shift is involved (fixes #6478)
@geographika
Copy link
Member

@rouault - I'm currently fixing the MapServer Appveyor builds, which rely on Proj 9.1 in the GISInternals SDK. The test added to check this issue is failing. See https://ci.appveyor.com/project/SethG/mapserver/build/job/wm0wngk7mg169uoh#L610

The point seems to be reprojected to different coordinates than the lower-left point of the rectangle. The assertion is false so the test isn't skipped, but fails on assert rect.minx == pytest.approx(121711, abs=2)

def test_reprojection_rect_and_datum_shift():
    
        webmercator = mapscript.projectionObj("init=epsg:3857")
        epsg_28992 = mapscript.projectionObj("init=epsg:28992") # "Amersfoort / RD New"
    
        point = mapscript.pointObj(545287, 6867556)
        point.project(webmercator, epsg_28992)
        if point.x == pytest.approx(121685, abs=2):
            # Builds of PROJ >= 6 and < 8 with -DACCEPT_USE_OF_DEPRECATED_PROJ_API_H
            # use pj_transform() but it doesn't work well with datum shift
            # This is a non-nominal configuration used in some CI confs when use a
            # PROJ 7 build to test PROJ.4 API and PROJ 6 API.
            pytest.skip('This test cannot run with PROJ [6,8[ in builds with ACCEPT_USE_OF_DEPRECATED_PROJ_API_H')
    
        rect = mapscript.rectObj(545287, 6867556, 545689, 6868025)
        assert rect.project(webmercator, epsg_28992) == 0
>       assert rect.minx == pytest.approx(121711, abs=2)
E       AssertionError: assert 121685.76222976402 == 121711 +- 2.0e+00
E        +  where 121685.76222976402 = <mapscript.rectObj; proxy of <Swig Object of type 'rectObj *' at 0x03B3A920> >.minx
E        +  and   121711 +- 2.0e+00 = <function approx at 0x0370F8F0>(121711, abs=2)
E        +    where <function approx at 0x0370F8F0> = pytest.approx

@rouault
Copy link
Contributor

rouault commented Feb 4, 2023

@geographika No idea comes to mind

@jmckenna
Copy link
Member

jmckenna commented Feb 5, 2023

linked to OSGeo/gdal#7179

@rouault
Copy link
Contributor

rouault commented Feb 5, 2023

linked to OSGeo/gdal#7179

I absoluetely see no connection between a PROJ releated issue and a MSSQL authentication one

clrpackages pushed a commit to clearlinux-pkgs/proj that referenced this issue Jun 20, 2023
Alan D. Snow (8):
      BUG: Close database connection if autoclose set to True
      LOG: Default log level PJ_LOG_ERROR
      Added proj_get_celestial_body_list_from_database (#2674)
      DOC: Add instructions for building docs with docker image
      Add proj_trans_bounds to compute the image of a input bounding box through a transformation (#2882)
      TYPE: Update const declarations in proj_trans_bounds
      DOC: add available keys to proj_context_get_database_metadata
      DOC: Add warning in proj_as_proj_string about potential information loss with CRS

Alexander Nehrbass (5):
      Add vertical gird files for PL-geoid-2011, Polish geoid model
      Update metadata.sql to PROJ-data version 1.9
      Add Belgian geoid model hBG18 to grid alternatives
      Fix typos/formatting in tutorials
      Add Slovenian geoid model SLO-VRP2016/Koper

Andrew Annex (1):
      Adds Pseudo Mercator to build_db_from_iau.py

Anthony Roberts (1):
      Fix build issue for ARM64 when using MSVC

Bas Couwenberg (1):
      Fix spelling errors.

Ben Boeckel (2):
      cmake: remove unused configure checks (#2789)
      cmake: check the right variable for `libdl`

Bert Huijben (1):
      labrd: document in the tagline and documentation that lat_0 is required (#2997)

Biswapriyo Nath (1):
      cmake: Follow unix-like install directories in mingw

Brendan Ashworth (1):
      add startup + OSS to users docs

Brendan Jurd (14):
      Update "PROJ.4" to "PROJ" in the Contributing document.
      Fix order of instructions for installing from source. (#2797)
      Add support for Degree Sign on input (#2791)
      Update docs About page to pull in license text from COPYING.
      Use `literalinclude` for COPYING in About page.
      DOC: Add content for Development/Error handling page.
      DOC: Refresh Development/Quickstart and remove Development/Threads (#2863)
      DOCS: Add doxygen entry for proj_context_set_search_paths.
      DOCS: Remove LATEX_SOURCE_CODE setting from Doxyfile.
      Docs: Add new Ellipsoids page to explain ellipsoidal parameters (#2922)
      Set more precise error code for parsing errors in proj_create().
      unitconvert: round to nearest date when converting to yyyymmdd.
      DOCS: add missing functions from filemanager.cpp
      Rename variable per PR feedback on #3111.

Charles Karney (28):
      Update Mercator projection
      Try to fix compiler complaints for max and constexpr sqrt
      Address comments by @schwehr
      phi2.cpp: remove unused static consts + minor code tweak
      lcc.cpp: fix abs -> fabs
      phi2.cpp: Slight cosmetic changes to sinpsi2tanphi.
      Use sincos optimization in merc_e_forward.  Revised timing data...
      Fix/add some comments.
      Use nm units in builtins.gie.  Remove backward looking comments in code.
      merc.cpp + phi2.cpp: Avoid declaring multiple variables in 1 statement.
      Sync w GeographicLib 1.51.  Remove C99 compatibility functions. (#2445)
      Update geodesic routines from GeographicLib 1.52
      Work around inaccurate hypot for Visual Studio 2105 (32-bit)
      geodesic.c: fix conditions under which hypot workaround is applied.
      Minor changes to address lint in geodesic.c (courtesy of Marc Emery <memery@myotest.com>)
      Testing version 2.0 of geodesic routines
      Fix CI errors.
      geodesic.c: remove unused typedef
      Sync with source
      Clean up cmake for src/tests
      Improved series for the meridian length and its inverse
      Fix silly documentation issue (quoted value of pi/2 triggers error)
      Implement the ellipsoidal gnomonic projection
      Squelch complaint about uninitialized variables in gnom.cpp.
      Various improvements suggested by @rouault.
      In mlfn.cpp, invoke pj_enfn with P->n to avoid recomputating n
      Invoke geod_init with already computed P->f.
      Synchronize with 2.1 for geographiclib-c for geodesic support

Daniel Evans (1):
      Remove git stash holdover in news.rst

David Hoese (1):
      Add explicit NaN handling to proj_trans and gie (#3603) (fixes #3596)

Eli Rykoff (4):
      Increase MAX_ITER so Mollweide forward projection works near the poles. (#3082)
      DOC: Add missing lat_0 parameter to gnomonic documentation.
      Improve documentation plotting of interrupted projections. (#3144)
      Add Interrupted Mollweide (land and ocean view) projections (#3139)

Erixen Cruz (2):
      Use GNUInstallDirs for cmake install locations (#3150)
      Print deprecation warning for "find_package(PROJ4)" (#3165)

Ethan Koenig (1):
      Fix deallocation bug in `proj_info`

Even Rouault (793):
      proj_create_ellipsoidal_2D/3D_cs(): doc improvement
      Make sure that remarks is preserved when substituting (EPSG) grid name by PROJ one
      Fill remarks for PROJ-based operation mixing horizontal and vertical transformations
      Doxygen: improve doc of functions related to Datum/DatumEnsemble
      When reading from database, possibly return Geographic/GeodeticCRS with a DatumEnsemble, typically for WGS 84 and ETRS89 ('breaking change')
      When reading from database, possibly return VerticalCRS with a DatumEnsemble
      projinfo / createObjectsFromName(): support returning a datum ensemble
      proj.h: add PJ_CATEGORY_DATUM_ENSEMBLE for proj_create_from_database()
      docs/Makefile: restore custom 'html' target
      Code formatting
      createBoundCRSToWGS84IfPossible(): make it return same result with a CRS built from EPSG code or WKT1
      COPYING: update
      automake and cmake: install COPYING, NEWS and AUTHORS in /share/doc/proj
      cct.rst: fix indentation
      cct: allow @filename syntax
      Polar stereographic at pole: make it return (0,0)
      WKT2 parsing: several fixes related to map projection parameter units
      github actions: update to conda-incubator/setup-miniconda@v2 to be compatible with latest github action security fix constraints
      cs2cs, cct, proj and geod: fflush(stdout) after each line to emit each result as soon as it is produced
      Database: update to EPSG v10.007
      backport.yml: update to what QGIS uses
      Make GeographicCRS/GeodeticCRS::isEquivalentTo() work properly when comparing to a DerivedGeographicCRS/DerivedGeodeticCRS
      createOperation(): make it work properly when one of the CRS is a BoundCRS of a DerivedGeographicCRS (+proj=ob_tran +o_proj=lonlat +towgs84=....)
      WKT parsing: fix ingestion of WKT with a Geocentric CRS as the base of the projected CRS
      PROJJSON parsing: fix parsing of a Geodetic CRS with a DatumEnsemble, and fix parsing of a ProjectedCRS whose base is a Geocentric CRS
      projinfo.cpp: improve hint when to use --spatial-test intersects
      Database ESRI: map 2 grids in grid_alternatives
      Remove no longer used build_db_create_ignf.py script
      GeographicCRS::_isEquivalentTo(EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS): make it work when comparing easting,northing,up and northing,easting,up
      GitHub action: add a Mac build
      .travis.yml: remove mac job
      Add +proj=topocentric geocentric->topocentric conversion (fixes #500)
      GitHub action: add a mingw_w64 build
      .travis.yml: remove mingw job
      mutex.cpp: replace NULL by nullptr
      createOperation(): add a ballpark vertical transformation when dealing with GEOIDMODEL[]
      Add option to allow export of Geographic/Projected 3D CRS in WKT1_GDAL
      Github action: add a clang static analyzer job
      Travis-CI: remove CSA job
      travis/install.sh: make it robust to objdump on 20.04 and/or clang outputing symbols in different order
      Github action: add a clang linux build job
      Travis-CI: remove linux_clang job
      Fix mingw_w64 warning about pj_acquire_lock() prototype being missing
      PRIMEM WKT handling: fixes on import for 'sexagesimal DMS' or from WKT1:GDAL/ESRI when GEOGCS UNIT != Degree; morph to ESRI the PRIMEM name on export
      formatting fixes
      Github action: add a linux_gcc_32bit job
      Travis-CI: remove linux_gcc8 job
      crs.hpp: add cppcheck suppression for cppcheck 1.90 of ubuntu 20.04
      Add github action for cppcheck
      Move linux_gcc 4.8 job to github action, and on Travis-CI only keep the doc publishing
      testcct: create 'a' and 'b' from scratch
      createObjectsFromName(): in exact match, make looking for 'ETRS89 / UTM zone 32N' return only the exact match
      cs2cs: add --area and --bbox  options to restrict candidate coordinate operations (fixes #2423)
      proj_create_crs_to_crs_from_pj(): do not use PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION if area is specified
      Add github action for VS2019 x64 build
      appveyor.yml: disable VS2017 x64 build
      test/fuzzers: remove standard_fuzzer that used proj_api.h now removed
      WKT1 import: better deal with apps.epsg.org output w.r.t datum ensemble names
      createOperations(): get a '+proj=noop' instead of '+proj=affine +s33=-1' when attempting (non-sensical) EPSG:3855 to EPSG:4326
      Inverse tmerc spherical: fix wrong sign of latitude when lat_0 is used (fixes #2468)
      Spherical tmerc forward: do not restrict to [-90,90] longitude range
      pj_datum_set(): make code more obvious to humans and analyzers
      API cleanup: unexport number of internal symbols, and remove/replace a few unused ones
      test_io.cpp: formatting fix
      Database: add metadata with the version number of the database layout and check it in the code
      fix build
      Add build time option to make PROJ_LIB env var tested last (fixes #2399)
      cs2cs / proj_create_crs_to_crs_from_pj(): add a --authority switch to control where coordinate operations are looked for (fixes #2442)
      Database: fix building proj.db with SQLite built with -DSQLITE_DQS=0
      CI: test with a SQLite3 binary built with SQLITE_DQS=0 to avoid issue #2480
      Doc: fix return data type of proj_trans_array()
      test_operation.cpp: remove debug message
      funtions.rst: fix sphynx syntax
      .github/workflows/clang_static_analyzer/start.sh: add apt update
      conda.yml: restrict to main repository builds, otherwise fails to build in forks
      Split coordinateoperation.cpp in many files in iso19111/operation directory
      Split test_operation.cpp in two parts
      CMake: install data/*.json files (fixes #2485)
      createOperations(): fix inconsistent chaining exception when transforming from BoundCRS of projected CRS based on NTF Paris to BoundCRS of geog CRS NTF Paris. Fixes https://github.com/OSGeo/gdal/issues/3273
      Move proj_log_XXX() functions from internal.cpp to log.cpp
      Remove ancient no longer used implementation of pj_ell_set()
      Revise error codes to have a reduced set exposed in the public API.
      Doc: document error codes and proj_context_errno_string()
      tmerc exact: set errno to PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN when it returns invalid coordinate
      proj_trans_array(): make it transform all coordinates even when an error occurs
      proj_log_XXX functions(): add the short name of the operation as prefix in the error message
      Various operations: remove explicit short name prefixing in log messages now that it is automatically added
      Remove internal use of PJ_LOG_DEBUG_MINOR and PJ_LOG_DEBUG_MAJOR
      horner.cpp: remove uses of EINVAL and EDOM errno
      Remap ENOMEM from PROJ_ERR_INVALID_OP to PROJ_ERR_OTHER
      projinfo: add a --accuracy option to define the minimum accuracy
      proj_create_crs_to_crs_from_pj(): add ACCURACY and ALLOW_BALLPARK options
      Database: update to EPSG v10.008
      cs2cs: add --no-ballpark and --accuracy options
      Database: register AGQG_20191107.gsb grid. Related to https://github.com/OSGeo/PROJ-data/pull/53
      test_factory.cpp: add missing checks
      C API: add proj_crs_is_derived()
      createFromUserInput(): accept leading white space (fixes #2498)
      ellps_size(): do not log error if ellipsoid absent and not needed
      createOperations(): fix Compound to Geog3D/Projected3D CRS with non-metre ellipsoidal height
      workflow linux_gcc_32bit: fix Could not perform immediate configuration on 'libgcc-s1:i386'
      formatting fix
      createOperations(): fix bug involving geoidmodel and non-metre vertical unit
      createOperations(): remove involved logic that was done for GDA94 -> WGS84 (G1762)
      Database: update to EPSG v10.013
      test_operation: use correct variable name
      Allow a BoundCRS to use a PROJ string transformation
      operations_computation.rst: update 'Filtering and sorting of coordinate operations' section
      Fix handling of +proj=ob_tran +o_proj=longlat combined with +over (fixes #2510)
      Database: update to EPSG v10.014
      C API: avoid error messages to be emitted in PJ_LOG_NONE log level (fixes #2526)
      Formatting fix
      isEquivalentName(): fix for GDAL test failure
      Reformat code with clang-format-10 from ubuntu 20.04
      CI: disable FreeBSD / Cirrus builds
      createOperations(): fix incorrect height transformation between 3D promoted RGF93 and CH1903+ (fixes #2541)
      grids.cpp: use C99/C++11 uint16_t/uint32_t
      gie_self_tests: fix use of uninitialized memory (fixes #2557)
      Fix gcc 11 -Wnonnull warnings
      UnitOfMeasure: add a move assignment operator (CID 314811)
      BaseObject: add a move assignment operator (CID 314820)
      proj_info(): remove useless nullptr checking (CID 314807)
      cct: remove useless nullptr checking (CID 314822)
      cs2cs: catch exception on bad value for --accuracy (CID 314818)
      gie.cpp: use correct type in error message (CID 314813)
      projinfo: catch exception on bad value for --accuracy (CID 314810)
      initcache.cpp: add assertions for potential failed mem alloc (CID 314809, 314812)
      is2DPartOf3D(): catch potential exception (CID 314817)
      Check return value of curl_easy_setopt() (CID 314805)
      igh: check return value of setup_zone() (CID 314816)
      NTv2Grid: remove useless m_name member (redundant with one of base class)
      insertIntoHierarchy(): avoid confusing cppcheck about potential use of moved grid
      Travis ARM64: set NPROC=4 to avoid the autodetected 32 to blow out RAM
      dmstor_ctx(): avoid setting a variable that is not read
      pipeline: avoid CLang Static Analyzer 10.0 likely false positive about dereferencing a nullptr
      README.md: comment out Cirrus CI [ci skip]
      doc: typo fixes
      typo fixes
      s45b.pol: remove trailing backslashes that prevent it from being used
      Fix comment
      Code cleanup: remove conditional testing of SQLITE_OPEN_URI. It is present in sqlite >= 3.11
      Make proj_lp_dist() and proj_geod() work on a PJ* CRS object
      Database: fix NKG transformations
      fix_typos.sh: update while lists
      Doxyfile: remove obsolete COLS_IN_ALPHA_INDEX tag
      typo fix in comment
      mingw_w64/start.sh: switch to http due to osgeo SSL certificate expiration
      Add C/C++ API to get SQL statements to insert a CRS into database
      projinfo: add a '-o SQL --output-id AUTH:CODE' SQL output
      CRS::identify(): take into account allowed authority to identify hard-coded WGS84-based CRSs
      SQL output: add capability to restrict the authorities into which to look for intermediate objects
      SQL export: add publication_date and frame_reference_epoch to datums
      SQL export: add support for DatumEnsemble
      Add proj_context_get_database_structure() to dump structure of empty valid auxiliary DB
      projinfo: add a --dump-db-structure switch
      Add support for PROJ_AUX_DB environment variable to set the path to one or several auxiliary DBs
      Doc improvements regarding recomandation not to alter official registries and use auxiliary databases
      proj.h: add PROJ_COMPUTE_VERSION, PROJ_VERSION_NUMBER, PROJ_AT_LEAST_VERSION macros
      Fix proj_clone() to work on 'meta' coordinate operation PJ* objects that can be returned by proj_create_crs_to_crs()
      Doc: add a page to document macros
      Code formatting fix
      createFromCRSCodesWithIntermediates(): improve perf when no match
      Database: relax trigger check when inserting a conversion to accept any conversion method in the PROJ namespace
      SQL output: make it possible to export non-EPSG projection methods or methods and params lacking an explicit EPSG id
      Tests: add new error cases of SQL output
      CRS::promoteTo3D(): propagate the extent from the 2D CRS (fixes #2587)
      createOperations(): fix Compound to Geog3D CRS computations in the case... (fixes #2588)
      createOperations(): fix regression for the fix of #2588
      Build: simplify proj.db generation (#2605)
      Add mapping of ESRI Equal_Area projection method to EPSG (fixes #2610)
      Dockerfile osgeo/proj-docs: update to doxygen 1.9.1 (fixes OSGeo/gdal#3619)
      Doc: fix typo in man page of utilities, and reduce copy&paste
      Fix build on Solaris 11.4
      createOperation(): make sure no to discard deprecated operations...
      Database: update to EPSG 10.017
      Database: refine checks for 'Geog3D to Geog2D+XXX' transformations, and create less synthetic 'Geographic3D to GravityRelatedHeight' synthetic transformations
      Database: add extra check for 'Vertical Offset by Grid Interpolation' transformations
      Database: stronger checks on extent of grid_transformation regarding the extent of the source and target CRS
      Database: update to EPSG v10.018
      reproject_bbox(): reduce number of magic values
      cass: rewrite ellipsoidal formulas in a clearer way using EPSG guidance note names
      Generic inverse: fix when initial guess if super close to result
      cass: add +hyperbolic switch for variant used by EPSG:3139 'Vanua Levu 1915 / Vanua Levu Grid'
      Add mapping between EPSG method 'Hyperbolic Cassini-Soldner' and +proj=cass +hyperbolic
      Database: add a PROJ.VERSION metadata entry
      Database: add missing column type specifir for method_name in grid_transformation and other_transformation. No practical impact
      Database: decrease db size by using a INTEGER_OR_TEXT data type on codes
      createOperations(): make createBetweenGeodeticCRSWithDatumBasedIntermediates() reachable...
      Database: minor refresh of ignf.sql and import script with new locations of resources
      Database: do not create Helmert transformations in IGNF between CRS of different nature, and also adjust the method code/name to the nature of the CRS
      Database: more consistency checks on helmert_transformation and grid_transformation
      Database: nullify auth_name, code of usage table
      Database: more thorough consistency checks on extent of coordinate operations
      test: add datum shift related tests for transformations crossing antimeridian
      proj_trans(): add a more expressive log message
      projinfo: remove spurious -- in help message (master only)
      createFromUserInput(): add support for OGC URLs
      Add hard-coded definitions for OGC:AnsiDate/JulianDate/UnixTime
      createFromUserInput(): add support for (legacy) urn:opengis:crs:EPSG:0:XXXX syntax
      createFromUserInput(): add support for (legacy) urn:x-ogc:def:crs:EPSG:XXXX syntax
      Add UnitOfMeasure::FOOT and US_FOOT
      createFromUserInput(): add support for WMS AUTO: syntax
      Recognize OGC:84 as an alias of OGC:CRS84
      fix typo in comment
      CMake: for test/cli, generate the output files in /test/cli like autoconf builds
      Doc: remove mention of k_0 and lat_ts in aeqd projection. They are not used. Fixes #2638 and fixes #2639
      getCRSInfoList(): make result order deterministic (by increasing auth_name, code)
      createFromUserInput(): support URN:OGC:DEF:CRS:OGC:1.3:CRS84
      CRS::normalizeForVisualization(): propagate domains/extent of original CRS (fixes #2603)
      projinfo: add a --normalize-axis-order undocument switch
      Reformatting fix
      projinfo --list-crs --area: make it work when multiple areas matches the specified name
      Add proj_get_celestial_body_name() and make proj_get_crs_info_list_from_database() filter on and return celestial body name
      reformat_cpp.sh: run inside Docker image if clang-format is not at version 10
      utm: error out when value of +zone= is not an integer (fixes #2671)
      createOperations(): fix Geog to Geog when one is deprecated (fix master regression)
      createFromUserInput(): change name of CRS built from URN combined references to match the convention of EPSG projected CRS
      Revert "proj_create_crs_to_crs_from_pj(): do not use PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION if area is specified"
      ConcatenatedOperation::fixStepsDirection(): fix potential nullptr dereference
      Database: update to EPSG v10.019
      CI: add Coverity Scan weekly job
      coverity-scan.yml: do not build tests
      projinfo: catch potential exception (master only, CID 193527)
      getInsertStatementsFor(): replace while with if (master only, CID 320133)
      projinfo: increase file size limit of files opened with @filename to 1MB to be able to read file generated by ossfuzz
      pj_vlog(): fix buffer overflow in case of super lengthy error message
      test_o.cpp: add more sensical example for DerivedVerticalCRS built from urn: syntax
      Remove useless file data/sql/method_triggers.sql
      Remove uselss data/epsg-deprecated and update data/README
      Remove useless src/runmultistresstest.sh
      Move data/proj_outIGNF.dist-real to test/cli
      wkt1_parser/wkt2_parser: regenerate them with bison 3.5.1 to hopefully make Coverity Scan happier
      test_network.cpp: try to fix 'Please include winsock2.h before windows.h' warning with msys
      getInsertStatementsFor(): replace while with if (master only, CID 320133)
      test: test urn:ogc:def:ensemble: syntax
      Improvements related to DerivedVerticalCRS using Change Unit and Height/Depth reversal methods
      CI: msys2 build: build with -Werror (#2697)
      docs/Makefile: copy triangulation.schema.json (fixes #2699)
      Update nlohmann/json to latest 3.9.1 release
      CMake build: add a NLOHMANN_JSON_ORIGIN=auto/external/internal setting allowing to choose which nlohmann/json to use
      Fix ossfuzz builds [ci skip]
      nkg.gie: fix operation line. The repetition of operation worked previously by accident and wasn't necessary
      CMake build: run nkg.gie tests (dependent on CURL_ENABLED and RUN_NETWORK_DEPENDENT_TESTS settings)
      test/gie/Makefile.am: add nkg.gie
      Doc: update GDAL version
      Doc: fix URL
      Formatting fixes
      Fix export of transformation to PROJ string in a particular situation where CompoundCRS are involved (fixes #2720)
      Database: update to EPSG v10.022
      scripts/grid_checks.py: improve --not-in-grid-alternatives output
      grid_alternatives.sql: reference AGQG_20201120.gsb (cf OSGeo/PROJ-data#63)
      Database: map ESRI spain/peninsula and spain/baleares grids
      projsync: make it filter out files not intended for the current version
      HOWTO-RELEASE: mention updating PROJ_DATA.VERSION
      code formatting fix
      Database: add a ANALYZE step during proj.db creation
      projinfo: fix error message regarding --output-id
      DatabaseContext::getTransformationsForGridName(): make it work properly when different EPSG grid names map to the same PROJ grid name
      Database: decrease DB size by using WITHOUT ROWID tables
      build_db.py: add hack to minimize diff now that we use WITHOUT ROWID
      Database: update to EPSG v10.024
      ConcatenatedOperation::fixStepsDirection(): remove recently introdued hack specific to EPSG:9731 now that is is deprecated
      proj_create(): do not open proj.db if string is a PROJ string, even if proj_context_set_autoclose_database() has been set (fixes #2734)
      Cleanup: add proj/internal/mutex.hpp as compat layer for mingw32 for std::mutex
      test_c_api.cpp: avoid use of undefined .t component
      factory.cpp: preparation steps for global sqlite3* handle, but no functional change
      Database: use shared sqlite handle
      Make proj_context_set_autoclose_database() a no-op as it would defeat the purpose of the new database connection sharing
      Check that database connection sharing properly works
      proj_cleanup(): make sure it frees the database context of the default PJ_CONTEXT
      Run database layout checks only at first DB opening
      factory.cpp: lint: make memoryHandle_ a unique_ptr
      Database: update to EPSG v10.026
      BoundCRS::identify(): avoid incompatible transformation for WKT1 / TOWGS84 export (fixes OSGeo/gdal#3958)
      Fix build with -DPROJ_INTERNAL_CPP_NAMESPACE
      proj_trans/cs2cs: If two operations have the same accuracy, use the one that is contained within a larger one
      operations_computation.rst: add note about proj_create_crs_to_crs not necessarily using the operation that appears as first
      Database: update to EPSG v10.027
      test_factory.cpp: fix build, in particular on Alpine Edge (fixes #2759)
      createOperations(): make sure to associate an extent to the transform of a CRS with a GEOIDMODEL using a PROJ grid, so that it is later used instead of a ballpark operation (fixes #2768)
      Database: update to EPSG v10.028
      Logging: avoid some overhead when logging is not enabled (fixes #2770)
      ortho: remove useless and invalid log trace (CID 350886, 350887)
      Formatting fix [ci skip]
      createOperations(): fix SourceTargetCRSExtentUse::NONE mode
      Add pj_log_active() to determine if logging is active
      pj_fwd()/pj_inv(): performance improvements through passing by ref and less function calls
      GeoTIFF grid reading: perf improvements (fixes #2785)
      build_db.py: improve error reporting [ci skip]
      Conversion::createUTM(): avoid integer overflow. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=36751
      Inverse laea ellipsoidal: return PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN when appropriates (fixes OSGeo/gdal#4224)
      formatting fix
      factory.cpp: fix latest clang -Wstring-concatenation (false positive) warning
      Implement promoteTo3D() / demoteTo2D() for DerivedGeographicCRS (fixes #2803)
      createOperations(): fix missing deg<-->rad conversion when transforming with a CRS that has a fallback-to-PROJ4-string behaviour and is a BoundCRS of a GeographicCRS (fixes #2804)
      WKT2 import/export: preserve PROJ.4 CRS extension string in REMARKS[] (when the WKT2 representation isn't lossless)
      test: more testing of Polar Stereographic variants
      BoundCRS: accept importing/exporting in WKT2 and PROJJSON the scope/area/extent/id attributes (fixes #2813)
      ConcatenatedOperation::fixStepsDirection(): fix bad chaining of steps when inverse map projection is involved in non-final step (fixes #2817)
      pipeline instanciation: fix potential O(n^2) performance. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=37438
      PROJStringFormatter::toString(): fix potential O(n^2) performance. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=37438
      WKT importer: detect ESRI WKT even when datum name doesn't start with D_ (fixes #2822)
      WKT importer: better detect ESRI WKT on projected CRS (fixes #2822)
      Pipeline instanciation: fix performance issues on huge (broken) strings which managed somehow to cause nested pipelines not caught due to some non-roundtripability in parsing/serializing. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=37489
      Doc: projjson.rst: update to PROJJSON v0.3
      ESRI WKT: add support for import/export of (non interrupted) Goode Homolosine
      Database: update to EPSG v10.033
      io.cpp: silence Coverity false positive (CID 356032)
      io.cpp: remove always true test
      Workaround false positive in recent cppcheck
      PROJStringFormatter::toString(): add missing iterator increment (but luckily this omission didn't result in endless loop, just an extra iteration)
      Doc: mentions EPSG methods that corresponds to topocentric and ortho (fixes #2832)
      Add proj_create_conversion_pole_rotation_netcdf_cf_convention() to address netCDF datasets using a pole rotation method
      Merge pull request #2836 from OSGeo/rouault-patch-1
      formatting fix
      pj_obj_create(): avoid passing invalid ellipsoid parameters ot pj_calc_ellipsoid_params(). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=31964
      formatting fix
      pipeline.cpp: remove impossible condition
      GeodeticCRS::identify(): make it more obvious for cppcheck
      createFromUserInput(): make it more obvious for cppcheck and humans too
      Conversion::createAxisOrderReversal(): workaround cppcheck false positive
      Workaround 'Overlapping read/write of union is undefined behavior' cppcheck warning (but really fixing them would be more involved)
      healpix.cpp: make it more obvious to cppcheck that capmap.cn is always initialized
      getInsertStatementsFor(): re-order projection parameters according to their canonical order if needed
      Fix database access across fork() when SQLite3 doesn't use pread[64]() (fixes #2843)
      pj_obj_create(): avoid passing invalid ellipsoid parameters to geod_init(). Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=38192
      Support importing/exporting WKT & PROJJSON of 2D axis spherical planetocentric geodetic CRS
      createOperations(): deal with spherical planetocentric geodetic CRS
      createConversion(): avoid nullptr dereference on a method without parameters
      createOperations(): use an explicit conversion operation for geodetic <--> geocentric latitude
      PROJJSON: support additional properties allowed in id object (version, authority_citation, uri) for parity with WKT2:2019
      isEquivalentTo(): improve comparison of datum names based on official name and aliases (preparation for EPSG v10.035 update)
      test/cli/testvarious: make one test more robust regarding EPSG updates
      Database: update to EPSG v10.035
      Fix error in implementation of Inverse ellipsoidal orthographic projection (oblique case) that cause convergence to sometimes fail (fixes #2844)
      Inverse ellipsoidal orthographic projection (oblique case): fix convergence at pole
      Inverse ortho ellipsoidal oblique: address a few remarks from https://github.com/OSGeo/PROJ/issues/2844#issuecomment-920138371
      Database: add a 'anchor' field to geodetic_datum and vertical_datum tables
      test: getInsertStatementsFor(): test datums with anchor
      Optimize pipelines of planetary CRS (geocentric latitude, west-positive longitude)
      networkfilemanager.cpp: fix compiler warnings on 32-bit systems where time_t is 32-bit
      Conversion::inverse(): avoid harmless division by zero. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=39033
      Update proj_symbol_rename.h
      proj_normalize_for_visualization(): set input and output units when there are several alternative transformations (fixes #2866)
      Database: update to EPSG v10.036
      Database: add some hand made entries early
      Database reading: implement reading a GeodeticCRS with a Spherical CS
      AuthorityFactory::createGeodeticCRS(): use description column for remarks
      Database: add check for Orthographic conversion
      Database: add IAU_2015 CRS
      Add a mapping for versioned authorities, so that one can use IAU:xxxx or IAU_2015:xxxx transparently
      PROJStringFormatter: add optimizations useful for IAU CRS transformation pipelines
      test: add tests of operations between geographic/geodetic and projected IAU CRS
      projinfo --list-crs / proj_get_crs_info_list_from_database(): make it work with IAU generic authority name
      CRS::extractGeodeticCRS(): implement for DerivedProjectedCRS (related to refs OSGeo/gdal#3927)
      CRS::identify(): fix ignoring CS order when identifying a geodetic CRS by a PROJ string with just the ellipsoid
      proj_factors(): accept P to be a projected CRS (fixes #2854)
      test_c_api.cpp: reformat
      proj_create_crs_to_crs() + proj_trans(): fix when non-Greenwich prime meridian is involved
      ProjectedCRS::_isEquivalentTo(): ignore base CRS axis order even in EQUIVALENT mode if one of them is lacking an explicit CS order (refs #2886)
      CRS::_isEquivalentTo(): be tolerant to different order of PROJ step options (fixes #2886)
      cmake build: install proj_symbol_rename.h
      scripts/build_db.py: fix due to recent changes
      Database: update to EPSG v10.037
      WKT concatenated operation parsing: fix when a axis order reversal conversion is the first or last operation (fixes #2890)
      WKT1 parser: recognize Lambert_Conformal_Conic as projection name for LCC 1SP or 2SP (fixes #2892)
      CMake build: generate invproj/invgeod binaries (symlinks on Unix, copy otherwise) (fixes #2852)
      autoconf build: build invproj and invgeod in build directory
      geod / proj: accept lt-inv[geod/proj] name for older libtool versions
      test/cli/testproj: fix wrong variable name
      Add testing of invproj
      CMake: add a BUILD_APPS to be able to disable build of all programs
      ossfuzz builds: switch to cmake to build PROJ
      proj_crs_get_datum_forced(): catch potential exception (fixes CID 358433, 358434, 358435)
      CMake build: add generate_wkt1_parser and generate_wkt2_parser manual target, and logic to detect when they must be run
      Fix export to WKT1:ESRI of CRS, datum, ellipsoids name that don't have a EPSG equivalent and have parentheses in their name
      Geographic 3D CRS: allow to export to WKT1:ESRI if only the GEOGCS is known (and thus extrapolating a VERTCS) (fixes #2757)
      cmake/ProjTest.cmake: fix error in creation of tmp_user_writable_dir
      CMake: fix invproj/invgeod generation on Windows when building with an explicit configuration
      Fix previous commit
      createOperations(): avoid harmless floating-point division by zero if conversion factor of target unit is 0. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=39969
      exportToPROJStringGeneric(): avoid harmless floating-point division by zero if conversion factor is 0. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=40050
      Database: update to EPSG v10.038
      CMake: align the VERSION of the library with libtool practices
      CMake: revise how we deal with symbol export and static builds
      lib_proj.cmake: add a PROJ::proj alias and add BUILD_INTERFACE include directories, so that proj can be used as a subdirectory of a larger project (fixes #2905)
      cppcheck.sh: make it compatible with cppcheck 2.7
      util.hpp: reformat
      BoundCRS WKT import: fix setting of name
      Doc: news.rst: formatting fixes
      Database: update to EPSG v10.039
      Reformatting fixes
      PROJStringFormatter::toString(): avoid invalid iterator increment (fixes #2931)
      CI: add a MSVC Debug build (refs #2931)
      createOperations(): do not stop at the first operation in the PROJ namespace for vertical transformations
      createOperationsCompoundToCompound(): fix null pointer dereference when connection to proj.db doesn't exist. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=40955
      Code reformat
      createOperationsGeogToGeog(): avoid potential harmless floating-point division by zero. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=41045
      build_db_from_esri.py: fix pyflakes3 warning, and make it python 3.8 compatible
      Pipeline parsing: reject proj=/o_proj= before first step, to avoid bad performance pattern on hostile pipelines
      Cache result of proj_get_type() to help for performance of proj_factors() (fixes #2965)
      PROJ string parsing: fix unquoting of parameter values when the parameter name is just one single character
      PROJStringSyntaxParser(): make it use pj_trim_argc/argv to have similar tokenization/serialization in different code paths
      Database: update to EPSG v10.041
      createOperations(): improvement for "NAD83(CSRS) + CGVD28 height" to "NAD83(CSRS) + CGVD2013(CGG2013) height"
      CI Plot job: build PROJ from source (fixes #2961)
      CI: update Ubuntu 16.04 gcc 4.8 to default gcc 5.4
      CMake: fix warning with external googletest
      WKTParser::Private::buildProjectionStandard(): minor cleanup
      WKT1 import: correctly deal with missing rectified_grid_angle parameter
      docs/source/download.rst: fix release dates [ci skip]
      Fix build with Intel C++ compiler
      news.rst: add hints about usage changes in PROJ 8.2.0 for Windows users (fixes #2999)
      docs/docbuild/Dockerfile: bump doxygen version (due to 1.9.1 no longer be downloadable at that URL)
      Fix doc generation with Doxygen 1.9.3
      test proj_create_operations_with_pivot(): change CRSs used in preparation of EPSG 10.044 which adds a direct transformation between WGS84 and JGD2011
      Handle EPSG:1111 'Transverse Mercator (3D)' method (used in EPSG:10.044 by Projected 3D CRS EPSG:9895 'Luxembourg TM (3D)'
      Database: update to EPSG 10.044
      Implement Geographic3D to Depth/Geog2D+Depth as used by ETRS89 to CD Norway depth
      proj_get_crs_info_list_from_database(): report PJ_TYPE_GEODETIC_CRS for IAU_2015 -ocentric geodetic CRS (fixes #3012)
      peirce_q: rename +type parameter wrongly introduced in 8.2.1 to +shape (fixes #3011)
      Map peirce_q to pseudo WKT2 and ESRI WKT
      Database: update to EPSG 10.047
      peirce_q: add inversion of +shape=square and diamond through generic inversion method
      Minor cppcheck fixes
      Conversion::_exportToPROJString(): fix potential crash introduced in recent commit. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=43546
      Dockerfile: build PROJ with cmake (refs #2688)
      Add .zenodo.json (#3019)
      filemanager.cpp: fix build issue with Cygwin
      networkfilemanager.cpp: fix build issue with Cygwin
      Add DOI to README.md and CITATION [ci skip]
      CITATION: add doi to BibTex entry
      lookForGridInfo(): make it work properly when passed the old PROJ name
      Database: update to EPSG 10.048
      Database: update to EPSG 10.051
      Use external gtest by default when detected
      Doc: clarify build requirements
      Doc: fix example whith used the +t_obs parameter of Helmert removed per #1264
      CMake: make BUILD_SHARED_LIBS=ON the default even on Windows
      filemanager.cpp: reformat [ci skip]
      createOperations(): fix transformations from/to a BoundCRS of a DerivedGeographicCRS coming from WKT
      Doc: ob_tran.rst: fix name of o_lon_1, o_lat_1, o_lon_2, o_lat_2 parameters
      proj.ini: add a 'ca_bundle_path' variable
      CMake: remove all Mac specific settings added per #2009, as they appear to be obsolete given current CMake versions (fixes #3029)
      Database: update to EPSG v10.054
      Better deal with importing strings like '+init=epsg:XXXX +over' (refs MapServer/MapServer#6478)
      Fix importing CRS definition with +proj=peirce_q and +shape different from square or diamond. Follow-up of #3014. Fixes #3056. master only
      ITRF2008: plate motion model: fix error on sign of z component of NOAM and x component of PCFC
      ITRF2008: add EURA_T, NOAM_T, etc. plate names that include translation rates (fixes #3053)
      Remove googletest source code remains
      Doc: mention Lambert c.e.a, Behrmann, and Gall-Peters projections as specializations of cea
      Doc: gall.rst: add note that Gall != Gall-Peters
      CMake: set RUN_NETWORK_DEPENDENT_TESTS to ON by default only if network seems available (fixes #3060)
      Database: insert entries in the alias_name for ESRI transformations that match a EPSG entry
      Fix nullptr dereference in utilities whan argv[0] == NULL
      proj_grid_info(): check pj_find_file() output (CID 383357)
      CTable2Grid::open(): add missing call to extent.computeInvRes() (CID 383359)
      UnitOfMeasure::operator=(UnitOfMeasure &&): avoid use of moved member (CID 383358)
      ProjectedCRS::_exportToWKT(): avoid false positive warning about nullptr deref (CID 383356)
      WKTParser::Private::buildProjectedCRS(): avoid potential nullptr deref (CID 383362)
      geog3DToVertTryThroughGeog2D(): avoid potential nullptr deref (CID 383355)
      Fix wrong results with SQLite 3.38.0 (fixes #3077)
      Fix issue when transforming from/to BoundCRS of 3D CRS with non-Greenwhich prime meridian, created from WKT (fixes OSGeo/gdal#5408)
      CMake: fix installation of proj.pc on Windows (fixes #3078)
      Fix import of WKT of concatenated operation with inverse conversion of a compound CRS of a projected CRS (fixes #3076)
      PROJBasedOperation PROJJSON export: issues an empty 'parameters' array if needed (refs #3076)
      Database: update to EPSG v10.055
      nkg.gie: update results due to https://github.com/OSGeo/PROJ-data/pull/79
      windows.yml: fix issue with sqlite3 binary and vcpkg
      createOperations(): fix issue in transformation northing,easting projected CRS -> +proj=longlat +lon_wrap (fixes #3095)
      Fix comparison of GeodeticRefrenceFrame vs DynamicGeodeticReferenceFrame
      Transformation: no longer do vertical trasnformation when doing compound CRS to 2D CRS / add --3d to cs2cs
      SingleCRS::baseIsEquivalentTo(): fix potential crash that is triggered by fdf5111a9a790926aacec75a07d30508a8ed9c91 changes
      createOperations(): fix transformation involving CompoundCRS, ToWGS84 and PROJ4_GRIDS
      Fix datum names when importing from PROJ4 crs strings (affects some transformations using geoidgrids)
      Database: update to EPSG v10.057
      Database: manually fix wrong extent of EPSG:2853 (notified to IOGP)
      WKT2 parser: add special case for slightly non-conformant WKT output of epsg.org regarding PARAMETER["EPSG code for Interpolation CRS",crs_code,ID[EPSG,1048]]
      Transformation::substitutePROJAlternativeGridNames(): propagate interpolation CRS
      WKT import: transform PARAMETER["EPSG code for Interpolation CRS",crs_code] into interpolation CRS, and transform from that back to the parameter in BoundCRS AbridgedTransformation WKT output
      createOperations(): fix CompoundCRS[BoundCRS[ProjectedCRS],BoundCRS[VerticalCRS]] to Geog3DCrs
      exportToPROJString(): optimize pipeline of previous commit
      createOperations(): fix ch1903lv03_3d_bound to EPSG:4326+3855 (refs #3152)
      createOperations(): fix ch1903lv03_ln02_bound to EPSG:4326+3855 (fixes #3152)
      Database: add OGC:CRS84h (WGS 84 longitude-latitude-height)
      ITRF2014: fix ITRF2014:ITRF88,ITRF94 and ITRF96 definitions
      createBoundCRSToWGS84IfPossible(): improve selection logic to generate +towgs84= taking into account extent
      Database: update to EPSG v10.059
      Formatting fixes
      Transformation::inverseAsTransformation(): avoid harmless division by zero. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=46393
      CI: fix doc_build job
      Add proj_trans_get_last_used_operation() (refs #3176)
      proj_coordoperation_get_grid_used(): make it work more reliably when networking is enabled (fixes #3176)
      Database: update to EPSG 10.063
      WKT import: deal with Projected CRS that is a mix of WKT1:GDAL / WKT1:ESRI (fixes #3186)
      PROJ string transformation output: improve pipeline of 'OSGB36 / British National Grid + ODN height' to 'WGS 84 + EGM96 height' (refs https://github.com/OSGeo/PROJ/issues/3191#issuecomment-1124223268)
      createOperations(): fix/improve result of 'BD72 + Ostend height ' to 'WGS84+EGM96 height' (fixes #3191)
      createOperations(): fix result of 'BD72 + Ostend height' to 'Amersfoort + NAP height' and similar situations where the vertical-to-vertical transformation is a concatenated operation of 2 operations sharing the same geographic CRS
      Doc: mentions that Winkel Tripel has inverse method (fixes #3179)
      Doc: enhance PROJJSON specification (#3190)
      Change hub CRS semantics when importing a WKT1 COMPD_CS with a EXTENSION PROJ4_GRIDS
      Change hub CRS semantics when importing from a PROJ.4 string with +geoidgrids, and modify order of horizontal and vertical steps
      Change hub CRS semantic with +geoidgrids, only if +geoid_crs=horizontal_crs is specified
      Add a +proj=vertoffset method for Vertical Offset And Slope transformation (refs #3194)
      Map EPSG:1046 operation method to PROJ +proj=vertoffset (fixes #3194)
      vertoffset: add description of parameters to PROJ_HEAD()
      Identifier::isEquivalentName(): fix when ending by ' + ' which could indirectly cause an infinite stack call in master (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47475)
      projjson.rst: formatting fix
      docs/source/conf.py: update github_version
      Database: update to EPSG 10.064
      WKT export of transformation: do not put '(approx. inverse)' in inverse Helmert transformation name when it is a pure translation, as the approximate inverse is actually exact
      Fix warning with MSVC 2015
      WKT import: correctly deal with absence of Latitude_Of_Origin parameter in WKT1 ESRI with Stereographic projection (fixes #3210)
      PROJJSON spec: mention the intentional lack of axis order member
      docs/docbuild/Dockerfile: do not use sphinxcontrib-spelling 7.4.0
      Merge pull request #3213 from OSGeo/rouault-patch-1
      PROJJSON: add meridian member in Axis object type. Bump version to v0.5
      PROJJSON: Add temporal_extent and vertical_extent members in object usage
      PROJJSON parser: do not error out if a datum ensemble member is unknown in the database
      Doc: fix build issue with Sphinx 5.0
      typo fix in code comment
      createOperations(): fix infinite recursion in a complex case. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=47873
      createOperations(): fix projected CRS with non-metre horiz&vertical unit and towgs84 to gencentric CRS (fixes #3229)
      IComparable::isEquivalentTo(): test first pointer equality
      SingleCRS::baseIsEquivalentTo(): avoid temporary object creation when comparing CRS with datum ensemble with Criterion::EQUIVALENT
      Doc: fix news.rst
      Resync schemas/v0.5/projjson.schema.json with data/projjson.schema.json
      CI: Cancel PR and branch workflows on new push
      travis/install.sh: make json validation work with older jsonschema
      WKT2 import/export: accept several GEOIDMODEL in a VerticalCRS
      PROJJSON import/export: add 'geoid_models' to allow several geoid models in a VerticalCRS
      PROJJSON schema: add PointMotionOperation and 'deformation_models' members to GeodeticCRS and VerticalCRS
      PROJJSON import/export: use 'deformation_models' member for GeodeticCRS/VerticalCRS
      Database: update to EPSG 10.065
      proj_grid_info(): make it work again with remote grids (refs #3238)
      NTv2 and GTX grid readers: add a cache of lines to speed-up (fixes #3240)
      Database: update to EPSG 10.066
      Database: add an alias for HT2_2010_CGG2013a.byn added per https://github.com/OSGeo/PROJ-data/pull/84
      Database: bump PROJ_DATA.VERSION to 1.11
      createOperations(): prefer simpler pipelines / affects WGS 84 to GDA94/GDA2020
      proj.pc/proj-config.cmake generation: deal with CMAKE_INSTALL_xxxx being possibly an absolute path (fixes #3206)
      Introduce PROJ_DATA environment variable to deprecate PROJ_LIB
      PROJ utilities: emit deprecation warning on stderr when PROJ_LIB is set
      Formatting fix
      WKT ESRI export: fix issue with some projected CRS, such as EPSG:3800, that have the same name as a deprecated one
      WKT ESRI import: support LINUNIT node inside GEOGCS which indicates a geographic 3D CRS
      WKT ESRI export: use LINUNIT node for geographic 3D CRS, unless WKTFormatter::setAllowLINUNITNode(false) or proj_as_wkt(..., options = ['ALLOW_LINUNIT_NODE=NO]) is specified
      Database: resync ESRI objects with https://github.com/Esri/projection-engine-db-doc/tree/v3.0.0
      Merge pull request #3259 from agiudiceandrea/patch-1
      createOperations(): avoid potential infinite recursions (fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=49256)
      PROJ pipeline generator: recognize opposite Helmert transformations using a different convention
      Database: generate null transformation between geodetic/vertical datum ensemble and its members (fixes #3263)
      Database: update to EPSG 10.068 (fixes #3250)
      Move Transformation::exportToPROJString() to SingleOperation, so transformations can be used as deriving conversions
      WKT import: use 'EPSG code for Horizontal CRS' parameter to derive interpolation CRS
      WKT2 parser: allow unit-less PARAMETER for coordinate operations
      Database: update to EPSG v10.074
      WKT1 import: better deal when the angular unit of the GEOGCS[] of the PROJCS[] doesn't match the one from the database
      WKT parser: fix issue when parsing some WKT1 with Hotine_Oblique_Mercator_Azimuth_Center and ignoring rectified_grid_angle (fixes #3279)
      createOperations(): take into account axis unit and inversion of target DerivedProjectedCRS
      createOperations() / proj_trans(): better take into account area of interest name / do not only keep first returned coordinate operation
      Formatting fixes
      getCRSInfoList(): fix retrieval of projected_crs given by text_definition only (fixes #3288)
      projinfo: fix crash on --list-crs when proj.db cannot be opened
      common.hpp: address noExplicitConstructor warnings
      gie.cpp: remove unused structure member
      chamb: remove unused structure member
      isea: remove unused structure member
      struct pj_ctx: remove no longer used private member, and address warnings about members not copied in copy constructor
      putp6: avoid false positive warning with latest cppcheck
      JSON output: avoid rounding issues with integer values in a double on some architectures (fixes #3297)
      CMake: fix symbol detection when CFLAGS includes -Werror=something (fixes #3295)
      Database: update to EPSG v10.076
      GeoTIFF grids: support UNITTYPE=arc-seconds per year for temporal hgridshift
      Docs: update doc of grid-based methods to mention/advertize more GeoTIFF
      geodetictiffgrids.rst: add a Revisions section
      CMake: add a INSTALL_LEGACY_CMAKE_FILES option (fixes OSGeo/gdal#5646)
      cppcheck.sh: update to support v2.10
      Database: create a undeprecated copy of EPSG:9123 grid transformation 'NAD83(CSRS) to CGVD28 height (1)' (fixes #3328)
      Database: alias HT2_1997.byn to ca_nrc_HT2_2010v70.tif (refs #3328)
      createOperations: add missing +proj=push +v_1 +v_2 / +proj=pop +v_1 +v_2 in some vertical transformations (refs #3328)
      PROJ string pipeline optimizer: add optimization for EPSG:4326+5773 to EPSG:4326+5713 transformation (refs #3328)
      Tests: test EPSG:4326+5773 to EPSG:4326+5713 (refs #3328)
      createOperations(): tune name and remarks of some vertical transformations
      Build: link geodtest against libm when available (fixes #3311)
      WKT import: 3D-promote base CRS of 3D DerivedProjectedCRS (fixes #3340)
      proj_normalize_for_visualization(): take into account FORCE_OVER property from source operation (fixes #3347)
      Fix issue when transforming from/into a WKT2 Bound VerticalCRS with a 'Geographic3D to GravityRelatedHeight' method (fixes #3354)
      Doc: document +over limitations (fixes #3348)
      CI: add a CI-Fuzz github action workflows
      cct: emit meaningful error message when passing a non-coordinate operation (fixes #3358)
      proj_trans(): return error when a non-coordinate operation object is provided (fixes #3358)
      createOperations(): emulate PROJ < 6 behavior when doing geocentric <--> geographic transformation between datum with unknown transformation (fixes #3360)
      CMake: add a uninstall target
      Doc: document uninstall target
      findsOpsInRegistryWithIntermediate(): make it work when source/target geodetic CRS has no known id
      Avoid error on "projinfo -s 'NTF (Paris) + NGF IGN69 height' -t ETRS89"
      projinfo: when source (or target) CRS is specified by name, promote it to 3D if there's a known 3D CRS of same name and that the other CRS is 3D
      cs2cs: when source (or target) CRS is specified by name, promote it to 3D if there's a known 3D CRS of same name and that the other CRS is 3D
      Merge pull request #3368 from OSGeo/rouault-patch-1
      createFromUserInput(): make it work better when approximate name is provided
      Doc: add a page about users of PROJ
      Merge pull request #3376 from OSGeo/rouault-patch-1
      Doc: users.rst: link to bindings.rst
      Merge pull request #3380 from Jochem-L/patch-1
      CMake: use TIFF:TIFF and CURL::libcurl targets (refs #3316)
      Merge pull request #3383 from OSGeo/m-kuhn-patch-1
      users.rst: formatting fix
      Merge pull request #3385 from afrigeri/patch-1
      Doc: users.rst: fix
      Merge pull request #3388 from AndrewAtAvenza/patch-1
      defmodel.rst: add link to deformation_model.schema.json
      cs2cs: fix incorrect use of proj_cs_get_axis_count() introduced in 4abde1b9f8fdc5fce1d7a3179d5bcae6520ae396 (not in a release)
      data/sql: add a README.md and simplified UML diagrams
      cct and cs2cs: make them robust against UTF-8 BOM at beginning of input files (fixes #3287)
      Merge pull request #3393 from OSGeo/rouault-patch-1
      cifuzz.yml: tune
      VerticalCRS::_isEquivalentTo(): do not consider VerticalCRS and DerivedVerticalCRS as equivalent
      createOperations(): fix issues when transforming between Geog3D and DerivedGeog3D CRS with Geographic3D offsets method
      C++ API: add methods to build Geographic/Vertical Offset conversions
      eqdc: avoid floating point division by zero in non-nominal case. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=52879
      Merge pull request #3416 from OSGeo/rouault-patch-2
      docs/docbuild/Dockerfile: update to Doxygen 1.9.5
      Doxyfile: remove warnings with Doxygen 1.9.5
      vandg projection: handle +over to extend the validity domain outside of |lon|>180deg
      cass: fix forward computation of easting (fixes #3432)
      pj_generic_inverse_2d(): make deltaXYTolerance a parameter
      cass: use iterative generic inversion to make GIGS 5108 roundtripping tests succeed
      Remove remaining sprintf() uses, and deprecate proj_rtodms() by newly added proj_rtodms2() (#3431)
      rtodms(): fix potential buffer overflow not dealt with with PR #3431 (master only)
      code formatting fixes
      Database: register at_bev_AT_GIS_GRID_2021_09_28 grid
      Fix issues reported by latest cppcheck master version
      NetworkFile::open(): fix memory leak in unlikely error code path
      Database: register in grid_alternatives grids from PROJ-data that have no corresponding transformation record (fixes #3444)
      DatabaseContext::lookForGridInfo(): fix caching of fullFilename (fixes #3444)
      DatabaseContext::lookForGridInfo(): fix setting .url member when a file is not in grid_alternatives, not local, but found on CDN (fixes #3444)
      cs2cs: better validate value of -W option (fixes #3451)
      PROJJSON: bump to 0.6 with an additional optional source_crs property in abridged_transformation (refs #3428)
      omerc: mention in doc that +lon_0 is ignored, align name of +lat_0 and +lonc with EPSG names, and emit a trace when +lon_0 is used (fixes #3464)
      Doc: update references to OGC Topic 2 spec to its r5 revision
      cs2cs.rst: add note regarding grids beeing needed (fixes #3470, #3471)
      Update proj_symbol_rename.h
      createFromUserInput(): make approximate matching by name more restrictive to avoid false positives (fixes #3484)
      Add bench_proj_trans benchmarking utility
      Database: update to EPSG 10.077
      WKT import: when importing LOCAL_CS["foo"], generates a non-empty name for the datum
      Merge pull request #3492 from OSGeo/rouault-patch-2
      formatting fixes
      GeographicBoundingBox::Private::intersects(): avoid infinite recursion on degenerate bounding box
      DatabaseContext::lookForGridInfo(): add PROJ networking state in cache information (fixes pyproj4/pyproj#1192)
      proj_trans(): fix performance regression
      Make pj_fwd4d() and pj_inv4d() pass arguments by reference, nd use them directly in pipeline_forward/inverse_4d()
      Pass PJ_COORD by reference for fwd4d and inv4d callbacks
      Improve a bit performance of +proj=axisswap +order=2,1
      Database: update to EPSG v10.078
      Add a +proj=gridshift (general grid shift) method to be used for NADCON5 grids
      GTiff grid reading: speed-up retrieving data in last accessed tile
      gridshift: add a +no_z_transform flag
      Add NADCON5 transformation method support and database entries
      metadata.sql: bump PROJ_DATA.VERSION to 1.13
      Database: add concatenated operations for NADCON5 transformations
      Add a GenericShiftGrid::valuesAt() method for faster value retrieval
      gridshift: use GenericShiftGrid::valuesAt()
      pj_get_suggested_operation(): make sure to use NADCON5 grids rather than HPGN ones for NAD83 to NAD83(HARN)
      bench_proj_trans: add options to add random noise
      gridshift: cache grid values when interpolating repeatedly in the same grid cell
      pj_get_suggested_operation(): tune so that NADCON5 grid is used for NAD27->NAD83 on CONUS
      schemas/v0.5/projjson.schema.json: fix wrong inheritance that cause validation issues when using a DynamicGeodeticReferenceFrame or DynamicVerticalReferenceFrame
      schemas/v0.6/projjson.schema.json: fix wrong inheritance that cause validation issues when using a DynamicGeodeticReferenceFrame or DynamicVerticalReferenceFrame
      Add validation of dynamic geographic and vertical CRS against projjson schema
      aeqd_s_forward(): cleanup code and improve performance in polar case
      WKT <--> PROJ: correctly map 'Lambert Azimuthal Equal Area (Spherical)' to '+proj=laea +R_A'
      Avoid cppcheck master warnings
      Add comments about why we assign in 2 steps
      cea/laea: do not export +R_A on a spherical ellipsoid (fixes recent master commit)
      set_ellipsoid(): avoid floating point division by zero with f=2
      ProjectedCRS::identify(): relax trust in id/authority in definition to identify
      Doc: make 'program' an alias of 'ref'
      Doc: add separate title for invproj and invgeod, otherwise links to invproj/invgeod would have the proj/geod labels
      Fix build with -DPROJ_INTERNAL_CPP_NAMESPACE
      install.rst: improve instructions regarding proj-data (fixes #3539)
      proj_create_crs_to_crs_from_pj(): add a ONLY_BEST=YES option (fixes #3533)
      proj_create_crs_to_crs(): emit a debug message if the best transformation cannot be used / cs2cs: add a --only-best=no switch
      proj_clone(): avoid emitting errors on tranformations where some are not instanciable
      Add link to PROJ doc when ONLY_BEST warning/error triggers, and correctly propagate errorIfBestTransformationNotAvailable to alternate operations
      Add PROJ_ONLY_BEST_DEFAULT environment variable, and 'only_best_default' proj.ini setting
      Check about consistent celestial body: relax tolerance for Mars use cases and add a PROJ_IGNORE_CELESTIAL_BODY=YES environment variable
      Update docs/source/apps/cs2cs.rst
      resource_files.rst: use literalinclude for proj.ini
      cs2cs: add example demonstrating --only-best usefulness
      Fix related to force_over
      best_only: move warning at the PJ* level
      proj.ini: do not set 'only_best_default' at all; and when set to on/off, disable related warnings
      formatting fix
      CI Conda: remove patches from upstream proj.4 feedstock as it is applied in PROJ master
      .github/workflows/conda.yml: partial revert of 6dbee23fa9c47d6abd0a7251fe70756fe997f878 to only do Conda builds on push, not pull request
      Add correctly named createTunisiaMiningGrid() / proj_create_conversion_tunisia_mining_grid() and deprecate the wrongly named methods (fixes #3543)
      CoordinateMetadata: add C++ class, WKT and PROJJSON support
      JSON/WKT import: test invalid CoordinateMetadata
      C API: add PJ_TYPE_COORDINATE_METADATA, proj_coordinate_metadata_get_epoch(), support if in proj_create() and proj_get_source_crs()
      createFromUserInput(): accept 'CRS_name@decimal_year' syntax to instanciate a CoordinateMetadata
      createOperations(): support one of source/target to be a CoordinateMetadata
      install.sh: validate PROJJSON CoordinateMetadata
      Add CRS::isDynamic()
      CoordinateMetadata: require epoch for dynamic CRS, forbid it for static CRS
      Typo fixes and other changes to make ./scripts/fix_typos.sh happy
      createFromUserInput(): make http://www.opengis.net/def/crs/IAU/2015/XXXX work (fixes #3568)
      Actually fix proj_normalize_for_visualization() on a transformation got with FORCE_OVER=YES (fixes #3567)
      proj_create_from_wkt(): make it work on COORDINATEMETADATA[]
      Database: update to EPSG 10.081
      Add support for DatumEpoch property in GeodeticReferenceFrame and VerticalReferenceFrame, in WKT and PROJJSON (refs #3571)
      Add support for minimumValue, maximumValue, rangeMeaning properties in CoordinateSystemAxis, in WKT and PROJJSON (refs #3571)
      Database: resync ESRI objects with https://github.com/Esri/projection-engine-db-doc at tag v3.1.0
      projjson.rst: remove mention about COORDINATEMETADATA not being implemented
      projjson.rst: remove mention of current version which is redundant with history paragraph
      test/unit/test_io.cpp: test importing invalid WKT/JSON with datum anchor, axisminval, axismaxval, rangemeaning
      WKT import: make axis direction and range meaning enumeration case insensitive as mandated by spec
      Implement EPSG:9621 'Similarity transformation' and import related transformations from EPSG
      typo fixes
      Implement AffineCS and handle it in WKT/PROJJSON
      createBoundCRSToWGS84IfPossible(): factor code. No functional change
      createBoundCRSToWGS84IfPossible(): do not report +towgs84 for a CRS with multiple extents, such as EPSG:6316 (refs #3246)
      C API: add proj_get_domain_count(), proj_get_area_of_use_ex() and proj_get_scope_ex()
      Add a .pre-commit-config.yaml pre-commit configuration file
      Doc: add a dev_practices.rst page
      Add .git-blame-ignore-revs
      test/benchmark/CMakeLists.txt: hopefully fix Conda Windows build failure related to 'warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc'
      README.md: remove appveyor badge [ci skip]
      Update to clang-format 15
      Add aa818d6772887453432ce607410b784ff56308a1 to .git-blame-ignore-revs
      Use explicitly clang-format-15
      pj_get_suggested_operation(): handle longitudes outside of [-180,180] for coordinate operation selection (fixes #3594)
      projinfo: fix long option name --source-crs (fixes #3600)
      Doc: Prevent double hypen (--) to be replaced by Unicode long dash character
      .readthedocs.yaml: do not do builds only if the only changes are in docs/ or .readthedocs.yaml
      proj_trans(): restore behaviour of PROJ 9.1 with transforming points in northern USA states from NAD27 to WGS 84 when no grid is available
      Database: update to EPSG 10.082
      proj_create_crs_to_crs(): restore behaviour of PROJ 9.1 (fixes #3613)
      WKT1 parser: only emit warning when encountering invalid UNKNOWN WKT1 axis direction (fixes #7210)
      proj_pj_info(): make it behave like before ONLY_BEST addition (fixes #3619)
      pj_get_suggested_operation(): tune for GDA94 <--> WGS84 and GDA2020 <--> WGS84
      pj_get_suggested_operation(): avoid string comparisons by precomputing a boolean
      createOperations(): avoid very poor performance / 'Too deep recursion in createOperations()' on a geographic CRS whose datum name is the alias of an official one (fixes #3623)
      createOperations(): improve datum equivalence checking by passing databaseContext argument (refs #3623)
      .github/workflows/mac/before_install.sh: add pkg-config
      eck4.cpp: improve code readability. No computation changes
      Inverse eck4: add checks for projection domain (fixes #2152)
      .github/workflows/mac/before_install.sh: add pkg-config
      Fix clang-tidy -checks=performance-inefficient-string-concatenation in library and apps codee
      WKT1 parser: support inf as inverse flattening value (fixes Toblerity/Fiona@1208)
      isea.cpp: add comment about inverse
      Merge pull request #3630 from rouault/NEWS_fix
      Merge pull request #3633 from rouault/fix_3632
      Merge pull request #3635 from rouault/fix_3629
      Merge pull request #3636 from rouault/nad83_3d_as_wkt1_esri
      testvarious: do not output program name / version number
      Merge pull request #3642 from rouault/fix_3639
      Merge pull request #3643 from rouault/epsg_10_083
      Merge pull request #3646 from rouault/epsg_10_084
      Merge pull request #3652 from rouault/fix_3651
      Merge pull request #3656 from rouault/fix_3654
      Merge pull request #3661 from roua…
lbam added a commit to Amsterdam/mapserver that referenced this issue Apr 22, 2024
We previously ran into MapServer/MapServer#6478 when trying to upgrade
our Ubuntu base image and added the file "epsg" as a hack to work around
it in 20d7dc7. This adds a regression
test for that upstream issue.
lbam added a commit to Amsterdam/mapserver that referenced this issue Apr 22, 2024
We previously ran into MapServer/MapServer#6478 when trying to upgrade
our Ubuntu base image and added the file "epsg" as a hack to work around
it in 20d7dc7. This adds a regression
test for that upstream issue.

I have tested this with "COPY epsg /usr/share/proj" removed from the
Dockerfile, and that makes it fail.
lbam added a commit to Amsterdam/mapserver that referenced this issue Apr 22, 2024
We previously ran into MapServer/MapServer#6478 when trying to upgrade
our Ubuntu base image and added the file "epsg" as a hack to work around
it in 20d7dc7. This adds a regression
test for that upstream issue.

I have tested this with "COPY epsg /usr/share/proj" removed from the
Dockerfile, and that makes it fail.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants