aboutsummaryrefslogtreecommitdiff
path: root/src/proj.h
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2018-11-14 17:40:42 +0100
committerEven Rouault <even.rouault@spatialys.com>2018-11-14 22:48:29 +0100
commitd928db15d53805d9b728b440079756081961c536 (patch)
treee862a961d26bedb34c58e4f28ef0bdeedb5f3225 /src/proj.h
parent330e8bf686f9c4524075ca1ff50cbca6c9e091da (diff)
downloadPROJ-d928db15d53805d9b728b440079756081961c536.tar.gz
PROJ-d928db15d53805d9b728b440079756081961c536.zip
Implement RFC 2: Initial integration of "GDAL SRS barn" work
This work mostly consists of: - a C++ implementation of the ISO-19111:2018 / OGC Topic 2 "Referencing by coordinates" classes to represent Datums, Coordinate systems, CRSs (Coordinate Reference Systems) and Coordinate Operations. - methods to convert between this C++ modeling and WKT1, WKT2 and PROJ string representations of those objects - management and query of a SQLite3 database of CRS and Coordinate Operation definition - a C API binding part of those capabilities This is all-in-one squashed commit of the work of https://github.com/OSGeo/proj.4/pull/1040
Diffstat (limited to 'src/proj.h')
-rw-r--r--src/proj.h1100
1 files changed, 1060 insertions, 40 deletions
diff --git a/src/proj.h b/src/proj.h
index 282d1487..39d16b30 100644
--- a/src/proj.h
+++ b/src/proj.h
@@ -123,18 +123,42 @@
#error proj.h must be included before proj_api.h
#endif
+#ifdef PROJ_RENAME_SYMBOLS
+#include "proj_symbol_rename.h"
+#endif
+
#ifndef PROJ_H
#define PROJ_H
#ifdef __cplusplus
extern "C" {
#endif
+/**
+ * \file proj.h
+ *
+ * C API new generation
+ */
+
+/*! @cond Doxygen_Suppress */
+
+#ifndef PROJ_DLL
+#ifdef PROJ_MSVC_DLL_EXPORT
+#define PROJ_DLL __declspec(dllexport)
+#elif defined(PROJ_MSVC_DLL_IMPORT)
+#define PROJ_DLL __declspec(dllimport)
+#elif defined(__GNUC__)
+#define PROJ_DLL __attribute__ ((visibility("default")))
+#else
+#define PROJ_DLL
+#endif
+#endif
+
/* The version numbers should be updated with every release! **/
#define PROJ_VERSION_MAJOR 6
#define PROJ_VERSION_MINOR 0
#define PROJ_VERSION_PATCH 0
-extern char const pj_release[]; /* global release id string */
+extern char const PROJ_DLL pj_release[]; /* global release id string */
/* first forward declare everything needed */
@@ -308,15 +332,15 @@ typedef struct projCtx_t PJ_CONTEXT;
/* Functionality for handling thread contexts */
#define PJ_DEFAULT_CTX 0
-PJ_CONTEXT *proj_context_create (void);
-PJ_CONTEXT *proj_context_destroy (PJ_CONTEXT *ctx);
+PJ_CONTEXT PROJ_DLL *proj_context_create (void);
+PJ_CONTEXT PROJ_DLL *proj_context_destroy (PJ_CONTEXT *ctx);
/* Manage the transformation definition object PJ */
-PJ *proj_create (PJ_CONTEXT *ctx, const char *definition);
-PJ *proj_create_argv (PJ_CONTEXT *ctx, int argc, char **argv);
-PJ *proj_create_crs_to_crs(PJ_CONTEXT *ctx, const char *srid_from, const char *srid_to, PJ_AREA *area);
-PJ *proj_destroy (PJ *P);
+PJ PROJ_DLL *proj_create (PJ_CONTEXT *ctx, const char *definition);
+PJ PROJ_DLL *proj_create_argv (PJ_CONTEXT *ctx, int argc, char **argv);
+PJ PROJ_DLL *proj_create_crs_to_crs(PJ_CONTEXT *ctx, const char *srid_from, const char *srid_to, PJ_AREA *area);
+PJ PROJ_DLL *proj_destroy (PJ *P);
/* Setter-functions for the opaque PJ_AREA struct */
/* Uncomment these when implementing support for area-based transformations.
@@ -333,13 +357,13 @@ enum PJ_DIRECTION {
typedef enum PJ_DIRECTION PJ_DIRECTION;
-int proj_angular_input (PJ *P, enum PJ_DIRECTION dir);
-int proj_angular_output (PJ *P, enum PJ_DIRECTION dir);
+int PROJ_DLL proj_angular_input (PJ *P, enum PJ_DIRECTION dir);
+int PROJ_DLL proj_angular_output (PJ *P, enum PJ_DIRECTION dir);
-PJ_COORD proj_trans (PJ *P, PJ_DIRECTION direction, PJ_COORD coord);
-int proj_trans_array (PJ *P, PJ_DIRECTION direction, size_t n, PJ_COORD *coord);
-size_t proj_trans_generic (
+PJ_COORD PROJ_DLL proj_trans (PJ *P, PJ_DIRECTION direction, PJ_COORD coord);
+int PROJ_DLL proj_trans_array (PJ *P, PJ_DIRECTION direction, size_t n, PJ_COORD *coord);
+size_t PROJ_DLL proj_trans_generic (
PJ *P,
PJ_DIRECTION direction,
double *x, size_t sx, size_t nx,
@@ -350,62 +374,1058 @@ size_t proj_trans_generic (
/* Initializers */
-PJ_COORD proj_coord (double x, double y, double z, double t);
+PJ_COORD PROJ_DLL proj_coord (double x, double y, double z, double t);
/* Measure internal consistency - in forward or inverse direction */
-double proj_roundtrip (PJ *P, PJ_DIRECTION direction, int n, PJ_COORD *coord);
+double PROJ_DLL proj_roundtrip (PJ *P, PJ_DIRECTION direction, int n, PJ_COORD *coord);
/* Geodesic distance between two points with angular 2D coordinates */
-double proj_lp_dist (const PJ *P, PJ_COORD a, PJ_COORD b);
+double PROJ_DLL proj_lp_dist (const PJ *P, PJ_COORD a, PJ_COORD b);
/* The geodesic distance AND the vertical offset */
-double proj_lpz_dist (const PJ *P, PJ_COORD a, PJ_COORD b);
+double PROJ_DLL proj_lpz_dist (const PJ *P, PJ_COORD a, PJ_COORD b);
/* Euclidean distance between two points with linear 2D coordinates */
-double proj_xy_dist (PJ_COORD a, PJ_COORD b);
+double PROJ_DLL proj_xy_dist (PJ_COORD a, PJ_COORD b);
/* Euclidean distance between two points with linear 3D coordinates */
-double proj_xyz_dist (PJ_COORD a, PJ_COORD b);
+double PROJ_DLL proj_xyz_dist (PJ_COORD a, PJ_COORD b);
/* Geodesic distance (in meter) + fwd and rev azimuth between two points on the ellipsoid */
-PJ_COORD proj_geod (const PJ *P, PJ_COORD a, PJ_COORD b);
+PJ_COORD PROJ_DLL proj_geod (const PJ *P, PJ_COORD a, PJ_COORD b);
/* Set or read error level */
-int proj_context_errno (PJ_CONTEXT *ctx);
-int proj_errno (const PJ *P);
-int proj_errno_set (const PJ *P, int err);
-int proj_errno_reset (const PJ *P);
-int proj_errno_restore (const PJ *P, int err);
-const char* proj_errno_string (int err);
+int PROJ_DLL proj_context_errno (PJ_CONTEXT *ctx);
+int PROJ_DLL proj_errno (const PJ *P);
+int PROJ_DLL proj_errno_set (const PJ *P, int err);
+int PROJ_DLL proj_errno_reset (const PJ *P);
+int PROJ_DLL proj_errno_restore (const PJ *P, int err);
+const char PROJ_DLL * proj_errno_string (int err);
-PJ_LOG_LEVEL proj_log_level (PJ_CONTEXT *ctx, PJ_LOG_LEVEL log_level);
-void proj_log_func (PJ_CONTEXT *ctx, void *app_data, PJ_LOG_FUNCTION logf);
+PJ_LOG_LEVEL PROJ_DLL proj_log_level (PJ_CONTEXT *ctx, PJ_LOG_LEVEL log_level);
+void PROJ_DLL proj_log_func (PJ_CONTEXT *ctx, void *app_data, PJ_LOG_FUNCTION logf);
/* Scaling and angular distortion factors */
-PJ_FACTORS proj_factors(PJ *P, PJ_COORD lp);
+PJ_FACTORS PROJ_DLL proj_factors(PJ *P, PJ_COORD lp);
/* Info functions - get information about various PROJ.4 entities */
-PJ_INFO proj_info(void);
-PJ_PROJ_INFO proj_pj_info(PJ *P);
-PJ_GRID_INFO proj_grid_info(const char *gridname);
-PJ_INIT_INFO proj_init_info(const char *initname);
+PJ_INFO PROJ_DLL proj_info(void);
+PJ_PROJ_INFO PROJ_DLL proj_pj_info(PJ *P);
+PJ_GRID_INFO PROJ_DLL proj_grid_info(const char *gridname);
+PJ_INIT_INFO PROJ_DLL proj_init_info(const char *initname);
/* List functions: */
/* Get lists of operations, ellipsoids, units and prime meridians. */
-const PJ_OPERATIONS *proj_list_operations(void);
-const PJ_ELLPS *proj_list_ellps(void);
-const PJ_UNITS *proj_list_units(void);
-const PJ_PRIME_MERIDIANS *proj_list_prime_meridians(void);
+const PJ_OPERATIONS PROJ_DLL *proj_list_operations(void);
+const PJ_ELLPS PROJ_DLL *proj_list_ellps(void);
+const PJ_UNITS PROJ_DLL *proj_list_units(void);
+const PJ_UNITS PROJ_DLL *proj_list_angular_units(void);
+const PJ_PRIME_MERIDIANS PROJ_DLL *proj_list_prime_meridians(void);
/* These are trivial, and while occasionally useful in real code, primarily here to */
/* simplify demo code, and in acknowledgement of the proj-internal discrepancy between */
/* angular units expected by classical proj, and by Charles Karney's geodesics subsystem */
-double proj_torad (double angle_in_degrees);
-double proj_todeg (double angle_in_radians);
+double PROJ_DLL proj_torad (double angle_in_degrees);
+double PROJ_DLL proj_todeg (double angle_in_radians);
+
+double PROJ_DLL proj_dmstor(const char *is, char **rs);
+char PROJ_DLL * proj_rtodms(char *s, double r, int pos, int neg);
+
+/*! @endcond */
+
+/* ------------------------------------------------------------------------- */
+/* Binding in C of C++ API */
+/* ------------------------------------------------------------------------- */
+
+/*! @cond Doxygen_Suppress */
+typedef struct PJ_OBJ PJ_OBJ;
+/*! @endcond */
+
+/*! @cond Doxygen_Suppress */
+typedef struct PJ_OBJ_LIST PJ_OBJ_LIST;
+/*! @endcond */
+
+int PROJ_DLL proj_context_set_database_path(PJ_CONTEXT *ctx,
+ const char *dbPath,
+ const char *const *auxDbPaths,
+ const char* const *options);
+
+const char PROJ_DLL *proj_context_get_database_path(PJ_CONTEXT *ctx);
+
+/** \brief Guessed WKT "dialect". */
+typedef enum
+{
+ /** \ref WKT2_2018 */
+ PJ_GUESSED_WKT2_2018,
+
+ /** \ref WKT2_2015 */
+ PJ_GUESSED_WKT2_2015,
+
+ /** \ref WKT1 */
+ PJ_GUESSED_WKT1_GDAL,
+
+ /** ESRI variant of WKT1 */
+ PJ_GUESSED_WKT1_ESRI,
+
+ /** Not WKT / unrecognized */
+ PJ_GUESSED_NOT_WKT
+} PJ_GUESSED_WKT_DIALECT;
+
+PJ_GUESSED_WKT_DIALECT PROJ_DLL proj_context_guess_wkt_dialect(PJ_CONTEXT *ctx,
+ const char *wkt);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_from_user_input(PJ_CONTEXT *ctx,
+ const char *text,
+ const char* const *options);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_from_wkt(PJ_CONTEXT *ctx, const char *wkt,
+ const char* const *options);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_from_proj_string(PJ_CONTEXT *ctx,
+ const char *proj_string,
+ const char* const *options);
+
+/** \brief Object category. */
+typedef enum
+{
+ PJ_OBJ_CATEGORY_ELLIPSOID,
+ PJ_OBJ_CATEGORY_DATUM,
+ PJ_OBJ_CATEGORY_CRS,
+ PJ_OBJ_CATEGORY_COORDINATE_OPERATION
+} PJ_OBJ_CATEGORY;
+
+PJ_OBJ PROJ_DLL *proj_obj_create_from_database(PJ_CONTEXT *ctx,
+ const char *auth_name,
+ const char *code,
+ PJ_OBJ_CATEGORY category,
+ int usePROJAlternativeGridNames,
+ const char* const *options);
+
+void PROJ_DLL proj_obj_unref(PJ_OBJ *obj);
+
+/** \brief Object type. */
+typedef enum
+{
+ PJ_OBJ_TYPE_ELLIPSOID,
+
+ PJ_OBJ_TYPE_GEODETIC_REFERENCE_FRAME,
+ PJ_OBJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME,
+ PJ_OBJ_TYPE_VERTICAL_REFERENCE_FRAME,
+ PJ_OBJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME,
+ PJ_OBJ_TYPE_DATUM_ENSEMBLE,
+
+ /** Abstract type, not returned by proj_obj_get_type() */
+ PJ_OBJ_TYPE_CRS,
+
+ PJ_OBJ_TYPE_GEODETIC_CRS,
+ PJ_OBJ_TYPE_GEOCENTRIC_CRS,
+
+ /** proj_obj_get_type() will never return that type, but
+ * PJ_OBJ_TYPE_GEOGRAPHIC_2D_CRS or PJ_OBJ_TYPE_GEOGRAPHIC_3D_CRS. */
+ PJ_OBJ_TYPE_GEOGRAPHIC_CRS,
+
+ PJ_OBJ_TYPE_GEOGRAPHIC_2D_CRS,
+ PJ_OBJ_TYPE_GEOGRAPHIC_3D_CRS,
+ PJ_OBJ_TYPE_VERTICAL_CRS,
+ PJ_OBJ_TYPE_PROJECTED_CRS,
+ PJ_OBJ_TYPE_COMPOUND_CRS,
+ PJ_OBJ_TYPE_TEMPORAL_CRS,
+ PJ_OBJ_TYPE_BOUND_CRS,
+ PJ_OBJ_TYPE_OTHER_CRS,
+
+ PJ_OBJ_TYPE_CONVERSION,
+ PJ_OBJ_TYPE_TRANSFORMATION,
+ PJ_OBJ_TYPE_CONCATENATED_OPERATION,
+ PJ_OBJ_TYPE_OTHER_COORDINATE_OPERATION,
+
+ PJ_OBJ_TYPE_UNKNOWN
+} PJ_OBJ_TYPE;
+
+PJ_OBJ_LIST PROJ_DLL *proj_obj_create_from_name(PJ_CONTEXT *ctx,
+ const char *auth_name,
+ const char *searchedName,
+ const PJ_OBJ_TYPE* types,
+ size_t typesCount,
+ int approximateMatch,
+ size_t limitResultCount,
+ const char* const *options);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_geographic_crs(
+ PJ_CONTEXT *ctx,
+ const char *geogName,
+ const char *datumName,
+ const char *ellipsoidName,
+ double semiMajorMetre, double invFlattening,
+ const char *primeMeridianName,
+ double primeMeridianOffset,
+ const char *angularUnits,
+ double angularUnitsConv,
+ int latLongOrder);
+
+/* BEGIN: Generated by scripts/create_c_api_projections.py*/
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_UTM(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ int zone,
+ int north
+);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_TransverseMercator(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double scale,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_GaussSchreiberTransverseMercator(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double scale,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_TransverseMercatorSouthOriented(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double scale,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_TwoPointEquidistant(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeFirstPoint,
+ double longitudeFirstPoint,
+ double latitudeSecondPoint,
+ double longitudeSeconPoint,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_TunisiaMappingGrid(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_AlbersEqualArea(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeFalseOrigin,
+ double longitudeFalseOrigin,
+ double latitudeFirstParallel,
+ double latitudeSecondParallel,
+ double eastingFalseOrigin,
+ double northingFalseOrigin,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_LambertConicConformal_1SP(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double scale,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_LambertConicConformal_2SP(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeFalseOrigin,
+ double longitudeFalseOrigin,
+ double latitudeFirstParallel,
+ double latitudeSecondParallel,
+ double eastingFalseOrigin,
+ double northingFalseOrigin,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_LambertConicConformal_2SP_Michigan(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeFalseOrigin,
+ double longitudeFalseOrigin,
+ double latitudeFirstParallel,
+ double latitudeSecondParallel,
+ double eastingFalseOrigin,
+ double northingFalseOrigin,
+ double ellipsoidScalingFactor,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_LambertConicConformal_2SP_Belgium(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeFalseOrigin,
+ double longitudeFalseOrigin,
+ double latitudeFirstParallel,
+ double latitudeSecondParallel,
+ double eastingFalseOrigin,
+ double northingFalseOrigin,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_AzimuthalEquidistant(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeNatOrigin,
+ double longitudeNatOrigin,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_GuamProjection(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeNatOrigin,
+ double longitudeNatOrigin,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_Bonne(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeNatOrigin,
+ double longitudeNatOrigin,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_LambertCylindricalEqualAreaSpherical(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeFirstParallel,
+ double longitudeNatOrigin,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_LambertCylindricalEqualArea(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeFirstParallel,
+ double longitudeNatOrigin,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_CassiniSoldner(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_EquidistantConic(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double latitudeFirstParallel,
+ double latitudeSecondParallel,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_EckertI(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_EckertII(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_EckertIII(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_EckertIV(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_EckertV(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_EckertVI(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_EquidistantCylindrical(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeFirstParallel,
+ double longitudeNatOrigin,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_EquidistantCylindricalSpherical(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeFirstParallel,
+ double longitudeNatOrigin,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_Gall(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_GoodeHomolosine(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_InterruptedGoodeHomolosine(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_GeostationarySatelliteSweepX(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double height,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_GeostationarySatelliteSweepY(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double height,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_Gnomonic(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_HotineObliqueMercatorVariantA(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeProjectionCentre,
+ double longitudeProjectionCentre,
+ double azimuthInitialLine,
+ double angleFromRectifiedToSkrewGrid,
+ double scale,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_HotineObliqueMercatorVariantB(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeProjectionCentre,
+ double longitudeProjectionCentre,
+ double azimuthInitialLine,
+ double angleFromRectifiedToSkrewGrid,
+ double scale,
+ double eastingProjectionCentre,
+ double northingProjectionCentre,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_HotineObliqueMercatorTwoPointNaturalOrigin(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeProjectionCentre,
+ double latitudePoint1,
+ double longitudePoint1,
+ double latitudePoint2,
+ double longitudePoint2,
+ double scale,
+ double eastingProjectionCentre,
+ double northingProjectionCentre,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_InternationalMapWorldPolyconic(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double latitudeFirstParallel,
+ double latitudeSecondParallel,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_KrovakNorthOriented(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeProjectionCentre,
+ double longitudeOfOrigin,
+ double colatitudeConeAxis,
+ double latitudePseudoStandardParallel,
+ double scaleFactorPseudoStandardParallel,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_Krovak(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeProjectionCentre,
+ double longitudeOfOrigin,
+ double colatitudeConeAxis,
+ double latitudePseudoStandardParallel,
+ double scaleFactorPseudoStandardParallel,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_LambertAzimuthalEqualArea(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeNatOrigin,
+ double longitudeNatOrigin,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_MillerCylindrical(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_MercatorVariantA(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double scale,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_MercatorVariantB(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeFirstParallel,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_PopularVisualisationPseudoMercator(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_Mollweide(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_NewZealandMappingGrid(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_ObliqueStereographic(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double scale,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_Orthographic(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_AmericanPolyconic(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_PolarStereographicVariantA(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double scale,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_PolarStereographicVariantB(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeStandardParallel,
+ double longitudeOfOrigin,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_Robinson(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_Sinusoidal(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_Stereographic(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double scale,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_VanDerGrinten(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_WagnerI(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_WagnerII(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_WagnerIII(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double latitudeTrueScale,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_WagnerIV(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_WagnerV(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_WagnerVI(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_WagnerVII(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_QuadrilateralizedSphericalCube(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLat,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_SphericalCrossTrackHeight(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double pegPointLat,
+ double pegPointLong,
+ double pegPointHeading,
+ double pegPointHeight,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+PJ_OBJ PROJ_DLL *proj_obj_create_projected_crs_EqualEarth(
+ PJ_OBJ* geodetic_crs, const char* crs_name,
+ double centerLong,
+ double falseEasting,
+ double falseNorthing,
+ const char* angUnitName, double angUnitConvFactor,
+ const char* linearUnitName, double linearUnitConvFactor);
+
+/* END: Generated by scripts/create_c_api_projections.py*/
+
+PJ_OBJ_TYPE PROJ_DLL proj_obj_get_type(PJ_OBJ *obj);
+
+int PROJ_DLL proj_obj_is_deprecated(PJ_OBJ *obj);
+
+/** Comparison criterion. */
+typedef enum
+{
+ /** All properties are identical. */
+ PJ_COMP_STRICT,
+
+ /** The objects are equivalent for the purpose of coordinate
+ * operations. They can differ by the name of their objects,
+ * identifiers, other metadata.
+ * Parameters may be expressed in different units, provided that the
+ * value is (with some tolerance) the same once expressed in a
+ * common unit.
+ */
+ PJ_COMP_EQUIVALENT,
+
+ /** Same as EQUIVALENT, relaxed with an exception that the axis order
+ * of the base CRS of a DerivedCRS/ProjectedCRS or the axis order of
+ * a GeographicCRS is ignored. Only to be used
+ * with DerivedCRS/ProjectedCRS/GeographicCRS */
+ PJ_COMP_EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS,
+} PJ_COMPARISON_CRITERION;
+
+int PROJ_DLL proj_obj_is_equivalent_to(PJ_OBJ *obj, PJ_OBJ* other,
+ PJ_COMPARISON_CRITERION criterion);
+
+int PROJ_DLL proj_obj_is_crs(PJ_OBJ *obj);
+
+const char PROJ_DLL* proj_obj_get_name(PJ_OBJ *obj);
+
+const char PROJ_DLL* proj_obj_get_id_auth_name(PJ_OBJ *obj, int index);
+
+const char PROJ_DLL* proj_obj_get_id_code(PJ_OBJ *obj, int index);
+
+int PROJ_DLL proj_obj_get_area_of_use(PJ_OBJ *obj,
+ double* p_west_lon,
+ double* p_south_lat,
+ double* p_east_lon,
+ double* p_north_lat,
+ const char **p_area_name);
+
+/** \brief WKT version. */
+typedef enum
+{
+ /** cf osgeo::proj::io::WKTFormatter::Convention::WKT2 */
+ PJ_WKT2_2015,
+ /** cf osgeo::proj::io::WKTFormatter::Convention::WKT2_SIMPLIFIED */
+ PJ_WKT2_2015_SIMPLIFIED,
+ /** cf osgeo::proj::io::WKTFormatter::Convention::WKT2_2018 */
+ PJ_WKT2_2018,
+ /** cf osgeo::proj::io::WKTFormatter::Convention::WKT2_2018_SIMPLIFIED */
+ PJ_WKT2_2018_SIMPLIFIED,
+ /** cf osgeo::proj::io::WKTFormatter::Convention::WKT1_GDAL */
+ PJ_WKT1_GDAL,
+ /** cf osgeo::proj::io::WKTFormatter::Convention::WKT1_ESRI */
+ PJ_WKT1_ESRI
+} PJ_WKT_TYPE;
+
+const char PROJ_DLL* proj_obj_as_wkt(PJ_OBJ *obj, PJ_WKT_TYPE type,
+ const char* const *options);
+
+/** \brief PROJ string version. */
+typedef enum
+{
+ /** cf osgeo::proj::io::PROJStringFormatter::Convention::PROJ_5 */
+ PJ_PROJ_5,
+ /** cf osgeo::proj::io::PROJStringFormatter::Convention::PROJ_4 */
+ PJ_PROJ_4
+} PJ_PROJ_STRING_TYPE;
+
+const char PROJ_DLL* proj_obj_as_proj_string(PJ_OBJ *obj,
+ PJ_PROJ_STRING_TYPE type,
+ const char* const *options);
+
+PJ_OBJ PROJ_DLL *proj_obj_get_source_crs(PJ_OBJ *obj);
+
+PJ_OBJ PROJ_DLL *proj_obj_get_target_crs(PJ_OBJ *obj);
+
+PJ_OBJ_LIST PROJ_DLL *proj_obj_identify(PJ_OBJ* obj,
+ const char *auth_name,
+ const char* const *options,
+ int **confidence);
+
+void PROJ_DLL proj_free_int_list(int* list);
+
+/* ------------------------------------------------------------------------- */
+
+/** \brief Type representing a NULL terminated list of NUL-terminate strings. */
+typedef char **PROJ_STRING_LIST;
+
+PROJ_STRING_LIST PROJ_DLL proj_get_authorities_from_database(PJ_CONTEXT *ctx);
+
+PROJ_STRING_LIST PROJ_DLL proj_get_codes_from_database(PJ_CONTEXT *ctx,
+ const char *auth_name,
+ PJ_OBJ_TYPE type,
+ int allow_deprecated);
+
+void PROJ_DLL proj_free_string_list(PROJ_STRING_LIST list);
+
+/* ------------------------------------------------------------------------- */
+
+
+/*! @cond Doxygen_Suppress */
+typedef struct PJ_OPERATION_FACTORY_CONTEXT PJ_OPERATION_FACTORY_CONTEXT;
+/*! @endcond */
+
+PJ_OPERATION_FACTORY_CONTEXT PROJ_DLL *proj_create_operation_factory_context(
+ PJ_CONTEXT *ctx,
+ const char *authority);
+
+void PROJ_DLL proj_operation_factory_context_unref(
+ PJ_OPERATION_FACTORY_CONTEXT *ctxt);
+
+void PROJ_DLL proj_operation_factory_context_set_desired_accuracy(
+ PJ_OPERATION_FACTORY_CONTEXT *ctxt,
+ double accuracy);
+
+void PROJ_DLL proj_operation_factory_context_set_area_of_interest(
+ PJ_OPERATION_FACTORY_CONTEXT *ctxt,
+ double west_lon,
+ double south_lat,
+ double east_lon,
+ double north_lat);
+
+/** Specify how source and target CRS extent should be used to restrict
+ * candidate operations (only taken into account if no explicit area of
+ * interest is specified. */
+typedef enum
+{
+ /** Ignore CRS extent */
+ PJ_CRS_EXTENT_NONE,
+
+ /** Test coordinate operation extent against both CRS extent. */
+ PJ_CRS_EXTENT_BOTH,
+
+ /** Test coordinate operation extent against the intersection of both
+ CRS extent. */
+ PJ_CRS_EXTENT_INTERSECTION,
+
+ /** Test coordinate operation against the smallest of both CRS extent. */
+ PJ_CRS_EXTENT_SMALLEST
+} PROJ_CRS_EXTENT_USE;
+
+void PROJ_DLL proj_operation_factory_context_set_crs_extent_use(
+ PJ_OPERATION_FACTORY_CONTEXT *ctxt,
+ PROJ_CRS_EXTENT_USE use);
+
+/** Spatial criterion to restrict candiate operations. */
+typedef enum {
+ /** The area of validity of transforms should strictly contain the
+ * are of interest. */
+ PROJ_SPATIAL_CRITERION_STRICT_CONTAINMENT,
+
+ /** The area of validity of transforms should at least intersect the
+ * area of interest. */
+ PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION
+} PROJ_SPATIAL_CRITERION;
+
+void PROJ_DLL proj_operation_factory_context_set_spatial_criterion(
+ PJ_OPERATION_FACTORY_CONTEXT *ctxt,
+ PROJ_SPATIAL_CRITERION criterion);
+
+
+/** Describe how grid availability is used. */
+typedef enum {
+ /** Grid availability is only used for sorting results. Operations
+ * where some grids are missing will be sorted last. */
+ PROJ_GRID_AVAILABILITY_USED_FOR_SORTING,
+
+ /** Completely discard an operation if a required grid is missing. */
+ PROJ_GRID_AVAILABILITY_DISCARD_OPERATION_IF_MISSING_GRID,
+
+ /** Ignore grid availability at all. Results will be presented as if
+ * all grids were available. */
+ PROJ_GRID_AVAILABILITY_IGNORED,
+} PROJ_GRID_AVAILABILITY_USE;
+
+void PROJ_DLL proj_operation_factory_context_set_grid_availability_use(
+ PJ_OPERATION_FACTORY_CONTEXT *ctxt,
+ PROJ_GRID_AVAILABILITY_USE use);
+
+void PROJ_DLL proj_operation_factory_context_set_use_proj_alternative_grid_names(
+ PJ_OPERATION_FACTORY_CONTEXT *ctxt,
+ int usePROJNames);
+
+void PROJ_DLL proj_operation_factory_context_set_allow_use_intermediate_crs(
+ PJ_OPERATION_FACTORY_CONTEXT *ctxt, int allow);
+
+void PROJ_DLL proj_operation_factory_context_set_allowed_intermediate_crs(
+ PJ_OPERATION_FACTORY_CONTEXT *ctxt,
+ const char* const *list_of_auth_name_codes);
+
+/* ------------------------------------------------------------------------- */
+
+
+PJ_OBJ_LIST PROJ_DLL *proj_obj_create_operations(
+ PJ_OBJ *source_crs,
+ PJ_OBJ *target_crs,
+ PJ_OPERATION_FACTORY_CONTEXT *operationContext);
+
+int PROJ_DLL proj_obj_list_get_count(PJ_OBJ_LIST *result);
+
+PJ_OBJ PROJ_DLL *proj_obj_list_get(PJ_OBJ_LIST *result,
+ int index);
+
+void PROJ_DLL proj_obj_list_unref(PJ_OBJ_LIST *result);
+
+/* ------------------------------------------------------------------------- */
+
+PJ_OBJ PROJ_DLL *proj_obj_crs_get_geodetic_crs(PJ_OBJ *crs);
+
+PJ_OBJ PROJ_DLL *proj_obj_crs_get_horizontal_datum(PJ_OBJ *crs);
+
+PJ_OBJ PROJ_DLL *proj_obj_crs_get_sub_crs(PJ_OBJ *crs, int index);
+
+PJ_OBJ PROJ_DLL *proj_obj_crs_create_bound_crs_to_WGS84(PJ_OBJ *crs);
+
+PJ_OBJ PROJ_DLL *proj_obj_get_ellipsoid(PJ_OBJ *obj);
+
+int PROJ_DLL proj_obj_ellipsoid_get_parameters(PJ_OBJ *ellipsoid,
+ double *pSemiMajorMetre,
+ double *pSemiMinorMetre,
+ int *pIsSemiMinorComputed,
+ double *pInverseFlattening);
+
+PJ_OBJ PROJ_DLL *proj_obj_get_prime_meridian(PJ_OBJ *obj);
+
+int PROJ_DLL proj_obj_prime_meridian_get_parameters(PJ_OBJ *prime_meridian,
+ double *pLongitude,
+ double *pLongitudeUnitConvFactor,
+ const char **pLongitudeUnitName);
+
+PJ_OBJ PROJ_DLL *proj_obj_crs_get_coordoperation(PJ_OBJ *crs,
+ const char **pMethodName,
+ const char **pMethodAuthorityName,
+ const char **pMethodCode);
+
+int PROJ_DLL proj_coordoperation_is_instanciable(PJ_OBJ *coordoperation);
+
+int PROJ_DLL proj_coordoperation_get_param_count(PJ_OBJ *coordoperation);
+
+int PROJ_DLL proj_coordoperation_get_param_index(PJ_OBJ *coordoperation,
+ const char *name);
+
+int PROJ_DLL proj_coordoperation_get_param(PJ_OBJ *coordoperation,
+ int index,
+ const char **pName,
+ const char **pNameAuthorityName,
+ const char **pNameCode,
+ double *pValue,
+ const char **pValueString,
+ double *pValueUnitConvFactor,
+ const char **pValueUnitName);
+
+int PROJ_DLL proj_coordoperation_get_grid_used_count(PJ_OBJ *coordoperation);
+
+int PROJ_DLL proj_coordoperation_get_grid_used(PJ_OBJ *coordoperation,
+ int index,
+ const char **pShortName,
+ const char **pFullName,
+ const char **pPackageName,
+ const char **pURL,
+ int *pDirectDownload,
+ int *pOpenLicense,
+ int *pAvailable);
-double proj_dmstor(const char *is, char **rs);
-char* proj_rtodms(char *s, double r, int pos, int neg);
+double PROJ_DLL proj_coordoperation_get_accuracy(PJ_OBJ* obj);
#ifdef __cplusplus
}