53 use,
INTRINSIC :: iso_c_binding
59 TYPE,
BIND(C) :: pj_object
61 TYPE(c_ptr) :: ptr = c_null_ptr
67 TYPE(pj_object),
PARAMETER :: pj_object_null=
pj_object(c_null_ptr)
72 TYPE,
BIND(C) :: pj_context_object
74 TYPE(c_ptr) :: ptr = c_null_ptr
87 TYPE,
BIND(C) :: pj_coord_object
88 REAL(kind=c_double) :: x=huge(1.0_c_double)
89 REAL(kind=c_double) :: y=huge(1.0_c_double)
90 REAL(kind=c_double) :: z=0.0_c_double
91 REAL(kind=c_double) :: t=0.0_c_double
99 TYPE(c_ptr) :: ptr = c_null_ptr
104 INTEGER(kind=c_int) :: major
105 INTEGER(kind=c_int) :: minor
106 INTEGER(kind=c_int) :: patch
107 TYPE(c_ptr) :: release
108 TYPE(c_ptr) :: version
109 TYPE(c_ptr) :: searchpath
111 INTEGER(kind=c_size_t) :: path_count
117 TYPE(c_ptr) :: description
118 TYPE(c_ptr) :: definition
119 INTEGER(kind=c_int) :: has_inverse
120 REAL(kind=c_double) :: accuracy
126 ENUMERATOR :: PJ_TYPE_UNKNOWN, &
128 pj_type_prime_meridian, &
129 pj_type_geodetic_reference_frame, pj_type_dynamic_geodetic_reference_frame, &
130 pj_type_vertical_reference_frame, pj_type_dynamic_vertical_reference_frame, &
131 pj_type_datum_ensemble, &
133 pj_type_geodetic_crs, pj_type_geocentric_crs, &
134 pj_type_geographic_crs, pj_type_geographic_2d_crs, pj_type_geographic_3d_crs, &
135 pj_type_vertical_crs, pj_type_projected_crs, pj_type_compound_crs, &
136 pj_type_temporal_crs, pj_type_engineering_crs, pj_type_bound_crs, pj_type_other_crs, &
137 pj_type_conversion, pj_type_transformation, pj_type_concatenated_operation, &
138 pj_type_other_coordinate_operation, &
139 pj_type_temporal_datum, pj_type_engineering_datum, pj_type_parametric_datum
152 FUNCTION proj_context_create() bind(C,name='proj_context_create')
155 END FUNCTION proj_context_create
159 FUNCTION proj_context_destroy(ctx) bind(C,name='proj_context_destroy')
163 END FUNCTION proj_context_destroy
167 FUNCTION proj_context_clone(ctx) bind(C,name='proj_context_clone')
171 END FUNCTION proj_context_clone
175 FUNCTION proj_create(ctx, definition) bind(C,name='proj_create')
178 CHARACTER(kind=c_char) :: definition(*)
180 END FUNCTION proj_create
184 FUNCTION proj_create_crs_to_crs(ctx, source_crs, target_crs, area) &
185 bind(c,name=
'proj_create_crs_to_crs')
188 CHARACTER(kind=c_char) :: source_crs(*)
189 CHARACTER(kind=c_char) :: target_crs(*)
191 TYPE(
pj_object) :: proj_create_crs_to_crs
192 END FUNCTION proj_create_crs_to_crs
196 FUNCTION proj_create_crs_to_crs_from_pj(ctx, source_crs, target_crs, area, options) &
197 bind(c,name=
'proj_create_crs_to_crs_from_pj')
203 TYPE(c_ptr),
VALUE :: options
204 TYPE(
pj_object) :: proj_create_crs_to_crs_from_pj
205 END FUNCTION proj_create_crs_to_crs_from_pj
209 FUNCTION proj_normalize_for_visualization(ctx, object) bind(C,name='proj_normalize_for_visualization')
213 TYPE(
pj_object) :: proj_normalize_for_visualization
214 END FUNCTION proj_normalize_for_visualization
218 FUNCTION proj_destroy(pj) bind(C,name='proj_destroy')
222 END FUNCTION proj_destroy
226 SUBROUTINE proj_area_set_bbox(area, west_lon_degree, south_lat_degree, &
227 east_lon_degree, north_lat_degree) bind(C,name='proj_area_set_bbox')
230 REAL(kind=c_double),
VALUE :: west_lon_degree
231 REAL(kind=c_double),
VALUE :: south_lat_degree
232 REAL(kind=c_double),
VALUE :: east_lon_degree
233 REAL(kind=c_double),
VALUE :: north_lat_degree
234 END SUBROUTINE proj_area_set_bbox
238 SUBROUTINE proj_area_destroy(area) bind(C,name='proj_area_destroy')
241 END SUBROUTINE proj_area_destroy
245 FUNCTION proj_trans(p, direction, coord) bind(C,name='proj_trans')
248 INTEGER(kind=kind(PJ_FWD)),
VALUE :: direction
251 END FUNCTION proj_trans
256 FUNCTION proj_trans_array(p, direction, n, coord) bind(C,name='proj_trans_array')
259 INTEGER(kind=KIND(PJ_FWD)),
VALUE :: direction
260 INTEGER(kind=c_size_t),
VALUE :: n
262 INTEGER(kind=c_int) :: proj_trans_array
263 END FUNCTION proj_trans_array
267 FUNCTION proj_info() bind(C,name='proj_info')
270 END FUNCTION proj_info
274 FUNCTION proj_pj_info(p) bind(C,name='proj_pj_info')
278 END FUNCTION proj_pj_info
282 FUNCTION proj_get_type(obj) bind(C,name='proj_get_type')
285 INTEGER(kind=kind(PJ_TYPE_UNKNOWN)) :: proj_get_type
286 END FUNCTION proj_get_type
290 FUNCTION proj_torad(angle_in_degrees) bind(C,name='proj_torad')
292 REAL(kind=c_double) :: angle_in_degrees
293 REAL(kind=c_double) :: proj_torad
294 END FUNCTION proj_torad
298 FUNCTION proj_todeg(angle_in_radians) bind(C,name='proj_todeg')
300 REAL(kind=c_double) :: angle_in_radians
301 REAL(kind=c_double) :: proj_todeg
302 END FUNCTION proj_todeg
306 FUNCTION proj_errno(p) bind(C,name='proj_errno')
309 INTEGER(kind=c_int) :: proj_errno
310 END FUNCTION proj_errno
314 FUNCTION proj_context_errno(ctx) bind(C,name='proj_context_errno')
317 INTEGER(kind=c_int) :: proj_context_errno
318 END FUNCTION proj_context_errno
322 FUNCTION proj_errno_string(err) bind(C,name='proj_errno_string')
324 INTEGER(kind=c_int),
VALUE :: err
325 TYPE(c_ptr) :: proj_errno_string
326 END FUNCTION proj_errno_string
330 FUNCTION proj_context_errno_string(ctx, err) bind(C,name='proj_context_errno_string')
333 INTEGER(kind=c_int),
VALUE :: err
334 TYPE(c_ptr) :: proj_context_errno_string
335 END FUNCTION proj_context_errno_string
346 MODULE PROCEDURE proj_associated_pj, proj_associated_context, &
355 FUNCTION proj_associated_pj(object)
RESULT(associated_)
356 TYPE(pj_object),
INTENT(in) :: object
357 LOGICAL :: associated_
358 associated_ = c_associated(object%ptr)
359 END FUNCTION proj_associated_pj
361 FUNCTION proj_associated_context(object)
RESULT(associated_)
362 TYPE(pj_context_object),
INTENT(in) :: object
363 LOGICAL :: associated_
364 associated_ = c_associated(object%ptr)
365 END FUNCTION proj_associated_context
367 FUNCTION proj_associated_area(object)
RESULT(associated_)
368 TYPE(pj_area_object),
INTENT(in) :: object
369 LOGICAL :: associated_
370 associated_ = c_associated(object%ptr)
371 END FUNCTION proj_associated_area
374 FUNCTION proj_trans_f(p, direction, coord)
375 TYPE(pj_object),
VALUE :: p
376 INTEGER(kind=KIND(PJ_FWD)),
VALUE :: direction
377 TYPE(pj_coord_object) :: coord(:)
378 INTEGER :: proj_trans_f
380 INTEGER(kind=c_size_t) :: n
383 proj_trans_f = proj_trans_array(p, direction, n, coord)
385 END FUNCTION proj_trans_f
Test whether an opaque object is valid.
Fortran 2003 interface to the proj https://proj.org/ library, API version 6.
Object describing a proj area.
Object describing a proj multithread context.
Object describing a general-purpose georeferenced coordinate.
Object strictly reflecting C PJ_INFO structure.
Object describing a projection or a transformation.
Object strictly reflecting C PJ_PROJ_INFO structure.