From 93a42eb2d905601691e921f4e1936c97420e78c8 Mon Sep 17 00:00:00 2001 From: Even Rouault <even.rouault@spatialys.com> Date: Thu, 16 Nov 2023 22:49:42 +0100 Subject: [PATCH] pj_get_suggested_operation(): tune it to give correct result for RGAF09 to RRAF 1991 / UTM zone 20N + Guadeloupe 1988 height transformation --- cmake/ProjTest.cmake | 11 ++++++++--- data/tests/fr_ign_RAGTBT2016.tif | Bin 0 -> 33374 bytes src/4D_api.cpp | 21 ++++++++++++--------- src/iso19111/c_api.cpp | 2 +- src/proj_internal.h | 16 +++++++++++----- test/cli/testvarious | 11 +++++++++++ test/cli/tv_out.dist | 4 ++++ 7 files changed, 47 insertions(+), 18 deletions(-) create mode 100644 data/tests/fr_ign_RAGTBT2016.tif diff --git a/cmake/ProjTest.cmake b/cmake/ProjTest.cmake index 5e035917f0..3de3fb4ce1 100644 --- a/cmake/ProjTest.cmake +++ b/cmake/ProjTest.cmake @@ -3,10 +3,15 @@ # function(proj_test_set_properties TESTNAME) - set_property(TEST ${TESTNAME} - PROPERTY ENVIRONMENT - "PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=YES" + set(_env "PROJ_SKIP_READ_USER_WRITABLE_DIRECTORY=YES" "PROJ_DATA=${PROJ_BINARY_DIR}/data/for_tests") + if(TIFF_ENABLED) + set(_env ${_env} "TIFF_ENABLED=YES") + else() + set(_env ${_env} "TIFF_ENABLED=NO") + endif() + set_property(TEST ${TESTNAME} + PROPERTY ENVIRONMENT ${_env}) endfunction() function(proj_add_test_script_sh SH_NAME BIN_USE) diff --git a/data/tests/fr_ign_RAGTBT2016.tif b/data/tests/fr_ign_RAGTBT2016.tif new file mode 100644 index 0000000000000000000000000000000000000000..f3479a9aca5b6ddebeeaa4056697759e0f5fbe2f GIT binary patch literal 33374 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 STpEY{Rp^HeCI1J`+8bB&;)nqN literal 0 HcmV?d00001 diff --git a/src/4D_api.cpp b/src/4D_api.cpp index d79fec8fd1..0b47902178 100644 --- a/src/4D_api.cpp +++ b/src/4D_api.cpp @@ -328,6 +328,8 @@ int pj_get_suggested_operation(PJ_CONTEXT *, // the one that has the smallest area (alt.accuracy == bestAccuracy && alt.pseudoArea < opList[iBest].pseudoArea && + !(alt.isUnknownAreaName && + !opList[iBest].isUnknownAreaName) && !opList[iBest].isPriorityOp)) && !alt.isOffshore)) { @@ -1693,7 +1695,7 @@ static PJ *add_coord_op_to_list( int idxInOriginalList, PJ *op, double west_lon, double south_lat, double east_lon, double north_lat, PJ *pjGeogToSrc, PJ *pjGeogToDst, const PJ *pjSrcGeocentricToLonLat, const PJ *pjDstGeocentricToLonLat, - bool isOffshore, std::vector<PJCoordOperation> &altCoordOps) { + const char *areaName, std::vector<PJCoordOperation> &altCoordOps) { /*****************************************************************************/ double minxSrc; @@ -1742,8 +1744,8 @@ static PJ *add_coord_op_to_list( const double accuracy = proj_coordoperation_get_accuracy(op->ctx, op); altCoordOps.emplace_back( idxInOriginalList, minxSrc, minySrc, maxxSrc, maxySrc, minxDst, - minyDst, maxxDst, maxyDst, op, name, accuracy, pseudoArea, - isOffshore, pjSrcGeocentricToLonLat, pjDstGeocentricToLonLat); + minyDst, maxxDst, maxyDst, op, name, accuracy, pseudoArea, areaName, + pjSrcGeocentricToLonLat, pjDstGeocentricToLonLat); op = nullptr; } return op; @@ -2018,23 +2020,22 @@ pj_create_prepared_operations(PJ_CONTEXT *ctx, const PJ *source_crs, north_lat = 90; } - const bool isOffshore = areaName && strstr(areaName, "- offshore"); if (west_lon <= east_lon) { op = add_coord_op_to_list( i, op, west_lon, south_lat, east_lon, north_lat, pjGeogToSrc, pjGeogToDst, pjSrcGeocentricToLonLat, - pjDstGeocentricToLonLat, isOffshore, preparedOpList); + pjDstGeocentricToLonLat, areaName, preparedOpList); } else { auto op_clone = proj_clone(ctx, op); op = add_coord_op_to_list( i, op, west_lon, south_lat, 180, north_lat, pjGeogToSrc, pjGeogToDst, pjSrcGeocentricToLonLat, - pjDstGeocentricToLonLat, isOffshore, preparedOpList); + pjDstGeocentricToLonLat, areaName, preparedOpList); op_clone = add_coord_op_to_list( i, op_clone, -180, south_lat, east_lon, north_lat, pjGeogToSrc, pjGeogToDst, pjSrcGeocentricToLonLat, - pjDstGeocentricToLonLat, isOffshore, preparedOpList); + pjDstGeocentricToLonLat, areaName, preparedOpList); proj_destroy(op_clone); } @@ -3019,13 +3020,15 @@ PJCoordOperation::PJCoordOperation( int idxInOriginalListIn, double minxSrcIn, double minySrcIn, double maxxSrcIn, double maxySrcIn, double minxDstIn, double minyDstIn, double maxxDstIn, double maxyDstIn, PJ *pjIn, const std::string &nameIn, - double accuracyIn, double pseudoAreaIn, bool isOffshoreIn, + double accuracyIn, double pseudoAreaIn, const char *areaNameIn, const PJ *pjSrcGeocentricToLonLatIn, const PJ *pjDstGeocentricToLonLatIn) : idxInOriginalList(idxInOriginalListIn), minxSrc(minxSrcIn), minySrc(minySrcIn), maxxSrc(maxxSrcIn), maxySrc(maxySrcIn), minxDst(minxDstIn), minyDst(minyDstIn), maxxDst(maxxDstIn), maxyDst(maxyDstIn), pj(pjIn), name(nameIn), accuracy(accuracyIn), - pseudoArea(pseudoAreaIn), isOffshore(isOffshoreIn), + pseudoArea(pseudoAreaIn), areaName(areaNameIn ? areaNameIn : ""), + isOffshore(areaName.find("- offshore") != std::string::npos), + isUnknownAreaName(areaName.empty() || areaName == "unknown"), isPriorityOp(isSpecialCaseForNAD83_to_NAD83HARN(name) || isSpecialCaseForGDA94_to_WGS84(name) || isSpecialCaseForWGS84_to_GDA2020(name)), diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp index 64da697f8f..c84e829018 100644 --- a/src/iso19111/c_api.cpp +++ b/src/iso19111/c_api.cpp @@ -9110,7 +9110,7 @@ PJ *proj_normalize_for_visualization(PJ_CONTEXT *ctx, const PJ *obj) { alt.idxInOriginalList, minxSrc, minySrc, maxxSrc, maxySrc, minxDst, minyDst, maxxDst, maxyDst, pjNormalized, co->nameStr(), alt.accuracy, - alt.pseudoArea, alt.isOffshore, + alt.pseudoArea, alt.areaName.c_str(), alt.pjSrcGeocentricToLonLat, alt.pjDstGeocentricToLonLat); } diff --git a/src/proj_internal.h b/src/proj_internal.h index 409b1a5f32..f2a9a9a98b 100644 --- a/src/proj_internal.h +++ b/src/proj_internal.h @@ -343,7 +343,9 @@ struct PJCoordOperation { std::string name{}; double accuracy = -1.0; double pseudoArea = 0.0; + std::string areaName{}; bool isOffshore = false; + bool isUnknownAreaName = false; bool isPriorityOp = false; bool srcIsLonLatDegree = false; bool srcIsLatLonDegree = false; @@ -364,8 +366,8 @@ struct PJCoordOperation { double minySrcIn, double maxxSrcIn, double maxySrcIn, double minxDstIn, double minyDstIn, double maxxDstIn, double maxyDstIn, PJ *pjIn, const std::string &nameIn, - double accuracyIn, double pseudoAreaIn, bool isOffshoreIn, - const PJ *pjSrcGeocentricToLonLatIn, + double accuracyIn, double pseudoAreaIn, + const char *areaName, const PJ *pjSrcGeocentricToLonLatIn, const PJ *pjDstGeocentricToLonLatIn); PJCoordOperation(const PJCoordOperation &) = delete; @@ -377,7 +379,9 @@ struct PJCoordOperation { minyDst(other.minyDst), maxxDst(other.maxxDst), maxyDst(other.maxyDst), pj(proj_clone(ctx, other.pj)), name(std::move(other.name)), accuracy(other.accuracy), - pseudoArea(other.pseudoArea), isOffshore(other.isOffshore), + pseudoArea(other.pseudoArea), areaName(other.areaName), + isOffshore(other.isOffshore), + isUnknownAreaName(other.isUnknownAreaName), isPriorityOp(other.isPriorityOp), srcIsLonLatDegree(other.srcIsLonLatDegree), srcIsLatLonDegree(other.srcIsLatLonDegree), @@ -399,7 +403,9 @@ struct PJCoordOperation { minyDst(other.minyDst), maxxDst(other.maxxDst), maxyDst(other.maxyDst), name(std::move(other.name)), accuracy(other.accuracy), pseudoArea(other.pseudoArea), - isOffshore(other.isOffshore), isPriorityOp(other.isPriorityOp), + areaName(std::move(other.areaName)), isOffshore(other.isOffshore), + isUnknownAreaName(other.isUnknownAreaName), + isPriorityOp(other.isPriorityOp), srcIsLonLatDegree(other.srcIsLonLatDegree), srcIsLatLonDegree(other.srcIsLatLonDegree), dstIsLonLatDegree(other.dstIsLonLatDegree), @@ -422,7 +428,7 @@ struct PJCoordOperation { maxxDst == other.maxxDst && maxyDst == other.maxyDst && name == other.name && proj_is_equivalent_to(pj, other.pj, PJ_COMP_STRICT) && - accuracy == other.accuracy && isOffshore == other.isOffshore; + accuracy == other.accuracy && areaName == other.areaName; } bool operator!=(const PJCoordOperation &other) const { diff --git a/test/cli/testvarious b/test/cli/testvarious index 2d6701c3ab..38c5a75686 100755 --- a/test/cli/testvarious +++ b/test/cli/testvarious @@ -1338,6 +1338,17 @@ $EXE -d 3 EPSG:3912+EPSG:5779 EPSG:3794+EPSG:8690 -E >>${OUT} 2>&1 <<EOF 477134.28 95134.21 5 EOF +echo "##############################################################" >> ${OUT} +echo "Test cs2cs EPSG:5488 (RGAF09) to EPSG:4559+5757 (RRAF 1991 / UTM zone 20N + Guadeloupe 1988 height)" >> ${OUT} +echo "Check that we use the horizontal transformation for Guadeloupe (RRAF 1991 to RGAF09 (2)), and not the one for Martinique" >> ${OUT} +# +if test "${TIFF_ENABLED}" = "yes"; then +PROJ_DATA=${PROJ_DATA}:${PROJ_DATA}/tests $EXE -d 3 EPSG:5488 EPSG:4559+5757 >> ${OUT} <<EOF +16.248285304 -61.484212843 53.073 +EOF +else +printf "661991.318\t1796999.201 93.846" >> ${OUT} +fi # Done! # do 'diff' with distribution results diff --git a/test/cli/tv_out.dist b/test/cli/tv_out.dist index 3fc3cc1f0c..b2418c52f5 100644 --- a/test/cli/tv_out.dist +++ b/test/cli/tv_out.dist @@ -640,3 +640,7 @@ Test inverse of Similarity Transformation (example from EPSG Guidance Note 7.2) Test Similarity Transformation through CompoundCRS 477134.28 95134.21 476763.303 95620.222 0.000 477134.28 95134.21 5 476763.303 95620.222 5.000 +############################################################## +Test cs2cs EPSG:5488 (RGAF09) to EPSG:4559+5757 (RRAF 1991 / UTM zone 20N + Guadeloupe 1988 height) +Check that we use the horizontal transformation for Guadeloupe (RRAF 1991 to RGAF09 (2)), and not the one for Martinique +661991.318 1796999.201 93.846