diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2019-02-16 23:06:34 +0100 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-02-16 23:07:27 +0100 |
| commit | acd7dda78bfeeff5a035215e852dd0da44dfcde8 (patch) | |
| tree | 0076d52af795973709766f5182d6f01da614554f | |
| parent | aacbcb8361c547d1ebc05b8438859229fd517ef2 (diff) | |
| download | PROJ-acd7dda78bfeeff5a035215e852dd0da44dfcde8.tar.gz PROJ-acd7dda78bfeeff5a035215e852dd0da44dfcde8.zip | |
Make sure proj_get_source_crs() and proj_get_target_crs() work on 'pseudo' PJ object returned by proj_create_crs_to_crs() when there are several alternatives
| -rw-r--r-- | src/iso19111/c_api.cpp | 8 | ||||
| -rw-r--r-- | test/unit/gie_self_tests.cpp | 12 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp index 240d11b3..79732bab 100644 --- a/src/iso19111/c_api.cpp +++ b/src/iso19111/c_api.cpp @@ -1736,6 +1736,10 @@ PJ *proj_get_source_crs(PJ_CONTEXT *ctx, const PJ *obj) { } return nullptr; } + if (!obj->alternativeCoordinateOperations.empty()) { + return proj_get_source_crs(ctx, + obj->alternativeCoordinateOperations[0].pj); + } proj_log_error(ctx, __FUNCTION__, "Object is not a BoundCRS or a CoordinateOperation"); return nullptr; @@ -1771,6 +1775,10 @@ PJ *proj_get_target_crs(PJ_CONTEXT *ctx, const PJ *obj) { } return nullptr; } + if (!obj->alternativeCoordinateOperations.empty()) { + return proj_get_target_crs(ctx, + obj->alternativeCoordinateOperations[0].pj); + } proj_log_error(ctx, __FUNCTION__, "Object is not a BoundCRS or a CoordinateOperation"); return nullptr; diff --git a/test/unit/gie_self_tests.cpp b/test/unit/gie_self_tests.cpp index 91a3069c..5936791e 100644 --- a/test/unit/gie_self_tests.cpp +++ b/test/unit/gie_self_tests.cpp @@ -680,6 +680,18 @@ TEST(gie, proj_create_crs_to_crs_PULKOVO42_ETRS89) { EXPECT_EQ(P->fwd3d, nullptr); EXPECT_EQ(P->fwd4d, nullptr); + // get source CRS even if the P object is in a dummy state + auto src_crs = proj_get_source_crs(PJ_DEFAULT_CTX, P); + EXPECT_TRUE(src_crs != nullptr); + EXPECT_EQ(proj_get_name(src_crs), std::string("Pulkovo 1942(58)")); + proj_destroy(src_crs); + + // get target CRS even if the P object is in a dummy state + auto target_crs = proj_get_target_crs(PJ_DEFAULT_CTX, P); + EXPECT_TRUE(target_crs != nullptr); + EXPECT_EQ(proj_get_name(target_crs), std::string("ETRS89")); + proj_destroy(target_crs); + // Romania c.xyz.x = 45; // Lat c.xyz.y = 25; // Long |
