diff options
| author | Nyall Dawson <nyall.dawson@gmail.com> | 2019-12-14 10:15:05 +1000 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2019-12-14 01:15:05 +0100 |
| commit | ccaebae3cb9424a9b21d0c58237d7e95c9e16b1b (patch) | |
| tree | dec6e14e4a310c47ed987b7ef67d3e67f14f0fe3 /src/iso19111/c_api.cpp | |
| parent | c9d6d364a86054f1dddbeb772660375be47aa23b (diff) | |
| download | PROJ-ccaebae3cb9424a9b21d0c58237d7e95c9e16b1b.tar.gz PROJ-ccaebae3cb9424a9b21d0c58237d7e95c9e16b1b.zip | |
Add proj_coordoperation_create_inverse to C API (#1795)
Diffstat (limited to 'src/iso19111/c_api.cpp')
| -rw-r--r-- | src/iso19111/c_api.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/iso19111/c_api.cpp b/src/iso19111/c_api.cpp index 9db9e5b3..5e2ac522 100644 --- a/src/iso19111/c_api.cpp +++ b/src/iso19111/c_api.cpp @@ -7769,6 +7769,34 @@ PJ *proj_normalize_for_visualization(PJ_CONTEXT *ctx, const PJ *obj) { // --------------------------------------------------------------------------- +/** \brief Returns a PJ* coordinate operation object which represents the + * inverse operation of the specified coordinate operation. + * + * @param ctx PROJ context, or NULL for default context + * @param obj Object of type CoordinateOperation (must not be NULL) + * @return a new PJ* object to free with proj_destroy() in case of success, or + * nullptr in case of error + * @since 6.3 + */ +PJ *proj_coordoperation_create_inverse(PJ_CONTEXT *ctx, const PJ *obj) { + + SANITIZE_CTX(ctx); + auto co = dynamic_cast<const CoordinateOperation *>(obj->iso_obj.get()); + if (!co) { + proj_log_error(ctx, __FUNCTION__, + "Object is not a CoordinateOperation"); + return nullptr; + } + try { + return pj_obj_create(ctx, co->inverse()); + } catch (const std::exception &e) { + proj_log_debug(ctx, __FUNCTION__, e.what()); + return nullptr; + } +} + +// --------------------------------------------------------------------------- + /** \brief Returns the number of steps of a concatenated operation. * * The input object must be a concatenated operation. |
