aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2018-02-01Merge pull request #749 from kbevers/clean-proj.defKristian Evers
Remove unnecessary functions and restructure proj.def.
2018-02-01Remove unnecessary functions and restructure proj.def. Closes #728Kristian Evers
2018-02-01Merge pull request #731 from busstoptaktik/4D-API_cs2cs-styleThomas Knudsen
[WIP] 4D API cs2cs style
2018-01-31Renamed PJ_IO_UNITS_RADIANS to PJ_IO_UNITS_ANGULARThomas Knudsen
2018-01-31Test material for the cs2cs emulation in the 4D API.Kristian Evers
The GIGS tests that are known to work are added to the CMake test setup. The GIGS gie files have been auto-translated from the existing json-files and some corrections to tolerances have been necessary since gie uses different norms than GIGS specify. The GIGS tolerances are specified as the infinity norm of angular coordinates, whereas gie uses the actual distances between calculated and expected coordinates (using geodesics). In a few tests +towgs84 is overriden from the EPSG inits to avoid creeping numerical inaccuracy in roundtrips. Co-authored-by: Thomas Knudsen <thokn@sdfe.dk> Co-authored-by: Kristian Evers <kristianevers@gmail.com>
2018-01-31proj_roundtrip: simplify control logicThomas Knudsen
2018-01-31Introduce compatibility for cs2cs-style proj-strings into the 4D API.Thomas Knudsen
Parameters such as towgs84, nadgrids and geoidgrids was previously only handled by pj_transform(). This commit add a compatibility layer in proj_create() by calling the pj_cs2cs_emulation_setup() function. This function sets up a handful of predefined transformation objects on the PJ object that is being created. Each of these transformation objects are related to the cs2cs-style parameters we are trying to emulate in the 4D API. That is, if the +towgs84 parameters is used we create P->helmert with the parameters specified in +towgs84. Similarly for +axis, +nadgrids and +geoidgrids. When these transformation objects exists we use them in the prepare and finalize functions in pj_fwd/ pj_inv. If no cs2cs-style parametes are specified we skip those parts of the prepare and finalizing steps. Co-authored-by:Thomas Knudsen <thokn@sdfe.dk> Co-authored-by:Kristian Evers <kristianevers@gmail.com>
2018-01-31Merge pull request #748 from kbevers/has_inverseKristian Evers
Add pj_has_inverse().
2018-01-31Add pj_has_inverse().Kristian Evers
With the introduction of the "inverted" flag on PJ objects you can no longer rely on checking that the inv, inv3d and inv4d functions are available on said PJ object. The function is used internally a few places and otherwise exposed in proj_api.h to ensure that users of the old programming interface can safely check if an operation has an inverse.
2018-01-26Make sure to mark +proj param used so it shows up in the definition. Fixes #744.Kristian Evers
2018-01-25Fix null pointer dereference in pj_datum_tranform() caused by ↵Even Rouault
d0dbf48438f9e152314abf294467cb54f9ae0e70 changes. Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5649. Credit to OSS Fuzz
2018-01-23Merge pull request #743 from kbevers/fix-nullgrid-datumtransformKristian Evers
Handle ellipsoid parameters correctly when using +nadgrids=@null.
2018-01-23Handle ellipsoid parameters correctly when using +nadgrids=@null. Fixes #22.Kristian Evers
Make sure to not change ellipsoid parameters to WGS84 when applying the null grid. Coordinates will still refer to the input ellipsoid so we keep the original parameters which in turn will be used when the coordinates are transformated to/from cartesian/geocentric space. Adjusted regression test material in nad/proj_outIGNF.dist slightly to accomodate numerical differences at the mm level. The transformations in question are at best accurate to about 1m so this shouldn't change real world usage of these transformations.
2018-01-22Adding rudimentary docs for the pipeline operation [skip ci].Kristian Evers
2018-01-22Add details about grid file formats in relevant sections of the ↵Kristian Evers
documentation [skip ci]
2018-01-22Add deformation docs-page (missing from previous commit) [skip ci]Kristian Evers
2018-01-17Merge pull request #739 from kbevers/pipeline-inverseKristian Evers
Pipeline and cct inverse fixes
2018-01-17Adding a few more test cases for pipeline, ensuring better test coverageKristian Evers
2018-01-17Fix "double inversions" in pipelines, require a defined forward operation.Kristian Evers
"+proj=pipeline +inv +step +urm5 +n=0.5 +inv" now works as expected, returning the forward operation of urm5. In principle adding more +inv's should also work, resulting in the forward operation when an even number of +inv's are present, and the inverse when an odd number of +inv's are present. "+proj=pipeline +step +urm5 +n=0.5 +inv" fails at initialization since no forward operation can be performed. This is a new requirement, but aligns perfectly with the rest of the library since no operation without a forward method exists.
2018-01-11Merge pull request #737 from rouault/axisswap_add_breakEven Rouault
axisswap initialization: avoid switch case fallthrough
2018-01-11Set inv*-functions to zero on pipeline PJ's where an inverse does not exist.Kristian Evers
Some projections do not have an inverse mapping. If such a projection is used as a (forward) step in a pipeline we won't be able to perform an inverse operation using the pipeline. By setting the inv, inv3d and inv4d pointers to zero we signal to the caller that an inverse mapping is not available.
2018-01-11Fail gracefully when invalid inverse operation is specified in cct.Kristian Evers
Similar to proj and cs2cs, cct now returns immediately when trying to do an inverse operation that is not possible, for example using proj=urm5 which doesn't have an inverse: $ cct.exe -I +proj=pipeline +step +proj=urm5 +n=0.5 Inverse operation not available
2018-01-11axisswap initialization: avoid switch case fallthroughEven Rouault
case without break are really confusing, and should be avoided as much as possible IMHO. Also error out if a unrecognized character is provided as the axis value.
2018-01-11Fix breakage of previous commit (bis)Even Rouault
2018-01-11Fix breakage of previous commitEven Rouault
2018-01-11PJ_axisswap.c: validate axis value. Fixes ↵Even Rouault
https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5073. Credit to OSS Fuzz. master only
2018-01-10Merge pull request #734 from aaronpuchert/remove-unused-macrosKristian Evers
Remove or use unused macros
2018-01-09Add gie tests to autoconf makefile.Kristian Evers
Download grid files as the first thing in the travis install script and that 'make check' can be run without errors caused by missing grids.
2018-01-09Convert GIGS tests to gie format and add to CMake testsKristian Evers
2018-01-09Add gie tests to CMake testing facilityKristian Evers
2018-01-09Added json to gie conversion scriptKristian Evers
2018-01-09Remove or use unused macrosAaron Puchert
Some macros seemed to be leftover from earlier code, so I removed them. Others seemed like they should have been used, but weren't. There should be no functional change, except the following: in floating- point arithmetic, x / y is not the same as x * (1.0 / y). It can be argued that using the multiplication is significantly faster, and the algorithm is approximative anyway. Otherwise, the constants are obviously not required. Also fixes one location in PJ_aitoff.c, where an enumeration value should have been used.
2018-01-08Allow usage of classic +axis parameter in axisswap.Kristian Evers
Instead of +order the classic PROJ.4 parameter +axis can used instead. This is mostly an inititive to simplify backwars compatibility in the 4D API. P->axis is initialized in pj_init() it can be assumed that it is set up correctly. +order and +axis are mutually exclusive.
2018-01-08Discern between 2D projected and 3D cartesian linear units (#732)Thomas Knudsen
2018-01-06Remove unused typedef from pj_init.cThomas Knudsen
2018-01-06Remove superfluous self-assignment in phi12Thomas Knudsen
2018-01-06Repair ratio numbers for units in pj_init_ctxThomas Knudsen
2018-01-06Eliminate potential zero-dereference in get_init.Thomas Knudsen
2018-01-05Custom unit factors in unitconvert.Kristian Evers
Added the possibility to use custom unit factors. Similar to the classic +to_meter parameter the conversion factor is related to meters, i.e. the factor for conversion from kilometers meters is 1000. The custom unit factors is given using the existing xy_in, xy_out, z_in and z_out parameters, for example: proj=unitconvert xy_in=4.5 +xy_out=mm
2018-01-05Avoid overwriting time component with zeroKristian Evers
2018-01-04Bar step-internal params from influencing pipeline driver init (#729)Thomas Knudsen
In cases such as: proj=pipeline step proj=utm zone=32 ellps=GRS80 ... The pj_init code would pick up the ellps information (and other material such as false eastings and northings) from the utm step and place it into the PJ object of the pipeline driver. This is not the intention, and is eliminated in this PR by terminating parameter searching (done by pj_param) once a step parameter is reached.
2018-01-03Introduce preparation/finalization steps in fwd/inv subsystem, supporting ↵Thomas Knudsen
arbitrary dimensionality in test code * Call trans func of same dimensionality as input in gie * Refactor prep/fin code for pj_fwd/pj_inv 2D,3D,4D * Remove prime meridian handling from pj_transform (now handled in pj_fwd_prepare/pj_inv_finalize) * Introduce prep/fin skips, mostly in support of axisswap and pipeline drivers * Refactor fwd/inv subsystem * pj_transform: Let pj_fwd/inv handle scaling * Let pj_fwd/inv3d fall back to 2D eventually
2018-01-03Add plate motion model parameters to ITRF init-files.Kristian Evers
Parameters for the plate motion models (PMM) for ITRF2008 and ITRF2014 are added to the ITRF2008/2014 init-files. The PMMs allow coordinates to be moved back and forward in time in plate fixed reference frames such as GR96 in Greenland which is defined as ITRF94@1996.623. Transforming an ITRF2014-coordinate to GR96 is done with: +proj=pipeline +step +init=ITRF2014:NOAM +t_epoch=1996.623 +t_obs=2017.584 +step +init=ITRF2014:ITRF94 +t_obs=1996.623 where the first step transforms the coordinate back in time to ITRF2014@1996.632 by using the ITRF2014 PMM. The second step transforms the ITRF2014 coordinate to ITRF94.
2017-12-21Deformation operation documentedKristian Evers
2017-12-20Merge pull request #724 from busstoptaktik/repair-cct-columnsThomas Knudsen
Repair column selector bug Fixes #723
2017-12-20Repair column selector bugThomas Knudsen
2017-12-20Merge pull request #722 from kbevers/divide-by-zero-cconKristian Evers
Avoid zero-division in ccon.
2017-12-20Avoid zero-division in ccon.Kristian Evers
Credit to OSS-Fuzz. https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4695
2017-12-19Merge pull request #721 from busstoptaktik/icelandThomas Knudsen
Reykjavik (1900) datum, prerequisites: Danish (Andræ) ellipsoid, and Copenhagen meridian introduced in support of the Reykjavik 1900 datum (Iceland). The magnitude of the Danish (1876) ellipsoid was originally given in French toise (fathoms) - the Andræ ellipsoid already in PROJ seems to have been transformed to meters using a conversion factor for German fathoms. This version, based on a French conversion factor of 1.94903631 m/toise, corresponds to the official value for the semimajor axis used by the Icelandic NMA, Landmælingar Íslands, LMI (Guðmundur Valsson, LMI, pers. comm. 2017-12-15). This value deviates by approximately one centimeter, compared to the truncated value of 6377019.27 m, given in the EPSG:7051 record.
2017-12-19Danish (Andrae) ellipsoid, and Copenhagen meridian introduced in support of ↵Thomas Knudsen
the Reykjavik 1900 datum (Iceland)