Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
layer.ml1 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 200open Ctypes type t = T.t let t = T.t let t_opt = T.t_opt exception Layer_error let err = T.err Layer_error (* Raw bindings *) let get_name = Lib.c "OGR_L_GetName" (t @-> returning string) let get_geom_type = Lib.c "OGR_L_GetGeomType" (t @-> returning nativeint) let get_geom_type t = get_geom_type t |> Geometry.wkb_of_nativeint let get_spatial_filter = Lib.c "OGR_L_GetSpatialFilter" (t @-> returning Geometry.t) let set_spatial_filter = Lib.c "OGR_L_SetSpatialFilter" (t @-> Geometry.t @-> returning void) let set_spatial_filter_rect = Lib.c "OGR_L_SetSpatialFilterRect" (t @-> double @-> double @-> double @-> double @-> returning void) let set_attribute_filter = Lib.c "OGR_L_SetAttributeFilter" (t @-> string @-> returning err) let reset_reading = Lib.c "OGR_L_ResetReading" (t @-> returning void) let get_next_feature = Lib.c "OGR_L_GetNextFeature" (t @-> returning Feature.t_opt) let set_next_by_index = Lib.c "OGR_L_SetNextByIndex" (t @-> int @-> returning err) let get_feature = Lib.c "OGR_L_GetFeature" (t @-> int @-> returning Feature.t_opt) let set_feature = Lib.c "OGR_L_SetFeature" (t @-> Feature.t @-> returning err) let create_feature = Lib.c "OGR_L_CreateFeature" (t @-> Feature.t @-> returning err) let delete_feature = Lib.c "OGR_L_DeleteFeature" (t @-> int @-> returning err) let get_layer_defn = Lib.c "OGR_L_GetLayerDefn" (t @-> returning Feature.Defn.t) let get_spatial_ref = Lib.c "OGR_L_GetSpatialRef" (t @-> returning Spatial_reference.t_opt) let get_feature_count = Lib.c "OGR_L_GetFeatureCount" (t @-> int @-> returning int) let get_extent = Lib.c "OGR_L_GetExtent" (t @-> ptr T.envelope @-> int @-> returning err) let get_extent t i = let envelope = make T.envelope in get_extent t (addr envelope) i; let min_x = getf envelope T.envelope_minx in let max_x = getf envelope T.envelope_maxx in let min_y = getf envelope T.envelope_miny in let max_y = getf envelope T.envelope_maxy in Geometry.({ min_x; max_x; min_y; max_y }) let test_capability = Lib.c "OGR_L_TestCapability" (t @-> string @-> returning int) let test_capability t s = test_capability t s <> 0 let create_field = Lib.c "OGR_L_CreateField" (t @-> Field.Defn.t @-> int @-> returning err) let delete_field = Lib.c "OGR_L_DeleteField" (t @-> int @-> returning err) let reorder_fields = Lib.c "OGR_L_ReorderFields" (t @-> ptr int @-> returning err) let reorder_fields t indices = let pointer = CArray.of_list int indices |> CArray.start in reorder_fields t pointer let reorder_field = Lib.c "OGR_L_ReorderField" (t @-> int @-> int @-> returning err) let alter_field_defn = Lib.c "OGR_L_AlterFieldDefn" (t @-> int @-> Field.Defn.t @-> int @-> returning err) let start_transaction = Lib.c "OGR_L_StartTransaction" (t @-> returning err) let commit_transaction = Lib.c "OGR_L_CommitTransaction" (t @-> returning err) let rollback_transaction = Lib.c "OGR_L_RollbackTransaction" (t @-> returning err) let reference = Lib.c "OGR_L_Reference" (t @-> returning int) let dereference = Lib.c "OGR_L_Dereference" (t @-> returning int) let get_ref_count = Lib.c "OGR_L_GetRefCount" (t @-> returning int) let sync_to_disk = Lib.c "OGR_L_SyncToDisk" (t @-> returning err) let get_fid_column = Lib.c "OGR_L_GetFIDColumn" (t @-> returning string) let get_geometry_column = Lib.c "OGR_L_GetGeometryColumn" (t @-> returning string) let set_ignored_fields = Lib.c "OGR_L_SetIgnoredFields" (t @-> ptr_opt string_opt @-> returning err) let set_ignored_fields t fields = let fields = match fields with | [] -> None | fields -> (* Add None at the end to signal the end of the array to OGR *) let fields = List.rev (None :: List.rev fields) in Some (CArray.of_list string_opt fields |> CArray.start) in set_ignored_fields t fields (* Higher level wrappers *) let map_features layer f = let rec loop accu = match get_next_feature layer with | None -> List.rev accu | Some feature -> let res = f feature in Feature.destroy feature; loop (res :: accu) in loop [] let iter_features layer f = let rec loop () = match get_next_feature layer with | None -> () | Some feature -> f feature; Feature.destroy feature; loop () in loop ()