1# PROJ API Definition 2 3IF CTE_PROJ_VERSION_MAJOR >= 8: 4 cdef extern from "proj.h": 5 const char * proj_context_errno_string(PJ_CONTEXT* ctx, int err) 6 ctypedef enum PJ_CATEGORY: 7 PJ_CATEGORY_ELLIPSOID 8 PJ_CATEGORY_PRIME_MERIDIAN 9 PJ_CATEGORY_DATUM 10 PJ_CATEGORY_CRS 11 PJ_CATEGORY_COORDINATE_OPERATION 12 PJ_CATEGORY_DATUM_ENSEMBLE 13ELSE: 14 cdef extern from "proj.h": 15 const char * proj_errno_string(int err) 16 ctypedef enum PJ_CATEGORY: 17 PJ_CATEGORY_ELLIPSOID 18 PJ_CATEGORY_PRIME_MERIDIAN 19 PJ_CATEGORY_DATUM 20 PJ_CATEGORY_CRS 21 PJ_CATEGORY_COORDINATE_OPERATION 22 cdef int PJ_CATEGORY_DATUM_ENSEMBLE = PJ_CATEGORY_DATUM 23 24 25cdef extern from "proj.h": 26 cdef int PROJ_VERSION_MAJOR 27 cdef int PROJ_VERSION_MINOR 28 cdef int PROJ_VERSION_PATCH 29 void proj_context_set_search_paths( 30 PJ_CONTEXT *ctx, int count_paths, const char* const* paths) 31 int proj_context_set_database_path(PJ_CONTEXT *ctx, 32 const char *dbPath, 33 const char *const *auxDbPaths, 34 const char* const *options) 35 void proj_context_set_ca_bundle_path(PJ_CONTEXT *ctx, const char *path); 36 37 # projCtx has been replaced by PJ_CONTEXT *. 38 # projPJ has been replaced by PJ * 39 ctypedef struct PJ 40 ctypedef struct PJ_CONTEXT 41 PJ_CONTEXT *proj_context_create () 42 PJ_CONTEXT *proj_context_clone (PJ_CONTEXT *ctx) 43 PJ_CONTEXT *proj_context_destroy (PJ_CONTEXT *ctx) 44 45 ctypedef enum PJ_LOG_LEVEL: 46 PJ_LOG_NONE = 0 47 PJ_LOG_ERROR = 1 48 PJ_LOG_DEBUG = 2 49 PJ_LOG_TRACE = 3 50 PJ_LOG_TELL = 4 51 ctypedef void (*PJ_LOG_FUNCTION)(void *, int, const char *) 52 void proj_log_func (PJ_CONTEXT *ctx, void *app_data, PJ_LOG_FUNCTION logf) 53 54 int proj_errno (const PJ *P) nogil 55 int proj_context_errno (PJ_CONTEXT *ctx) 56 int proj_errno_reset (const PJ *P) nogil 57 PJ *proj_create (PJ_CONTEXT *ctx, const char *definition) 58 PJ *proj_normalize_for_visualization(PJ_CONTEXT *ctx, const PJ* obj) 59 60 ctypedef struct PJ_PROJ_INFO: 61 const char *id 62 const char *description 63 const char *definition 64 int has_inverse #1 if an inverse mapping exists, 0 otherwise */ 65 double accuracy 66 67 PJ_PROJ_INFO proj_pj_info(PJ *P) 68 69 ctypedef struct PJ_XYZT: 70 double x, y, z, t 71 ctypedef struct PJ_UVWT: 72 double u, v, w, t 73 ctypedef struct PJ_LPZT: 74 double lam, phi, z, t 75 ctypedef struct PJ_OPK: 76 double o, p, k 77 ctypedef struct PJ_ENU: 78 double e, n, u 79 ctypedef struct PJ_GEOD: 80 double s, a1, a2 81 82 ctypedef struct PJ_UV: 83 double u, v 84 ctypedef struct PJ_XY: 85 double x, y 86 ctypedef struct PJ_LP: 87 double lam, phi 88 89 ctypedef struct PJ_XYZ: 90 double x, y, z 91 ctypedef struct PJ_UVW: 92 double u, v, w 93 ctypedef struct PJ_LPZ: 94 double lam, phi, z 95 96 97 ctypedef union PJ_COORD: 98 double v[4]; 99 PJ_XYZT xyzt; 100 PJ_UVWT uvwt; 101 PJ_LPZT lpzt; 102 PJ_GEOD geod; 103 PJ_OPK opk; 104 PJ_ENU enu; 105 PJ_XYZ xyz; 106 PJ_UVW uvw; 107 PJ_LPZ lpz; 108 PJ_XY xy; 109 PJ_UV uv; 110 PJ_LP lp; 111 112 PJ_COORD proj_coord (double x, double y, double z, double t) 113 114 ctypedef enum PJ_DIRECTION: 115 PJ_FWD = 1 # Forward 116 PJ_IDENT = 0 # Do nothing 117 PJ_INV = -1 # Inverse 118 119 int proj_angular_input (PJ *P, PJ_DIRECTION dir) nogil 120 int proj_angular_output (PJ *P, PJ_DIRECTION dir) nogil 121 int proj_degree_input (PJ *P, PJ_DIRECTION dir) nogil 122 int proj_degree_output (PJ *P, PJ_DIRECTION dir) nogil 123 124 size_t proj_trans_generic ( 125 PJ *P, 126 PJ_DIRECTION direction, 127 double *x, size_t sx, size_t nx, 128 double *y, size_t sy, size_t ny, 129 double *z, size_t sz, size_t nz, 130 double *t, size_t st, size_t nt 131 ) nogil 132 ctypedef struct PJ_AREA 133 PJ *proj_create_crs_to_crs_from_pj( 134 PJ_CONTEXT *ctx, 135 PJ *source_crs, 136 PJ *target_crs, 137 PJ_AREA *area, 138 const char* const *options, 139 ) 140 141 ctypedef enum PJ_COMPARISON_CRITERION: 142 PJ_COMP_STRICT 143 PJ_COMP_EQUIVALENT 144 PJ_COMP_EQUIVALENT_EXCEPT_AXIS_ORDER_GEOGCRS 145 146 void proj_destroy(PJ *obj) 147 int proj_is_equivalent_to_with_ctx(PJ_CONTEXT *ctx, 148 const PJ *obj, const PJ *other, 149 PJ_COMPARISON_CRITERION criterion) 150 151 const char* proj_get_id_auth_name(const PJ *obj, int index) 152 const char* proj_get_id_code(const PJ *obj, int index) 153 int proj_get_area_of_use(PJ_CONTEXT *ctx, 154 const PJ *obj, 155 double* out_west_lon_degree, 156 double* out_south_lat_degree, 157 double* out_east_lon_degree, 158 double* out_north_lat_degree, 159 const char **out_area_name) 160 PJ_AREA *proj_area_create() 161 void proj_area_set_bbox(PJ_AREA *area, 162 double west_lon_degree, 163 double south_lat_degree, 164 double east_lon_degree, 165 double north_lat_degree) 166 void proj_area_destroy(PJ_AREA* area) 167 168 ctypedef enum PJ_WKT_TYPE: 169 PJ_WKT2_2015 170 PJ_WKT2_2015_SIMPLIFIED 171 PJ_WKT2_2019 172 PJ_WKT2_2019_SIMPLIFIED 173 PJ_WKT1_GDAL 174 PJ_WKT1_ESRI 175 176 const char* proj_as_wkt(PJ_CONTEXT *ctx, 177 const PJ *obj, 178 PJ_WKT_TYPE type, 179 const char* const *options) 180 181 ctypedef enum PJ_PROJ_STRING_TYPE: 182 PJ_PROJ_5 183 PJ_PROJ_4 184 185 const char* proj_as_proj_string(PJ_CONTEXT *ctx, 186 const PJ *obj, 187 PJ_PROJ_STRING_TYPE type, 188 const char* const *options) 189 const char* proj_as_projjson(PJ_CONTEXT *ctx, 190 const PJ *obj, 191 const char* const *options) 192 PJ *proj_crs_get_geodetic_crs(PJ_CONTEXT *ctx, const PJ *crs) 193 194 ctypedef enum PJ_TYPE: 195 PJ_TYPE_UNKNOWN 196 PJ_TYPE_ELLIPSOID 197 PJ_TYPE_PRIME_MERIDIAN 198 PJ_TYPE_GEODETIC_REFERENCE_FRAME 199 PJ_TYPE_DYNAMIC_GEODETIC_REFERENCE_FRAME 200 PJ_TYPE_VERTICAL_REFERENCE_FRAME 201 PJ_TYPE_DYNAMIC_VERTICAL_REFERENCE_FRAME 202 PJ_TYPE_DATUM_ENSEMBLE 203 PJ_TYPE_CRS 204 PJ_TYPE_GEODETIC_CRS 205 PJ_TYPE_GEOCENTRIC_CRS 206 PJ_TYPE_GEOGRAPHIC_CRS 207 PJ_TYPE_GEOGRAPHIC_2D_CRS 208 PJ_TYPE_GEOGRAPHIC_3D_CRS 209 PJ_TYPE_VERTICAL_CRS 210 PJ_TYPE_PROJECTED_CRS 211 PJ_TYPE_COMPOUND_CRS 212 PJ_TYPE_TEMPORAL_CRS 213 PJ_TYPE_ENGINEERING_CRS 214 PJ_TYPE_BOUND_CRS 215 PJ_TYPE_OTHER_CRS 216 PJ_TYPE_CONVERSION 217 PJ_TYPE_TRANSFORMATION 218 PJ_TYPE_CONCATENATED_OPERATION 219 PJ_TYPE_OTHER_COORDINATE_OPERATION 220 PJ_TYPE_TEMPORAL_DATUM 221 PJ_TYPE_ENGINEERING_DATUM 222 PJ_TYPE_PARAMETRIC_DATUM 223 224 PJ_TYPE proj_get_type(const PJ *obj) 225 const char* proj_get_name(const PJ *obj) 226 const char* proj_get_remarks(const PJ *obj) 227 const char* proj_get_scope(const PJ *obj) 228 229 int proj_is_crs(const PJ *obj) 230 int proj_is_derived_crs(PJ_CONTEXT *ctx, const PJ* crs) 231 PJ *proj_crs_get_datum(PJ_CONTEXT *ctx, const PJ *crs) 232 PJ *proj_crs_get_horizontal_datum(PJ_CONTEXT *ctx, const PJ *crs) 233 234 ctypedef enum PJ_COORDINATE_SYSTEM_TYPE: 235 PJ_CS_TYPE_UNKNOWN 236 PJ_CS_TYPE_CARTESIAN 237 PJ_CS_TYPE_ELLIPSOIDAL 238 PJ_CS_TYPE_VERTICAL 239 PJ_CS_TYPE_SPHERICAL 240 PJ_CS_TYPE_ORDINAL 241 PJ_CS_TYPE_PARAMETRIC 242 PJ_CS_TYPE_DATETIMETEMPORAL 243 PJ_CS_TYPE_TEMPORALCOUNT 244 PJ_CS_TYPE_TEMPORALMEASURE 245 246 PJ *proj_crs_get_coordinate_system(PJ_CONTEXT *ctx, const PJ *crs) 247 PJ_COORDINATE_SYSTEM_TYPE proj_cs_get_type(PJ_CONTEXT *ctx, 248 const PJ *cs) 249 int proj_cs_get_axis_count(PJ_CONTEXT *ctx, 250 const PJ *cs) 251 int proj_cs_get_axis_info(PJ_CONTEXT *ctx, 252 const PJ *cs, int index, 253 const char **out_name, 254 const char **out_abbrev, 255 const char **out_direction, 256 double *out_unit_conv_factor, 257 const char **out_unit_name, 258 const char **out_unit_auth_name, 259 const char **out_unit_code) 260 261 PJ *proj_get_ellipsoid(PJ_CONTEXT *ctx, const PJ *obj) 262 int proj_ellipsoid_get_parameters(PJ_CONTEXT *ctx, 263 const PJ *ellipsoid, 264 double *out_semi_major_metre, 265 double *out_semi_minor_metre, 266 int *out_is_semi_minor_computed, 267 double *out_inv_flattening) 268 PJ *proj_get_prime_meridian(PJ_CONTEXT *ctx, const PJ *obj) 269 int proj_prime_meridian_get_parameters(PJ_CONTEXT *ctx, 270 const PJ *prime_meridian, 271 double *out_longitude, 272 double *out_unit_conv_factor, 273 const char **out_unit_name) 274 PJ *proj_crs_get_sub_crs(PJ_CONTEXT *ctx, const PJ *crs, int index) 275 PJ *proj_get_source_crs(PJ_CONTEXT *ctx, const PJ *obj) 276 PJ *proj_get_target_crs(PJ_CONTEXT *ctx, const PJ *obj) 277 278 ctypedef struct PJ_OBJ_LIST 279 PJ_OBJ_LIST *proj_identify(PJ_CONTEXT *ctx, 280 const PJ* obj, 281 const char *auth_name, 282 const char* const *options, 283 int **out_confidence) 284 PJ *proj_list_get(PJ_CONTEXT *ctx, 285 const PJ_OBJ_LIST *result, 286 int index) 287 int proj_list_get_count(const PJ_OBJ_LIST *result) 288 void proj_list_destroy(PJ_OBJ_LIST *result) 289 void proj_int_list_destroy(int* list) 290 void proj_context_use_proj4_init_rules(PJ_CONTEXT *ctx, int enable) 291 ctypedef enum PJ_GUESSED_WKT_DIALECT: 292 PJ_GUESSED_WKT2_2018 293 PJ_GUESSED_WKT2_2015 294 PJ_GUESSED_WKT1_GDAL 295 PJ_GUESSED_WKT1_ESRI 296 PJ_GUESSED_NOT_WKT 297 298 PJ_GUESSED_WKT_DIALECT proj_context_guess_wkt_dialect(PJ_CONTEXT *ctx, 299 const char *wkt) 300 301 ctypedef struct PJ_OPERATIONS: 302 const char *id 303 PJ *(*proj)(PJ *) 304 const char * const *descr 305 306 const PJ_OPERATIONS *proj_list_operations() 307 308 ctypedef struct PJ_ELLPS: 309 const char *id # ellipse keyword name 310 const char *major # a= value 311 const char *ell # elliptical parameter 312 const char *name # comments 313 const PJ_ELLPS *proj_list_ellps() 314 315 ctypedef struct PJ_PRIME_MERIDIANS: 316 const char *id 317 const char *defn 318 const PJ_PRIME_MERIDIANS *proj_list_prime_meridians() 319 ctypedef char **PROJ_STRING_LIST 320 void proj_string_list_destroy(PROJ_STRING_LIST list) 321 PROJ_STRING_LIST proj_get_authorities_from_database(PJ_CONTEXT *ctx) 322 PROJ_STRING_LIST proj_get_codes_from_database(PJ_CONTEXT *ctx, 323 const char *auth_name, 324 PJ_TYPE type, 325 int allow_deprecated) 326 327 ctypedef struct PROJ_CRS_INFO: 328 char* auth_name 329 char* code 330 char* name 331 PJ_TYPE type 332 int deprecated 333 int bbox_valid 334 double west_lon_degree 335 double south_lat_degree 336 double east_lon_degree 337 double north_lat_degree 338 char* area_name 339 char* projection_method_name 340 341 ctypedef struct PROJ_CRS_LIST_PARAMETERS: 342 const PJ_TYPE* types 343 size_t typesCount 344 int crs_area_of_use_contains_bbox 345 int bbox_valid 346 double west_lon_degree 347 double south_lat_degree 348 double east_lon_degree 349 double north_lat_degree 350 int allow_deprecated 351 352 PROJ_CRS_LIST_PARAMETERS *proj_get_crs_list_parameters_create() 353 354 void proj_get_crs_list_parameters_destroy(PROJ_CRS_LIST_PARAMETERS* params) 355 356 PROJ_CRS_INFO **proj_get_crs_info_list_from_database( 357 PJ_CONTEXT *ctx, 358 const char *auth_name, 359 const PROJ_CRS_LIST_PARAMETERS* params, 360 int *out_result_count) 361 362 void proj_crs_info_list_destroy(PROJ_CRS_INFO** list) 363 364 PJ *proj_crs_get_coordoperation(PJ_CONTEXT *ctx, 365 const PJ *crs) 366 367 int proj_coordoperation_get_method_info(PJ_CONTEXT *ctx, 368 const PJ *coordoperation, 369 const char **out_method_name, 370 const char **out_method_auth_name, 371 const char **out_method_code) 372 373 int proj_coordoperation_is_instantiable(PJ_CONTEXT *ctx, 374 const PJ *coordoperation) 375 376 int proj_coordoperation_has_ballpark_transformation(PJ_CONTEXT *ctx, 377 const PJ *coordoperation) 378 379 int proj_coordoperation_get_param_count(PJ_CONTEXT *ctx, 380 const PJ *coordoperation) 381 382 int proj_coordoperation_get_param_index(PJ_CONTEXT *ctx, 383 const PJ *coordoperation, 384 const char *name) 385 386 int proj_coordoperation_get_param(PJ_CONTEXT *ctx, 387 const PJ *coordoperation, 388 int index, 389 const char **out_name, 390 const char **out_auth_name, 391 const char **out_code, 392 double *out_value, 393 const char **out_value_string, 394 double *out_unit_conv_factor, 395 const char **out_unit_name, 396 const char **out_unit_auth_name, 397 const char **out_unit_code, 398 const char **out_unit_category) 399 400 int proj_coordoperation_get_grid_used_count(PJ_CONTEXT *ctx, 401 const PJ *coordoperation) 402 403 int proj_coordoperation_get_grid_used(PJ_CONTEXT *ctx, 404 const PJ *coordoperation, 405 int index, 406 const char **out_short_name, 407 const char **out_full_name, 408 const char **out_package_name, 409 const char **out_url, 410 int *out_direct_download, 411 int *out_open_license, 412 int *out_available) 413 414 double proj_coordoperation_get_accuracy(PJ_CONTEXT *ctx, 415 const PJ *obj) 416 417 int proj_coordoperation_get_towgs84_values(PJ_CONTEXT *ctx, 418 const PJ *coordoperation, 419 double *out_values, 420 int value_count, 421 int emit_error_if_incompatible) 422 int proj_concatoperation_get_step_count(PJ_CONTEXT *ctx, 423 const PJ *concatoperation) 424 PJ *proj_concatoperation_get_step(PJ_CONTEXT *ctx, 425 const PJ *concatoperation, 426 int i_step) 427 PJ *proj_create_from_database(PJ_CONTEXT *ctx, 428 const char *auth_name, 429 const char *code, 430 PJ_CATEGORY category, 431 int usePROJAlternativeGridNames, 432 const char* const *options) 433 PJ_OBJ_LIST *proj_create_from_name(PJ_CONTEXT *ctx, 434 const char *auth_name, 435 const char *searchedName, 436 const PJ_TYPE* types, 437 size_t typesCount, 438 int approximateMatch, 439 size_t limitResultCount, 440 const char* const *options) 441 442 ctypedef struct PJ_OPERATION_FACTORY_CONTEXT 443 444 PJ_OPERATION_FACTORY_CONTEXT *proj_create_operation_factory_context( 445 PJ_CONTEXT *ctx, 446 const char *authority 447 ) 448 void proj_operation_factory_context_destroy( 449 PJ_OPERATION_FACTORY_CONTEXT *ctx 450 ) 451 PJ_OBJ_LIST *proj_create_operations( 452 PJ_CONTEXT *ctx, 453 const PJ *source_crs, 454 const PJ *target_crs, 455 const PJ_OPERATION_FACTORY_CONTEXT *operationContext 456 ) 457 void proj_operation_factory_context_set_grid_availability_use( 458 PJ_CONTEXT *ctx, 459 PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, 460 PROJ_GRID_AVAILABILITY_USE use 461 ) 462 void proj_operation_factory_context_set_spatial_criterion( 463 PJ_CONTEXT *ctx, 464 PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, 465 PROJ_SPATIAL_CRITERION criterion 466 ) 467 void proj_operation_factory_context_set_area_of_interest( 468 PJ_CONTEXT *ctx, 469 PJ_OPERATION_FACTORY_CONTEXT *factory_ctx, 470 double west_lon_degree, 471 double south_lat_degree, 472 double east_lon_degree, 473 double north_lat_degree 474 ) 475 476 ctypedef enum PROJ_SPATIAL_CRITERION: 477 PROJ_SPATIAL_CRITERION_STRICT_CONTAINMENT 478 PROJ_SPATIAL_CRITERION_PARTIAL_INTERSECTION 479 480 ctypedef enum PROJ_GRID_AVAILABILITY_USE: 481 PROJ_GRID_AVAILABILITY_USED_FOR_SORTING 482 PROJ_GRID_AVAILABILITY_DISCARD_OPERATION_IF_MISSING_GRID 483 PROJ_GRID_AVAILABILITY_IGNORED 484 485 ctypedef struct PJ_FACTORS: 486 double meridional_scale 487 double parallel_scale 488 double areal_scale 489 double angular_distortion 490 double meridian_parallel_angle 491 double meridian_convergence 492 double tissot_semimajor 493 double tissot_semiminor 494 double dx_dlam 495 double dx_dphi 496 double dy_dlam 497 double dy_dphi 498 499 PJ_FACTORS proj_factors(PJ *P, PJ_COORD lp) nogil 500 # neworking related 501 const char *proj_context_get_user_writable_directory(PJ_CONTEXT *ctx, int create) 502 int proj_context_set_enable_network(PJ_CONTEXT* ctx, int enabled) 503 int proj_context_is_network_enabled(PJ_CONTEXT* ctx) 504 # units 505 ctypedef struct PROJ_UNIT_INFO: 506 # Authority name. 507 char* auth_name 508 # Object code. 509 char* code 510 # Object name. For example "metre", "US survey foot", etc. */ 511 char* name 512 # Category of the unit: one of "linear", "linear_per_time", "angular", 513 # "angular_per_time", "scale", "scale_per_time" or "time" */ 514 char* category 515 # Conversion factor to apply to transform from that unit to the 516 # corresponding SI unit (metre for "linear", radian for "angular", etc.). 517 # It might be 0 in some cases to indicate no known conversion factor. 518 double conv_factor 519 # PROJ short name, like "m", "ft", "us-ft", etc... Might be NULL */ 520 char* proj_short_name 521 # Whether the object is deprecated 522 int deprecated 523 524 PROJ_UNIT_INFO **proj_get_units_from_database( 525 PJ_CONTEXT *ctx, 526 const char *auth_name, 527 const char *category, 528 int allow_deprecated, 529 int *out_result_count, 530 ) 531 void proj_unit_list_destroy(PROJ_UNIT_INFO** list) 532 const char *proj_context_get_url_endpoint(PJ_CONTEXT* ctx) 533