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