[Git][debian-gis-team/proj][experimental] 5 commits: Add patch from PR #1454 to fix proj-rdnap test failures.

Bas Couwenberg gitlab at salsa.debian.org
Mon May 6 19:59:08 BST 2019



Bas Couwenberg pushed to branch experimental at Debian GIS Project / proj


Commits:
c6a26f6f by Bas Couwenberg at 2019-05-06T18:29:37Z
Add patch from PR #1454 to fix proj-rdnap test failures.

- - - - -
396dc9ce by Bas Couwenberg at 2019-05-06T18:30:42Z
Update symbols for other architectures.

- - - - -
dd3a3801 by Bas Couwenberg at 2019-05-06T18:45:49Z
Update symbols for amd64.

- - - - -
cbbcdc88 by Bas Couwenberg at 2019-05-06T18:45:49Z
Add lintian overrides for manpage-has-errors-from-man.

- - - - -
80b406eb by Bas Couwenberg at 2019-05-06T18:45:49Z
Set distribution to experimental.

- - - - -


5 changed files:

- debian/changelog
- debian/libproj15.symbols
- + debian/patches/pr1454-createOperations-fix-case-of-ETRS89-3D-to-proj-string-with-nadgrids-and-geoidgrids.patch
- debian/patches/series
- + debian/proj-bin.lintian-overrides


Changes:

=====================================
debian/changelog
=====================================
@@ -1,3 +1,11 @@
+proj (6.1.0~rc1-1~exp2) experimental; urgency=medium
+
+  * Add patch from PR #1454 to fix proj-rdnap test failures.
+  * Update symbols for other architectures.
+  * Add lintian overrides for manpage-has-errors-from-man.
+
+ -- Bas Couwenberg <sebastic at debian.org>  Mon, 06 May 2019 20:30:48 +0200
+
 proj (6.1.0~rc1-1~exp1) experimental; urgency=medium
 
   * New upstream release candidate.


=====================================
debian/libproj15.symbols
=====================================
@@ -1,4 +1,4 @@
-# SymbolsHelper-Confirmed: 6.1.0~rc1 amd64
+# SymbolsHelper-Confirmed: 6.1.0~rc1 amd64 armel armhf ia64 mips mipsel powerpc powerpcspe
 libproj.so.15 #PACKAGE# #MINVER#
 * Build-Depends-Package: libproj-dev
  _Z10pj_ell_setP9projCtx_tP8ARG_listPdS3_ at Base 6.0.0
@@ -540,6 +540,7 @@ libproj.so.15 #PACKAGE# #MINVER#
  _ZN5osgeo4proj6common9DataEpochD2Ev at Base 6.0.0
  _ZN5osgeo4proj8internal10replaceAllERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_S9_ at Base 6.0.0
  _ZN5osgeo4proj8internal13c_locale_stodERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE at Base 6.0.0
+ (arch=amd64)_ZN5osgeo4proj8internal5splitERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES9_ at Base 6.1.0~rc1
  _ZN5osgeo4proj8internal5splitERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEc at Base 6.0.0
  _ZN5osgeo4proj8internal7ci_findERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPKc at Base 6.0.0
  _ZN5osgeo4proj8internal7tolowerERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE at Base 6.0.0
@@ -694,7 +695,8 @@ libproj.so.15 #PACKAGE# #MINVER#
  _ZN5osgeo4proj9operation14Transformation29createCoordinateFrameRotationERKNS0_4util11PropertyMapERKN7dropbox6oxygen2nnISt10shared_ptrINS0_3crs3CRSEEEESG_dddddddRKSt6vectorINS9_ISA_INS0_8metadata18PositionalAccuracyEEEESaISL_EE at Base 6.0.0
  _ZN5osgeo4proj9operation14Transformation33createTimeDependentPositionVectorERKNS0_4util11PropertyMapERKN7dropbox6oxygen2nnISt10shared_ptrINS0_3crs3CRSEEEESG_dddddddddddddddRKSt6vectorINS9_ISA_INS0_8metadata18PositionalAccuracyEEEESaISL_EE at Base 6.0.0
  _ZN5osgeo4proj9operation14Transformation35createGeographic2DWithHeightOffsetsERKNS0_4util11PropertyMapERKN7dropbox6oxygen2nnISt10shared_ptrINS0_3crs3CRSEEEESG_RKNS0_6common5AngleESK_RKNSH_6LengthERKSt6vectorINS9_ISA_INS0_8metadata18PositionalAccuracyEEEESaISS_EE at Base 6.0.0
- _ZN5osgeo4proj9operation14Transformation40createGravityRelatedHeightToGeographic3DERKNS0_4util11PropertyMapERKN7dropbox6oxygen2nnISt10shared_ptrINS0_3crs3CRSEEEESG_RKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt6vectorINS9_ISA_INS0_8metadata18PositionalAccuracyEEEESaIST_EE at Base 6.0.0
+ (arch=!amd64)_ZN5osgeo4proj9operation14Transformation40createGravityRelatedHeightToGeographic3DERKNS0_4util11PropertyMapERKN7dropbox6oxygen2nnISt10shared_ptrINS0_3crs3CRSEEEESG_RKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt6vectorINS9_ISA_INS0_8metadata18PositionalAccuracyEEEESaIST_EE at Base 6.1.0~rc1
+ (arch=amd64)_ZN5osgeo4proj9operation14Transformation40createGravityRelatedHeightToGeographic3DERKNS0_4util11PropertyMapERKN7dropbox6oxygen2nnISt10shared_ptrINS0_3crs3CRSEEEESG_RKSD_RKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKSt6vectorINS9_ISA_INS0_8metadata18PositionalAccuracyEEEESaISV_EE at Base 6.1.0~rc1
  _ZN5osgeo4proj9operation14Transformation42createTimeDependentCoordinateFrameRotationERKNS0_4util11PropertyMapERKN7dropbox6oxygen2nnISt10shared_ptrINS0_3crs3CRSEEEESG_dddddddddddddddRKSt6vectorINS9_ISA_INS0_8metadata18PositionalAccuracyEEEESaISL_EE at Base 6.0.0
  _ZN5osgeo4proj9operation14Transformation6createERKNS0_4util11PropertyMapERKN7dropbox6oxygen2nnISt10shared_ptrINS0_3crs3CRSEEEESG_RKSD_RKNS9_ISA_INS1_15OperationMethodEEEERKSt6vectorINS9_ISA_INS1_21GeneralParameterValueEEEESaISR_EERKSO_INS9_ISA_INS0_8metadata18PositionalAccuracyEEEESaISZ_EE at Base 6.0.0
  _ZN5osgeo4proj9operation14Transformation6createERKNS0_4util11PropertyMapERKN7dropbox6oxygen2nnISt10shared_ptrINS0_3crs3CRSEEEESG_RKSD_S6_RKSt6vectorINS9_ISA_INS1_18OperationParameterEEEESaISM_EERKSJ_INS9_ISA_INS1_14ParameterValueEEEESaIST_EERKSJ_INS9_ISA_INS0_8metadata18PositionalAccuracyEEEESaIS11_EE at Base 6.0.0
@@ -1045,8 +1047,12 @@ libproj.so.15 #PACKAGE# #MINVER#
  (optional=templinst)_ZNSt10shared_ptrIN5osgeo4proj8metadata6ExtentEED2Ev at Base 6.0.0
  (optional=templinst)_ZNSt10shared_ptrIN5osgeo4proj9operation14ParameterValueEED1Ev at Base 6.0.0
  (optional=templinst)_ZNSt10shared_ptrIN5osgeo4proj9operation14ParameterValueEED2Ev at Base 6.0.0
- (optional=templinst|arch=m68k mips64el ppc64 ppc64el s390x sparc64)_ZNSt12__shared_ptrIN5osgeo4proj2cs16CoordinateSystemELN9__gnu_cxx12_Lock_policyE2EEC1ERKS6_ at Base 6.0.0
- (optional=templinst|arch=m68k mips64el ppc64 ppc64el s390x sparc64)_ZNSt12__shared_ptrIN5osgeo4proj2cs16CoordinateSystemELN9__gnu_cxx12_Lock_policyE2EEC2ERKS6_ at Base 6.0.0
+ (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj2cs16CoordinateSystemELN9__gnu_cxx12_Lock_policyE1EEC1ERKS6_ at Base 6.1.0~rc1
+ (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj2cs16CoordinateSystemELN9__gnu_cxx12_Lock_policyE1EEC2ERKS6_ at Base 6.1.0~rc1
+ (optional=templinst|arch=armhf ia64 m68k mips mips64el mipsel powerpc powerpcspe ppc64 ppc64el s390x sparc64)_ZNSt12__shared_ptrIN5osgeo4proj2cs16CoordinateSystemELN9__gnu_cxx12_Lock_policyE2EEC1ERKS6_ at Base 6.0.0
+ (optional=templinst|arch=armhf ia64 m68k mips mips64el mipsel powerpc powerpcspe ppc64 ppc64el s390x sparc64)_ZNSt12__shared_ptrIN5osgeo4proj2cs16CoordinateSystemELN9__gnu_cxx12_Lock_policyE2EEC2ERKS6_ at Base 6.0.0
+ (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj3crs11CompoundCRSELN9__gnu_cxx12_Lock_policyE1EEC1ERKS6_ at Base 6.1.0~rc1
+ (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj3crs11CompoundCRSELN9__gnu_cxx12_Lock_policyE1EEC2ERKS6_ at Base 6.1.0~rc1
  (optional=templinst)_ZNSt12__shared_ptrIN5osgeo4proj3crs11CompoundCRSELN9__gnu_cxx12_Lock_policyE2EEC1ERKS6_ at Base 6.1.0~rc1
  (optional=templinst)_ZNSt12__shared_ptrIN5osgeo4proj3crs11CompoundCRSELN9__gnu_cxx12_Lock_policyE2EEC2ERKS6_ at Base 6.1.0~rc1
  (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj3crs13GeographicCRSELN9__gnu_cxx12_Lock_policyE1EEC1ERKS6_ at Base 6.0.0
@@ -1065,16 +1071,20 @@ libproj.so.15 #PACKAGE# #MINVER#
  (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj4util10BaseObjectELN9__gnu_cxx12_Lock_policyE1EEC2INS1_6common16IdentifiedObjectEvEERKS_IT_LS5_1EE at Base 6.0.0
  (optional=templinst|arch=!armel !riscv64)_ZNSt12__shared_ptrIN5osgeo4proj4util10BaseObjectELN9__gnu_cxx12_Lock_policyE2EEC1INS1_6common16IdentifiedObjectEvEERKS_IT_LS5_2EE at Base 6.0.0
  (optional=templinst|arch=!armel !riscv64)_ZNSt12__shared_ptrIN5osgeo4proj4util10BaseObjectELN9__gnu_cxx12_Lock_policyE2EEC2INS1_6common16IdentifiedObjectEvEERKS_IT_LS5_2EE at Base 6.0.0
+ (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj5datum22GeodeticReferenceFrameELN9__gnu_cxx12_Lock_policyE1EEC1ERKS6_ at Base 6.1.0~rc1
+ (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj5datum22GeodeticReferenceFrameELN9__gnu_cxx12_Lock_policyE1EEC2ERKS6_ at Base 6.1.0~rc1
  (optional=templinst)_ZNSt12__shared_ptrIN5osgeo4proj5datum22GeodeticReferenceFrameELN9__gnu_cxx12_Lock_policyE2EEC1ERKS6_ at Base 6.1.0~rc1
  (optional=templinst)_ZNSt12__shared_ptrIN5osgeo4proj5datum22GeodeticReferenceFrameELN9__gnu_cxx12_Lock_policyE2EEC2ERKS6_ at Base 6.1.0~rc1
  (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj6common16IdentifiedObjectELN9__gnu_cxx12_Lock_policyE1EEC1INS1_9operation15OperationMethodEvEERKS_IT_LS5_1EE at Base 6.0.0
  (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj6common16IdentifiedObjectELN9__gnu_cxx12_Lock_policyE1EEC2INS1_9operation15OperationMethodEvEERKS_IT_LS5_1EE at Base 6.0.0
- (optional=templinst)_ZNSt12__shared_ptrIN5osgeo4proj6common16IdentifiedObjectELN9__gnu_cxx12_Lock_policyE2EEC1INS1_9operation15OperationMethodEvEERKS_IT_LS5_2EE at Base 6.0.0
- (optional=templinst)_ZNSt12__shared_ptrIN5osgeo4proj6common16IdentifiedObjectELN9__gnu_cxx12_Lock_policyE2EEC2INS1_9operation15OperationMethodEvEERKS_IT_LS5_2EE at Base 6.0.0
+ (optional=templinst|arch=!armel)_ZNSt12__shared_ptrIN5osgeo4proj6common16IdentifiedObjectELN9__gnu_cxx12_Lock_policyE2EEC1INS1_9operation15OperationMethodEvEERKS_IT_LS5_2EE at Base 6.0.0
+ (optional=templinst|arch=!armel)_ZNSt12__shared_ptrIN5osgeo4proj6common16IdentifiedObjectELN9__gnu_cxx12_Lock_policyE2EEC2INS1_9operation15OperationMethodEvEERKS_IT_LS5_2EE at Base 6.0.0
  (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj8metadata6ExtentELN9__gnu_cxx12_Lock_policyE1EEC1ERKS6_ at Base 6.0.0
  (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj8metadata6ExtentELN9__gnu_cxx12_Lock_policyE1EEC2ERKS6_ at Base 6.0.0
  (optional=templinst|arch=!armel !riscv64)_ZNSt12__shared_ptrIN5osgeo4proj8metadata6ExtentELN9__gnu_cxx12_Lock_policyE2EEC1ERKS6_ at Base 6.0.0
  (optional=templinst|arch=!armel !riscv64)_ZNSt12__shared_ptrIN5osgeo4proj8metadata6ExtentELN9__gnu_cxx12_Lock_policyE2EEC2ERKS6_ at Base 6.0.0
+ (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj9operation10ConversionELN9__gnu_cxx12_Lock_policyE1EEC1ERKS6_ at Base 6.1.0~rc1
+ (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj9operation10ConversionELN9__gnu_cxx12_Lock_policyE1EEC2ERKS6_ at Base 6.1.0~rc1
  (optional=templinst)_ZNSt12__shared_ptrIN5osgeo4proj9operation10ConversionELN9__gnu_cxx12_Lock_policyE2EEC1ERKS6_ at Base 6.1.0~rc1
  (optional=templinst)_ZNSt12__shared_ptrIN5osgeo4proj9operation10ConversionELN9__gnu_cxx12_Lock_policyE2EEC2ERKS6_ at Base 6.1.0~rc1
  (optional=templinst|arch=armel)_ZNSt12__shared_ptrIN5osgeo4proj9operation14ParameterValueELN9__gnu_cxx12_Lock_policyE1EEC1ERKS6_ at Base 6.0.0
@@ -1781,7 +1791,7 @@ libproj.so.15 #PACKAGE# #MINVER#
  (optional=templinst)_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EE17_M_realloc_insertIJS7_EEEvN9__gnu_cxx17__normal_iteratorIPS7_S9_EEDpOT_ at Base 6.0.0
  (optional=templinst)_ZNSt6vectorISt4pairINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ESaIS7_EEaSERKS9_ at Base 6.0.0
  (optional=templinst)_ZNSt6vectorIbSaIbEE13_M_insert_auxESt13_Bit_iteratorb at Base 6.0.0
- (optional=templinst|arch=!mips !mipsel)_ZNSt6vectorIbSaIbEE9push_backEb at Base 6.0.0
+ (optional=templinst)_ZNSt6vectorIbSaIbEE9push_backEb at Base 6.0.0
  (optional=templinst)_ZNSt6vectorIdSaIdEE12emplace_backIJdEEEvDpOT_ at Base 6.0.0
  (optional=templinst)_ZNSt6vectorIdSaIdEE17_M_realloc_insertIJdEEEvN9__gnu_cxx17__normal_iteratorIPdS1_EEDpOT_ at Base 6.0.0
  (optional=templinst)_ZNSt6vectorIdSaIdEEaSERKS1_ at Base 6.0.0
@@ -1832,7 +1842,7 @@ libproj.so.15 #PACKAGE# #MINVER#
  (optional=templinst|arch=amd64 arm64 kfreebsd-amd64 s390x x32)_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEOS8_RKS8_ at Base 6.0.0
  (optional=templinst|arch=amd64 arm64 kfreebsd-amd64 s390x x32)_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_OS8_ at Base 6.0.0
  (optional=templinst)_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_RKS8_ at Base 6.0.0
- (optional=templinst)_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_ at Base 6.0.0
+ (optional=templinst|arch=!mips !mipsel)_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_PKS5_ at Base 6.0.0
  (optional=templinst)_ZStplIcSt11char_traitsIcESaIcEENSt7__cxx1112basic_stringIT_T0_T1_EERKS8_SA_ at Base 6.0.0
  _ZTIN5osgeo4proj2cs10TemporalCSE at Base 6.0.0
  _ZTIN5osgeo4proj2cs10VerticalCSE at Base 6.0.0
@@ -2028,7 +2038,7 @@ libproj.so.15 #PACKAGE# #MINVER#
  (arch=!armel !riscv64)_ZTISt15_Sp_counted_ptrIPN5osgeo4proj9operation23OperationParameterValueELN9__gnu_cxx12_Lock_policyE2EE at Base 6.0.0
  (arch=armel riscv64)_ZTISt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE1EE at Base 6.0.0
  (arch=!armel !riscv64)_ZTISt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE at Base 6.0.0
- (arch=armel armhf ia64)_ZTISt19_Sp_make_shared_tag at Base 6.0.0
+ (arch=armel armhf)_ZTISt19_Sp_make_shared_tag at Base 6.0.0
  (arch=armel riscv64)_ZTISt23_Sp_counted_ptr_inplaceIN5osgeo4proj6common13UnitOfMeasureESaIS3_ELN9__gnu_cxx12_Lock_policyE1EE at Base 6.0.0
  (arch=!armel !riscv64)_ZTISt23_Sp_counted_ptr_inplaceIN5osgeo4proj6common13UnitOfMeasureESaIS3_ELN9__gnu_cxx12_Lock_policyE2EE at Base 6.0.0
  _ZTSN5osgeo4proj2cs10TemporalCSE at Base 6.0.0


=====================================
debian/patches/pr1454-createOperations-fix-case-of-ETRS89-3D-to-proj-string-with-nadgrids-and-geoidgrids.patch
=====================================
@@ -0,0 +1,487 @@
+Description: Fixes for proj-rdnap.
+ createOperations(): fix case of ETRS89 3D to proj string with nadgrids and geoidgrids
+ Fixes https://lists.osgeo.org/pipermail/proj/2019-May/008519.html
+ .
+ createOperations(): for 'Amersfoort / RD New + NAP height' (EPSG:7415) to ETRS89 (EPSG:4937),
+ make sure that the vgridshift is applied first (ie on Amersfoort datum) before the hgridshift
+Author: Even Rouault <even.rouault at spatialys.com>
+Origin: https://github.com/OSGeo/proj.4/pull/1454/
+
+--- a/src/iso19111/coordinateoperation.cpp
++++ b/src/iso19111/coordinateoperation.cpp
+@@ -6958,11 +6958,11 @@ TransformationNNPtr Transformation::crea
+ static TransformationNNPtr _createGravityRelatedHeightToGeographic3D(
+     const util::PropertyMap &properties, bool inverse,
+     const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn,
+-    const std::string &filename,
++    const crs::CRSPtr &interpolationCRSIn, const std::string &filename,
+     const std::vector<metadata::PositionalAccuracyNNPtr> &accuracies) {
+ 
+     return Transformation::create(
+-        properties, sourceCRSIn, targetCRSIn, nullptr,
++        properties, sourceCRSIn, targetCRSIn, interpolationCRSIn,
+         util::PropertyMap().set(
+             common::IdentifiedObject::NAME_KEY,
+             inverse ? INVERSE_OF + PROJ_WKT2_NAME_METHOD_HEIGHT_TO_GEOG3D
+@@ -6981,17 +6981,20 @@ static TransformationNNPtr _createGravit
+  * At minimum the name should be defined.
+  * @param sourceCRSIn Source CRS.
+  * @param targetCRSIn Target CRS.
++ * @param interpolationCRSIn Interpolation CRS. (might be null)
+  * @param filename GRID filename.
+  * @param accuracies Vector of positional accuracy (might be empty).
+  * @return new Transformation.
+  */
+ TransformationNNPtr Transformation::createGravityRelatedHeightToGeographic3D(
+     const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn,
+-    const crs::CRSNNPtr &targetCRSIn, const std::string &filename,
++    const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn,
++    const std::string &filename,
+     const std::vector<metadata::PositionalAccuracyNNPtr> &accuracies) {
+ 
+     return _createGravityRelatedHeightToGeographic3D(
+-        properties, false, sourceCRSIn, targetCRSIn, filename, accuracies);
++        properties, false, sourceCRSIn, targetCRSIn, interpolationCRSIn,
++        filename, accuracies);
+ }
+ 
+ // ---------------------------------------------------------------------------
+@@ -7302,8 +7305,20 @@ createPropertiesForInverse(const Coordin
+     auto targetCRS = op->targetCRS();
+     std::string name;
+     if (!forwardName.empty()) {
+-        if (starts_with(forwardName, INVERSE_OF)) {
+-            name = forwardName.substr(INVERSE_OF.size());
++        if (starts_with(forwardName, INVERSE_OF) ||
++            forwardName.find(" + ") != std::string::npos) {
++            auto tokens = split(forwardName, " + ");
++            for (size_t i = tokens.size(); i > 0;) {
++                i--;
++                if (!name.empty()) {
++                    name += " + ";
++                }
++                if (starts_with(tokens[i], INVERSE_OF)) {
++                    name += tokens[i].substr(INVERSE_OF.size());
++                } else {
++                    name += INVERSE_OF + tokens[i];
++                }
++            }
+         } else if (!sourceCRS || !targetCRS ||
+                    forwardName != buildOpName(opType, sourceCRS, targetCRS)) {
+             name = INVERSE_OF + forwardName;
+@@ -8195,13 +8210,14 @@ TransformationNNPtr Transformation::subs
+                 return createGravityRelatedHeightToGeographic3D(
+                            createPropertiesForInverse(self.as_nullable().get(),
+                                                       true, false),
+-                           targetCRS(), sourceCRS(), projFilename,
+-                           coordinateOperationAccuracies())
++                           targetCRS(), sourceCRS(), interpolationCRS(),
++                           projFilename, coordinateOperationAccuracies())
+                     ->inverseAsTransformation();
+             } else {
+                 return createGravityRelatedHeightToGeographic3D(
+                     createSimilarPropertiesTransformation(self), sourceCRS(),
+-                    targetCRS(), projFilename, coordinateOperationAccuracies());
++                    targetCRS(), interpolationCRS(), projFilename,
++                    coordinateOperationAccuracies());
+             }
+         }
+     }
+@@ -10972,19 +10988,19 @@ struct MyPROJStringExportableHorizVertic
+         // cppcheck-suppress functionStatic
+         _exportToPROJString(io::PROJStringFormatter *formatter) const override {
+ 
+-        formatter->setOmitZUnitConversion(true);
++        formatter->pushOmitZUnitConversion();
+         horizTransform->_exportToPROJString(formatter);
+ 
+         formatter->startInversion();
+         geogDst->addAngularUnitConvertAndAxisSwap(formatter);
+         formatter->stopInversion();
+-        formatter->setOmitZUnitConversion(false);
++        formatter->popOmitZUnitConversion();
+ 
+         verticalTransform->_exportToPROJString(formatter);
+ 
+-        formatter->setOmitZUnitConversion(true);
++        formatter->pushOmitZUnitConversion();
+         geogDst->addAngularUnitConvertAndAxisSwap(formatter);
+-        formatter->setOmitZUnitConversion(false);
++        formatter->popOmitZUnitConversion();
+     }
+ };
+ 
+@@ -11016,7 +11032,7 @@ struct MyPROJStringExportableHorizVertic
+         // cppcheck-suppress functionStatic
+         _exportToPROJString(io::PROJStringFormatter *formatter) const override {
+ 
+-        formatter->setOmitZUnitConversion(true);
++        formatter->pushOmitZUnitConversion();
+ 
+         opSrcCRSToGeogCRS->_exportToPROJString(formatter);
+ 
+@@ -11024,17 +11040,17 @@ struct MyPROJStringExportableHorizVertic
+         interpolationGeogCRS->addAngularUnitConvertAndAxisSwap(formatter);
+         formatter->stopInversion();
+ 
+-        formatter->setOmitZUnitConversion(false);
++        formatter->popOmitZUnitConversion();
+ 
+         verticalTransform->_exportToPROJString(formatter);
+ 
+-        formatter->setOmitZUnitConversion(true);
++        formatter->pushOmitZUnitConversion();
+ 
+         interpolationGeogCRS->addAngularUnitConvertAndAxisSwap(formatter);
+ 
+         opGeogCRStoDstCRS->_exportToPROJString(formatter);
+ 
+-        formatter->setOmitZUnitConversion(false);
++        formatter->popOmitZUnitConversion();
+     }
+ };
+ 
+@@ -12135,6 +12151,37 @@ CoordinateOperationFactory::Private::cre
+             }
+         }
+ 
++        auto vertCRSOfBaseOfBoundSrc =
++            dynamic_cast<const crs::VerticalCRS *>(boundSrc->baseCRS().get());
++        if (vertCRSOfBaseOfBoundSrc && hubSrcGeog &&
++            hubSrcGeog->coordinateSystem()->axisList().size() == 3 &&
++            geogDst->coordinateSystem()->axisList().size() == 3) {
++            auto opsFirst = createOperations(sourceCRS, hubSrc, context);
++            auto opsSecond = createOperations(hubSrc, targetCRS, context);
++            if (!opsFirst.empty() && !opsSecond.empty()) {
++                for (const auto &opFirst : opsFirst) {
++                    for (const auto &opLast : opsSecond) {
++                        // Exclude artificial transformations from the hub
++                        // to the target CRS
++                        if (!opLast->hasBallparkTransformation()) {
++                            try {
++                                res.emplace_back(
++                                    ConcatenatedOperation::
++                                        createComputeMetadata(
++                                            {opFirst, opLast},
++                                            !allowEmptyIntersection));
++                            } catch (
++                                const InvalidOperationEmptyIntersection &) {
++                            }
++                        }
++                    }
++                }
++                if (!res.empty()) {
++                    return res;
++                }
++            }
++        }
++
+         return createOperations(boundSrc->baseCRS(), targetCRS, context);
+     }
+ 
+@@ -12349,7 +12396,8 @@ CoordinateOperationFactory::Private::cre
+         const auto &componentsSrc = compoundSrc->componentReferenceSystems();
+         if (!componentsSrc.empty()) {
+             std::vector<CoordinateOperationNNPtr> horizTransforms;
+-            if (componentsSrc[0]->extractGeographicCRS()) {
++            auto srcGeogCRS = componentsSrc[0]->extractGeographicCRS();
++            if (srcGeogCRS) {
+                 horizTransforms =
+                     createOperations(componentsSrc[0], targetCRS, context);
+             }
+@@ -12363,11 +12411,61 @@ CoordinateOperationFactory::Private::cre
+                 for (const auto &horizTransform : horizTransforms) {
+                     for (const auto &verticalTransform : verticalTransforms) {
+ 
+-                        auto op = createHorizVerticalPROJBased(
+-                            sourceCRS, targetCRS, horizTransform,
+-                            verticalTransform);
++                        crs::GeographicCRSPtr interpolationGeogCRS;
++                        auto transformationVerticalTransform =
++                            dynamic_cast<const Transformation *>(
++                                verticalTransform.get());
++                        if (transformationVerticalTransform) {
++                            auto interpTransformCRS =
++                                transformationVerticalTransform
++                                    ->interpolationCRS();
++                            if (interpTransformCRS) {
++                                auto nn_interpTransformCRS =
++                                    NN_NO_CHECK(interpTransformCRS);
++                                if (dynamic_cast<const crs::GeographicCRS *>(
++                                        nn_interpTransformCRS.get())) {
++                                    interpolationGeogCRS =
++                                        util::nn_dynamic_pointer_cast<
++                                            crs::GeographicCRS>(
++                                            nn_interpTransformCRS);
++                                }
++                            }
++                        }
++                        bool done = false;
++                        if (interpolationGeogCRS &&
++                            (interpolationGeogCRS->_isEquivalentTo(
++                                 srcGeogCRS.get(),
++                                 util::IComparable::Criterion::EQUIVALENT) ||
++                             interpolationGeogCRS->is2DPartOf3D(
++                                 NN_NO_CHECK(srcGeogCRS.get())))) {
++                            auto srcToInterp = createOperations(
++                                componentsSrc[0],
++                                NN_NO_CHECK(interpolationGeogCRS), context);
++                            auto interpToCompoundHoriz = createOperations(
++                                NN_NO_CHECK(interpolationGeogCRS),
++                                componentsSrc[0], context);
++                            if (!srcToInterp.empty() &&
++                                !interpToCompoundHoriz.empty()) {
++                                auto op = createHorizVerticalHorizPROJBased(
++                                    sourceCRS, componentsSrc[0],
++                                    srcToInterp.front(), verticalTransform,
++                                    interpToCompoundHoriz.front(),
++                                    interpolationGeogCRS);
++                                done = true;
++                                res.emplace_back(
++                                    ConcatenatedOperation::
++                                        createComputeMetadata(
++                                            {op, horizTransform},
++                                            !allowEmptyIntersection));
++                            }
++                        }
++                        if (!done) {
++                            auto op = createHorizVerticalPROJBased(
++                                sourceCRS, targetCRS, horizTransform,
++                                verticalTransform);
+ 
+-                        res.emplace_back(op);
++                            res.emplace_back(op);
++                        }
+                     }
+                 }
+                 return res;
+--- a/test/unit/test_operation.cpp
++++ b/test/unit/test_operation.cpp
+@@ -5903,6 +5903,35 @@ TEST(operation, boundCRS_with_basecrs_wi
+ 
+ // ---------------------------------------------------------------------------
+ 
++TEST(operation, ETRS89_3D_to_proj_string_with_geoidgrids_nadgrids) {
++    auto authFactory =
++        AuthorityFactory::create(DatabaseContext::create(), "EPSG");
++    // ETRS89 3D
++    auto src = authFactory->createCoordinateReferenceSystem("4937");
++    auto objDst = PROJStringParser().createFromPROJString(
++        "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 "
++        "+k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel "
++        "+nadgrids=rdtrans2008.gsb +geoidgrids=naptrans2008.gtx +units=m "
++        "+type=crs");
++    auto dst = nn_dynamic_pointer_cast<CRS>(objDst);
++    ASSERT_TRUE(dst != nullptr);
++    auto ctxt = CoordinateOperationContext::create(authFactory, nullptr, 0.0);
++    auto list = CoordinateOperationFactory::create()->createOperations(
++        src, NN_NO_CHECK(dst), ctxt);
++    ASSERT_EQ(list.size(), 1U);
++    EXPECT_EQ(list[0]->exportToPROJString(PROJStringFormatter::create().get()),
++              "+proj=pipeline +step +proj=unitconvert +xy_in=deg +xy_out=rad "
++              "+step +proj=axisswap +order=2,1 "
++              "+step +inv +proj=vgridshift +grids=naptrans2008.gtx "
++              "+multiplier=1 "
++              "+step +inv +proj=hgridshift +grids=rdtrans2008.gsb "
++              "+step +proj=sterea +lat_0=52.1561605555556 "
++              "+lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 "
++              "+y_0=463000 +ellps=bessel");
++}
++
++// ---------------------------------------------------------------------------
++
+ static VerticalCRSNNPtr createVerticalCRS() {
+     PropertyMap propertiesVDatum;
+     propertiesVDatum.set(Identifier::CODESPACE_KEY, "EPSG")
+@@ -5941,8 +5970,8 @@ static BoundCRSNNPtr createBoundVertical
+     auto vertCRS = createVerticalCRS();
+     auto transformation =
+         Transformation::createGravityRelatedHeightToGeographic3D(
+-            PropertyMap(), vertCRS, GeographicCRS::EPSG_4979, "egm08_25.gtx",
+-            std::vector<PositionalAccuracyNNPtr>());
++            PropertyMap(), vertCRS, GeographicCRS::EPSG_4979, nullptr,
++            "egm08_25.gtx", std::vector<PositionalAccuracyNNPtr>());
+     return BoundCRS::create(vertCRS, GeographicCRS::EPSG_4979, transformation);
+ }
+ 
+@@ -6727,6 +6756,22 @@ TEST(operation, compoundCRS_from_WKT2_no
+     auto list =
+         CoordinateOperationFactory::create()->createOperations(src, dst, ctxt);
+     ASSERT_GE(list.size(), 1U);
++
++    {
++        // Important here is vgridshift before hgridshift
++        auto op_proj =
++            list[0]->exportToPROJString(PROJStringFormatter::create().get());
++        EXPECT_EQ(
++            op_proj,
++            "+proj=pipeline +step +inv +proj=sterea +lat_0=52.1561605555556 "
++            "+lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 "
++            "+ellps=bessel "
++            "+step +proj=vgridshift +grids=naptrans2008.gtx +multiplier=1 "
++            "+step +proj=hgridshift +grids=rdtrans2008.gsb "
++            "+step +proj=unitconvert +xy_in=rad +z_in=m +xy_out=deg +z_out=m "
++            "+step +proj=axisswap +order=2,1");
++    }
++
+     auto wkt2 =
+         "COMPOUNDCRS[\"unknown\",\n"
+         "  PROJCRS[\"unknown\",\n"
+@@ -6759,8 +6804,12 @@ TEST(operation, compoundCRS_from_WKT2_no
+     for (size_t i = 0; i < list.size(); i++) {
+         const auto &op = list[i];
+         const auto &op2 = list2[i];
+-        EXPECT_TRUE(
+-            op->isEquivalentTo(op2.get(), IComparable::Criterion::EQUIVALENT));
++        auto op_proj =
++            op->exportToPROJString(PROJStringFormatter::create().get());
++        auto op2_proj =
++            op2->exportToPROJString(PROJStringFormatter::create().get());
++        EXPECT_EQ(op_proj, op2_proj) << "op=" << op->nameStr()
++                                     << " op2=" << op2->nameStr();
+     }
+ }
+ 
+--- a/data/sql/customizations.sql
++++ b/data/sql/customizations.sql
+@@ -19,6 +19,25 @@ DELETE FROM "supersession" WHERE superse
+                                  replacement_code = '8885' AND
+                                  source = 'EPSG';
+ 
++-- ('EPSG','7001','ETRS89 to NAP height (1)') lacks an interpolationCRS with Amersfoort / EPSG:4289
++-- See https://salsa.debian.org/debian-gis-team/proj-rdnap/blob/debian/2008-8/Use%20of%20RDTRANS2008%20and%20NAPTRANS2008.pdf
++-- "The naptrans2008 VDatum-grid is referenced to the Bessel-1841 ellipsoid"
++CREATE TABLE dummy(foo);
++CREATE TRIGGER check_grid_transformation_epsg_7001
++BEFORE INSERT ON dummy
++FOR EACH ROW BEGIN
++    SELECT RAISE(ABORT, 'grid_transformation EPSG:7001 entry is not ETRS89 to NAP height (1)')
++        WHERE NOT EXISTS(SELECT 1 FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '7001' AND name = 'ETRS89 to NAP height (1)');
++    SELECT RAISE(ABORT, 'grid_transformation EPSG:7001 entry has already an interpolationCRS')
++        WHERE EXISTS(SELECT 1 FROM grid_transformation WHERE auth_name = 'EPSG' AND code = '7001' AND interpolation_crs_auth_name IS NOT NULL);
++END;
++INSERT INTO dummy DEFAULT VALUES;
++DROP TRIGGER check_grid_transformation_epsg_7001;
++DROP TABLE dummy;
++UPDATE grid_transformation SET interpolation_crs_auth_name = 'EPSG',
++                               interpolation_crs_code = '4289'
++                           WHERE auth_name = 'EPSG' AND code = '7001';
++
+ -- Define the allowed authorities, and their precedence, when researching a
+ -- coordinate operation
+ 
+--- a/include/proj/coordinateoperation.hpp
++++ b/include/proj/coordinateoperation.hpp
+@@ -1476,7 +1476,8 @@ class PROJ_GCC_DLL Transformation : publ
+     PROJ_DLL static TransformationNNPtr
+     createGravityRelatedHeightToGeographic3D(
+         const util::PropertyMap &properties, const crs::CRSNNPtr &sourceCRSIn,
+-        const crs::CRSNNPtr &targetCRSIn, const std::string &filename,
++        const crs::CRSNNPtr &targetCRSIn, const crs::CRSPtr &interpolationCRSIn,
++        const std::string &filename,
+         const std::vector<metadata::PositionalAccuracyNNPtr> &accuracies);
+ 
+     PROJ_DLL static TransformationNNPtr createVERTCON(
+--- a/include/proj/internal/internal.hpp
++++ b/include/proj/internal/internal.hpp
+@@ -140,6 +140,9 @@ std::string toupper(const std::string &o
+ PROJ_FOR_TEST std::vector<std::string> split(const std::string &osStr,
+                                              char separator);
+ 
++PROJ_FOR_TEST std::vector<std::string> split(const std::string &osStr,
++                                             const std::string &separator);
++
+ bool ci_equal(const char *a, const char *b) noexcept;
+ 
+ #ifdef SUPPORT_DELETED_FUNCTION
+--- a/include/proj/io.hpp
++++ b/include/proj/io.hpp
+@@ -427,7 +427,8 @@ class PROJ_GCC_DLL PROJStringFormatter {
+     PROJ_INTERNAL void setOmitProjLongLatIfPossible(bool omit);
+     PROJ_INTERNAL bool omitProjLongLatIfPossible() const;
+ 
+-    PROJ_INTERNAL void setOmitZUnitConversion(bool omit);
++    PROJ_INTERNAL void pushOmitZUnitConversion();
++    PROJ_INTERNAL void popOmitZUnitConversion();
+     PROJ_INTERNAL bool omitZUnitConversion() const;
+ 
+     PROJ_INTERNAL void setDropEarlyBindingsTerms(bool drop);
+--- a/src/iso19111/internal.cpp
++++ b/src/iso19111/internal.cpp
+@@ -298,6 +298,21 @@ std::vector<std::string> split(const std
+ 
+ // ---------------------------------------------------------------------------
+ 
++std::vector<std::string> split(const std::string &str,
++                               const std::string &separator) {
++    std::vector<std::string> res;
++    size_t lastPos = 0;
++    size_t newPos = 0;
++    while ((newPos = str.find(separator, lastPos)) != std::string::npos) {
++        res.push_back(str.substr(lastPos, newPos - lastPos));
++        lastPos = newPos + separator.size();
++    }
++    res.push_back(str.substr(lastPos));
++    return res;
++}
++
++// ---------------------------------------------------------------------------
++
+ #ifdef _WIN32
+ 
+ // For some reason, sqlite3_snprintf() in the sqlite3 builds used on AppVeyor
+--- a/src/iso19111/io.cpp
++++ b/src/iso19111/io.cpp
+@@ -3818,7 +3818,7 @@ CRSNNPtr WKTParser::Private::buildVertic
+                     Transformation::createGravityRelatedHeightToGeographic3D(
+                         PropertyMap().set(IdentifiedObject::NAME_KEY,
+                                           transformationName),
+-                        crs, GeographicCRS::EPSG_4979,
++                        crs, GeographicCRS::EPSG_4979, nullptr,
+                         stripQuotes(extensionChildren[1]),
+                         std::vector<PositionalAccuracyNNPtr>());
+                 return nn_static_pointer_cast<CRS>(BoundCRS::create(
+@@ -4922,7 +4922,7 @@ struct PROJStringFormatter::Private {
+     };
+     std::vector<InversionStackElt> inversionStack_{InversionStackElt()};
+     bool omitProjLongLatIfPossible_ = false;
+-    bool omitZUnitConversion_ = false;
++    std::vector<bool> omitZUnitConversion_{false};
+     DatabaseContextPtr dbContext_{};
+     bool useApproxTMerc_ = false;
+     bool addNoDefs_ = true;
+@@ -5939,15 +5939,21 @@ bool PROJStringFormatter::omitProjLongLa
+ 
+ // ---------------------------------------------------------------------------
+ 
+-void PROJStringFormatter::setOmitZUnitConversion(bool omit) {
+-    assert(d->omitZUnitConversion_ ^ omit);
+-    d->omitZUnitConversion_ = omit;
++void PROJStringFormatter::pushOmitZUnitConversion() {
++    d->omitZUnitConversion_.push_back(true);
++}
++
++// ---------------------------------------------------------------------------
++
++void PROJStringFormatter::popOmitZUnitConversion() {
++    assert(d->omitZUnitConversion_.size() > 1);
++    d->omitZUnitConversion_.pop_back();
+ }
+ 
+ // ---------------------------------------------------------------------------
+ 
+ bool PROJStringFormatter::omitZUnitConversion() const {
+-    return d->omitZUnitConversion_;
++    return d->omitZUnitConversion_.back();
+ }
+ 
+ // ---------------------------------------------------------------------------
+@@ -6995,7 +7001,7 @@ PROJStringParser::Private::buildBoundOrC
+             Transformation::createGravityRelatedHeightToGeographic3D(
+                 PropertyMap().set(IdentifiedObject::NAME_KEY,
+                                   "unknown to WGS84 ellipsoidal height"),
+-                crs, GeographicCRS::EPSG_4979, geoidgrids,
++                crs, GeographicCRS::EPSG_4979, nullptr, geoidgrids,
+                 std::vector<PositionalAccuracyNNPtr>());
+         auto boundvcrs =
+             BoundCRS::create(vcrs, GeographicCRS::EPSG_4979, transformation);


=====================================
debian/patches/series
=====================================
@@ -1 +1,2 @@
 spelling-errors.patch
+pr1454-createOperations-fix-case-of-ETRS89-3D-to-proj-string-with-nadgrids-and-geoidgrids.patch


=====================================
debian/proj-bin.lintian-overrides
=====================================
@@ -0,0 +1,3 @@
+# Long line
+manpage-has-errors-from-man usr/share/man/man1/projinfo.1.gz 70: warning [p 1, 6.2i]: cannot adjust line
+



View it on GitLab: https://salsa.debian.org/debian-gis-team/proj/compare/d80cac498fb5c7579e8c5fd8874142e804949d01...80b406eb725fd095e79dc7d10598ebf8ee407027

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/proj/compare/d80cac498fb5c7579e8c5fd8874142e804949d01...80b406eb725fd095e79dc7d10598ebf8ee407027
You're receiving this email because of your account on salsa.debian.org.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20190506/aa495561/attachment-0001.html>


More information about the Pkg-grass-devel mailing list