53use,
INTRINSIC :: iso_c_binding
59TYPE,
BIND(C) :: pj_object
61 TYPE(c_ptr) :: ptr = c_null_ptr
67TYPE(pj_object),
PARAMETER :: pj_object_null=
pj_object(c_null_ptr)
72TYPE,
BIND(C) :: pj_context_object
74 TYPE(c_ptr) :: ptr = c_null_ptr
75END TYPE pj_context_object
79TYPE(pj_context_object),
PARAMETER :: pj_default_ctx=pj_context_object(c_null_ptr)
87TYPE,
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
92END TYPE pj_coord_object
97TYPE,
BIND(C) :: pj_area_object
99 TYPE(c_ptr) :: ptr = c_null_ptr
100END TYPE pj_area_object
103TYPE,
BIND(C) :: pj_info_object
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
112END TYPE pj_info_object
115TYPE,
BIND(C) :: pj_proj_info_object
117 TYPE(c_ptr) :: description
118 TYPE(c_ptr) :: definition
119 INTEGER(kind=c_int) :: has_inverse
120 REAL(kind=c_double) :: accuracy
121END TYPE pj_proj_info_object
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')
154 TYPE(pj_context_object) :: proj_context_create
155 END FUNCTION proj_context_create
159 FUNCTION proj_context_destroy(ctx) bind(C,name='proj_context_destroy')
161 TYPE(pj_context_object),
VALUE :: ctx
162 TYPE(pj_context_object) :: proj_context_destroy
163 END FUNCTION proj_context_destroy
167 FUNCTION proj_context_clone(ctx) bind(C,name='proj_context_clone')
169 TYPE(pj_context_object),
VALUE :: ctx
170 TYPE(pj_context_object) :: proj_context_clone
171 END FUNCTION proj_context_clone
175 FUNCTION proj_create(ctx, definition) bind(C,name='proj_create')
177 TYPE(pj_context_object),
VALUE :: ctx
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')
187 TYPE(pj_context_object),
VALUE :: ctx
188 CHARACTER(kind=c_char) :: source_crs(*)
189 CHARACTER(kind=c_char) :: target_crs(*)
190 TYPE(pj_area_object),
VALUE :: area
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')
199 TYPE(pj_context_object),
VALUE :: ctx
202 TYPE(pj_area_object),
VALUE :: area
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')
211 TYPE(pj_context_object),
VALUE :: ctx
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')
229 TYPE(pj_area_object),
VALUE :: area
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')
240 TYPE(pj_area_object),
VALUE :: area
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
249 TYPE(pj_coord_object),
VALUE :: coord
250 TYPE(pj_coord_object) :: proj_trans
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
261 TYPE(pj_coord_object) :: coord(*)
262 INTEGER(kind=c_int) :: proj_trans_array
263 END FUNCTION proj_trans_array
267 FUNCTION proj_info() bind(C,name='proj_info')
269 TYPE(pj_info_object) :: proj_info
270 END FUNCTION proj_info
274 FUNCTION proj_pj_info(p) bind(C,name='proj_pj_info')
277 TYPE(pj_proj_info_object) :: 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')
316 TYPE(pj_context_object),
VALUE :: ctx
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')
332 TYPE(pj_context_object),
VALUE :: ctx
333 INTEGER(kind=c_int),
VALUE :: err
334 TYPE(c_ptr) :: proj_context_errno_string
335 END FUNCTION proj_context_errno_string
345INTERFACE proj_associated
346 MODULE PROCEDURE proj_associated_pj, proj_associated_context, &
348END INTERFACE proj_associated
355FUNCTION proj_associated_pj(object)
RESULT(associated_)
357LOGICAL :: associated_
358associated_ = c_associated(object%ptr)
359END FUNCTION proj_associated_pj
361FUNCTION proj_associated_context(object)
RESULT(associated_)
362TYPE(pj_context_object),
INTENT(in) :: object
363LOGICAL :: associated_
364associated_ = c_associated(object%ptr)
365END FUNCTION proj_associated_context
367FUNCTION proj_associated_area(object)
RESULT(associated_)
368TYPE(pj_area_object),
INTENT(in) :: object
369LOGICAL :: associated_
370associated_ = c_associated(object%ptr)
371END FUNCTION proj_associated_area
374FUNCTION proj_trans_f(p, direction, coord)
376INTEGER(kind=KIND(PJ_FWD)),
VALUE :: direction
377TYPE(pj_coord_object) :: coord(:)
378INTEGER :: proj_trans_f
380INTEGER(kind=c_size_t) :: n
383proj_trans_f = proj_trans_array(p, direction, n, coord)
385END FUNCTION proj_trans_f
Fortran 2003 interface to the proj https://proj.org/ library, API version 6.
Object describing a projection or a transformation.