Skip to content

Releases: OSGeo/PROJ

PROJ 9.2.1

01 Jun 07:13

Choose a tag to compare

9.2.1 Release Notes

Database updates

  • Add alias for old ESRI datum/CRS names of EPSG:8353 S_JTSK_JTSK03_Krovak_East_North (#3678)
  • Pseudo Mercator now supported with IAU CRS's (#3645)
  • Updated to EPSG 10.088 (#3731)

Bug fixes

  • Fixed build errors with Cygwin (#3642)
  • PROJ string CRS parser: make sure that PROJ arguments of the rotated string are kept in the WKT representation (#3656)
  • Fix slowness on proj_trans() when doing WGS 84 <--> NAD83 conversions (#3661)
  • vgridshift/gridshift: accept hydroid_height as valid band description (#3675)
  • WKT/PROJJSON: import/export accuracy of ConcatenatedOperation (#3676)
  • Coordinate operation factory: count identified concatenated operations as a single step (#3677)
  • EngineeringCRS: make proj_create_engineering_crs() set a datum name and relax isEquivalentTo() comparisons (#3685)
  • PROJJSON: fix import/export of integer parameter value, and deal with interpolation CRS parameters in conversions (#3695)
  • CMake: avoid imbalanced cmake_policy push/pop if TIFF or CURL dependency cannot be found (#3697)
  • proj_create_crs_to_crs(): restore transformation selection behaviour of PROJ 9.1 when grids are missing (#3707)
  • ESRI WKT: improve roundtrip of name and definition for UPS WGS84 CRS (#3720)
  • CRS instanciation from PROJ.4 string: set 'Unknown based on XXXX ellipsoid' datum name when instanciating from known +a, +rf (#3727)
  • cs2cs / proj_create_crs_to_crs(): fix regression with geocentric CRS (#3729)
  • proj_trans(): set PROJ_ERR_COORD_TRANSFM_NO_OPERATION error when failing in ONLY_BEST=YES mode (#3730)
  • tinshift: raise maximum size of JSON file to 100 MB (#3736)

PROJ 9.2.0

01 Mar 10:06

Choose a tag to compare

9.2.0 Release Notes

Updates

  • Database

    • EPSG updated to EPSG 10.082 (#3609)

    • ESRI objects updated to v3.1.0 (#3575)

    • Added Slovenian geoid model SLO-VRP2016/Koper (#3610)

  • Projections

    • Added generic Space Oblique Mercator (#3338)

    • Inverse eck4: Add checks for projection domain (#3625)

  • Transformations

    • Added support for NADCON5 grids and transformation method (#3510)

    • Added option ONLY_BEST=YES (#3535)

      When enabled only use the best possible transformation between two CRS's can be
      instantiated. If the best possible transfomations can't be instantiated it will
      fail instead of opting for the next best transformation.

      With ONLY_BEST=YES a transformation will fail if a needed grid is unavailable.

      The option can be toggled in proj.ini and with --only-best in cs2cs.

    • Implement 'Similarity transformation' (EPSG:9621) and import related
      tranformations from EPSG (#3578)

    • Optimise transformations between GDA94, GDA2020 and WGS84 (#3621)

  • Performance improvements

    • Pass PJ_COORD by reference for fwd4d and inv4d callbacks (#3503)

    • Improved of inverse meridian length calculations (#3516)

    • Avoid very poor performance on a geographic CRS whose datum name is the alias of an official one (#3624)

  • Well-Known Text improvements

    • Support WKT:2019 COORDINATEMETADATA[] construct (#2711)

    • implement alterCSLinearUnit for CompoundCRS (#3325)

    • Implement alterCSLinearUnit for BoundCRS (#3327)

    • Added PJ_TYPE_DERIVED_PROJECTED_CRS (#3488)

    • Added support for ISO19111 CoordinateMetadata class (#3562)

    • Update WKT import to support WKT2 corrigendum (#3573)

    • WKT import: Make axis direction and range meaning enumeration case
      insensitive as mandated by spec (#3577)

    • Implement AffineCS and handle it in WKT (#3579)

    • WKT1 parser: Support inf as inverse flattening value (#3626)

  • PROJJSON

    • Version number changed to 0.6

    • Added an additional optional source_crs property in abridged_transformation (#3454)

    • Added support for ISO19111 CoordinateMetadata class (#3562)

    • Implement AffineCS and handle it in PROJJSON (#3579)

  • C/C++ API

    • C API: add proj_get_domain_count(), proj_get_area_of_use_ex() and proj_get_scope_ex() (#3588)

    DEPRECATIONS

    The following functions have been deprecated and will be removed in a future version.

    • C API function proj_rtodms. Use proj_rtodms2 instead (#3431)

    • C experimental API function proj_create_conversion_tunisia_mapping_grid().
      Use proj_create_conversion_tunisia_mining_grid() instead (#3559)

    • C++ API function createTunisiaMapingGrid(). Use createTunisiaMiningGrid() instead (#3559)

    • Added explicit NaN handling to proj_trans and gie (#3603)

  • CMake

    • Added uninstall target (#3362)

    • Adopted use of TIFF:TIFF and CURL::libcurl targets (#3374)

  • Security improvements

    • Replaced uses of sprintf with the safer snprintf (#3421, #3431)
  • Various other improvements

  • Implemented platform independent mutex for better results on lesser used platforms (#3425)

  • Improved name and remarks in descriptions of some vertical transformations (#3334)

  • Implemented stricter matching by name to avoid false positives (#3487)

  • Improved numerical accuracy of the meridian length calculations and its inverse (#3516)

  • Added PROJ_IGNORE_CELESTIAL_BODY=YES environment variable that allows better matching of
    non-earth shaped ellipsoids to other celestial bodies (#3569)

Bug fixes

  • rtodms(): fix potential buffer overflow not dealt with (#3441)

  • NetworkFile::open(): fix memory leak in unlikely error code path (#3443)

  • When importing LOCAL_CS["foo"], generates a non-empty name for the datum (#3491)

  • Avoid unit mix-up in CRS::alterCSLinearUnit for DerivedProjectedCRS (#3499)

  • WKT to PROJ conversions: Map 'Lambert Azimuthal Equal Area (Spherical)' to +proj=laea +R_A (#3526)

  • ProjectedCRS::identify(): Relax trust in id/authority in definition to identify (#3532)

  • Fix instantion of http://www.opengis.net/def/crs/IAU/2015/xxx URNs (#3569)

  • Fix proj_normalize_for_visualization() on a transformation with FORCE_OVER=YES (#3570)

  • createBoundCRSToWGS84IfPossible(): Do not report +towgs84 for a CRS with multiple extents,
    such as EPSG:6316 (#3587)

  • pj_get_suggested_operation(): handle longitudes outside of [-180,180] for coordinate
    operation selection (#3595)

  • WKT1 parser: only emit warning when encountering invalid UNKNOWN WKT1 axis direction (#3618)

  • projinfo: fix long option name --source-crs (#3601)

PROJ 9.1.1

01 Dec 10:01

Choose a tag to compare

9.1.1 Release Notes

Updates

  • Database: register at_bev_AT_GIS_GRID_2021_09_28 grid (#3442)

Bug fixes

  • Implement alterGeodeticCRS and stripVerticalComponent for DerivedProjected (#3482)

  • Various improvements to handling of DerivedProjectedCRS (#3482, #3477, #3342, #3319, #3317)

  • Add missing includes (#3459)

  • cs2cs: better validate value of -W option (#3453)

  • DatabaseContext::lookForGridInfo(): fix caching of filenames and set correct URLs (#3448)

  • Database: register in grid_alternatives grids from PROJ-data that have no corresponding transformation record (#3446)

  • cass projection: fix forward computation of easting (#3433)

  • Implement Geographic/Vertical Offset conversions (#3413)

  • vandg projection: handle +over to extend the validity domain outside of |lon|>180deg (#3427)

  • eqdc projection: avoid floating point division by zero in non-nominal case (#3415)

  • createOperations(): fix issues when transforming between Geog3D and DerivedGeog3D CRS with Geographic3D offsets method (#3411)

  • VerticalCRS::_isEquivalentTo(): do not consider VerticalCRS and DerivedVerticalCRS as equivalent (#3408)

  • cct and cs2cs: Avoid problems when encountering UTF-8 BOM characters at beginning of input files (#3395)

  • createFromUserInput(): Improved lookup when approximate name is provided (#3371)

  • projinfo / cs2cs : auto promotion to 3D of CRS specified by name (#3367)

  • findsOpsInRegistryWithIntermediate(): make it work when source/target geodetic CRS has no known id (#3365)

  • createOperations(): emulate PROJ < 6 behavior when doing geocentric <--> geographic transformation between datum with unknown transformation (#3361)

  • Fix issue when transforming from/into a WKT2 Bound VerticalCRS with a 'Geographic3D to GravityRelatedHeight' method (#3355)

  • proj_normalize_for_visualization(): take into account FORCE_OVER property from source operation (#3350)

  • Link geodtest against libm when available (#3341)

PROJ 9.1.0

01 Sep 14:55

Choose a tag to compare

9.1.0 Release Notes

Updates

  • Database

    • Database: update to EPSG v10.074 (#3273)

    • Update ESRI objects to version 3.0.0 (#3257)

    • Generate null transformation between geodetic/vertical datum ensemble and its members (#3266)

    • Add fk delete cascade to database tables for improved customizability of the database (#3237)

    • Add Svalbard geoid grid no_kv_arcgp-2006-sk to grid alternatives (#3292)

    • Added French grid fr_ign_RAF20 to grid alternatives (#3228)

  • WKT & PROJJSON

  • WKT2 parser: allow unit-less PARAMETER for coordinate operations (#3271)

  • WKT and PROJJSON adjustments (#3234)

  • Bump PROJJSON to v0.5 (#3216)

  • Change order of horizontal and vertical operations when dealing with WKT1 / PROJ4 compound CRS (#3127)

  • Coordinate Operations

  • Implement Vertical Offset and slope transformation method (#3200)

  • Add Interrupted Mollweide (land and ocean view) projections (#3139)

  • Add invertible Horner polynomials (#3133)

  • Optimizations

  • NTv2 and GTX grid readers: add a cache of lines to speed-up (#3241)

  • IComparable::isEquivalentTo() optimizations (#3233)

  • Various Updates

  • createOperations() / proj_trans(): better take into account area of interest name / do not only keep first returned coordinate operation (#3282)

  • createOperations(): take into account axis unit and inversion of target DerivedProjectedCRS (#3281)

  • Allow a Compound CRS with derived projected (#3283)

  • Make "Vertical Offset and Slope" method usable as a deriving conversion of a DerivedVerticalCRS (#3270)

  • PROJ pipeline generator: recognize opposite Helmert transformations using a different convention (#3265)

  • createOperations(): prefer simpler pipelines / affects WGS 84 to GDA94/GDA2020 (#3248)

  • Make it possible to determine which grid files were actually used during a transformation (#3180)

  • Transformation: no longer do vertical trasnformation when doing compound CRS to 2D CRS / add --3d to cs2cs (#3119)

  • Deprecate PROJ4 CMake name (#3094)

  • Use GNUInstallDirs for CMake install locations (#3100)

  • Introduce PROJ_DATA environment variable to deprecate PROJ_LIB (#3253)

Bug fixes

  • projinfo: fix crash on --list-crs when proj.db cannot be opened (#3290)

  • getCRSInfoList(): fix retrieval of projected_crs given by text_definition
    only (#3289)

  • WKT parser: fix issue when parsing some WKT1 with Hotine_Oblique_Mercator_Azimuth_Center and ignoring rectified_grid_angle (#3280)

  • WKT1 import: better deal when the angular unit of the GEOGCS[] of the
    PROJCS[] doesn't match the one from the database (#3274)

  • createOperations(): avoid potential infinite recursions (#3264)

  • WKT ESRI: fix related to projected CRS export and add support for geographic
    3D CRS with LINUNIT node (#3256)

  • proj_grid_info(): make it work again with remote grids (#3239)

  • createOperations(): fix projected CRS with non-metre horiz&vertical unit and towgs84 to gencentric CRS (#3231)

  • createOperations(): fix infinite recursion in a complex case (#3226)

PROJ 9.0.1

15 Jun 14:40

Choose a tag to compare

Database updates

  • Update to EPSG 10.064 (#3208)

  • Add OGC:CRS84h (WGS 84 longitude-latitude-height) (#3155)

Bug fixes

  • Use CMAKE_INSTALL_MANDIR to override default (#3081)

  • Increase MAX_ITER so Mollweide forward projection works near the poles (#3082)

  • Fix wrong results with SQLite 3.38.0 (#3091)

  • Fix issue when transforming from/to BoundCRS of 3D CRS with non-Greenwich prime meridian, created from WKT (#3098)

  • Fix issues with WKT of concatenated operations (#3105)

  • CMake: fix installation of proj.pc on Windows (#3109)

  • createOperations(): fix issue in transformation northing, easting projected CRS -> +proj=longlat +lon_wrap (#3110)

  • unitconvert: round to nearest date when converting to yyyymmdd (#3111)

  • Fix comparison of GeodeticRefrenceFrame vs DynamicGeodeticReferenceFrame (#3120)

  • createOperations(): fix transformation involving CompoundCRS, ToWGS84 and PROJ4_GRIDS (#3124)

  • Fix datum names when importing from PROJ4 crs strings (affects some transformations using geoidgrids) (#3129)

  • Deal with PARAMETER["EPSG code for Interpolation CRS",crs_code] (#3149)

  • createOperations(): fix CompoundCRS[BoundCRS[ProjectedCRS],BoundCRS[VerticalCRS]] to Geog3DCrs (#3151)

  • ITRF2014: fix ITRF2014:ITRF88,ITRF94 and ITRF96 definitions (#3159)

  • createBoundCRSToWGS84IfPossible(): improve selection logic to generate +towgs84= taking into account extent (#3160)

  • createOperations(): fix some complex cases involving TOWGS84 and CompoundCRS (#3163)

  • Fix cmake CURL dependency, update appveyor - vcpkg interaction (#3185)

  • WKT import: deal with Projected CRS that is a mix of WKT1:GDAL / WKT1:ESRI (#3189)

  • createOperations(): fix/improve result of 'BD72 + Ostend height ' to 'WGS84+EGM96 height' (#3199)

  • Identifier::isEquivalentName(): fix when ending by ' + ' which could indirectly cause an infinite stack call in master (#3202)

  • WKT import: correctly deal with absence of Latitude_Of_Origin parameter in WKT1 ESRI with Stereographic projection (#3212)

  • PROJJSON parser: do not error out if a datum ensemble member is unknown in the database (#3223)

PROJ 9.0.0

01 Mar 19:31
65c84b6

Choose a tag to compare

9.0.0 Release Notes

Breaking Changes

Updates

  • Database updates:
    • ESRI projection engine db to version 12.9 (#2943)
    • EPSG v10.054 (#3051)
    • Vertical grid files for PL-geoid-2011, Polish geoid model (#2960)
    • Belgian geoid model hBG18 to grid alternatives (#3044)
  • Add new option to proj_create_crs_to_crs_from_pj method to force +over on
    transformation operations (#2914)
  • Specify CMAKE_INSTALL_RPATH for macOS; use -rpath LDFLAGS for tests (#3009)
  • Implement Geographic3D to Depth/Geog2D+Depth as used by ETRS89 to CD Norway depth (#3010)
  • Allow PROJ_LIB paths wrapped with double quotes (#3031)
  • Use external gtest by default when possible (#3035)
  • CMake: make BUILD_SHARED_LIBS=ON the default even on Windows (#3042)
  • proj.ini: add a ca_bundle_path variable (#3049)

Bug fixes

  • Fix extremely long parsing time on hostile PROJ strings (#2968)
  • CMake: fix warning with external googletest (#2980)
  • proj_get_crs_info_list_from_database(): report PJ_TYPE_GEODETIC_CRS for IAU_2015 -ocentric geodetic CRS (#3013)
  • peirce_q: rename +type parameter wrongly introduced in 8.2.1 to +shape (#3014)
  • Set more precise error code for parsing errors in proj_create() (#3037)
  • createOperations(): fix transformations from/to a BoundCRS of a DerivedGeographicCRS coming from WKT (#3046)
  • Better deal with importing strings like +init=epsg:XXXX +over (#3055)
  • Fix importing CRS definition with +proj=peirce_q and +shape different from square or diamond (#3057)

PROJ 8.2.1

01 Jan 15:40

Choose a tag to compare

8.2.1 Release Notes

Updates

  • Database updated with EPSG v. 10.041 (#2974)

Bug fixes

  • BoundCRS WKT import: fix setting of name (#2917)

  • PROJStringFormatter::toString(): avoid invalid iterator increment (#2932)

  • Ensure CApi test are cross-platform (#2934)

  • createOperations(): do not stop at the first operation in the PROJ namespace or vertical transformations (#2937)

  • createOperationsCompoundToCompound(): fix null pointer dereference when connection to proj.db doesn't exist. (#2938)

  • Fix windows.h conflict with Criterion::STRICT (#2950)

  • Cache result of proj_get_type() to help for performance of proj_factors() (#2967)

  • createOperations(): improvement for "NAD83(CSRS) + CGVD28 height" to "NAD83(CSRS) + CGVD2013(CGG2013) height" (#2977)

  • WKT1 import: correctly deal with missing rectified_grid_angle parameter (#2986)

  • Fix and additional options for Peirce Quincuncial projections (#2978)

  • Fix build with Intel C++ compiler (#2995)

PROJ 8.2.0

01 Nov 17:36

Choose a tag to compare

8.2.0 Release Notes

Announcements

From PROJ 9.0.0 and onwards CMake will be the only build system bundled
with the PROJ package. As a consequence support for Autotools builds will
stop when the 8.2 branch of PROJ reaches end of life. We encourage
everyone to adjust their build workflows as soon as possible and report
any discrepancies discovered between Autotools and CMake builds.

Details about the build system unification can be found in PROJ RFC 7.

Updates

  • Added the S2 projection (#2749)

  • Added support for Degree Sign on input (#2791)

  • ESRI WKT: add support for import/export of (non interrupted) Goode Homolosine (#2827)

  • Make filemanager aware of UWP Win32 API (#2831)

  • Add proj_create_conversion_pole_rotation_netcdf_cf_convention() to address netCDF datasets using a pole rotation method (#2835)

  • Emit better debug message when a grid isn't found (#2838)

  • Add support for GeodeticCRS using a Spherical planetocentric coordinate system (#2847)

  • PROJJSON: support additional properties allowed in id object (version, authority_citation, uri) for parity with WKT2:2019 (#2850)

  • Database layout modified to include "anchor" field to geodetic_datum and vertical_datum tables, consequently database layout version is increased to 1.2 (#2859)

  • proj_factors(): accept P to be a projected CRS (#2868)

  • Add IAU_2015 CRS definitions (#2876)

  • CRS::extractGeodeticCRS(): implement for DerivedProjectedCRS (#2877)

  • Added proj_trans_bounds() (#2882)

  • CMake: add a BUILD_APPS to be able to disable build of all applications (#2895)

  • CMake: generate invproj/invgeod binaries (symlinks on Unix, copy otherwise) (#2897)

  • CMake build: add generate_wkt1_parser and generate_wkt2_parser manual target, and logic to detect when they must be run (#2900)

  • Add fallback strategy for tinshift transform to use closest triangle for points not in any (#2907)

  • Database: update to EPSG v10.038 (#2910)

  • CMake: revise handling of symbol export and static builds (#2912)

Bug fixes

  • Fix O(n^2) performance patterns where n is the number of steps of a pipeline (#2820)

  • Detect ESRI WKT better in certain circumstances (#2823)

  • Fix performance issue on pipeline instanciation of huge (broken) pipelines (#2824)

  • Make sure to re-order projection parameters according to their canonical order if needed (#2842)

  • Fix database access across fork() when SQLite3 doesn't use pread64 (#2845)

  • Fix error in implementation of Inverse ellipsoidal orthographic projection that cause convergence to sometimes fail (#2853)

  • Fix handling of edge-case coordinates in invers ortho ellipsoidal oblique (#2855)

  • proj_normalize_for_visualization(): set input and output units when there are several alternative transformations (#2867)

  • CRS::identify(): fix ignoring CS order when identifying a geodetic CRS by a PROJ string with just the ellipsoid (#2881)

  • Fix CRS Equality with PROJ parameter order (#2887)

  • WKT concatenated operation parsing: fix when a axis order reversal conversion is the first or last operation (#2891)

  • WKT1 parser: recognize Lambert_Conformal_Conic as projection name for LCC 1SP or 2SP (#2893)

  • CMake: Always build gie if testing is requested (#2899)

  • Geographic 3D CRS: allow to export to WKT1:ESRI if only the GEOGCS is known (and thus extrapolating a VERTCS) (#2902)

  • 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 (#2913)

PROJ 8.1.1

01 Sep 18:25

Choose a tag to compare

8.1.1 Release notes

Updates

  • EPSG Database updated to version 10.028 (#2773)

Bug Fixes

  • Include algorithm header file to avoid build errors on Alpine Linux (#2769)

  • CMake: fix installation of executables on iOS (#2766)

  • Associate extents to transformations of CRS's that include GEOIDMODEL (#2769)

  • Logging: avoid some overhead when logging is not enabled (#2775)

  • ortho: remove useless and invalid log trace (#2777)

  • CMake: remove external nlohmann_json from INTERFACE_LINK_LIBRARIES target (#2781)

  • createOperations(): fix SourceTargetCRSExtentUse::NONE mode (#2783)

  • GeoTIFF grid reading: perf improvements (#2788)

  • Conversion::createUTM(): avoid integer overflow (#2796)

  • Inverse laea ellipsoidal: return PROJ_ERR_COORD_TRANSFM_OUTSIDE_PROJECTION_DOMAIN when appropriates (#2801)

  • Make sure that proj_crs_promote_to_3D returns a derived CRS (#2806)

  • 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 (#2808)

  • WKT2 import/export: preserve PROJ.4 CRS extension string in REMARKS[] (#2812)

  • BoundCRS: accept importing/exporting in WKT2 and PROJJSON the scope/area/extent/id attributes (#2815)

  • ConcatenatedOperation::fixStepsDirection(): fix bad chaining of steps when inverse map projection is involved in non-final step (#2819)

PROJ 8.1.0

30 Jun 20:36

Choose a tag to compare

8.1.0 Release Notes

Updates

  • Database

    • Update to EPSG v10.027 (#2751)

    • Decrease DB size by using WITHOUT ROWID tables (#2730) (#2647)

    • Add a ANALYZE step during proj.db creation allowing for faster lookups (#2729)

    • Added a PROJ.VERSION metadata entry (#2646)

    • Added NGO48 (EPSG:4273) to ETRS89 (EPSG:4258) triangulation-based transformation (#2554)

    • Additions to the norwegian NKG2020 transformation (#2548)

    • ESRI projection database updated to version 12.8 (#2717)

  • API additions

    • Added proj_get_geoid_models_from_database() function that returns a list of geoid models available for a given CRS (#2681)

    • Added proj_get_celestial_body_list_from_database that returns a list of celestial bodies in the PROJ database (#2667)

    • Added proj_get_celestial_body_name() (#2662)

  • Various improvements

    • proj_trans/cs2cs: If two operations have the same accuracy, use the one that is contained within a larger one (#2750)

    • Share SQLite database handle among all contexts (#2738)

    • Add proj/internal/mutex.hpp as compat layer for mingw32 for std::mutex (#2736)

    • projsync: make it filter out files not intended for the current version (#2725)

    • Improvements related to DerivedVerticalCRS using Change Unit and Height/Depth reversal methods (#2696)

    • Update internal nlohmann/json to 3.9.1, and add a CMake option to be able to use external nlohmann/json (#2686)

    • createFromUserInput(): change name of CRS built from URN combined references to match the convention of EPSG projected CRS (#2677)

    • Parse compound id with two authorities, like ESRI:103668+EPSG:5703 (#2669)

    • Added projinfo option --list-crs (supports --area) (#2663)

    • Added support for hyperbolic Cassini-Soldner (#2637)

    • Added capability to get SQL statements to add custom CRS in the database (#2577)

Bug fixes

  • Fix 'Please include winsock2.h before windows.h' warning with msys (#2692)

  • Minor changes to address lint in geodesic.c (#2752)

  • BoundCRS::identify(): avoid incompatible transformation for WKT1 / TOWGS84 export (#2747)

  • proj_create(): do not open proj.db if string is a PROJ string, even if proj_context_set_autoclose_database() has been set (#2735)

  • Fix export of transformation to PROJ string in a particular situation where CompoundCRS are involved (#2721)