File Coverage

blib/lib/Geo/GDAL/FFI.pm
Criterion Covered Total %
statement 1832 1889 96.9
branch 29 60 48.3
condition 13 29 44.8
subroutine 42 62 67.7
pod 14 35 40.0
total 1930 2075 93.0


line stmt bran cond sub pod time code
1             package Geo::GDAL::FFI;
2              
3 5     5   230191 use v5.10;
  5         1765  
4 5     5   29 use strict;
  5         3453  
  5         122  
5 5     5   26 use warnings;
  5         11  
  5         109  
6 5     5   21 use Carp;
  5         11  
  5         247  
7 5     5   3203 use PDL;
  5         75  
  5         21  
8 5     5   1141403 use FFI::Platypus;
  5         31598  
  5         189  
9 5     5   2375 use FFI::Platypus::Buffer;
  5         2752  
  5         366  
10             require Exporter;
11             require B;
12              
13 5     5   2327 use Geo::GDAL::FFI::VSI;
  5         14  
  5         226  
14 5     5   2067 use Geo::GDAL::FFI::VSI::File;
  5         14  
  5         152  
15 5     5   2141 use Geo::GDAL::FFI::SpatialReference;
  5         18  
  5         161  
16 5     5   2201 use Geo::GDAL::FFI::Object;
  5         13  
  5         151  
17 5     5   2052 use Geo::GDAL::FFI::Driver;
  5         12  
  5         138  
18 5     5   2336 use Geo::GDAL::FFI::Dataset;
  5         14  
  5         164  
19 5     5   2212 use Geo::GDAL::FFI::Band;
  5         14  
  5         171  
20 5     5   37 use Geo::GDAL::FFI::Layer;
  5         11  
  5         132  
21 5     5   2244 use Geo::GDAL::FFI::FeatureDefn;
  5         12  
  5         160  
22 5     5   2098 use Geo::GDAL::FFI::FieldDefn;
  5         12  
  5         162  
23 5     5   2186 use Geo::GDAL::FFI::GeomFieldDefn;
  5         12  
  5         154  
24 5     5   2281 use Geo::GDAL::FFI::Feature;
  5         13  
  5         164  
25 5     5   2459 use Geo::GDAL::FFI::Geometry;
  5         13  
  5         69081  
26              
27             our $VERSION = 0.0700;
28              
29             our @ISA = qw(Exporter);
30             our @EXPORT_OK = qw(@errors GetVersionInfo SetErrorHandling UnsetErrorHandling
31             Capabilities OpenFlags DataTypes ResamplingMethods
32             FieldTypes FieldSubtypes Justifications ColorInterpretations
33             GeometryTypes GeometryFormats GridAlgorithms
34             GetDriver GetDrivers Open
35             HaveGEOS SetConfigOption GetConfigOption
36             FindFile PushFinderLocation PopFinderLocation FinderClean);
37             our %EXPORT_TAGS = (all => \@EXPORT_OK);
38              
39             our $Warning = 2;
40             our $Failure = 3;
41              
42             our %ogr_errors = (
43             1 => 'NOT_ENOUGH_DATA',
44             2 => 'NOT_ENOUGH_MEMORY',
45             3 => 'UNSUPPORTED_GEOMETRY_TYPE',
46             4 => 'UNSUPPORTED_OPERATION',
47             5 => 'CORRUPT_DATA',
48             6 => 'FAILURE',
49             7 => 'UNSUPPORTED_SRS',
50             8 => 'INVALID_HANDLE',
51             9 => 'NON_EXISTING_FEATURE',
52             );
53              
54             our $Read = 0;
55             our $Write = 1;
56              
57             our @errors;
58             our %immutable;
59             my %parent_ref_hash;
60              
61             my $instance;
62              
63             sub SetErrorHandling {
64 5 50   5 1 26 return unless $instance;
65 5 50       496 return if exists $instance->{CPLErrorHandler};
66             $instance->{CPLErrorHandler} = $instance->{ffi}->closure(
67             sub {
68 0     0   0 my ($err, $err_num, $msg) = @_;
69 0         0 push @errors, $msg;
70 5         105 });
71 5         359 CPLPushErrorHandler($instance->{CPLErrorHandler});
72             }
73              
74             sub UnsetErrorHandling {
75 0 0   0 0 0 return unless $instance;
76 0 0       0 return unless exists $instance->{CPLErrorHandler};
77 0         0 CPLPopErrorHandler($instance->{CPLErrorHandler});
78 0         0 delete $instance->{CPLErrorHandler};
79             }
80              
81             sub error_msg {
82 17     17 0 49 my $args = shift;
83 17 50 33     131 return unless @errors || $args;
84 0 0       0 unless (@errors) {
85 0 0       0 return $ogr_errors{$args->{OGRError}} if $args->{OGRError};
86 0         0 return "Unknown error.";
87             }
88 0         0 my $msg = join("\n", @errors);
89 0         0 @errors = ();
90 0         0 return $msg;
91             }
92              
93             # internal methods
94             sub _register_parent_ref {
95 44     44   81 my ($gdal_handle, $parent) = @_;
96             # ensure $gdal_handle is not blessed?
97 44 50       92 confess "gdal handle is undefined"
98             if !defined $gdal_handle;
99 44 50       93 confess "Parent ref is undefined"
100             if !$parent;
101 44         116 $parent_ref_hash{$gdal_handle} = $parent;
102             }
103              
104             sub _deregister_parent_ref {
105 64     64   115 my ($gdal_handle) = @_;
106             # we get undef vals in global cleanup
107 64 50       129 return if !$gdal_handle;
108 64         181 delete $parent_ref_hash{$gdal_handle};
109             }
110              
111             sub _get_parent_ref {
112 0     0   0 my ($gdal_handle) = @_;
113             warn "Attempting to access non-existent parent"
114 0 0       0 if !$parent_ref_hash{$gdal_handle};
115 0         0 return $parent_ref_hash{$gdal_handle}
116             }
117              
118              
119             our %capabilities = (
120             OPEN => 1,
121             CREATE => 2,
122             CREATECOPY => 3,
123             VIRTUALIO => 4,
124             RASTER => 5,
125             VECTOR => 6,
126             GNM => 7,
127             NOTNULL_FIELDS => 8,
128             DEFAULT_FIELDS => 9,
129             NOTNULL_GEOMFIELDS => 10,
130             NONSPATIAL => 11,
131             FEATURE_STYLES => 12,
132             );
133              
134             sub Capabilities {
135 0     0 1 0 return sort {$capabilities{$a} <=> $capabilities{$b}} keys %capabilities;
  0         0  
136             }
137              
138             our %open_flags = (
139             READONLY => 0x00,
140             UPDATE => 0x01,
141             ALL => 0x00,
142             RASTER => 0x02,
143             VECTOR => 0x04,
144             GNM => 0x08,
145             SHARED => 0x20,
146             VERBOSE_ERROR => 0x40,
147             INTERNAL => 0x80,
148             ARRAY_BLOCK_ACCESS => 0x100,
149             HASHSET_BLOCK_ACCESS => 0x200,
150             );
151              
152             sub OpenFlags {
153 0     0 1 0 return sort {$open_flags{$a} <=> $open_flags{$b}} keys %open_flags;
  0         0  
154             }
155              
156             our %data_types = (
157             Unknown => 0,
158             Byte => 1,
159             UInt16 => 2,
160             Int16 => 3,
161             UInt32 => 4,
162             Int32 => 5,
163             Float32 => 6,
164             Float64 => 7,
165             CInt16 => 8,
166             CInt32 => 9,
167             CFloat32 => 10,
168             CFloat64 => 11
169             );
170             our %data_types_reverse = reverse %data_types;
171              
172             sub DataTypes {
173 0     0 1 0 return sort {$data_types{$a} <=> $data_types{$b}} keys %data_types;
  0         0  
174             }
175              
176             our %rat_field_type = (
177             Integer => 0,
178             Real => 1,
179             String => 2
180             );
181              
182             our %rat_field_usage = (
183             Generic => 0,
184             PixelCount => 1,
185             Name => 2,
186             Min => 3,
187             Max => 4,
188             MinMax => 5,
189             Red => 6,
190             Green => 7,
191             Blue => 8,
192             Alpha => 9,
193             RedMin => 10,
194             GreenMin => 11,
195             BlueMin => 12,
196             AlphaMin => 13,
197             RedMax => 14,
198             GreenMax => 15,
199             BlueMax => 16,
200             AlphaMax => 17,
201             );
202              
203             our %rat_table_type = (
204             THEMATIC => 0,
205             ATHEMATIC => 1
206             );
207            
208             our %resampling = (
209             NearestNeighbour => 0,
210             Bilinear => 1,
211             Cubic => 2,
212             CubicSpline => 3,
213             ORA_Lanczos => 4,
214             Average => 5,
215             Mode => 6,
216             Gauss => 7
217             );
218              
219             sub ResamplingMethods {
220 0     0 0 0 return sort {$resampling{$a} <=> $resampling{$b}} keys %resampling;
  0         0  
221             }
222              
223             our %data_type2pdl_data_type = (
224             Byte => $PDL::Types::PDL_B,
225             Int16 => $PDL::Types::PDL_S,
226             UInt16 => $PDL::Types::PDL_US,
227             Int32 => $PDL::Types::PDL_L,
228             Float32 => $PDL::Types::PDL_F,
229             Float64 => $PDL::Types::PDL_D,
230             );
231             our %pdl_data_type2data_type = reverse %data_type2pdl_data_type;
232              
233             our %field_types = (
234             Integer => 0,
235             IntegerList => 1,
236             Real => 2,
237             RealList => 3,
238             String => 4,
239             StringList => 5,
240             #WideString => 6, # do not use
241             #WideStringList => 7, # do not use
242             Binary => 8,
243             Date => 9,
244             Time => 10,
245             DateTime => 11,
246             Integer64 => 12,
247             Integer64List => 13,
248             );
249             our %field_types_reverse = reverse %field_types;
250              
251             sub FieldTypes {
252 0     0 1 0 return sort {$field_types{$a} <=> $field_types{$b}} keys %field_types;
  0         0  
253             }
254              
255             our %field_subtypes = (
256             None => 0,
257             Boolean => 1,
258             Int16 => 2,
259             Float32 => 3
260             );
261             our %field_subtypes_reverse = reverse %field_subtypes;
262              
263             sub FieldSubtypes {
264 0     0 1 0 return sort {$field_subtypes{$a} <=> $field_subtypes{$b}} keys %field_subtypes;
  0         0  
265             }
266              
267             our %justification = (
268             Undefined => 0,
269             Left => 1,
270             Right => 2
271             );
272             our %justification_reverse = reverse %justification;
273              
274             sub Justifications {
275 0     0 1 0 return sort {$justification{$a} <=> $justification{$b}} keys %justification;
  0         0  
276             }
277              
278             our %color_interpretations = (
279             Undefined => 0,
280             GrayIndex => 1,
281             PaletteIndex => 2,
282             RedBand => 3,
283             GreenBand => 4,
284             BlueBand => 5,
285             AlphaBand => 6,
286             HueBand => 7,
287             SaturationBand => 8,
288             LightnessBand => 9,
289             CyanBand => 10,
290             MagentaBand => 11,
291             YellowBand => 12,
292             BlackBand => 13,
293             YCbCr_YBand => 14,
294             YCbCr_CbBand => 15,
295             YCbCr_CrBand => 16,
296             );
297             our %color_interpretations_reverse = reverse %color_interpretations;
298              
299             sub ColorInterpretations {
300 0     0 1 0 return sort {$color_interpretations{$a} <=> $color_interpretations{$b}} keys %color_interpretations;
  0         0  
301             }
302              
303             our %geometry_types = (
304             Unknown => 0,
305             Point => 1,
306             LineString => 2,
307             Polygon => 3,
308             MultiPoint => 4,
309             MultiLineString => 5,
310             MultiPolygon => 6,
311             GeometryCollection => 7,
312             CircularString => 8,
313             CompoundCurve => 9,
314             CurvePolygon => 10,
315             MultiCurve => 11,
316             MultiSurface => 12,
317             Curve => 13,
318             Surface => 14,
319             PolyhedralSurface => 15,
320             TIN => 16,
321             Triangle => 17,
322             None => 100,
323             LinearRing => 101,
324             CircularStringZ => 1008,
325             CompoundCurveZ => 1009,
326             CurvePolygonZ => 1010,
327             MultiCurveZ => 1011,
328             MultiSurfaceZ => 1012,
329             CurveZ => 1013,
330             SurfaceZ => 1014,
331             PolyhedralSurfaceZ => 1015,
332             TINZ => 1016,
333             TriangleZ => 1017,
334             PointM => 2001,
335             LineStringM => 2002,
336             PolygonM => 2003,
337             MultiPointM => 2004,
338             MultiLineStringM => 2005,
339             MultiPolygonM => 2006,
340             GeometryCollectionM => 2007,
341             CircularStringM => 2008,
342             CompoundCurveM => 2009,
343             CurvePolygonM => 2010,
344             MultiCurveM => 2011,
345             MultiSurfaceM => 2012,
346             CurveM => 2013,
347             SurfaceM => 2014,
348             PolyhedralSurfaceM => 2015,
349             TINM => 2016,
350             TriangleM => 2017,
351             PointZM => 3001,
352             LineStringZM => 3002,
353             PolygonZM => 3003,
354             MultiPointZM => 3004,
355             MultiLineStringZM => 3005,
356             MultiPolygonZM => 3006,
357             GeometryCollectionZM => 3007,
358             CircularStringZM => 3008,
359             CompoundCurveZM => 3009,
360             CurvePolygonZM => 3010,
361             MultiCurveZM => 3011,
362             MultiSurfaceZM => 3012,
363             CurveZM => 3013,
364             SurfaceZM => 3014,
365             PolyhedralSurfaceZM => 3015,
366             TINZM => 3016,
367             TriangleZM => 3017,
368             Point25D => 0x80000001,
369             LineString25D => 0x80000002,
370             Polygon25D => 0x80000003,
371             MultiPoint25D => 0x80000004,
372             MultiLineString25D => 0x80000005,
373             MultiPolygon25D => 0x80000006,
374             GeometryCollection25D => 0x80000007
375             );
376             our %geometry_types_reverse = reverse %geometry_types;
377              
378             sub GeometryTypes {
379 0     0 1 0 return sort {$geometry_types{$a} <=> $geometry_types{$b}} keys %geometry_types;
  0         0  
380             }
381              
382             our %geometry_formats = (
383             WKT => 1,
384             );
385              
386             sub GeometryFormats {
387 0     0 0 0 return sort {$geometry_formats{$a} <=> $geometry_formats{$b}} keys %geometry_formats;
  0         0  
388             }
389              
390             our %grid_algorithms = (
391             InverseDistanceToAPower => 1,
392             MovingAverage => 2,
393             NearestNeighbor => 3,
394             MetricMinimum => 4,
395             MetricMaximum => 5,
396             MetricRange => 6,
397             MetricCount => 7,
398             MetricAverageDistance => 8,
399             MetricAverageDistancePts => 9,
400             Linear => 10,
401             InverseDistanceToAPowerNearestNeighbor => 11
402             );
403              
404             sub GridAlgorithms {
405 0     0 0 0 return sort {$grid_algorithms{$a} <=> $grid_algorithms{$b}} keys %grid_algorithms;
  0         0  
406             }
407              
408             sub isint {
409 241     241 0 332 my $value = shift;
410 241         575 my $b_obj = B::svref_2object(\$value);
411 241         468 my $flags = $b_obj->FLAGS;
412 241 50 66     1517 return 1 if $flags & B::SVp_IOK() && !($flags & B::SVp_NOK()) && !($flags & B::SVp_POK());
      66        
413             }
414              
415             sub new {
416 6     6 0 652 my $class = shift;
417              
418 6 100       58 return $instance if $instance;
419              
420 5         185 my $ffi = FFI::Platypus->new;
421 5         278 $ffi->load_custom_type('::StringPointer' => 'string_pointer');
422 5         420715 $ffi->lib(Alien::gdal->dynamic_libs);
423              
424 5         211998 $ffi->type('(pointer,size_t,size_t,opaque)->size_t' => 'VSIWriteFunction');
425 5         1364 $ffi->type('(int,int,string)->void' => 'CPLErrorHandler');
426 5         1259 $ffi->type('(double,string,pointer)->int' => 'GDALProgressFunc');
427 5         640 $ffi->type('(pointer,int, pointer,int,int,unsigned int,unsigned int,int,int)->int' => 'GDALDerivedPixelFunc');
428 5         954 $ffi->type('(pointer,int,int,pointer,pointer,pointer,pointer)->int' => 'GDALTransformerFunc');
429 5         547 $ffi->type('(double,int,pointer,pointer,pointer)->int' => 'GDALContourWriter');
430              
431             # from port/*.h
432 5         522 eval{$ffi->attach(VSIMalloc => [qw/uint/] => 'opaque');};
  5         62  
433 5 50       75115 croak "Can't attach to GDAL methods. Does Alien::gdal provide GDAL dynamic libs?" unless $class->can('VSIMalloc');
434 5         29 eval{$ffi->attach(VSIFree => ['opaque'] => 'void');};
  5         47  
435 5         683 eval{$ffi->attach(VSIFOpenL => [qw/string string/] => 'opaque');};
  5         29  
436 5         487 eval{$ffi->attach(VSIFOpenExL => [qw/string string int/] => 'opaque');};
  5         31  
437 5         531 eval{$ffi->attach(VSIFCloseL => ['opaque'] => 'int');};
  5         38  
438 5         481 eval{$ffi->attach(VSIFWriteL => [qw/opaque uint uint opaque/] => 'uint');};
  5         47  
439 5         585 eval{$ffi->attach(VSIFReadL => [qw/opaque uint uint opaque/] => 'uint');};
  5         40  
440 5         539 eval{$ffi->attach(VSIIngestFile => [qw/opaque string string_pointer uint64* sint64/] => 'int');};
  5         33  
441 5         1355 eval{$ffi->attach(VSIMkdir => [qw/string sint64/] => 'int');};
  5         35  
442 5         525 eval{$ffi->attach(VSIRmdir => [qw/string/] => 'int');};
  5         33  
443 5         492 eval{$ffi->attach(VSIReadDirEx => [qw/string int/] => 'opaque');};
  5         32  
444 5         507 eval{$ffi->attach(VSIUnlink => [qw/string/] => 'int');};
  5         26  
445 5         466 eval{$ffi->attach(VSIRename => [qw/string string/] => 'int');};
  5         38  
446 5         476 eval{$ffi->attach(VSIStdoutSetRedirection => ['VSIWriteFunction', 'opaque'] => 'void');};
  5         40  
447 5         601 eval{$ffi->attach(CPLPushErrorHandler => ['CPLErrorHandler'] => 'void');};
  5         26  
448 5         6455 eval{$ffi->attach(CPLPopErrorHandler => ['CPLErrorHandler'] => 'void');};
  5         31  
449 5         504 eval{$ffi->attach(CSLDestroy => ['opaque'] => 'void');};
  5         33  
450 5         455 eval{$ffi->attach(CSLAddString => ['opaque', 'string'] => 'opaque');};
  5         42  
451 5         523 eval{$ffi->attach(CSLCount => ['opaque'] => 'int');};
  5         36  
452 5         431 eval{$ffi->attach(CSLGetField => ['opaque', 'int'] => 'string');};
  5         28  
453 5         445 eval{$ffi->attach(CPLGetConfigOption => ['string', 'string'] => 'string');};
  5         27  
454 5         462 eval{$ffi->attach(CPLSetConfigOption => ['string', 'string'] => 'void');};
  5         46  
455 5         457 eval{$ffi->attach(CPLFindFile => ['string', 'string'] => 'string');};
  5         30  
456 5         453 eval{$ffi->attach(CPLPushFinderLocation => ['string'] => 'void');};
  5         107  
457 5         430 eval{$ffi->attach(CPLPopFinderLocation => [] => 'void');};
  5         30  
458 5         387 eval{$ffi->attach(CPLFinderClean => [] => 'void');};
  5         29  
459              
460             # from ogr_core.h
461 5         384 eval{$ffi->attach( 'OGR_GT_Flatten' => ['unsigned int'] => 'unsigned int');};
  5         41  
462              
463             # generated with parse_h.pl
464             # from gcore/gdal.h
465 5         475 eval{$ffi->attach('GDALGetDataTypeSize' => ['unsigned int'] => 'int');};
  5         63  
466 5         455 eval{$ffi->attach('GDALGetDataTypeSizeBits' => ['unsigned int'] => 'int');};
  5         51  
467 5         504 eval{$ffi->attach('GDALGetDataTypeSizeBytes' => ['unsigned int'] => 'int');};
  5         29  
468 5         408 eval{$ffi->attach('GDALDataTypeIsComplex' => ['unsigned int'] => 'int');};
  5         64  
469 5         485 eval{$ffi->attach('GDALDataTypeIsInteger' => ['unsigned int'] => 'int');};
  5         23  
470 5         391 eval{$ffi->attach('GDALDataTypeIsFloating' => ['unsigned int'] => 'int');};
  5         31  
471 5         434 eval{$ffi->attach('GDALDataTypeIsSigned' => ['unsigned int'] => 'int');};
  5         69  
472 5         438 eval{$ffi->attach('GDALGetDataTypeName' => ['unsigned int'] => 'string');};
  5         31  
473 5         489 eval{$ffi->attach('GDALGetDataTypeByName' => [qw/string/] => 'unsigned int');};
  5         22  
474 5         423 eval{$ffi->attach('GDALDataTypeUnion' => ['unsigned int','unsigned int'] => 'unsigned int');};
  5         38  
475 5         429 eval{$ffi->attach('GDALDataTypeUnionWithValue' => ['unsigned int','double','int'] => 'unsigned int');};
  5         44  
476 5         467 eval{$ffi->attach('GDALFindDataType' => [qw/int int int int/] => 'unsigned int');};
  5         33  
477 5         466 eval{$ffi->attach('GDALFindDataTypeForValue' => [qw/double int/] => 'unsigned int');};
  5         62  
478 5         469 eval{$ffi->attach('GDALAdjustValueToDataType' => ['unsigned int','double','int*','int*'] => 'double');};
  5         24  
479 5         776 eval{$ffi->attach('GDALGetNonComplexDataType' => ['unsigned int'] => 'unsigned int');};
  5         34  
480 5         387 eval{$ffi->attach('GDALDataTypeIsConversionLossy' => ['unsigned int','unsigned int'] => 'int');};
  5         33  
481 5         428 eval{$ffi->attach('GDALGetAsyncStatusTypeName' => ['unsigned int'] => 'string');};
  5         21  
482 5         425 eval{$ffi->attach('GDALGetAsyncStatusTypeByName' => [qw/string/] => 'unsigned int');};
  5         39  
483 5         412 eval{$ffi->attach('GDALGetColorInterpretationName' => ['unsigned int'] => 'string');};
  5         39  
484 5         419 eval{$ffi->attach('GDALGetColorInterpretationByName' => [qw/string/] => 'unsigned int');};
  5         25  
485 5         663 eval{$ffi->attach('GDALGetPaletteInterpretationName' => ['unsigned int'] => 'string');};
  5         42  
486 5         475 eval{$ffi->attach('GDALAllRegister' => [] => 'void');};
  5         25  
487 5         372 eval{$ffi->attach('GDALCreate' => ['opaque','string','int','int','int','unsigned int','opaque'] => 'opaque');};
  5         62  
488 5         638 eval{$ffi->attach('GDALCreateCopy' => [qw/opaque string opaque int opaque GDALProgressFunc opaque/] => 'opaque');};
  5         42  
489 5         569 eval{$ffi->attach('GDALIdentifyDriver' => [qw/string opaque/] => 'opaque');};
  5         24  
490 5         440 eval{$ffi->attach('GDALIdentifyDriverEx' => ['string','unsigned int','string_pointer','string_pointer'] => 'opaque');};
  5         38  
491 5         557 eval{$ffi->attach('GDALOpen' => ['string','unsigned int'] => 'opaque');};
  5         36  
492 5         439 eval{$ffi->attach('GDALOpenShared' => ['string','unsigned int'] => 'opaque');};
  5         76  
493 5         437 eval{$ffi->attach('GDALOpenEx' => ['string','unsigned int','opaque','opaque','opaque'] => 'opaque');};
  5         51  
494 5         549 eval{$ffi->attach('GDALDumpOpenDatasets' => [qw/opaque/] => 'int');};
  5         24  
495 5         434 eval{$ffi->attach('GDALGetDriverByName' => [qw/string/] => 'opaque');};
  5         27  
496 5         439 eval{$ffi->attach('GDALGetDriverCount' => [] => 'int');};
  5         28  
497 5         375 eval{$ffi->attach('GDALGetDriver' => [qw/int/] => 'opaque');};
  5         29  
498 5         460 eval{$ffi->attach('GDALCreateDriver' => [] => 'opaque');};
  5         26  
499 5         389 eval{$ffi->attach('GDALDestroyDriver' => [qw/opaque/] => 'void');};
  5         39  
500 5         441 eval{$ffi->attach('GDALRegisterDriver' => [qw/opaque/] => 'int');};
  5         50  
501 5         417 eval{$ffi->attach('GDALDeregisterDriver' => [qw/opaque/] => 'void');};
  5         28  
502 5         566 eval{$ffi->attach('GDALDestroyDriverManager' => [] => 'void');};
  5         38  
503 5         402 eval{$ffi->attach('GDALDestroy' => [] => 'void');};
  5         22  
504 5         346 eval{$ffi->attach('GDALDeleteDataset' => [qw/opaque string/] => 'int');};
  5         25  
505 5         412 eval{$ffi->attach('GDALRenameDataset' => [qw/opaque string string/] => 'int');};
  5         36  
506 5         545 eval{$ffi->attach('GDALCopyDatasetFiles' => [qw/opaque string string/] => 'int');};
  5         27  
507 5         557 eval{$ffi->attach('GDALValidateCreationOptions' => [qw/opaque opaque/] => 'int');};
  5         25  
508 5         418 eval{$ffi->attach('GDALGetDriverShortName' => [qw/opaque/] => 'string');};
  5         23  
509 5         392 eval{$ffi->attach('GDALGetDriverLongName' => [qw/opaque/] => 'string');};
  5         23  
510 5         387 eval{$ffi->attach('GDALGetDriverHelpTopic' => [qw/opaque/] => 'string');};
  5         22  
511 5         375 eval{$ffi->attach('GDALGetDriverCreationOptionList' => [qw/opaque/] => 'string');};
  5         22  
512 5         396 eval{$ffi->attach('GDALInitGCPs' => [qw/int opaque/] => 'void');};
  5         24  
513 5         410 eval{$ffi->attach('GDALDeinitGCPs' => [qw/int opaque/] => 'void');};
  5         22  
514 5         511 eval{$ffi->attach('GDALDuplicateGCPs' => [qw/int opaque/] => 'opaque');};
  5         31  
515 5         448 eval{$ffi->attach('GDALGCPsToGeoTransform' => [qw/int opaque double* int/] => 'int');};
  5         36  
516 5         872 eval{$ffi->attach('GDALInvGeoTransform' => [qw/double* double*/] => 'int');};
  5         25  
517 5         461 eval{$ffi->attach('GDALApplyGeoTransform' => [qw/double* double double double* double*/] => 'void');};
  5         42  
518 5         547 eval{$ffi->attach('GDALComposeGeoTransforms' => [qw/double* double* double*/] => 'void');};
  5         42  
519 5         466 eval{$ffi->attach('GDALGetMetadataDomainList' => [qw/opaque/] => 'opaque');};
  5         24  
520 5         422 eval{$ffi->attach('GDALGetMetadata' => [qw/opaque string/] => 'opaque');};
  5         24  
521 5         466 eval{$ffi->attach('GDALSetMetadata' => [qw/opaque opaque string/] => 'int');};
  5         27  
522 5         509 eval{$ffi->attach('GDALGetMetadataItem' => [qw/opaque string string/] => 'string');};
  5         36  
523 5         495 eval{$ffi->attach('GDALSetMetadataItem' => [qw/opaque string string string/] => 'int');};
  5         39  
524 5         529 eval{$ffi->attach('GDALGetDescription' => [qw/opaque/] => 'string');};
  5         45  
525 5         458 eval{$ffi->attach('GDALSetDescription' => [qw/opaque string/] => 'void');};
  5         40  
526 5         453 eval{$ffi->attach('GDALGetDatasetDriver' => [qw/opaque/] => 'opaque');};
  5         22  
527 5         441 eval{$ffi->attach('GDALGetFileList' => [qw/opaque/] => 'opaque');};
  5         25  
528 5         401 eval{$ffi->attach('GDALClose' => [qw/opaque/] => 'void');};
  5         27  
529 5         427 eval{$ffi->attach('GDALGetRasterXSize' => [qw/opaque/] => 'int');};
  5         38  
530 5         503 eval{$ffi->attach('GDALGetRasterYSize' => [qw/opaque/] => 'int');};
  5         38  
531 5         473 eval{$ffi->attach('GDALGetRasterCount' => [qw/opaque/] => 'int');};
  5         24  
532 5         453 eval{$ffi->attach('GDALGetRasterBand' => [qw/opaque int/] => 'opaque');};
  5         46  
533 5         489 eval{$ffi->attach('GDALAddBand' => ['opaque','unsigned int','opaque'] => 'int');};
  5         45  
534 5         556 eval{$ffi->attach('GDALBeginAsyncReader' => ['opaque','int','int','int','int','opaque','int','int','unsigned int','int','int*','int','int','int','opaque'] => 'opaque');};
  5         53  
535 5         785 eval{$ffi->attach('GDALEndAsyncReader' => [qw/opaque opaque/] => 'void');};
  5         29  
536 5         423 eval{$ffi->attach('GDALDatasetRasterIO' => ['opaque','unsigned int','int','int','int','int','opaque','int','int','unsigned int','int','int*','int','int','int'] => 'int');};
  5         36  
537 5         768 eval{$ffi->attach('GDALDatasetRasterIOEx' => ['opaque','unsigned int','int','int','int','int','opaque','int','int','unsigned int','int','int*','sint64','sint64','sint64','opaque'] => 'int');};
  5         45  
538 5         852 eval{$ffi->attach('GDALDatasetAdviseRead' => ['opaque','int','int','int','int','int','int','unsigned int','int','int*','opaque'] => 'int');};
  5         43  
539 5         740 eval{$ffi->attach('GDALGetProjectionRef' => [qw/opaque/] => 'string');};
  5         23  
540 5         429 eval{$ffi->attach('GDALSetProjection' => [qw/opaque string/] => 'int');};
  5         26  
541 5         449 eval{$ffi->attach('GDALGetGeoTransform' => [qw/opaque double[6]/] => 'int');};
  5         37  
542 5         854 eval{$ffi->attach('GDALSetGeoTransform' => [qw/opaque double[6]/] => 'int');};
  5         30  
543 5         588 eval{$ffi->attach('GDALGetGCPCount' => [qw/opaque/] => 'int');};
  5         45  
544 5         417 eval{$ffi->attach('GDALGetGCPProjection' => [qw/opaque/] => 'string');};
  5         29  
545 5         408 eval{$ffi->attach('GDALGetGCPs' => [qw/opaque/] => 'opaque');};
  5         29  
546 5         396 eval{$ffi->attach('GDALSetGCPs' => [qw/opaque int opaque string/] => 'int');};
  5         34  
547 5         470 eval{$ffi->attach('GDALGetInternalHandle' => [qw/opaque string/] => 'opaque');};
  5         29  
548 5         449 eval{$ffi->attach('GDALReferenceDataset' => [qw/opaque/] => 'int');};
  5         22  
549 5         453 eval{$ffi->attach('GDALDereferenceDataset' => [qw/opaque/] => 'int');};
  5         29  
550 5         396 eval{$ffi->attach('GDALReleaseDataset' => [qw/opaque/] => 'int');};
  5         46  
551 5         491 eval{$ffi->attach('GDALBuildOverviews' => [qw/opaque string int int* int int* GDALProgressFunc opaque/] => 'int');};
  5         72  
552 5         616 eval{$ffi->attach('GDALGetOpenDatasets' => [qw/uint64* int*/] => 'void');};
  5         24  
553 5         411 eval{$ffi->attach('GDALGetAccess' => [qw/opaque/] => 'int');};
  5         23  
554 5         382 eval{$ffi->attach('GDALFlushCache' => [qw/opaque/] => 'void');};
  5         22  
555 5         421 eval{$ffi->attach('GDALCreateDatasetMaskBand' => [qw/opaque int/] => 'int');};
  5         26  
556 5         438 eval{$ffi->attach('GDALDatasetCopyWholeRaster' => [qw/opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         28  
557 5         528 eval{$ffi->attach('GDALRasterBandCopyWholeRaster' => [qw/opaque opaque string_pointer GDALProgressFunc opaque/] => 'int');};
  5         37  
558 5         510 eval{$ffi->attach('GDALRegenerateOverviews' => [qw/opaque int uint64* string GDALProgressFunc opaque/] => 'int');};
  5         27  
559 5         530 eval{$ffi->attach('GDALDatasetGetLayerCount' => [qw/opaque/] => 'int');};
  5         53  
560 5         426 eval{$ffi->attach('GDALDatasetGetLayer' => [qw/opaque int/] => 'opaque');};
  5         24  
561 5         470 eval{$ffi->attach('GDALDatasetGetLayerByName' => [qw/opaque string/] => 'opaque');};
  5         40  
562 5         437 eval{$ffi->attach('GDALDatasetDeleteLayer' => [qw/opaque int/] => 'int');};
  5         46  
563 5         431 eval{$ffi->attach('GDALDatasetCreateLayer' => ['opaque','string','opaque','unsigned int','opaque'] => 'opaque');};
  5         54  
564 5         554 eval{$ffi->attach('GDALDatasetCopyLayer' => [qw/opaque opaque string opaque/] => 'opaque');};
  5         26  
565 5         516 eval{$ffi->attach('GDALDatasetResetReading' => [qw/opaque/] => 'void');};
  5         23  
566 5         409 eval{$ffi->attach('GDALDatasetGetNextFeature' => [qw/opaque uint64* double* GDALProgressFunc opaque/] => 'opaque');};
  5         28  
567 5         594 eval{$ffi->attach('GDALDatasetTestCapability' => [qw/opaque string/] => 'int');};
  5         31  
568 5         432 eval{$ffi->attach('GDALDatasetExecuteSQL' => [qw/opaque string opaque string/] => 'opaque');};
  5         48  
569 5         569 eval{$ffi->attach('GDALDatasetReleaseResultSet' => [qw/opaque opaque/] => 'void');};
  5         37  
570 5         452 eval{$ffi->attach('GDALDatasetGetStyleTable' => [qw/opaque/] => 'opaque');};
  5         37  
571 5         453 eval{$ffi->attach('GDALDatasetSetStyleTableDirectly' => [qw/opaque opaque/] => 'void');};
  5         24  
572 5         417 eval{$ffi->attach('GDALDatasetSetStyleTable' => [qw/opaque opaque/] => 'void');};
  5         22  
573 5         429 eval{$ffi->attach('GDALDatasetStartTransaction' => [qw/opaque int/] => 'int');};
  5         23  
574 5         402 eval{$ffi->attach('GDALDatasetCommitTransaction' => [qw/opaque/] => 'int');};
  5         22  
575 5         404 eval{$ffi->attach('GDALDatasetRollbackTransaction' => [qw/opaque/] => 'int');};
  5         28  
576 5         460 eval{$ffi->attach('GDALGetRasterDataType' => [qw/opaque/] => 'unsigned int');};
  5         35  
577 5         467 eval{$ffi->attach('GDALGetBlockSize' => [qw/opaque int* int*/] => 'void');};
  5         28  
578 5         500 eval{$ffi->attach('GDALGetActualBlockSize' => [qw/opaque int int int* int*/] => 'int');};
  5         34  
579 5         503 eval{$ffi->attach('GDALRasterAdviseRead' => ['opaque','int','int','int','int','int','int','unsigned int','opaque'] => 'int');};
  5         39  
580 5         593 eval{$ffi->attach('GDALRasterIO' => ['opaque','unsigned int','int','int','int','int','opaque','int','int','unsigned int','int','int'] => 'int');};
  5         42  
581 5         736 eval{$ffi->attach('GDALRasterIOEx' => ['opaque','unsigned int','int','int','int','int','opaque','int','int','unsigned int','sint64','sint64','opaque'] => 'int');};
  5         48  
582 5         862 eval{$ffi->attach('GDALReadBlock' => [qw/opaque int int opaque/] => 'int');};
  5         27  
583 5         533 eval{$ffi->attach('GDALWriteBlock' => [qw/opaque int int opaque/] => 'int');};
  5         30  
584 5         523 eval{$ffi->attach('GDALGetRasterBandXSize' => [qw/opaque/] => 'int');};
  5         22  
585 5         432 eval{$ffi->attach('GDALGetRasterBandYSize' => [qw/opaque/] => 'int');};
  5         39  
586 5         463 eval{$ffi->attach('GDALGetRasterAccess' => [qw/opaque/] => 'unsigned int');};
  5         33  
587 5         448 eval{$ffi->attach('GDALGetBandNumber' => [qw/opaque/] => 'int');};
  5         23  
588 5         410 eval{$ffi->attach('GDALGetBandDataset' => [qw/opaque/] => 'opaque');};
  5         24  
589 5         432 eval{$ffi->attach('GDALGetRasterColorInterpretation' => [qw/opaque/] => 'unsigned int');};
  5         122  
590 5         485 eval{$ffi->attach('GDALSetRasterColorInterpretation' => ['opaque','unsigned int'] => 'int');};
  5         42  
591 5         471 eval{$ffi->attach('GDALGetRasterColorTable' => [qw/opaque/] => 'opaque');};
  5         43  
592 5         413 eval{$ffi->attach('GDALSetRasterColorTable' => [qw/opaque opaque/] => 'int');};
  5         35  
593 5         467 eval{$ffi->attach('GDALHasArbitraryOverviews' => [qw/opaque/] => 'int');};
  5         25  
594 5         420 eval{$ffi->attach('GDALGetOverviewCount' => [qw/opaque/] => 'int');};
  5         25  
595 5         381 eval{$ffi->attach('GDALGetOverview' => [qw/opaque int/] => 'opaque');};
  5         22  
596 5         397 eval{$ffi->attach('GDALGetRasterNoDataValue' => [qw/opaque int*/] => 'double');};
  5         48  
597 5         451 eval{$ffi->attach('GDALSetRasterNoDataValue' => [qw/opaque double/] => 'int');};
  5         27  
598 5         465 eval{$ffi->attach('GDALDeleteRasterNoDataValue' => [qw/opaque/] => 'int');};
  5         30  
599 5         430 eval{$ffi->attach('GDALGetRasterCategoryNames' => [qw/opaque/] => 'opaque');};
  5         37  
600 5         460 eval{$ffi->attach('GDALSetRasterCategoryNames' => [qw/opaque opaque/] => 'int');};
  5         26  
601 5         460 eval{$ffi->attach('GDALGetRasterMinimum' => [qw/opaque int*/] => 'double');};
  5         26  
602 5         423 eval{$ffi->attach('GDALGetRasterMaximum' => [qw/opaque int*/] => 'double');};
  5         22  
603 5         396 eval{$ffi->attach('GDALGetRasterStatistics' => [qw/opaque int int double* double* double* double*/] => 'int');};
  5         36  
604 5         624 eval{$ffi->attach('GDALComputeRasterStatistics' => [qw/opaque int double* double* double* double* GDALProgressFunc opaque/] => 'int');};
  5         26  
605 5         575 eval{$ffi->attach('GDALSetRasterStatistics' => [qw/opaque double double double double/] => 'int');};
  5         33  
606 5         522 eval{$ffi->attach('GDALGetRasterUnitType' => [qw/opaque/] => 'string');};
  5         30  
607 5         394 eval{$ffi->attach('GDALSetRasterUnitType' => [qw/opaque string/] => 'int');};
  5         22  
608 5         505 eval{$ffi->attach('GDALGetRasterOffset' => [qw/opaque int*/] => 'double');};
  5         39  
609 5         444 eval{$ffi->attach('GDALSetRasterOffset' => [qw/opaque double/] => 'int');};
  5         32  
610 5         429 eval{$ffi->attach('GDALGetRasterScale' => [qw/opaque int*/] => 'double');};
  5         24  
611 5         471 eval{$ffi->attach('GDALSetRasterScale' => [qw/opaque double/] => 'int');};
  5         28  
612 5         448 eval{$ffi->attach('GDALComputeRasterMinMax' => [qw/opaque int double/] => 'void');};
  5         28  
613 5         448 eval{$ffi->attach('GDALFlushRasterCache' => [qw/opaque/] => 'int');};
  5         22  
614 5         370 eval{$ffi->attach('GDALGetRasterHistogram' => [qw/opaque double double int int* int int GDALProgressFunc opaque/] => 'int');};
  5         36  
615 5         609 eval{$ffi->attach('GDALGetRasterHistogramEx' => [qw/opaque double double int uint64* int int GDALProgressFunc opaque/] => 'int');};
  5         38  
616 5         645 eval{$ffi->attach('GDALGetDefaultHistogram' => [qw/opaque double* double* int* int* int GDALProgressFunc opaque/] => 'int');};
  5         51  
617 5         595 eval{$ffi->attach('GDALGetDefaultHistogramEx' => [qw/opaque double* double* int* uint64* int GDALProgressFunc opaque/] => 'int');};
  5         45  
618 5         586 eval{$ffi->attach('GDALSetDefaultHistogram' => [qw/opaque double double int int*/] => 'int');};
  5         52  
619 5         506 eval{$ffi->attach('GDALSetDefaultHistogramEx' => [qw/opaque double double int uint64*/] => 'int');};
  5         39  
620 5         577 eval{$ffi->attach('GDALGetRandomRasterSample' => [qw/opaque int float*/] => 'int');};
  5         37  
621 5         892 eval{$ffi->attach('GDALGetRasterSampleOverview' => [qw/opaque int/] => 'opaque');};
  5         23  
622 5         422 eval{$ffi->attach('GDALGetRasterSampleOverviewEx' => [qw/opaque uint64/] => 'opaque');};
  5         32  
623 5         459 eval{$ffi->attach('GDALFillRaster' => [qw/opaque double double/] => 'int');};
  5         45  
624 5         502 eval{$ffi->attach('GDALComputeBandStats' => [qw/opaque int double* double* GDALProgressFunc opaque/] => 'int');};
  5         29  
625 5         518 eval{$ffi->attach('GDALOverviewMagnitudeCorrection' => [qw/opaque int uint64* GDALProgressFunc opaque/] => 'int');};
  5         29  
626 5         490 eval{$ffi->attach('GDALGetDefaultRAT' => [qw/opaque/] => 'opaque');};
  5         20  
627 5         442 eval{$ffi->attach('GDALSetDefaultRAT' => [qw/opaque opaque/] => 'int');};
  5         21  
628 5         461 eval{$ffi->attach('GDALAddDerivedBandPixelFunc' => [qw/string GDALDerivedPixelFunc/] => 'int');};
  5         37  
629 5         446 eval{$ffi->attach('GDALGetMaskBand' => [qw/opaque/] => 'opaque');};
  5         23  
630 5         393 eval{$ffi->attach('GDALGetMaskFlags' => [qw/opaque/] => 'int');};
  5         20  
631 5         369 eval{$ffi->attach('GDALCreateMaskBand' => [qw/opaque int/] => 'int');};
  5         20  
632 5         405 eval{$ffi->attach('GDALGetDataCoverageStatus' => [qw/opaque int int int int int double*/] => 'int');};
  5         27  
633 5         533 eval{$ffi->attach('GDALARGetNextUpdatedRegion' => [qw/opaque double int* int* int* int*/] => 'unsigned int');};
  5         36  
634 5         512 eval{$ffi->attach('GDALARLockBuffer' => [qw/opaque double/] => 'int');};
  5         53  
635 5         448 eval{$ffi->attach('GDALARUnlockBuffer' => [qw/opaque/] => 'void');};
  5         21  
636 5         378 eval{$ffi->attach('GDALGeneralCmdLineProcessor' => [qw/int string_pointer int/] => 'int');};
  5         26  
637 5         440 eval{$ffi->attach('GDALSwapWords' => [qw/opaque int int int/] => 'void');};
  5         37  
638 5         559 eval{$ffi->attach('GDALSwapWordsEx' => [qw/opaque int size_t int/] => 'void');};
  5         50  
639 5         488 eval{$ffi->attach('GDALCopyWords' => ['opaque','unsigned int','int','opaque','unsigned int','int','int'] => 'void');};
  5         38  
640 5         558 eval{$ffi->attach('GDALCopyBits' => [qw/pointer int int pointer int int int int/] => 'void');};
  5         39  
641 5         621 eval{$ffi->attach('GDALLoadWorldFile' => [qw/string double*/] => 'int');};
  5         33  
642 5         462 eval{$ffi->attach('GDALReadWorldFile' => [qw/string string double*/] => 'int');};
  5         46  
643 5         457 eval{$ffi->attach('GDALWriteWorldFile' => [qw/string string double*/] => 'int');};
  5         47  
644 5         432 eval{$ffi->attach('GDALLoadTabFile' => [qw/string double* string_pointer int* opaque/] => 'int');};
  5         43  
645 5         505 eval{$ffi->attach('GDALReadTabFile' => [qw/string double* string_pointer int* opaque/] => 'int');};
  5         25  
646 5         531 eval{$ffi->attach('GDALLoadOziMapFile' => [qw/string double* string_pointer int* opaque/] => 'int');};
  5         41  
647 5         546 eval{$ffi->attach('GDALReadOziMapFile' => [qw/string double* string_pointer int* opaque/] => 'int');};
  5         54  
648 5         598 eval{$ffi->attach('GDALDecToDMS' => [qw/double string int/] => 'string');};
  5         26  
649 5         462 eval{$ffi->attach('GDALPackedDMSToDec' => [qw/double/] => 'double');};
  5         28  
650 5         388 eval{$ffi->attach('GDALDecToPackedDMS' => [qw/double/] => 'double');};
  5         36  
651 5         405 eval{$ffi->attach('GDALVersionInfo' => [qw/string/] => 'string');};
  5         22  
652 5         427 eval{$ffi->attach('GDALCheckVersion' => [qw/int int string/] => 'int');};
  5         35  
653 5         466 eval{$ffi->attach('GDALExtractRPCInfo' => [qw/opaque opaque/] => 'int');};
  5         52  
654 5         430 eval{$ffi->attach('GDALCreateColorTable' => ['unsigned int'] => 'opaque');};
  5         20  
655 5         427 eval{$ffi->attach('GDALDestroyColorTable' => [qw/opaque/] => 'void');};
  5         29  
656 5         412 eval{$ffi->attach('GDALCloneColorTable' => [qw/opaque/] => 'opaque');};
  5         23  
657 5         382 eval{$ffi->attach('GDALGetPaletteInterpretation' => [qw/opaque/] => 'unsigned int');};
  5         20  
658 5         393 eval{$ffi->attach('GDALGetColorEntryCount' => [qw/opaque/] => 'int');};
  5         22  
659 5         428 eval{$ffi->attach('GDALGetColorEntry' => [qw/opaque int/] => 'short[4]');};
  5         57  
660 5         801 eval{$ffi->attach('GDALGetColorEntryAsRGB' => [qw/opaque int short[4]/] => 'int');};
  5         33  
661 5         451 eval{$ffi->attach('GDALSetColorEntry' => [qw/opaque int short[4]/] => 'void');};
  5         34  
662 5         432 eval{$ffi->attach('GDALCreateColorRamp' => [qw/opaque int short[4] int short[4]/] => 'void');};
  5         43  
663 5         492 eval{$ffi->attach('GDALCreateRasterAttributeTable' => [] => 'opaque');};
  5         16  
664 5         394 eval{$ffi->attach('GDALDestroyRasterAttributeTable' => [qw/opaque/] => 'void');};
  5         42  
665 5         430 eval{$ffi->attach('GDALRATGetColumnCount' => [qw/opaque/] => 'int');};
  5         39  
666 5         397 eval{$ffi->attach('GDALRATGetNameOfCol' => [qw/opaque int/] => 'string');};
  5         23  
667 5         419 eval{$ffi->attach('GDALRATGetUsageOfCol' => [qw/opaque int/] => 'unsigned int');};
  5         23  
668 5         450 eval{$ffi->attach('GDALRATGetTypeOfCol' => [qw/opaque int/] => 'unsigned int');};
  5         34  
669 5         442 eval{$ffi->attach('GDALRATGetColOfUsage' => ['opaque','unsigned int'] => 'int');};
  5         45  
670 5         437 eval{$ffi->attach('GDALRATGetRowCount' => [qw/opaque/] => 'int');};
  5         23  
671 5         388 eval{$ffi->attach('GDALRATGetValueAsString' => [qw/opaque int int/] => 'string');};
  5         47  
672 5         501 eval{$ffi->attach('GDALRATGetValueAsInt' => [qw/opaque int int/] => 'int');};
  5         35  
673 5         443 eval{$ffi->attach('GDALRATGetValueAsDouble' => [qw/opaque int int/] => 'double');};
  5         32  
674 5         460 eval{$ffi->attach('GDALRATSetValueAsString' => [qw/opaque int int string/] => 'void');};
  5         35  
675 5         474 eval{$ffi->attach('GDALRATSetValueAsInt' => [qw/opaque int int int/] => 'void');};
  5         26  
676 5         462 eval{$ffi->attach('GDALRATSetValueAsDouble' => [qw/opaque int int double/] => 'void');};
  5         39  
677 5         521 eval{$ffi->attach('GDALRATChangesAreWrittenToFile' => [qw/opaque/] => 'int');};
  5         34  
678 5         440 eval{$ffi->attach('GDALRATValuesIOAsDouble' => ['opaque','unsigned int','int','int','int','double*'] => 'int');};
  5         30  
679 5         526 eval{$ffi->attach('GDALRATValuesIOAsInteger' => ['opaque','unsigned int','int','int','int','int*'] => 'int');};
  5         29  
680 5         516 eval{$ffi->attach('GDALRATValuesIOAsString' => ['opaque','unsigned int','int','int','int','opaque'] => 'int');};
  5         43  
681 5         524 eval{$ffi->attach('GDALRATSetRowCount' => [qw/opaque int/] => 'void');};
  5         21  
682 5         439 eval{$ffi->attach('GDALRATCreateColumn' => ['opaque','string','unsigned int','unsigned int'] => 'int');};
  5         28  
683 5         503 eval{$ffi->attach('GDALRATSetLinearBinning' => [qw/opaque double double/] => 'int');};
  5         25  
684 5         442 eval{$ffi->attach('GDALRATGetLinearBinning' => [qw/opaque double* double*/] => 'int');};
  5         24  
685 5         429 eval{$ffi->attach('GDALRATSetTableType' => ['opaque','unsigned int'] => 'int');};
  5         55  
686 5         125896 eval{$ffi->attach('GDALRATGetTableType' => [qw/opaque/] => 'unsigned int');};
  5         43  
687 5         74812 eval{$ffi->attach('GDALRATInitializeFromColorTable' => [qw/opaque opaque/] => 'int');};
  5         36  
688 5         789 eval{$ffi->attach('GDALRATTranslateToColorTable' => [qw/opaque int/] => 'opaque');};
  5         38  
689 5         511 eval{$ffi->attach('GDALRATDumpReadable' => [qw/opaque opaque/] => 'void');};
  5         36  
690 5         433 eval{$ffi->attach('GDALRATClone' => [qw/opaque/] => 'opaque');};
  5         25  
691 5         387 eval{$ffi->attach('GDALRATSerializeJSON' => [qw/opaque/] => 'opaque');};
  5         22  
692 5         381 eval{$ffi->attach('GDALRATGetRowOfValue' => [qw/opaque double/] => 'int');};
  5         27  
693 5         410 eval{$ffi->attach('GDALRATRemoveStatistics' => [qw/opaque/] => 'void');};
  5         24  
694 5         72664 eval{$ffi->attach('GDALSetCacheMax' => [qw/int/] => 'void');};
  5         37  
695 5         650 eval{$ffi->attach('GDALGetCacheMax' => [] => 'int');};
  5         26  
696 5         378 eval{$ffi->attach('GDALGetCacheUsed' => [] => 'int');};
  5         22  
697 5         426 eval{$ffi->attach('GDALSetCacheMax64' => [qw/sint64/] => 'void');};
  5         35  
698 5         402 eval{$ffi->attach('GDALGetCacheMax64' => [] => 'sint64');};
  5         22  
699 5         345 eval{$ffi->attach('GDALGetCacheUsed64' => [] => 'sint64');};
  5         24  
700 5         338 eval{$ffi->attach('GDALFlushCacheBlock' => [] => 'int');};
  5         22  
701 5         362 eval{$ffi->attach('GDALDatasetGetVirtualMem' => ['opaque','unsigned int','int','int','int','int','int','int','unsigned int','int','int*','int','sint64','sint64','size_t','size_t','int','opaque'] => 'opaque');};
  5         81  
702 5         907 eval{$ffi->attach('GDALRasterBandGetVirtualMem' => ['opaque','unsigned int','int','int','int','int','int','int','unsigned int','int','sint64','size_t','size_t','int','opaque'] => 'opaque');};
  5         38  
703 5         754 eval{$ffi->attach('GDALGetVirtualMemAuto' => ['opaque','unsigned int','int*','sint64*','opaque'] => 'opaque');};
  5         35  
704 5         977 eval{$ffi->attach('GDALDatasetGetTiledVirtualMem' => ['opaque','unsigned int','int','int','int','int','int','int','unsigned int','int','int*','unsigned int','size_t','int','opaque'] => 'opaque');};
  5         56  
705 5         879 eval{$ffi->attach('GDALRasterBandGetTiledVirtualMem' => ['opaque','unsigned int','int','int','int','int','int','int','unsigned int','size_t','int','opaque'] => 'opaque');};
  5         39  
706 5         747 eval{$ffi->attach('GDALCreatePansharpenedVRT' => [qw/string opaque int uint64*/] => 'opaque');};
  5         26  
707 5         487 eval{$ffi->attach('GDALGetJPEG2000Structure' => [qw/string opaque/] => 'opaque');};
  5         23  
708             # from ogr/ogr_api.h
709 5         525 eval{$ffi->attach('OGR_G_CreateFromWkb' => [qw/string opaque uint64* int/] => 'int');};
  5         56  
710 5         507 eval{$ffi->attach('OGR_G_CreateFromWkt' => [qw/string_pointer opaque uint64*/] => 'int');};
  5         24  
711 5         511 eval{$ffi->attach('OGR_G_CreateFromFgf' => [qw/string opaque uint64* int int*/] => 'int');};
  5         62  
712 5         547 eval{$ffi->attach('OGR_G_DestroyGeometry' => [qw/opaque/] => 'void');};
  5         21  
713 5         484 eval{$ffi->attach('OGR_G_CreateGeometry' => ['unsigned int'] => 'opaque');};
  5         25  
714 5         462 eval{$ffi->attach('OGR_G_ApproximateArcAngles' => [qw/double double double double double double double double double/] => 'opaque');};
  5         35  
715 5         622 eval{$ffi->attach('OGR_G_ForceToPolygon' => [qw/opaque/] => 'opaque');};
  5         38  
716 5         423 eval{$ffi->attach('OGR_G_ForceToLineString' => [qw/opaque/] => 'opaque');};
  5         22  
717 5         376 eval{$ffi->attach('OGR_G_ForceToMultiPolygon' => [qw/opaque/] => 'opaque');};
  5         27  
718 5         382 eval{$ffi->attach('OGR_G_ForceToMultiPoint' => [qw/opaque/] => 'opaque');};
  5         20  
719 5         385 eval{$ffi->attach('OGR_G_ForceToMultiLineString' => [qw/opaque/] => 'opaque');};
  5         22  
720 5         379 eval{$ffi->attach('OGR_G_ForceTo' => ['opaque','unsigned int','string_pointer'] => 'opaque');};
  5         33  
721 5         498 eval{$ffi->attach('OGR_G_GetDimension' => [qw/opaque/] => 'int');};
  5         29  
722 5         415 eval{$ffi->attach('OGR_G_GetCoordinateDimension' => [qw/opaque/] => 'int');};
  5         25  
723 5         407 eval{$ffi->attach('OGR_G_CoordinateDimension' => [qw/opaque/] => 'int');};
  5         22  
724 5         412 eval{$ffi->attach('OGR_G_SetCoordinateDimension' => [qw/opaque int/] => 'void');};
  5         24  
725 5         456 eval{$ffi->attach('OGR_G_Is3D' => [qw/opaque/] => 'int');};
  5         41  
726 5         448 eval{$ffi->attach('OGR_G_IsMeasured' => [qw/opaque/] => 'int');};
  5         25  
727 5         415 eval{$ffi->attach('OGR_G_Set3D' => [qw/opaque int/] => 'void');};
  5         25  
728 5         405 eval{$ffi->attach('OGR_G_SetMeasured' => [qw/opaque int/] => 'void');};
  5         23  
729 5         454 eval{$ffi->attach('OGR_G_Clone' => [qw/opaque/] => 'opaque');};
  5         25  
730 5         496 eval{$ffi->attach('OGR_G_GetEnvelope' => [qw/opaque double[4]/] => 'void');};
  5         36  
731 5         875 eval{$ffi->attach('OGR_G_GetEnvelope3D' => [qw/opaque double[6]/] => 'void');};
  5         35  
732 5         497 eval{$ffi->attach('OGR_G_ImportFromWkb' => [qw/opaque string int/] => 'int');};
  5         26  
733 5         472 eval{$ffi->attach('OGR_G_ExportToWkb' => ['opaque','unsigned int','string'] => 'int');};
  5         27  
734 5         450 eval{$ffi->attach('OGR_G_ExportToIsoWkb' => ['opaque','unsigned int','string'] => 'int');};
  5         105  
735 5         474 eval{$ffi->attach('OGR_G_WkbSize' => [qw/opaque/] => 'int');};
  5         45  
736 5         442 eval{$ffi->attach('OGR_G_ImportFromWkt' => [qw/opaque string_pointer/] => 'int');};
  5         26  
737 5         443 eval{$ffi->attach('OGR_G_ExportToWkt' => [qw/opaque string_pointer/] => 'int');};
  5         38  
738 5         468 eval{$ffi->attach('OGR_G_ExportToIsoWkt' => [qw/opaque string_pointer/] => 'int');};
  5         27  
739 5         449 eval{$ffi->attach('OGR_G_GetGeometryType' => [qw/opaque/] => 'unsigned int');};
  5         31  
740 5         385 eval{$ffi->attach('OGR_G_GetGeometryName' => [qw/opaque/] => 'string');};
  5         46  
741 5         428 eval{$ffi->attach('OGR_G_DumpReadable' => [qw/opaque opaque string/] => 'void');};
  5         27  
742 5         917 eval{$ffi->attach('OGR_G_FlattenTo2D' => [qw/opaque/] => 'void');};
  5         43  
743 5         447 eval{$ffi->attach('OGR_G_CloseRings' => [qw/opaque/] => 'void');};
  5         32  
744 5         393 eval{$ffi->attach('OGR_G_CreateFromGML' => [qw/string/] => 'opaque');};
  5         24  
745 5         375 eval{$ffi->attach('OGR_G_ExportToGML' => [qw/opaque/] => 'opaque');};
  5         30  
746 5         415 eval{$ffi->attach('OGR_G_ExportToGMLEx' => [qw/opaque opaque/] => 'opaque');};
  5         32  
747 5         453 eval{$ffi->attach('OGR_G_CreateFromGMLTree' => [qw/opaque/] => 'opaque');};
  5         47  
748 5         422 eval{$ffi->attach('OGR_G_ExportToGMLTree' => [qw/opaque/] => 'opaque');};
  5         24  
749 5         398 eval{$ffi->attach('OGR_G_ExportEnvelopeToGMLTree' => [qw/opaque/] => 'opaque');};
  5         45  
750 5         483 eval{$ffi->attach('OGR_G_ExportToKML' => [qw/opaque string/] => 'opaque');};
  5         40  
751 5         494 eval{$ffi->attach('OGR_G_ExportToJson' => [qw/opaque/] => 'opaque');};
  5         25  
752 5         448 eval{$ffi->attach('OGR_G_ExportToJsonEx' => [qw/opaque opaque/] => 'opaque');};
  5         44  
753 5         482 eval{$ffi->attach('OGR_G_CreateGeometryFromJson' => [qw/string/] => 'opaque');};
  5         27  
754 5         458 eval{$ffi->attach('OGR_G_AssignSpatialReference' => [qw/opaque opaque/] => 'void');};
  5         31  
755 5         516 eval{$ffi->attach('OGR_G_GetSpatialReference' => [qw/opaque/] => 'opaque');};
  5         24  
756 5         398 eval{$ffi->attach('OGR_G_Transform' => [qw/opaque opaque/] => 'int');};
  5         31  
757 5         437 eval{$ffi->attach('OGR_G_TransformTo' => [qw/opaque opaque/] => 'int');};
  5         42  
758 5         426 eval{$ffi->attach('OGR_G_Simplify' => [qw/opaque double/] => 'opaque');};
  5         23  
759 5         660 eval{$ffi->attach('OGR_G_SimplifyPreserveTopology' => [qw/opaque double/] => 'opaque');};
  5         42  
760 5         459 eval{$ffi->attach('OGR_G_DelaunayTriangulation' => [qw/opaque double int/] => 'opaque');};
  5         24  
761 5         523 eval{$ffi->attach('OGR_G_Segmentize' => [qw/opaque double/] => 'void');};
  5         30  
762 5         412 eval{$ffi->attach('OGR_G_Intersects' => [qw/opaque opaque/] => 'int');};
  5         23  
763 5         450 eval{$ffi->attach('OGR_G_Equals' => [qw/opaque opaque/] => 'int');};
  5         25  
764 5         473 eval{$ffi->attach('OGR_G_Disjoint' => [qw/opaque opaque/] => 'int');};
  5         27  
765 5         464 eval{$ffi->attach('OGR_G_Touches' => [qw/opaque opaque/] => 'int');};
  5         33  
766 5         496 eval{$ffi->attach('OGR_G_Crosses' => [qw/opaque opaque/] => 'int');};
  5         55  
767 5         500 eval{$ffi->attach('OGR_G_Within' => [qw/opaque opaque/] => 'int');};
  5         36  
768 5         533 eval{$ffi->attach('OGR_G_Contains' => [qw/opaque opaque/] => 'int');};
  5         28  
769 5         479 eval{$ffi->attach('OGR_G_Overlaps' => [qw/opaque opaque/] => 'int');};
  5         25  
770 5         474 eval{$ffi->attach('OGR_G_Boundary' => [qw/opaque/] => 'opaque');};
  5         24  
771 5         407 eval{$ffi->attach('OGR_G_ConvexHull' => [qw/opaque/] => 'opaque');};
  5         48  
772 5         529 eval{$ffi->attach('OGR_G_Buffer' => [qw/opaque double int/] => 'opaque');};
  5         33  
773 5         474 eval{$ffi->attach('OGR_G_Intersection' => [qw/opaque opaque/] => 'opaque');};
  5         22  
774 5         497 eval{$ffi->attach('OGR_G_Union' => [qw/opaque opaque/] => 'opaque');};
  5         31  
775 5         477 eval{$ffi->attach('OGR_G_UnionCascaded' => [qw/opaque/] => 'opaque');};
  5         32  
776 5         404 eval{$ffi->attach('OGR_G_PointOnSurface' => [qw/opaque/] => 'opaque');};
  5         21  
777 5         376 eval{$ffi->attach('OGR_G_Difference' => [qw/opaque opaque/] => 'opaque');};
  5         31  
778 5         455 eval{$ffi->attach('OGR_G_SymDifference' => [qw/opaque opaque/] => 'opaque');};
  5         62  
779 5         520 eval{$ffi->attach('OGR_G_Distance' => [qw/opaque opaque/] => 'double');};
  5         27  
780 5         460 eval{$ffi->attach('OGR_G_Distance3D' => [qw/opaque opaque/] => 'double');};
  5         33  
781 5         471 eval{$ffi->attach('OGR_G_Length' => [qw/opaque/] => 'double');};
  5         23  
782 5         418 eval{$ffi->attach('OGR_G_Area' => [qw/opaque/] => 'double');};
  5         23  
783 5         414 eval{$ffi->attach('OGR_G_Centroid' => [qw/opaque opaque/] => 'int');};
  5         23  
784 5         463 eval{$ffi->attach('OGR_G_Value' => [qw/opaque double/] => 'opaque');};
  5         24  
785 5         458 eval{$ffi->attach('OGR_G_Empty' => [qw/opaque/] => 'void');};
  5         23  
786 5         471 eval{$ffi->attach('OGR_G_IsEmpty' => [qw/opaque/] => 'int');};
  5         32  
787 5         473 eval{$ffi->attach('OGR_G_IsValid' => [qw/opaque/] => 'int');};
  5         25  
788 5         436 eval{$ffi->attach('OGR_G_IsSimple' => [qw/opaque/] => 'int');};
  5         24  
789 5         398 eval{$ffi->attach('OGR_G_IsRing' => [qw/opaque/] => 'int');};
  5         21  
790 5         467 eval{$ffi->attach('OGR_G_Polygonize' => [qw/opaque/] => 'opaque');};
  5         32  
791 5         410 eval{$ffi->attach('OGR_G_Intersect' => [qw/opaque opaque/] => 'int');};
  5         29  
792 5         404 eval{$ffi->attach('OGR_G_Equal' => [qw/opaque opaque/] => 'int');};
  5         31  
793 5         444 eval{$ffi->attach('OGR_G_SymmetricDifference' => [qw/opaque opaque/] => 'opaque');};
  5         42  
794 5         447 eval{$ffi->attach('OGR_G_GetArea' => [qw/opaque/] => 'double');};
  5         22  
795 5         446 eval{$ffi->attach('OGR_G_GetBoundary' => [qw/opaque/] => 'opaque');};
  5         22  
796 5         374 eval{$ffi->attach('OGR_G_GetPointCount' => [qw/opaque/] => 'int');};
  5         60  
797 5         445 eval{$ffi->attach('OGR_G_GetPoints' => [qw/opaque opaque int opaque int opaque int/] => 'int');};
  5         47  
798 5         596 eval{$ffi->attach('OGR_G_GetPointsZM' => [qw/opaque opaque int opaque int opaque int opaque int/] => 'int');};
  5         49  
799 5         672 eval{$ffi->attach('OGR_G_GetX' => [qw/opaque int/] => 'double');};
  5         32  
800 5         439 eval{$ffi->attach('OGR_G_GetY' => [qw/opaque int/] => 'double');};
  5         28  
801 5         409 eval{$ffi->attach('OGR_G_GetZ' => [qw/opaque int/] => 'double');};
  5         24  
802 5         450 eval{$ffi->attach('OGR_G_GetM' => [qw/opaque int/] => 'double');};
  5         34  
803 5         411 eval{$ffi->attach('OGR_G_GetPoint' => [qw/opaque int double* double* double*/] => 'void');};
  5         23  
804 5         500 eval{$ffi->attach('OGR_G_GetPointZM' => [qw/opaque int double* double* double* double*/] => 'void');};
  5         37  
805 5         552 eval{$ffi->attach('OGR_G_SetPointCount' => [qw/opaque int/] => 'void');};
  5         33  
806 5         456 eval{$ffi->attach('OGR_G_SetPoint' => [qw/opaque int double double double/] => 'void');};
  5         29  
807 5         544 eval{$ffi->attach('OGR_G_SetPoint_2D' => [qw/opaque int double double/] => 'void');};
  5         35  
808 5         551 eval{$ffi->attach('OGR_G_SetPointM' => [qw/opaque int double double double/] => 'void');};
  5         27  
809 5         582 eval{$ffi->attach('OGR_G_SetPointZM' => [qw/opaque int double double double double/] => 'void');};
  5         29  
810 5         527 eval{$ffi->attach('OGR_G_AddPoint' => [qw/opaque double double double/] => 'void');};
  5         41  
811 5         515 eval{$ffi->attach('OGR_G_AddPoint_2D' => [qw/opaque double double/] => 'void');};
  5         26  
812 5         454 eval{$ffi->attach('OGR_G_AddPointM' => [qw/opaque double double double/] => 'void');};
  5         52  
813 5         483 eval{$ffi->attach('OGR_G_AddPointZM' => [qw/opaque double double double double/] => 'void');};
  5         49  
814 5         585 eval{$ffi->attach('OGR_G_SetPoints' => [qw/opaque int opaque int opaque int opaque int/] => 'void');};
  5         32  
815 5         579 eval{$ffi->attach('OGR_G_SetPointsZM' => [qw/opaque int opaque int opaque int opaque int opaque int/] => 'void');};
  5         56  
816 5         651 eval{$ffi->attach('OGR_G_SwapXY' => [qw/opaque/] => 'void');};
  5         31  
817 5         398 eval{$ffi->attach('OGR_G_GetGeometryCount' => [qw/opaque/] => 'int');};
  5         19  
818 5         447 eval{$ffi->attach('OGR_G_GetGeometryRef' => [qw/opaque int/] => 'opaque');};
  5         34  
819 5         483 eval{$ffi->attach('OGR_G_AddGeometry' => [qw/opaque opaque/] => 'int');};
  5         31  
820 5         462 eval{$ffi->attach('OGR_G_AddGeometryDirectly' => [qw/opaque opaque/] => 'int');};
  5         22  
821 5         408 eval{$ffi->attach('OGR_G_RemoveGeometry' => [qw/opaque int int/] => 'int');};
  5         25  
822 5         477 eval{$ffi->attach('OGR_G_HasCurveGeometry' => [qw/opaque int/] => 'int');};
  5         25  
823 5         433 eval{$ffi->attach('OGR_G_GetLinearGeometry' => [qw/opaque double string_pointer/] => 'opaque');};
  5         44  
824 5         464 eval{$ffi->attach('OGR_G_GetCurveGeometry' => [qw/opaque string_pointer/] => 'opaque');};
  5         23  
825 5         459 eval{$ffi->attach('OGRBuildPolygonFromEdges' => [qw/opaque int int double int*/] => 'opaque');};
  5         25  
826 5         524 eval{$ffi->attach('OGRSetGenerate_DB2_V72_BYTE_ORDER' => [qw/int/] => 'int');};
  5         21  
827 5         388 eval{$ffi->attach('OGRGetGenerate_DB2_V72_BYTE_ORDER' => [] => 'int');};
  5         36  
828 5         396 eval{$ffi->attach('OGRSetNonLinearGeometriesEnabledFlag' => [qw/int/] => 'void');};
  5         26  
829 5         440 eval{$ffi->attach('OGRGetNonLinearGeometriesEnabledFlag' => [] => 'int');};
  5         20  
830 5         378 eval{$ffi->attach('OGR_Fld_Create' => ['string','unsigned int'] => 'opaque');};
  5         41  
831 5         557 eval{$ffi->attach('OGR_Fld_Destroy' => [qw/opaque/] => 'void');};
  5         36  
832 5         470 eval{$ffi->attach('OGR_Fld_SetName' => [qw/opaque string/] => 'void');};
  5         26  
833 5         513 eval{$ffi->attach('OGR_Fld_GetNameRef' => [qw/opaque/] => 'string');};
  5         25  
834 5         428 eval{$ffi->attach('OGR_Fld_GetType' => [qw/opaque/] => 'unsigned int');};
  5         36  
835 5         440 eval{$ffi->attach('OGR_Fld_SetType' => ['opaque','unsigned int'] => 'void');};
  5         24  
836 5         471 eval{$ffi->attach('OGR_Fld_GetSubType' => [qw/opaque/] => 'unsigned int');};
  5         24  
837 5         465 eval{$ffi->attach('OGR_Fld_SetSubType' => ['opaque','unsigned int'] => 'void');};
  5         48  
838 5         474 eval{$ffi->attach('OGR_Fld_GetJustify' => [qw/opaque/] => 'unsigned int');};
  5         31  
839 5         469 eval{$ffi->attach('OGR_Fld_SetJustify' => ['opaque','unsigned int'] => 'void');};
  5         26  
840 5         467 eval{$ffi->attach('OGR_Fld_GetWidth' => [qw/opaque/] => 'int');};
  5         23  
841 5         445 eval{$ffi->attach('OGR_Fld_SetWidth' => [qw/opaque int/] => 'void');};
  5         31  
842 5         503 eval{$ffi->attach('OGR_Fld_GetPrecision' => [qw/opaque/] => 'int');};
  5         26  
843 5         440 eval{$ffi->attach('OGR_Fld_SetPrecision' => [qw/opaque int/] => 'void');};
  5         32  
844 5         784 eval{$ffi->attach('OGR_Fld_Set' => ['opaque','string','unsigned int','int','int','unsigned int'] => 'void');};
  5         48  
845 5         569 eval{$ffi->attach('OGR_Fld_IsIgnored' => [qw/opaque/] => 'int');};
  5         22  
846 5         472 eval{$ffi->attach('OGR_Fld_SetIgnored' => [qw/opaque int/] => 'void');};
  5         231  
847 5         503 eval{$ffi->attach('OGR_Fld_IsNullable' => [qw/opaque/] => 'int');};
  5         24  
848 5         435 eval{$ffi->attach('OGR_Fld_SetNullable' => [qw/opaque int/] => 'void');};
  5         27  
849 5         450 eval{$ffi->attach('OGR_Fld_GetDefault' => [qw/opaque/] => 'string');};
  5         23  
850 5         554 eval{$ffi->attach('OGR_Fld_SetDefault' => [qw/opaque string/] => 'void');};
  5         33  
851 5         469 eval{$ffi->attach('OGR_Fld_IsDefaultDriverSpecific' => [qw/opaque/] => 'int');};
  5         25  
852 5         424 eval{$ffi->attach('OGR_GetFieldTypeName' => ['unsigned int'] => 'string');};
  5         24  
853 5         400 eval{$ffi->attach('OGR_GetFieldSubTypeName' => ['unsigned int'] => 'string');};
  5         81  
854 5         401 eval{$ffi->attach('OGR_AreTypeSubTypeCompatible' => ['unsigned int','unsigned int'] => 'int');};
  5         23  
855 5         404 eval{$ffi->attach('OGR_GFld_Create' => ['string','unsigned int'] => 'opaque');};
  5         35  
856 5         481 eval{$ffi->attach('OGR_GFld_Destroy' => [qw/opaque/] => 'void');};
  5         24  
857 5         411 eval{$ffi->attach('OGR_GFld_SetName' => [qw/opaque string/] => 'void');};
  5         24  
858 5         437 eval{$ffi->attach('OGR_GFld_GetNameRef' => [qw/opaque/] => 'string');};
  5         28  
859 5         432 eval{$ffi->attach('OGR_GFld_GetType' => [qw/opaque/] => 'unsigned int');};
  5         25  
860 5         473 eval{$ffi->attach('OGR_GFld_SetType' => ['opaque','unsigned int'] => 'void');};
  5         54  
861 5         483 eval{$ffi->attach('OGR_GFld_GetSpatialRef' => [qw/opaque/] => 'opaque');};
  5         39  
862 5         454 eval{$ffi->attach('OGR_GFld_SetSpatialRef' => [qw/opaque opaque/] => 'void');};
  5         36  
863 5         434 eval{$ffi->attach('OGR_GFld_IsNullable' => [qw/opaque/] => 'int');};
  5         20  
864 5         419 eval{$ffi->attach('OGR_GFld_SetNullable' => [qw/opaque int/] => 'void');};
  5         27  
865 5         438 eval{$ffi->attach('OGR_GFld_IsIgnored' => [qw/opaque/] => 'int');};
  5         34  
866 5         444 eval{$ffi->attach('OGR_GFld_SetIgnored' => [qw/opaque int/] => 'void');};
  5         26  
867 5         863 eval{$ffi->attach('OGR_FD_Create' => [qw/string/] => 'opaque');};
  5         24  
868 5         505 eval{$ffi->attach('OGR_FD_Destroy' => [qw/opaque/] => 'void');};
  5         45  
869 5         438 eval{$ffi->attach('OGR_FD_Release' => [qw/opaque/] => 'void');};
  5         31  
870 5         394 eval{$ffi->attach('OGR_FD_GetName' => [qw/opaque/] => 'string');};
  5         21  
871 5         468 eval{$ffi->attach('OGR_FD_GetFieldCount' => [qw/opaque/] => 'int');};
  5         22  
872 5         447 eval{$ffi->attach('OGR_FD_GetFieldDefn' => [qw/opaque int/] => 'opaque');};
  5         33  
873 5         522 eval{$ffi->attach('OGR_FD_GetFieldIndex' => [qw/opaque string/] => 'int');};
  5         26  
874 5         438 eval{$ffi->attach('OGR_FD_AddFieldDefn' => [qw/opaque opaque/] => 'void');};
  5         33  
875 5         465 eval{$ffi->attach('OGR_FD_DeleteFieldDefn' => [qw/opaque int/] => 'int');};
  5         31  
876 5         462 eval{$ffi->attach('OGR_FD_ReorderFieldDefns' => [qw/opaque int*/] => 'int');};
  5         37  
877 5         455 eval{$ffi->attach('OGR_FD_GetGeomType' => [qw/opaque/] => 'unsigned int');};
  5         23  
878 5         437 eval{$ffi->attach('OGR_FD_SetGeomType' => ['opaque','unsigned int'] => 'void');};
  5         27  
879 5         459 eval{$ffi->attach('OGR_FD_IsGeometryIgnored' => [qw/opaque/] => 'int');};
  5         30  
880 5         433 eval{$ffi->attach('OGR_FD_SetGeometryIgnored' => [qw/opaque int/] => 'void');};
  5         31  
881 5         436 eval{$ffi->attach('OGR_FD_IsStyleIgnored' => [qw/opaque/] => 'int');};
  5         20  
882 5         464 eval{$ffi->attach('OGR_FD_SetStyleIgnored' => [qw/opaque int/] => 'void');};
  5         33  
883 5         475 eval{$ffi->attach('OGR_FD_Reference' => [qw/opaque/] => 'int');};
  5         35  
884 5         439 eval{$ffi->attach('OGR_FD_Dereference' => [qw/opaque/] => 'int');};
  5         34  
885 5         444 eval{$ffi->attach('OGR_FD_GetReferenceCount' => [qw/opaque/] => 'int');};
  5         28  
886 5         405 eval{$ffi->attach('OGR_FD_GetGeomFieldCount' => [qw/opaque/] => 'int');};
  5         56  
887 5         455 eval{$ffi->attach('OGR_FD_GetGeomFieldDefn' => [qw/opaque int/] => 'opaque');};
  5         37  
888 5         459 eval{$ffi->attach('OGR_FD_GetGeomFieldIndex' => [qw/opaque string/] => 'int');};
  5         28  
889 5         511 eval{$ffi->attach('OGR_FD_AddGeomFieldDefn' => [qw/opaque opaque/] => 'void');};
  5         25  
890 5         472 eval{$ffi->attach('OGR_FD_DeleteGeomFieldDefn' => [qw/opaque int/] => 'int');};
  5         29  
891 5         516 eval{$ffi->attach('OGR_FD_IsSame' => [qw/opaque opaque/] => 'int');};
  5         38  
892 5         453 eval{$ffi->attach('OGR_F_Create' => [qw/opaque/] => 'opaque');};
  5         30  
893 5         478 eval{$ffi->attach('OGR_F_Destroy' => [qw/opaque/] => 'void');};
  5         42  
894 5         453 eval{$ffi->attach('OGR_F_GetDefnRef' => [qw/opaque/] => 'opaque');};
  5         28  
895 5         461 eval{$ffi->attach('OGR_F_SetGeometryDirectly' => [qw/opaque opaque/] => 'int');};
  5         27  
896 5         434 eval{$ffi->attach('OGR_F_SetGeometry' => [qw/opaque opaque/] => 'int');};
  5         27  
897 5         424 eval{$ffi->attach('OGR_F_GetGeometryRef' => [qw/opaque/] => 'opaque');};
  5         22  
898 5         411 eval{$ffi->attach('OGR_F_StealGeometry' => [qw/opaque/] => 'opaque');};
  5         41  
899 5         414 eval{$ffi->attach('OGR_F_Clone' => [qw/opaque/] => 'opaque');};
  5         21  
900 5         421 eval{$ffi->attach('OGR_F_Equal' => [qw/opaque opaque/] => 'int');};
  5         31  
901 5         484 eval{$ffi->attach('OGR_F_GetFieldCount' => [qw/opaque/] => 'int');};
  5         34  
902 5         430 eval{$ffi->attach('OGR_F_GetFieldDefnRef' => [qw/opaque int/] => 'opaque');};
  5         26  
903 5         459 eval{$ffi->attach('OGR_F_GetFieldIndex' => [qw/opaque string/] => 'int');};
  5         26  
904 5         467 eval{$ffi->attach('OGR_F_IsFieldSet' => [qw/opaque int/] => 'int');};
  5         47  
905 5         505 eval{$ffi->attach('OGR_F_UnsetField' => [qw/opaque int/] => 'void');};
  5         37  
906 5         501 eval{$ffi->attach('OGR_F_IsFieldNull' => [qw/opaque int/] => 'int');};
  5         27  
907 5         497 eval{$ffi->attach('OGR_F_IsFieldSetAndNotNull' => [qw/opaque int/] => 'int');};
  5         29  
908 5         471 eval{$ffi->attach('OGR_F_SetFieldNull' => [qw/opaque int/] => 'void');};
  5         29  
909 5         443 eval{$ffi->attach('OGR_F_GetRawFieldRef' => [qw/opaque int/] => 'opaque');};
  5         31  
910 5         410 eval{$ffi->attach('OGR_RawField_IsUnset' => [qw/opaque/] => 'int');};
  5         21  
911 5         390 eval{$ffi->attach('OGR_RawField_IsNull' => [qw/opaque/] => 'int');};
  5         30  
912 5         390 eval{$ffi->attach('OGR_RawField_SetUnset' => [qw/opaque/] => 'void');};
  5         39  
913 5         408 eval{$ffi->attach('OGR_RawField_SetNull' => [qw/opaque/] => 'void');};
  5         22  
914 5         374 eval{$ffi->attach('OGR_F_GetFieldAsInteger' => [qw/opaque int/] => 'int');};
  5         21  
915 5         479 eval{$ffi->attach('OGR_F_GetFieldAsInteger64' => [qw/opaque int/] => 'sint64');};
  5         26  
916 5         432 eval{$ffi->attach('OGR_F_GetFieldAsDouble' => [qw/opaque int/] => 'double');};
  5         24  
917 5         398 eval{$ffi->attach('OGR_F_GetFieldAsString' => [qw/opaque int/] => 'string');};
  5         21  
918 5         446 eval{$ffi->attach('OGR_F_GetFieldAsIntegerList' => [qw/opaque int int*/] => 'pointer');};
  5         33  
919 5         472 eval{$ffi->attach('OGR_F_GetFieldAsInteger64List' => [qw/opaque int int*/] => 'pointer');};
  5         30  
920 5         472 eval{$ffi->attach('OGR_F_GetFieldAsDoubleList' => [qw/opaque int int*/] => 'pointer');};
  5         26  
921 5         455 eval{$ffi->attach('OGR_F_GetFieldAsStringList' => [qw/opaque int/] => 'opaque');};
  5         21  
922 5         445 eval{$ffi->attach('OGR_F_GetFieldAsBinary' => [qw/opaque int int*/] => 'pointer');};
  5         45  
923 5         472 eval{$ffi->attach('OGR_F_GetFieldAsDateTime' => [qw/opaque int int* int* int* int* int* int* int*/] => 'int');};
  5         41  
924 5         688 eval{$ffi->attach('OGR_F_GetFieldAsDateTimeEx' => [qw/opaque int int* int* int* int* int* float* int*/] => 'int');};
  5         47  
925 5         655 eval{$ffi->attach('OGR_F_SetFieldInteger' => [qw/opaque int int/] => 'void');};
  5         38  
926 5         445 eval{$ffi->attach('OGR_F_SetFieldInteger64' => [qw/opaque int sint64/] => 'void');};
  5         40  
927 5         495 eval{$ffi->attach('OGR_F_SetFieldDouble' => [qw/opaque int double/] => 'void');};
  5         25  
928 5         468 eval{$ffi->attach('OGR_F_SetFieldString' => [qw/opaque int string/] => 'void');};
  5         40  
929 5         484 eval{$ffi->attach('OGR_F_SetFieldIntegerList' => [qw/opaque int int int[]/] => 'void');};
  5         25  
930 5         900 eval{$ffi->attach('OGR_F_SetFieldInteger64List' => [qw/opaque int int sint64[]/] => 'void');};
  5         37  
931 5         770 eval{$ffi->attach('OGR_F_SetFieldDoubleList' => [qw/opaque int int double[]/] => 'void');};
  5         27  
932 5         739 eval{$ffi->attach('OGR_F_SetFieldStringList' => [qw/opaque int opaque/] => 'void');};
  5         25  
933 5         428 eval{$ffi->attach('OGR_F_SetFieldRaw' => [qw/opaque int opaque/] => 'void');};
  5         64  
934 5         476 eval{$ffi->attach('OGR_F_SetFieldBinary' => [qw/opaque int int pointer/] => 'void');};
  5         25  
935 5         464 eval{$ffi->attach('OGR_F_SetFieldDateTime' => [qw/opaque int int int int int int int int/] => 'void');};
  5         31  
936 5         594 eval{$ffi->attach('OGR_F_SetFieldDateTimeEx' => [qw/opaque int int int int int int float int/] => 'void');};
  5         39  
937 5         886 eval{$ffi->attach('OGR_F_GetGeomFieldCount' => [qw/opaque/] => 'int');};
  5         26  
938 5         416 eval{$ffi->attach('OGR_F_GetGeomFieldDefnRef' => [qw/opaque int/] => 'opaque');};
  5         32  
939 5         447 eval{$ffi->attach('OGR_F_GetGeomFieldIndex' => [qw/opaque string/] => 'int');};
  5         67  
940 5         461 eval{$ffi->attach('OGR_F_GetGeomFieldRef' => [qw/opaque int/] => 'opaque');};
  5         26  
941 5         438 eval{$ffi->attach('OGR_F_SetGeomFieldDirectly' => [qw/opaque int opaque/] => 'int');};
  5         26  
942 5         493 eval{$ffi->attach('OGR_F_SetGeomField' => [qw/opaque int opaque/] => 'int');};
  5         26  
943 5         505 eval{$ffi->attach('OGR_F_GetFID' => [qw/opaque/] => 'sint64');};
  5         38  
944 5         440 eval{$ffi->attach('OGR_F_SetFID' => [qw/opaque sint64/] => 'int');};
  5         33  
945 5         429 eval{$ffi->attach('OGR_F_DumpReadable' => [qw/opaque opaque/] => 'void');};
  5         33  
946 5         465 eval{$ffi->attach('OGR_F_SetFrom' => [qw/opaque opaque int/] => 'int');};
  5         37  
947 5         451 eval{$ffi->attach('OGR_F_SetFromWithMap' => [qw/opaque opaque int int*/] => 'int');};
  5         7048  
948 5         529 eval{$ffi->attach('OGR_F_GetStyleString' => [qw/opaque/] => 'string');};
  5         21  
949 5         375 eval{$ffi->attach('OGR_F_SetStyleString' => [qw/opaque string/] => 'void');};
  5         35  
950 5         418 eval{$ffi->attach('OGR_F_SetStyleStringDirectly' => [qw/opaque string/] => 'void');};
  5         24  
951 5         407 eval{$ffi->attach('OGR_F_GetStyleTable' => [qw/opaque/] => 'opaque');};
  5         30  
952 5         438 eval{$ffi->attach('OGR_F_SetStyleTableDirectly' => [qw/opaque opaque/] => 'void');};
  5         40  
953 5         473 eval{$ffi->attach('OGR_F_SetStyleTable' => [qw/opaque opaque/] => 'void');};
  5         29  
954 5         430 eval{$ffi->attach('OGR_F_GetNativeData' => [qw/opaque/] => 'string');};
  5         46  
955 5         426 eval{$ffi->attach('OGR_F_SetNativeData' => [qw/opaque string/] => 'void');};
  5         38  
956 5         420 eval{$ffi->attach('OGR_F_GetNativeMediaType' => [qw/opaque/] => 'string');};
  5         25  
957 5         447 eval{$ffi->attach('OGR_F_SetNativeMediaType' => [qw/opaque string/] => 'void');};
  5         31  
958 5         471 eval{$ffi->attach('OGR_F_FillUnsetWithDefault' => [qw/opaque int string_pointer/] => 'void');};
  5         38  
959 5         485 eval{$ffi->attach('OGR_F_Validate' => [qw/opaque int int/] => 'int');};
  5         30  
960 5         451 eval{$ffi->attach('OGR_L_GetName' => [qw/opaque/] => 'string');};
  5         19  
961 5         372 eval{$ffi->attach('OGR_L_GetGeomType' => [qw/opaque/] => 'unsigned int');};
  5         29  
962 5         431 eval{$ffi->attach('OGR_L_GetSpatialFilter' => [qw/opaque/] => 'opaque');};
  5         22  
963 5         453 eval{$ffi->attach('OGR_L_SetSpatialFilter' => [qw/opaque opaque/] => 'void');};
  5         32  
964 5         434 eval{$ffi->attach('OGR_L_SetSpatialFilterRect' => [qw/opaque double double double double/] => 'void');};
  5         49  
965 5         519 eval{$ffi->attach('OGR_L_SetSpatialFilterEx' => [qw/opaque int opaque/] => 'void');};
  5         31  
966 5         439 eval{$ffi->attach('OGR_L_SetSpatialFilterRectEx' => [qw/opaque int double double double double/] => 'void');};
  5         26  
967 5         519 eval{$ffi->attach('OGR_L_SetAttributeFilter' => [qw/opaque string/] => 'int');};
  5         51  
968 5         430 eval{$ffi->attach('OGR_L_ResetReading' => [qw/opaque/] => 'void');};
  5         19  
969 5         440 eval{$ffi->attach('OGR_L_GetNextFeature' => [qw/opaque/] => 'opaque');};
  5         31  
970 5         437 eval{$ffi->attach('OGR_L_SetNextByIndex' => [qw/opaque sint64/] => 'int');};
  5         32  
971 5         443 eval{$ffi->attach('OGR_L_GetFeature' => [qw/opaque sint64/] => 'opaque');};
  5         25  
972 5         466 eval{$ffi->attach('OGR_L_SetFeature' => [qw/opaque opaque/] => 'int');};
  5         29  
973 5         462 eval{$ffi->attach('OGR_L_CreateFeature' => [qw/opaque opaque/] => 'int');};
  5         36  
974 5         480 eval{$ffi->attach('OGR_L_DeleteFeature' => [qw/opaque sint64/] => 'int');};
  5         57  
975 5         480 eval{$ffi->attach('OGR_L_GetLayerDefn' => [qw/opaque/] => 'opaque');};
  5         22  
976 5         448 eval{$ffi->attach('OGR_L_GetSpatialRef' => [qw/opaque/] => 'opaque');};
  5         45  
977 5         439 eval{$ffi->attach('OGR_L_FindFieldIndex' => [qw/opaque string int/] => 'int');};
  5         25  
978 5         503 eval{$ffi->attach('OGR_L_GetFeatureCount' => [qw/opaque int/] => 'sint64');};
  5         35  
979 5         430 eval{$ffi->attach('OGR_L_GetExtent' => [qw/opaque double[4] int/] => 'int');};
  5         30  
980 5         475 eval{$ffi->attach('OGR_L_GetExtentEx' => [qw/opaque int double[4] int/] => 'int');};
  5         40  
981 5         504 eval{$ffi->attach('OGR_L_TestCapability' => [qw/opaque string/] => 'int');};
  5         33  
982 5         417 eval{$ffi->attach('OGR_L_CreateField' => [qw/opaque opaque int/] => 'int');};
  5         32  
983 5         529 eval{$ffi->attach('OGR_L_CreateGeomField' => [qw/opaque opaque int/] => 'int');};
  5         38  
984 5         554 eval{$ffi->attach('OGR_L_DeleteField' => [qw/opaque int/] => 'int');};
  5         49  
985 5         496 eval{$ffi->attach('OGR_L_ReorderFields' => [qw/opaque int*/] => 'int');};
  5         44  
986 5         433 eval{$ffi->attach('OGR_L_ReorderField' => [qw/opaque int int/] => 'int');};
  5         24  
987 5         428 eval{$ffi->attach('OGR_L_AlterFieldDefn' => [qw/opaque int opaque int/] => 'int');};
  5         27  
988 5         490 eval{$ffi->attach('OGR_L_StartTransaction' => [qw/opaque/] => 'int');};
  5         26  
989 5         405 eval{$ffi->attach('OGR_L_CommitTransaction' => [qw/opaque/] => 'int');};
  5         23  
990 5         399 eval{$ffi->attach('OGR_L_RollbackTransaction' => [qw/opaque/] => 'int');};
  5         23  
991 5         428 eval{$ffi->attach('OGR_L_Reference' => [qw/opaque/] => 'int');};
  5         32  
992 5         461 eval{$ffi->attach('OGR_L_Dereference' => [qw/opaque/] => 'int');};
  5         29  
993 5         428 eval{$ffi->attach('OGR_L_GetRefCount' => [qw/opaque/] => 'int');};
  5         22  
994 5         440 eval{$ffi->attach('OGR_L_SyncToDisk' => [qw/opaque/] => 'int');};
  5         21  
995 5         414 eval{$ffi->attach('OGR_L_GetFeaturesRead' => [qw/opaque/] => 'sint64');};
  5         24  
996 5         422 eval{$ffi->attach('OGR_L_GetFIDColumn' => [qw/opaque/] => 'string');};
  5         27  
997 5         408 eval{$ffi->attach('OGR_L_GetGeometryColumn' => [qw/opaque/] => 'string');};
  5         32  
998 5         420 eval{$ffi->attach('OGR_L_GetStyleTable' => [qw/opaque/] => 'opaque');};
  5         21  
999 5         375 eval{$ffi->attach('OGR_L_SetStyleTableDirectly' => [qw/opaque opaque/] => 'void');};
  5         22  
1000 5         412 eval{$ffi->attach('OGR_L_SetStyleTable' => [qw/opaque opaque/] => 'void');};
  5         47  
1001 5         416 eval{$ffi->attach('OGR_L_SetIgnoredFields' => [qw/opaque string/] => 'int');};
  5         23  
1002 5         449 eval{$ffi->attach('OGR_L_Intersection' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         34  
1003 5         932 eval{$ffi->attach('OGR_L_Union' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         35  
1004 5         628 eval{$ffi->attach('OGR_L_SymDifference' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         35  
1005 5         522 eval{$ffi->attach('OGR_L_Identity' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         26  
1006 5         524 eval{$ffi->attach('OGR_L_Update' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         25  
1007 5         516 eval{$ffi->attach('OGR_L_Clip' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         26  
1008 5         624 eval{$ffi->attach('OGR_L_Erase' => [qw/opaque opaque opaque opaque GDALProgressFunc opaque/] => 'int');};
  5         71  
1009 5         563 eval{$ffi->attach('OGR_DS_Destroy' => [qw/opaque/] => 'void');};
  5         37  
1010 5         399 eval{$ffi->attach('OGR_DS_GetName' => [qw/opaque/] => 'string');};
  5         22  
1011 5         369 eval{$ffi->attach('OGR_DS_GetLayerCount' => [qw/opaque/] => 'int');};
  5         21  
1012 5         403 eval{$ffi->attach('OGR_DS_GetLayer' => [qw/opaque int/] => 'opaque');};
  5         31  
1013 5         474 eval{$ffi->attach('OGR_DS_GetLayerByName' => [qw/opaque string/] => 'opaque');};
  5         58  
1014 5         459 eval{$ffi->attach('OGR_DS_DeleteLayer' => [qw/opaque int/] => 'int');};
  5         40  
1015 5         449 eval{$ffi->attach('OGR_DS_GetDriver' => [qw/opaque/] => 'opaque');};
  5         22  
1016 5         385 eval{$ffi->attach('OGR_DS_CreateLayer' => ['opaque','string','opaque','unsigned int','opaque'] => 'opaque');};
  5         34  
1017 5         488 eval{$ffi->attach('OGR_DS_CopyLayer' => [qw/opaque opaque string opaque/] => 'opaque');};
  5         24  
1018 5         472 eval{$ffi->attach('OGR_DS_TestCapability' => [qw/opaque string/] => 'int');};
  5         23  
1019 5         407 eval{$ffi->attach('OGR_DS_ExecuteSQL' => [qw/opaque string opaque string/] => 'opaque');};
  5         25  
1020 5         470 eval{$ffi->attach('OGR_DS_ReleaseResultSet' => [qw/opaque opaque/] => 'void');};
  5         41  
1021 5         435 eval{$ffi->attach('OGR_DS_Reference' => [qw/opaque/] => 'int');};
  5         29  
1022 5         394 eval{$ffi->attach('OGR_DS_Dereference' => [qw/opaque/] => 'int');};
  5         23  
1023 5         380 eval{$ffi->attach('OGR_DS_GetRefCount' => [qw/opaque/] => 'int');};
  5         40  
1024 5         402 eval{$ffi->attach('OGR_DS_GetSummaryRefCount' => [qw/opaque/] => 'int');};
  5         22  
1025 5         398 eval{$ffi->attach('OGR_DS_SyncToDisk' => [qw/opaque/] => 'int');};
  5         31  
1026 5         473 eval{$ffi->attach('OGR_DS_GetStyleTable' => [qw/opaque/] => 'opaque');};
  5         31  
1027 5         435 eval{$ffi->attach('OGR_DS_SetStyleTableDirectly' => [qw/opaque opaque/] => 'void');};
  5         23  
1028 5         414 eval{$ffi->attach('OGR_DS_SetStyleTable' => [qw/opaque opaque/] => 'void');};
  5         22  
1029 5         399 eval{$ffi->attach('OGR_Dr_GetName' => [qw/opaque/] => 'string');};
  5         23  
1030 5         386 eval{$ffi->attach('OGR_Dr_Open' => [qw/opaque string int/] => 'opaque');};
  5         25  
1031 5         434 eval{$ffi->attach('OGR_Dr_TestCapability' => [qw/opaque string/] => 'int');};
  5         34  
1032 5         429 eval{$ffi->attach('OGR_Dr_CreateDataSource' => [qw/opaque string string_pointer/] => 'opaque');};
  5         33  
1033 5         485 eval{$ffi->attach('OGR_Dr_CopyDataSource' => [qw/opaque opaque string string_pointer/] => 'opaque');};
  5         25  
1034 5         468 eval{$ffi->attach('OGR_Dr_DeleteDataSource' => [qw/opaque string/] => 'int');};
  5         22  
1035 5         778 eval{$ffi->attach('OGROpen' => [qw/string int uint64*/] => 'opaque');};
  5         22  
1036 5         448 eval{$ffi->attach('OGROpenShared' => [qw/string int uint64*/] => 'opaque');};
  5         31  
1037 5         517 eval{$ffi->attach('OGRReleaseDataSource' => [qw/opaque/] => 'int');};
  5         31  
1038 5         407 eval{$ffi->attach('OGRRegisterDriver' => [qw/opaque/] => 'void');};
  5         55  
1039 5         411 eval{$ffi->attach('OGRDeregisterDriver' => [qw/opaque/] => 'void');};
  5         21  
1040 5         394 eval{$ffi->attach('OGRGetDriverCount' => [] => 'int');};
  5         19  
1041 5         423 eval{$ffi->attach('OGRGetDriver' => [qw/int/] => 'opaque');};
  5         41  
1042 5         420 eval{$ffi->attach('OGRGetDriverByName' => [qw/string/] => 'opaque');};
  5         33  
1043 5         442 eval{$ffi->attach('OGRGetOpenDSCount' => [] => 'int');};
  5         21  
1044 5         1017 eval{$ffi->attach('OGRGetOpenDS' => [qw/int/] => 'opaque');};
  5         27  
1045 5         569 eval{$ffi->attach('OGRRegisterAll' => [] => 'void');};
  5         29  
1046 5         387 eval{$ffi->attach('OGRCleanupAll' => [] => 'void');};
  5         21  
1047 5         342 eval{$ffi->attach('OGR_SM_Create' => [qw/opaque/] => 'opaque');};
  5         23  
1048 5         376 eval{$ffi->attach('OGR_SM_Destroy' => [qw/opaque/] => 'void');};
  5         25  
1049 5         411 eval{$ffi->attach('OGR_SM_InitFromFeature' => [qw/opaque opaque/] => 'string');};
  5         21  
1050 5         427 eval{$ffi->attach('OGR_SM_InitStyleString' => [qw/opaque string/] => 'int');};
  5         39  
1051 5         454 eval{$ffi->attach('OGR_SM_GetPartCount' => [qw/opaque string/] => 'int');};
  5         20  
1052 5         404 eval{$ffi->attach('OGR_SM_GetPart' => [qw/opaque int string/] => 'opaque');};
  5         22  
1053 5         441 eval{$ffi->attach('OGR_SM_AddPart' => [qw/opaque opaque/] => 'int');};
  5         23  
1054 5         404 eval{$ffi->attach('OGR_SM_AddStyle' => [qw/opaque string string/] => 'int');};
  5         22  
1055 5         448 eval{$ffi->attach('OGR_ST_Create' => ['unsigned int'] => 'opaque');};
  5         20  
1056 5         401 eval{$ffi->attach('OGR_ST_Destroy' => [qw/opaque/] => 'void');};
  5         39  
1057 5         467 eval{$ffi->attach('OGR_ST_GetType' => [qw/opaque/] => 'unsigned int');};
  5         31  
1058 5         382 eval{$ffi->attach('OGR_ST_GetUnit' => [qw/opaque/] => 'unsigned int');};
  5         23  
1059 5         383 eval{$ffi->attach('OGR_ST_SetUnit' => ['opaque','unsigned int','double'] => 'void');};
  5         78  
1060 5         476 eval{$ffi->attach('OGR_ST_GetParamStr' => [qw/opaque int int*/] => 'string');};
  5         24  
1061 5         438 eval{$ffi->attach('OGR_ST_GetParamNum' => [qw/opaque int int*/] => 'int');};
  5         23  
1062 5         427 eval{$ffi->attach('OGR_ST_GetParamDbl' => [qw/opaque int int*/] => 'double');};
  5         20  
1063 5         428 eval{$ffi->attach('OGR_ST_SetParamStr' => [qw/opaque int string/] => 'void');};
  5         33  
1064 5         446 eval{$ffi->attach('OGR_ST_SetParamNum' => [qw/opaque int int/] => 'void');};
  5         21  
1065 5         465 eval{$ffi->attach('OGR_ST_SetParamDbl' => [qw/opaque int double/] => 'void');};
  5         43  
1066 5         456 eval{$ffi->attach('OGR_ST_GetStyleString' => [qw/opaque/] => 'string');};
  5         54  
1067 5         420 eval{$ffi->attach('OGR_ST_GetRGBFromString' => [qw/opaque string int* int* int* int*/] => 'int');};
  5         34  
1068 5         570 eval{$ffi->attach('OGR_STBL_Create' => [] => 'opaque');};
  5         19  
1069 5         370 eval{$ffi->attach('OGR_STBL_Destroy' => [qw/opaque/] => 'void');};
  5         82  
1070 5         444 eval{$ffi->attach('OGR_STBL_AddStyle' => [qw/opaque string string/] => 'int');};
  5         23  
1071 5         452 eval{$ffi->attach('OGR_STBL_SaveStyleTable' => [qw/opaque string/] => 'int');};
  5         25  
1072 5         430 eval{$ffi->attach('OGR_STBL_LoadStyleTable' => [qw/opaque string/] => 'int');};
  5         32  
1073 5         454 eval{$ffi->attach('OGR_STBL_Find' => [qw/opaque string/] => 'string');};
  5         45  
1074 5         481 eval{$ffi->attach('OGR_STBL_ResetStyleStringReading' => [qw/opaque/] => 'void');};
  5         24  
1075 5         384 eval{$ffi->attach('OGR_STBL_GetNextStyle' => [qw/opaque/] => 'string');};
  5         30  
1076 5         416 eval{$ffi->attach('OGR_STBL_GetLastStyleName' => [qw/opaque/] => 'string');};
  5         57  
1077             # from ogr/ogr_srs_api.h
1078 5         425 eval{$ffi->attach('OSRAxisEnumToName' => ['unsigned int'] => 'string');};
  5         30  
1079 5         435 eval{$ffi->attach('OSRNewSpatialReference' => [qw/string/] => 'opaque');};
  5         33  
1080 5         447 eval{$ffi->attach('OSRCloneGeogCS' => [qw/opaque/] => 'opaque');};
  5         30  
1081 5         444 eval{$ffi->attach('OSRClone' => [qw/opaque/] => 'opaque');};
  5         48  
1082 5         462 eval{$ffi->attach('OSRDestroySpatialReference' => [qw/opaque/] => 'void');};
  5         24  
1083 5         448 eval{$ffi->attach('OSRReference' => [qw/opaque/] => 'int');};
  5         35  
1084 5         446 eval{$ffi->attach('OSRDereference' => [qw/opaque/] => 'int');};
  5         23  
1085 5         456 eval{$ffi->attach('OSRRelease' => [qw/opaque/] => 'void');};
  5         39  
1086 5         440 eval{$ffi->attach('OSRValidate' => [qw/opaque/] => 'int');};
  5         33  
1087 5         432 eval{$ffi->attach('OSRFixupOrdering' => [qw/opaque/] => 'int');};
  5         29  
1088 5         405 eval{$ffi->attach('OSRFixup' => [qw/opaque/] => 'int');};
  5         23  
1089 5         406 eval{$ffi->attach('OSRStripCTParms' => [qw/opaque/] => 'int');};
  5         21  
1090 5         406 eval{$ffi->attach('OSRImportFromEPSG' => [qw/opaque int/] => 'int');};
  5         22  
1091 5         426 eval{$ffi->attach('OSRImportFromEPSGA' => [qw/opaque int/] => 'int');};
  5         22  
1092 5         414 eval{$ffi->attach('OSRImportFromWkt' => [qw/opaque string_pointer/] => 'int');};
  5         55  
1093 5         526 eval{$ffi->attach('OSRImportFromProj4' => [qw/opaque string/] => 'int');};
  5         23  
1094 5         444 eval{$ffi->attach('OSRImportFromESRI' => [qw/opaque string_pointer/] => 'int');};
  5         21  
1095 5         485 eval{$ffi->attach('OSRImportFromPCI' => [qw/opaque string string double*/] => 'int');};
  5         35  
1096 5         522 eval{$ffi->attach('OSRImportFromUSGS' => [qw/opaque long long double* long/] => 'int');};
  5         60  
1097 5         738 eval{$ffi->attach('OSRImportFromXML' => [qw/opaque string/] => 'int');};
  5         45  
1098 5         594 eval{$ffi->attach('OSRImportFromDict' => [qw/opaque string string/] => 'int');};
  5         42  
1099 5         500 eval{$ffi->attach('OSRImportFromPanorama' => [qw/opaque long long long double*/] => 'int');};
  5         45  
1100 5         579 eval{$ffi->attach('OSRImportFromOzi' => [qw/opaque string_pointer/] => 'int');};
  5         32  
1101 5         432 eval{$ffi->attach('OSRImportFromMICoordSys' => [qw/opaque string/] => 'int');};
  5         23  
1102 5         421 eval{$ffi->attach('OSRImportFromERM' => [qw/opaque string string string/] => 'int');};
  5         27  
1103 5         459 eval{$ffi->attach('OSRImportFromUrl' => [qw/opaque string/] => 'int');};
  5         23  
1104 5         430 eval{$ffi->attach('OSRExportToWkt' => [qw/opaque string_pointer/] => 'int');};
  5         36  
1105 5         439 eval{$ffi->attach('OSRExportToPrettyWkt' => [qw/opaque string_pointer int/] => 'int');};
  5         33  
1106 5         458 eval{$ffi->attach('OSRExportToProj4' => [qw/opaque string_pointer/] => 'int');};
  5         30  
1107 5         427 eval{$ffi->attach('OSRExportToPCI' => [qw/opaque string_pointer string_pointer double*/] => 'int');};
  5         30  
1108 5         474 eval{$ffi->attach('OSRExportToUSGS' => [qw/opaque long* long* double* long*/] => 'int');};
  5         48  
1109 5         701 eval{$ffi->attach('OSRExportToXML' => [qw/opaque string_pointer string/] => 'int');};
  5         47  
1110 5         507 eval{$ffi->attach('OSRExportToPanorama' => [qw/opaque long* long* long* long* double*/] => 'int');};
  5         47  
1111 5         593 eval{$ffi->attach('OSRExportToMICoordSys' => [qw/opaque string_pointer/] => 'int');};
  5         25  
1112 5         413 eval{$ffi->attach('OSRExportToERM' => [qw/opaque string string string/] => 'int');};
  5         26  
1113 5         448 eval{$ffi->attach('OSRMorphToESRI' => [qw/opaque/] => 'int');};
  5         32  
1114 5         384 eval{$ffi->attach('OSRMorphFromESRI' => [qw/opaque/] => 'int');};
  5         28  
1115 5         443 eval{$ffi->attach('OSRConvertToOtherProjection' => [qw/opaque string string_pointer/] => 'opaque');};
  5         32  
1116 5         440 eval{$ffi->attach('OSRSetAttrValue' => [qw/opaque string string/] => 'int');};
  5         55  
1117 5         484 eval{$ffi->attach('OSRGetAttrValue' => [qw/opaque string int/] => 'string');};
  5         26  
1118 5         442 eval{$ffi->attach('OSRSetAngularUnits' => [qw/opaque string double/] => 'int');};
  5         22  
1119 5         428 eval{$ffi->attach('OSRGetAngularUnits' => [qw/opaque string_pointer/] => 'double');};
  5         31  
1120 5         490 eval{$ffi->attach('OSRSetLinearUnits' => [qw/opaque string double/] => 'int');};
  5         28  
1121 5         473 eval{$ffi->attach('OSRSetTargetLinearUnits' => [qw/opaque string string double/] => 'int');};
  5         44  
1122 5         471 eval{$ffi->attach('OSRSetLinearUnitsAndUpdateParameters' => [qw/opaque string double/] => 'int');};
  5         41  
1123 5         502 eval{$ffi->attach('OSRGetLinearUnits' => [qw/opaque string_pointer/] => 'double');};
  5         31  
1124 5         451 eval{$ffi->attach('OSRGetTargetLinearUnits' => [qw/opaque string string_pointer/] => 'double');};
  5         31  
1125 5         440 eval{$ffi->attach('OSRGetPrimeMeridian' => [qw/opaque string_pointer/] => 'double');};
  5         30  
1126 5         420 eval{$ffi->attach('OSRIsGeographic' => [qw/opaque/] => 'int');};
  5         22  
1127 5         382 eval{$ffi->attach('OSRIsLocal' => [qw/opaque/] => 'int');};
  5         38  
1128 5         428 eval{$ffi->attach('OSRIsProjected' => [qw/opaque/] => 'int');};
  5         62  
1129 5         457 eval{$ffi->attach('OSRIsCompound' => [qw/opaque/] => 'int');};
  5         22  
1130 5         399 eval{$ffi->attach('OSRIsGeocentric' => [qw/opaque/] => 'int');};
  5         20  
1131 5         370 eval{$ffi->attach('OSRIsVertical' => [qw/opaque/] => 'int');};
  5         30  
1132 5         417 eval{$ffi->attach('OSRIsSameGeogCS' => [qw/opaque opaque/] => 'int');};
  5         32  
1133 5         430 eval{$ffi->attach('OSRIsSameVertCS' => [qw/opaque opaque/] => 'int');};
  5         45  
1134 5         434 eval{$ffi->attach('OSRIsSame' => [qw/opaque opaque/] => 'int');};
  5         38  
1135 5         440 eval{$ffi->attach('OSRSetLocalCS' => [qw/opaque string/] => 'int');};
  5         23  
1136 5         408 eval{$ffi->attach('OSRSetProjCS' => [qw/opaque string/] => 'int');};
  5         28  
1137 5         407 eval{$ffi->attach('OSRSetGeocCS' => [qw/opaque string/] => 'int');};
  5         35  
1138 5         497 eval{$ffi->attach('OSRSetWellKnownGeogCS' => [qw/opaque string/] => 'int');};
  5         26  
1139 5         412 eval{$ffi->attach('OSRSetFromUserInput' => [qw/opaque string/] => 'int');};
  5         30  
1140 5         440 eval{$ffi->attach('OSRCopyGeogCSFrom' => [qw/opaque opaque/] => 'int');};
  5         44  
1141 5         427 eval{$ffi->attach('OSRSetTOWGS84' => [qw/opaque double double double double double double double/] => 'int');};
  5         36  
1142 5         564 eval{$ffi->attach('OSRGetTOWGS84' => [qw/opaque double* int/] => 'int');};
  5         26  
1143 5         424 eval{$ffi->attach('OSRSetCompoundCS' => [qw/opaque string opaque opaque/] => 'int');};
  5         40  
1144 5         470 eval{$ffi->attach('OSRSetGeogCS' => [qw/opaque string string string double double string double string double/] => 'int');};
  5         63  
1145 5         674 eval{$ffi->attach('OSRSetVertCS' => [qw/opaque string string int/] => 'int');};
  5         28  
1146 5         484 eval{$ffi->attach('OSRGetSemiMajor' => [qw/opaque int*/] => 'double');};
  5         35  
1147 5         484 eval{$ffi->attach('OSRGetSemiMinor' => [qw/opaque int*/] => 'double');};
  5         25  
1148 5         458 eval{$ffi->attach('OSRGetInvFlattening' => [qw/opaque int*/] => 'double');};
  5         57  
1149 5         441 eval{$ffi->attach('OSRSetAuthority' => [qw/opaque string string int/] => 'int');};
  5         36  
1150 5         520 eval{$ffi->attach('OSRGetAuthorityCode' => [qw/opaque string/] => 'string');};
  5         21  
1151 5         435 eval{$ffi->attach('OSRGetAuthorityName' => [qw/opaque string/] => 'string');};
  5         24  
1152 5         631 eval{$ffi->attach('OSRSetProjection' => [qw/opaque string/] => 'int');};
  5         35  
1153 5         446 eval{$ffi->attach('OSRSetProjParm' => [qw/opaque string double/] => 'int');};
  5         40  
1154 5         463 eval{$ffi->attach('OSRGetProjParm' => [qw/opaque string double int*/] => 'double');};
  5         24  
1155 5         473 eval{$ffi->attach('OSRSetNormProjParm' => [qw/opaque string double/] => 'int');};
  5         79  
1156 5         495 eval{$ffi->attach('OSRGetNormProjParm' => [qw/opaque string double int*/] => 'double');};
  5         50  
1157 5         504 eval{$ffi->attach('OSRSetUTM' => [qw/opaque int int/] => 'int');};
  5         25  
1158 5         459 eval{$ffi->attach('OSRGetUTMZone' => [qw/opaque int*/] => 'int');};
  5         32  
1159 5         480 eval{$ffi->attach('OSRSetStatePlane' => [qw/opaque int int/] => 'int');};
  5         27  
1160 5         453 eval{$ffi->attach('OSRSetStatePlaneWithUnits' => [qw/opaque int int string double/] => 'int');};
  5         28  
1161 5         496 eval{$ffi->attach('OSRAutoIdentifyEPSG' => [qw/opaque/] => 'int');};
  5         24  
1162 5         408 eval{$ffi->attach('OSRFindMatches' => [qw/opaque string_pointer int* int*/] => 'uint64*');};
  5         56  
1163 5         514 eval{$ffi->attach('OSRFreeSRSArray' => [qw/uint64*/] => 'void');};
  5         23  
1164 5         430 eval{$ffi->attach('OSREPSGTreatsAsLatLong' => [qw/opaque/] => 'int');};
  5         24  
1165 5         404 eval{$ffi->attach('OSREPSGTreatsAsNorthingEasting' => [qw/opaque/] => 'int');};
  5         21  
1166 5         374 eval{$ffi->attach('OSRGetAxis' => ['opaque','string','int','unsigned int'] => 'string');};
  5         24  
1167 5         472 eval{$ffi->attach('OSRSetAxes' => ['opaque','string','string','unsigned int','string','unsigned int'] => 'int');};
  5         49  
1168 5         552 eval{$ffi->attach('OSRSetACEA' => [qw/opaque double double double double double double/] => 'int');};
  5         30  
1169 5         548 eval{$ffi->attach('OSRSetAE' => [qw/opaque double double double double/] => 'int');};
  5         45  
1170 5         555 eval{$ffi->attach('OSRSetBonne' => [qw/opaque double double double double/] => 'int');};
  5         54  
1171 5         551 eval{$ffi->attach('OSRSetCEA' => [qw/opaque double double double double/] => 'int');};
  5         32  
1172 5         494 eval{$ffi->attach('OSRSetCS' => [qw/opaque double double double double/] => 'int');};
  5         46  
1173 5         520 eval{$ffi->attach('OSRSetEC' => [qw/opaque double double double double double double/] => 'int');};
  5         46  
1174 5         558 eval{$ffi->attach('OSRSetEckert' => [qw/opaque int double double double/] => 'int');};
  5         30  
1175 5         513 eval{$ffi->attach('OSRSetEckertIV' => [qw/opaque double double double/] => 'int');};
  5         41  
1176 5         593 eval{$ffi->attach('OSRSetEckertVI' => [qw/opaque double double double/] => 'int');};
  5         33  
1177 5         466 eval{$ffi->attach('OSRSetEquirectangular' => [qw/opaque double double double double/] => 'int');};
  5         26  
1178 5         480 eval{$ffi->attach('OSRSetEquirectangular2' => [qw/opaque double double double double double/] => 'int');};
  5         52  
1179 5         599 eval{$ffi->attach('OSRSetGS' => [qw/opaque double double double/] => 'int');};
  5         27  
1180 5         468 eval{$ffi->attach('OSRSetGH' => [qw/opaque double double double/] => 'int');};
  5         37  
1181 5         513 eval{$ffi->attach('OSRSetIGH' => [qw/opaque/] => 'int');};
  5         31  
1182 5         400 eval{$ffi->attach('OSRSetGEOS' => [qw/opaque double double double double/] => 'int');};
  5         28  
1183 5         481 eval{$ffi->attach('OSRSetGaussSchreiberTMercator' => [qw/opaque double double double double double/] => 'int');};
  5         29  
1184 5         519 eval{$ffi->attach('OSRSetGnomonic' => [qw/opaque double double double double/] => 'int');};
  5         67  
1185 5         536 eval{$ffi->attach('OSRSetHOM' => [qw/opaque double double double double double double double/] => 'int');};
  5         45  
1186 5         610 eval{$ffi->attach('OSRSetHOMAC' => [qw/opaque double double double double double double double/] => 'int');};
  5         57  
1187 5         616 eval{$ffi->attach('OSRSetHOM2PNO' => [qw/opaque double double double double double double double double/] => 'int');};
  5         52  
1188 5         646 eval{$ffi->attach('OSRSetIWMPolyconic' => [qw/opaque double double double double double/] => 'int');};
  5         35  
1189 5         519 eval{$ffi->attach('OSRSetKrovak' => [qw/opaque double double double double double double double/] => 'int');};
  5         38  
1190 5         565 eval{$ffi->attach('OSRSetLAEA' => [qw/opaque double double double double/] => 'int');};
  5         40  
1191 5         530 eval{$ffi->attach('OSRSetLCC' => [qw/opaque double double double double double double/] => 'int');};
  5         74  
1192 5         588 eval{$ffi->attach('OSRSetLCC1SP' => [qw/opaque double double double double double/] => 'int');};
  5         28  
1193 5         526 eval{$ffi->attach('OSRSetLCCB' => [qw/opaque double double double double double double/] => 'int');};
  5         44  
1194 5         545 eval{$ffi->attach('OSRSetMC' => [qw/opaque double double double double/] => 'int');};
  5         26  
1195 5         494 eval{$ffi->attach('OSRSetMercator' => [qw/opaque double double double double double/] => 'int');};
  5         37  
1196 5         578 eval{$ffi->attach('OSRSetMercator2SP' => [qw/opaque double double double double double/] => 'int');};
  5         34  
1197 5         540 eval{$ffi->attach('OSRSetMollweide' => [qw/opaque double double double/] => 'int');};
  5         43  
1198 5         523 eval{$ffi->attach('OSRSetNZMG' => [qw/opaque double double double double/] => 'int');};
  5         27  
1199 5         505 eval{$ffi->attach('OSRSetOS' => [qw/opaque double double double double double/] => 'int');};
  5         28  
1200 5         503 eval{$ffi->attach('OSRSetOrthographic' => [qw/opaque double double double double/] => 'int');};
  5         34  
1201 5         490 eval{$ffi->attach('OSRSetPolyconic' => [qw/opaque double double double double/] => 'int');};
  5         37  
1202 5         500 eval{$ffi->attach('OSRSetPS' => [qw/opaque double double double double double/] => 'int');};
  5         40  
1203 5         543 eval{$ffi->attach('OSRSetRobinson' => [qw/opaque double double double/] => 'int');};
  5         57  
1204 5         485 eval{$ffi->attach('OSRSetSinusoidal' => [qw/opaque double double double/] => 'int');};
  5         23  
1205 5         489 eval{$ffi->attach('OSRSetStereographic' => [qw/opaque double double double double double/] => 'int');};
  5         47  
1206 5         568 eval{$ffi->attach('OSRSetSOC' => [qw/opaque double double double double/] => 'int');};
  5         55  
1207 5         505 eval{$ffi->attach('OSRSetTM' => [qw/opaque double double double double double/] => 'int');};
  5         25  
1208 5         594 eval{$ffi->attach('OSRSetTMVariant' => [qw/opaque string double double double double double/] => 'int');};
  5         35  
1209 5         603 eval{$ffi->attach('OSRSetTMG' => [qw/opaque double double double double/] => 'int');};
  5         34  
1210 5         536 eval{$ffi->attach('OSRSetTMSO' => [qw/opaque double double double double double/] => 'int');};
  5         34  
1211 5         527 eval{$ffi->attach('OSRSetTPED' => [qw/opaque double double double double double double/] => 'int');};
  5         62  
1212 5         612 eval{$ffi->attach('OSRSetVDG' => [qw/opaque double double double/] => 'int');};
  5         34  
1213 5         522 eval{$ffi->attach('OSRSetWagner' => [qw/opaque int double double double/] => 'int');};
  5         42  
1214 5         512 eval{$ffi->attach('OSRSetQSC' => [qw/opaque double double/] => 'int');};
  5         62  
1215 5         475 eval{$ffi->attach('OSRSetSCH' => [qw/opaque double double double double/] => 'int');};
  5         24  
1216 5         487 eval{$ffi->attach('OSRCalcInvFlattening' => [qw/double double/] => 'double');};
  5         33  
1217 5         424 eval{$ffi->attach('OSRCalcSemiMinorFromInvFlattening' => [qw/double double/] => 'double');};
  5         24  
1218 5         416 eval{$ffi->attach('OSRCleanup' => [] => 'void');};
  5         20  
1219 5         357 eval{$ffi->attach('OCTNewCoordinateTransformation' => [qw/opaque opaque/] => 'opaque');};
  5         32  
1220 5         415 eval{$ffi->attach('OCTDestroyCoordinateTransformation' => [qw/opaque/] => 'void');};
  5         31  
1221 5         411 eval{$ffi->attach('OCTTransform' => [qw/opaque int double* double* double*/] => 'int');};
  5         27  
1222 5         512 eval{$ffi->attach('OCTTransformEx' => [qw/opaque int double* double* double* int*/] => 'int');};
  5         26  
1223 5         530 eval{$ffi->attach('OCTProj4Normalize' => [qw/string/] => 'string');};
  5         31  
1224 5         423 eval{$ffi->attach('OCTCleanupProjMutex' => [] => 'void');};
  5         20  
1225 5         342 eval{$ffi->attach('OPTGetProjectionMethods' => [] => 'string_pointer');};
  5         29  
1226 5         349 eval{$ffi->attach('OPTGetParameterList' => [qw/string string_pointer/] => 'string_pointer');};
  5         42  
1227 5         445 eval{$ffi->attach('OPTGetParameterInfo' => [qw/string string string_pointer string_pointer double*/] => 'int');};
  5         32  
1228             # from apps/gdal_utils.h
1229 5         503 eval{$ffi->attach('GDALInfoOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         50  
1230 5         525 eval{$ffi->attach('GDALInfoOptionsFree' => [qw/opaque/] => 'void');};
  5         28  
1231 5         473 eval{$ffi->attach('GDALInfo' => [qw/opaque opaque/] => 'string');};
  5         49  
1232 5         437 eval{$ffi->attach('GDALTranslateOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         23  
1233 5         434 eval{$ffi->attach('GDALTranslateOptionsFree' => [qw/opaque/] => 'void');};
  5         30  
1234 5         422 eval{$ffi->attach('GDALTranslateOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         37  
1235 5         510 eval{$ffi->attach('GDALTranslate' => [qw/string opaque opaque int*/] => 'opaque');};
  5         28  
1236 5         478 eval{$ffi->attach('GDALWarpAppOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         21  
1237 5         456 eval{$ffi->attach('GDALWarpAppOptionsFree' => [qw/opaque/] => 'void');};
  5         32  
1238 5         464 eval{$ffi->attach('GDALWarpAppOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         34  
1239 5         472 eval{$ffi->attach('GDALWarpAppOptionsSetQuiet' => [qw/opaque int/] => 'void');};
  5         30  
1240 5         416 eval{$ffi->attach('GDALWarpAppOptionsSetWarpOption' => [qw/opaque string string/] => 'void');};
  5         24  
1241 5         440 eval{$ffi->attach('GDALWarp' => [qw/string opaque int opaque[] opaque int*/] => 'opaque');};
  5         37  
1242 5         998 eval{$ffi->attach('GDALVectorTranslateOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         29  
1243 5         481 eval{$ffi->attach('GDALVectorTranslateOptionsFree' => [qw/opaque/] => 'void');};
  5         32  
1244 5         454 eval{$ffi->attach('GDALVectorTranslateOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         36  
1245 5         520 eval{$ffi->attach('GDALVectorTranslate' => [qw/string opaque int opaque[] opaque int*/] => 'opaque');};
  5         30  
1246 5         542 eval{$ffi->attach('GDALDEMProcessingOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         22  
1247 5         444 eval{$ffi->attach('GDALDEMProcessingOptionsFree' => [qw/opaque/] => 'void');};
  5         25  
1248 5         450 eval{$ffi->attach('GDALDEMProcessingOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         26  
1249 5         506 eval{$ffi->attach('GDALDEMProcessing' => [qw/string opaque string string opaque int*/] => 'opaque');};
  5         55  
1250 5         534 eval{$ffi->attach('GDALNearblackOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         23  
1251 5         487 eval{$ffi->attach('GDALNearblackOptionsFree' => [qw/opaque/] => 'void');};
  5         23  
1252 5         435 eval{$ffi->attach('GDALNearblackOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         26  
1253 5         445 eval{$ffi->attach('GDALNearblack' => [qw/string opaque opaque opaque int*/] => 'opaque');};
  5         36  
1254 5         519 eval{$ffi->attach('GDALGridOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         26  
1255 5         424 eval{$ffi->attach('GDALGridOptionsFree' => [qw/opaque/] => 'void');};
  5         22  
1256 5         1099 eval{$ffi->attach('GDALGridOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         39  
1257 5         514 eval{$ffi->attach('GDALGrid' => [qw/string opaque opaque int*/] => 'opaque');};
  5         27  
1258 5         475 eval{$ffi->attach('GDALRasterizeOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         25  
1259 5         448 eval{$ffi->attach('GDALRasterizeOptionsFree' => [qw/opaque/] => 'void');};
  5         23  
1260 5         441 eval{$ffi->attach('GDALRasterizeOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         28  
1261 5         526 eval{$ffi->attach('GDALRasterize' => [qw/string opaque opaque opaque int*/] => 'opaque');};
  5         30  
1262 5         545 eval{$ffi->attach('GDALBuildVRTOptionsNew' => [qw/opaque opaque/] => 'opaque');};
  5         24  
1263 5         450 eval{$ffi->attach('GDALBuildVRTOptionsFree' => [qw/opaque/] => 'void');};
  5         25  
1264 5         406 eval{$ffi->attach('GDALBuildVRTOptionsSetProgress' => [qw/opaque GDALProgressFunc opaque/] => 'void');};
  5         32  
1265 5         429 eval{$ffi->attach('GDALBuildVRT' => [qw/string int opaque[] opaque opaque int*/] => 'opaque');};
  5         26  
1266             # end of generated code
1267              
1268             # we do not use Alien::gdal->data_dir since it issues warnings due to GDAL bug
1269 5         582 my $pc = PkgConfig->find('gdal');
1270 5 50       4370 if ($pc->errmsg) {
1271 5         91 my $dir = Alien::gdal->dist_dir;
1272 5         3062 my %options = (search_path_override => [$dir . '/lib/pkgconfig']);
1273 5         32 $pc = PkgConfig->find('gdal', %options);
1274             }
1275 5 50       37964 if ($pc->errmsg) {
1276 0         0 warn $pc->errmsg;
1277             } else {
1278 5         247 my $dir = $pc->get_var('datadir');
1279             # this gdal.pc bug was fixed in GDAL 2.3.1
1280             # we just hope the one configuring GDAL did not change it to something that ends '/data'
1281 5         227 $dir =~ s/\/data$//;
1282 5 50       277 if (opendir(my $dh, $dir)) {
1283 5         2481 CPLSetConfigOption(GDAL_DATA => $dir);
1284             } else {
1285 0         0 warn "GDAL data directory ($dir) doesn't exist. Maybe Alien::gdal is not installed?";
1286             }
1287             }
1288              
1289 5         35 $instance = {};
1290 5         23 $instance->{ffi} = $ffi;
1291 5         46 SetErrorHandling();
1292 5         49000 GDALAllRegister();
1293 5         1365 return bless $instance, $class;
1294             }
1295              
1296             sub get_instance {
1297 9     9 1 633 my $class = shift;
1298 9 50       46 $instance = $class->new() unless $instance;
1299 9         28 return $instance;
1300             }
1301              
1302             sub DESTROY {
1303 0     0   0 UnsetErrorHandling();
1304             }
1305              
1306             sub GetVersionInfo {
1307 1   50 1 1 329 my $request = shift // 'VERSION_NUM';
1308 1         18 return GDALVersionInfo($request);
1309             }
1310              
1311             sub GetDriver {
1312 175     175 1 927 my ($i) = @_;
1313 175 100       299 my $d = isint($i) ? GDALGetDriver($i) : GDALGetDriverByName($i);
1314 175 50 0     332 confess error_msg() // "Driver '$i' not found." unless $d;
1315 175         407 return bless \$d, 'Geo::GDAL::FFI::Driver';
1316             }
1317              
1318             sub GetDrivers {
1319 1     1 1 316 my @drivers;
1320 1         8 for my $i (0..GDALGetDriverCount()-1) {
1321 163         255 push @drivers, GetDriver($i);
1322             }
1323 1         23 return @drivers;
1324             }
1325              
1326             sub Open {
1327 2     2 1 305 my ($name, $args) = @_;
1328 2   50     8 $name //= '';
1329 2   50     32 $args //= {};
1330 2         5 my $flags = 0;
1331 2   50     15 my $a = $args->{Flags} // [];
1332 2         9 for my $f (@$a) {
1333 0         0 $flags |= $open_flags{$f};
1334             }
1335 2         6 my $drivers = 0;
1336 2         14 for my $o (@{$args->{AllowedDrivers}}) {
  2         10  
1337 0         0 $drivers = Geo::GDAL::FFI::CSLAddString($drivers, $o);
1338             }
1339 2         5 my $options = 0;
1340 2         5 for my $o (@{$args->{Options}}) {
  2         6  
1341 0         0 $options = Geo::GDAL::FFI::CSLAddString($options, $o);
1342             }
1343 2         4 my $files = 0;
1344 2         5 for my $o (@{$args->{SiblingFiles}}) {
  2         7  
1345 0         0 $files = Geo::GDAL::FFI::CSLAddString($files, $o);
1346             }
1347 2         3138 my $ds = GDALOpenEx($name, $flags, $drivers, $options, $files);
1348 2         17 Geo::GDAL::FFI::CSLDestroy($drivers);
1349 2         8 Geo::GDAL::FFI::CSLDestroy($options);
1350 2         8 Geo::GDAL::FFI::CSLDestroy($files);
1351 2 50       10 if (@errors) {
1352 0         0 my $msg = join("\n", @errors);
1353 0         0 @errors = ();
1354 0         0 confess $msg;
1355             }
1356 2 100       9 unless ($ds) { # no VERBOSE_ERROR in options and fail
1357 1         227 confess "Open failed for '$name'. Hint: add VERBOSE_ERROR to open_flags.";
1358             }
1359 1         9 return bless \$ds, 'Geo::GDAL::FFI::Dataset';
1360             }
1361              
1362             sub write {
1363 0     0 0 0 print STDOUT $_[0];
1364             }
1365              
1366       0 0   sub close {
1367             }
1368              
1369             sub SetWriter {
1370 2     2 0 8 my ($self, $writer) = @_;
1371 2 100       8 $writer = $self unless $writer;
1372 2         12 my $w = $writer->can('write');
1373 2         8 my $c = $writer->can('close');
1374 2 50 33     9 confess "$writer must be able to write and close." unless $w && $c;
1375             #$self->{write} = $w;
1376 2         5 $self->{close} = $c;
1377             $self->{writer} = $self->{ffi}->closure(sub {
1378 5     5   208 my ($buf, $size, $count, $stream) = @_;
1379 5         16 $w->(buffer_to_scalar($buf, $size*$count));
1380 2         27 });
1381 2         64 VSIStdoutSetRedirection($self->{writer}, 0);
1382             }
1383              
1384             sub CloseWriter {
1385 1     1 0 36 my $self = shift;
1386 1 50       7 $self->{close}->() if $self->{close};
1387 1         7 $self->SetWriter;
1388             }
1389              
1390             sub get_importer {
1391 3     3 0 11 my ($self, $format) = @_;
1392 3         24 my $importer = $self->can('OSRImportFrom' . $format);
1393 3 50       11 confess "Spatial reference importer for format '$format' not found!" unless $importer;
1394 3         10 return $importer;
1395             }
1396              
1397             sub get_exporter {
1398 1     1 0 4 my ($self, $format) = @_;
1399 1         8 my $exporter = $self->can('OSRExportTo' . $format);
1400 1 50       5 confess "Spatial reference exporter for format '$format' not found!" unless $exporter;
1401 1         3 return $exporter;
1402             }
1403              
1404             sub get_setter {
1405 0     0 0 0 my ($self, $proj) = @_;
1406 0         0 my $setter = $self->can('OSRSet' . $proj);
1407 0 0       0 confess "Parameter setter for projection '$proj' not found!" unless $setter;
1408 0         0 return $setter;
1409             }
1410              
1411             sub HaveGEOS {
1412 1     1 0 130 my $t = $geometry_types{Point};
1413 1         115 my $g = OGR_G_CreateGeometry($t);
1414 1         14 OGR_G_SetPoint($g, 0, 0, 0, 0);
1415 1         5 my $c = OGR_G_CreateGeometry($t);
1416 1         4 my $n = @errors;
1417 1         2332 OGR_G_Centroid($g, $c);
1418 1 50       11 if (@errors > $n) {
1419 0         0 pop @errors;
1420 0         0 return undef;
1421             } else {
1422 1         6 return 1;
1423             }
1424             }
1425              
1426             sub SetConfigOption {
1427 0     0 0 0 my ($key, $default) = @_;
1428 0         0 CPLSetConfigOption($key, $default);
1429             }
1430              
1431             sub GetConfigOption {
1432 1     1 0 1321 my ($key, $default) = @_;
1433 1         10 return CPLGetConfigOption($key, $default);
1434             }
1435              
1436             sub FindFile {
1437 6 100   6 0 59 my ($class, $basename) = @_ == 2 ? @_ : ('', @_);
1438 6   50     23 $class //= '';
1439 6   50     19 $basename //= '';
1440 6         349 return CPLFindFile($class, $basename);
1441             }
1442              
1443             sub PushFinderLocation {
1444 1     1 0 332 my ($location) = @_;
1445 1   50     5 $location //= '';
1446 1         9 CPLPushFinderLocation($location);
1447             }
1448              
1449             sub PopFinderLocation {
1450 1     1 0 360 CPLPopFinderLocation();
1451             }
1452              
1453             sub FinderClean {
1454 0     0 0   CPLFinderClean();
1455             }
1456              
1457             BEGIN {
1458 5     5   4437 require PkgConfig;
1459 5         669335 PkgConfig->import;
1460 5         4008 require Alien::gdal;
1461 5         282760 $instance = Geo::GDAL::FFI->new();
1462             }
1463              
1464             1;
1465              
1466             =pod
1467              
1468             =encoding UTF-8
1469              
1470             =head1 NAME
1471              
1472             Geo::GDAL::FFI - A foreign function interface to GDAL
1473              
1474             =head1 VERSION
1475              
1476             Version 0.06
1477              
1478             =head1 SYNOPSIS
1479              
1480             This is an example of creating a vector dataset.
1481              
1482             use Geo::GDAL::FFI qw/GetDriver/;
1483              
1484             my $sr = Geo::GDAL::FFI::SpatialReference->new(EPSG => 3067);
1485             my $layer = GetDriver('ESRI Shapefile')
1486             ->Create('test.shp')
1487             ->CreateLayer({
1488             Name => 'test',
1489             SpatialReference => $sr,
1490             GeometryType => 'Point',
1491             Fields => [
1492             {
1493             Name => 'name',
1494             Type => 'String'
1495             }
1496             ]
1497             });
1498             my $f = Geo::GDAL::FFI::Feature->new($layer->GetDefn);
1499             $f->SetField(name => 'a');
1500             my $g = Geo::GDAL::FFI::Geometry->new('Point');
1501             $g->SetPoint(1, 2);
1502             $f->SetGeomField($g);
1503             $layer->CreateFeature($f);
1504              
1505             This is an example of reading a vector dataset.
1506              
1507             use Geo::GDAL::FFI qw/Open/;
1508              
1509             my $layer = Open('test.shp')->GetLayer;
1510             $layer->ResetReading;
1511             while (my $feature = $layer->GetNextFeature) {
1512             my $value = $feature->GetField('name');
1513             my $geom = $feature->GetGeomField;
1514             say $value, ' ', $geom->AsText;
1515             }
1516              
1517             This is an example of creating a raster dataset.
1518              
1519             use Geo::GDAL::FFI qw/GetDriver/;
1520              
1521             my $tiff = GetDriver('GTiff')->Create('test.tiff', 3, 2);
1522             my $ogc_wkt =
1523             'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS84",6378137,298.257223563,'.
1524             'AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,'.
1525             'AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,'.
1526             'AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]';
1527             $tiff->SetProjectionString($ogc_wkt);
1528             my $transform = [10,2,0,20,0,3];
1529             $tiff->SetGeoTransform($transform);
1530             my $data = [[0,1,2],[3,4,5]];
1531             $tiff->GetBand->Write($data);
1532              
1533             This is an example of reading a raster dataset. Note that using L
1534             and L can greatly reduce the time needed to process large
1535             raster datasets.
1536              
1537             use Geo::GDAL::FFI qw/Open/;
1538              
1539             my $band = Open($ARGV[0])->GetBand;
1540             my ($w_band, $h_band) = $band->GetSize;
1541             my ($w_block, $h_block) = $band->GetBlockSize;
1542             my $nodata = $band->GetNoDataValue;
1543             my ($xoff, $yoff) = (0,0);
1544             my ($min, $max);
1545              
1546             while (1) {
1547             if ($xoff >= $w_band) {
1548             $xoff = 0;
1549             $yoff += $h_block;
1550             last if $yoff >= $h_band;
1551             }
1552             my $w_real = $w_band - $xoff;
1553             $w_real = $w_block if $w_real > $w_block;
1554             my $h_real = $h_band - $yoff;
1555             $h_real = $h_block if $h_real > $h_block;
1556              
1557             my $data = $band->Read($xoff, $yoff, $w_real, $h_real);
1558              
1559             for my $y (0..$#$data) {
1560             my $row = $data->[$y];
1561             for my $x (0..$#$row) {
1562             my $value = $row->[$x];
1563             next if defined $nodata && $value == $nodata;
1564             $min = $value if !defined $min || $value < $min;
1565             $max = $value if !defined $max || $value > $max;
1566             }
1567             }
1568            
1569             $xoff += $w_block;
1570             }
1571              
1572             say "min = $min, max = $max";
1573              
1574             =head1 DESCRIPTION
1575              
1576             This is a foreign function interface to the GDAL geospatial data
1577             access library.
1578              
1579             =head1 IMPORTABLE FUNCTIONS
1580              
1581             The most important importable functions are GetDriver and Open, which
1582             return a driver and a dataset objects respectively. GetDrivers returns
1583             all available drivers as objects.
1584              
1585             Other importable functions include error handling configuration
1586             (SetErrorHandling and UnsetErrorHandling), functions that return lists
1587             of strings that are used in methods (Capabilities, OpenFlags,
1588             DataTypes, ResamplingMethods, FieldTypes, FieldSubtypes,
1589             Justifications, ColorInterpretations, GeometryTypes, GeometryFormats,
1590             GridAlgorithms), also functions GetVersionInfo, HaveGEOS,
1591             SetConfigOption, GetConfigOption, FindFile, PushFinderLocation,
1592             PopFinderLocation, and FinderClean can be imported.
1593              
1594             :all imports all above functions.
1595              
1596             =head2 GetVersionInfo
1597              
1598             my $info = GetVersionInfo($request);
1599              
1600             Returns the version information from the underlying GDAL
1601             library. $request is optional and by default 'VERSION_NUM'.
1602              
1603             =head2 GetDriver
1604              
1605             my $driver = GetDriver($name);
1606              
1607             Returns the specific driver object.
1608              
1609             =head2 GetDrivers
1610              
1611             Returns a list of all available driver objects.
1612              
1613             =head2 Open
1614              
1615             my $dataset = Open($name, {Flags => [qw/READONLY/], ...});
1616              
1617             Open a dataset. $name is the name of the dataset. Named arguments are
1618             the following.
1619              
1620             =over 4
1621              
1622             =item C
1623              
1624             Optional, default is a reference to an empty array. Note that some
1625             drivers can open both raster and vector datasets.
1626              
1627             =item C
1628              
1629             Optional, default is all drivers. Use a reference to an array of
1630             driver names to limit which drivers to test.
1631              
1632             =item C
1633              
1634             Optional, default is to probe the file system. You may use a reference
1635             to an array of auxiliary file names.
1636              
1637             =item C
1638              
1639             Optional, a reference to an array of driver specific open
1640             options. Consult the main GDAL documentation for open options.
1641              
1642             =back
1643              
1644             =head2 Capabilities
1645              
1646             Returns the list of capabilities (strings) a GDAL major object
1647             (Driver, Dataset, Band, or Layer in Geo::GDAL::FFI) can have.
1648              
1649             =head2 OpenFlags
1650              
1651             Returns the list of opening flags to be used in the Open method.
1652              
1653             =head2 DataTypes
1654              
1655             Returns the list of raster cell data types to be used in e.g. the
1656             CreateDataset method of the Driver class.
1657              
1658             =head2 FieldTypes
1659              
1660             Returns the list of field types.
1661              
1662             =head2 FieldSubtypes
1663              
1664             Returns the list of field subtypes.
1665              
1666             =head2 Justifications
1667              
1668             Returns the list of field justifications.
1669              
1670             =head2 ColorInterpretations
1671              
1672             Returns the list of color interpretations.
1673              
1674             =head2 GeometryTypes
1675              
1676             Returns the list of geometry types.
1677              
1678             =head2 SetErrorHandling
1679              
1680             Set a Perl function to catch errors reported within GDAL with
1681             CPLError. The errors are collected into @Geo::GDAL::FFI::errors and
1682             confessed if a method fails. This is the default.
1683              
1684             =head2 UnetErrorHandling
1685              
1686             Unset the Perl function to catch GDAL errors. If no other error
1687             handler is set, GDAL prints the errors into stderr.
1688              
1689             =head1 METHODS
1690              
1691             =head2 get_instance
1692              
1693             my $gdal = Geo::GDAL::FFI->get_instance;
1694              
1695             Obtain the Geo::GDAL::FFI singleton object. The object is usually not needed.
1696              
1697             =head1 LICENSE
1698              
1699             This software is released under the Artistic License. See
1700             L.
1701              
1702             =head1 AUTHOR
1703              
1704             Ari Jolma - Ari.Jolma at gmail.com
1705              
1706             =head1 SEE ALSO
1707              
1708             L
1709              
1710             L
1711              
1712             L
1713              
1714             L
1715              
1716             L
1717              
1718             L
1719              
1720             L
1721              
1722             L
1723              
1724             L
1725              
1726             L
1727              
1728             L
1729              
1730             L
1731              
1732             L
1733              
1734             L, L, L
1735              
1736             =cut
1737              
1738             __END__;