aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2019-10-25 10:30:17 +0200
committerGitHub <noreply@github.com>2019-10-25 10:30:17 +0200
commit63c6bf169ad32b7073b6ecb19e6cb0395ddcc873 (patch)
tree311b024b2d02836f11577624ad2abc5cdd528386 /src
parent8d4a054601e5eadfec2e7ca12132b1c8b537abbe (diff)
parentb8f00d843379fb4103075f25242d5bf8a66d1d65 (diff)
downloadPROJ-63c6bf169ad32b7073b6ecb19e6cb0395ddcc873.tar.gz
PROJ-63c6bf169ad32b7073b6ecb19e6cb0395ddcc873.zip
Merge pull request #1689 from rouault/generalize_proj_crs_create_bound_vertical_crs_to_WGS84
Generalize generalize_proj_crs_create_bound_vertical_crs_to_WGS84()
Diffstat (limited to 'src')
-rw-r--r--src/iso19111/c_api.cpp33
-rw-r--r--src/proj_experimental.h7
2 files changed, 26 insertions, 14 deletions
diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp
index 4fedbe05..f5f7ba55 100644
--- a/src/iso19111/c_api.cpp
+++ b/src/iso19111/c_api.cpp
@@ -1810,7 +1810,8 @@ PJ *proj_crs_create_bound_crs_to_WGS84(PJ_CONTEXT *ctx, const PJ *crs,
// ---------------------------------------------------------------------------
-/** \brief Returns a BoundCRS, with a transformation to EPSG:4979 using a grid.
+/** \brief Returns a BoundCRS, with a transformation to a hub geographic 3D crs
+ * (use EPSG:4979 for WGS84 for example), using a grid.
*
* The returned object must be unreferenced with proj_destroy() after
* use.
@@ -1818,33 +1819,43 @@ PJ *proj_crs_create_bound_crs_to_WGS84(PJ_CONTEXT *ctx, const PJ *crs,
*
* @param ctx PROJ context, or NULL for default context
* @param vert_crs Object of type VerticalCRS (must not be NULL)
+ * @param hub_geographic_3D_crs Object of type Geographic 3D CRS (must not be
+ * NULL)
* @param grid_name Grid name (typically a .gtx file)
* @return Object that must be unreferenced with proj_destroy(), or NULL
* in case of error.
* @since 7.0
*/
-PJ *proj_crs_create_bound_vertical_crs_to_WGS84(PJ_CONTEXT *ctx,
- const PJ *vert_crs,
- const char *grid_name) {
+PJ *proj_crs_create_bound_vertical_crs(PJ_CONTEXT *ctx, const PJ *vert_crs,
+ const PJ *hub_geographic_3D_crs,
+ const char *grid_name) {
SANITIZE_CTX(ctx);
assert(vert_crs);
+ assert(hub_geographic_3D_crs);
assert(grid_name);
auto l_crs = std::dynamic_pointer_cast<VerticalCRS>(vert_crs->iso_obj);
if (!l_crs) {
- proj_log_error(ctx, __FUNCTION__, "Object is not a VerticalCRS");
+ proj_log_error(ctx, __FUNCTION__, "vert_crs is not a VerticalCRS");
+ return nullptr;
+ }
+ auto hub_crs =
+ std::dynamic_pointer_cast<CRS>(hub_geographic_3D_crs->iso_obj);
+ if (!hub_crs) {
+ proj_log_error(ctx, __FUNCTION__, "hub_geographic_3D_crs is not a CRS");
return nullptr;
}
try {
auto nnCRS = NN_NO_CHECK(l_crs);
+ auto nnHubCRS = NN_NO_CHECK(hub_crs);
auto transformation =
Transformation::createGravityRelatedHeightToGeographic3D(
PropertyMap().set(IdentifiedObject::NAME_KEY,
- "unknown to WGS84 ellipsoidal height"),
- nnCRS, GeographicCRS::EPSG_4979, nullptr,
- std::string(grid_name), std::vector<PositionalAccuracyNNPtr>());
- return pj_obj_create(
- ctx,
- BoundCRS::create(nnCRS, GeographicCRS::EPSG_4979, transformation));
+ "unknown to " + hub_crs->nameStr() +
+ " ellipsoidal height"),
+ nnCRS, nnHubCRS, nullptr, std::string(grid_name),
+ std::vector<PositionalAccuracyNNPtr>());
+ return pj_obj_create(ctx,
+ BoundCRS::create(nnCRS, nnHubCRS, transformation));
} catch (const std::exception &e) {
proj_log_error(ctx, __FUNCTION__, e.what());
if (ctx->cpp_context) {
diff --git a/src/proj_experimental.h b/src/proj_experimental.h
index 63b858d5..c6d5bc45 100644
--- a/src/proj_experimental.h
+++ b/src/proj_experimental.h
@@ -317,9 +317,10 @@ PJ PROJ_DLL *proj_crs_create_bound_crs_to_WGS84(PJ_CONTEXT *ctx,
const PJ *crs,
const char *const *options);
-PJ PROJ_DLL *proj_crs_create_bound_vertical_crs_to_WGS84(PJ_CONTEXT *ctx,
- const PJ* vert_crs,
- const char* grid_name);
+PJ PROJ_DLL *proj_crs_create_bound_vertical_crs(PJ_CONTEXT *ctx,
+ const PJ* vert_crs,
+ const PJ* hub_geographic_3D_crs,
+ const char* grid_name);
/* BEGIN: Generated by scripts/create_c_api_projections.py*/
PJ PROJ_DLL *proj_create_conversion_utm(