ffi-gdal 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.prettierrc.yml +4 -0
- data/.rubocop.yml +9 -5
- data/.rubocop_todo.yml +5 -11
- data/.solargraph.yml +13 -0
- data/Changelog-0.x.md +229 -174
- data/Changelog.md +15 -5
- data/Dockerfile.gdal2 +1 -1
- data/Gemfile +12 -2
- data/README.md +13 -10
- data/Rakefile +6 -6
- data/bin/bundle +12 -12
- data/bin/rake +6 -6
- data/bin/rspec +6 -6
- data/bin/rubocop +6 -6
- data/examples/extract_and_colorize.rb +15 -15
- data/examples/geometries.rb +12 -12
- data/examples/gridding.rb +17 -17
- data/examples/ogr_layer_to_layer.rb +3 -3
- data/examples/raster_erasing.rb +9 -9
- data/examples/remove_small_polygons.rb +11 -11
- data/examples/testing_gdal.rb +20 -20
- data/examples/warping.rb +13 -13
- data/ffi-gdal.gemspec +15 -26
- data/lib/ext/ffi_library_function_checks.rb +3 -3
- data/lib/ext/narray_ext.rb +1 -1
- data/lib/ext/to_bool.rb +2 -2
- data/lib/ffi/cpl/conv.rb +2 -2
- data/lib/ffi/cpl/error.rb +1 -1
- data/lib/ffi/cpl/hash_set.rb +2 -2
- data/lib/ffi/cpl/http.rb +3 -3
- data/lib/ffi/cpl/http_result.rb +2 -2
- data/lib/ffi/cpl/list.rb +1 -1
- data/lib/ffi/cpl/mime_part.rb +1 -1
- data/lib/ffi/cpl/minixml.rb +2 -2
- data/lib/ffi/cpl/port.rb +1 -1
- data/lib/ffi/cpl/progress.rb +2 -2
- data/lib/ffi/cpl/quad_tree.rb +3 -3
- data/lib/ffi/cpl/rect_obj.rb +1 -1
- data/lib/ffi/cpl/string.rb +1 -1
- data/lib/ffi/cpl/vsi.rb +2 -2
- data/lib/ffi/cpl/xml_node.rb +1 -1
- data/lib/ffi/cpl.rb +11 -11
- data/lib/ffi/extensions/gdal/extensions/all.rb +2 -2
- data/lib/ffi/extensions/gdal/extensions.rb +2 -2
- data/lib/ffi/extensions/rttopo/gbox.rb +1 -1
- data/lib/ffi/extensions/rttopo/geom.rb +2 -2
- data/lib/ffi/extensions/rttopo.rb +3 -3
- data/lib/ffi/gdal/alg.rb +2 -2
- data/lib/ffi/gdal/color_entry.rb +1 -1
- data/lib/ffi/gdal/gcp.rb +1 -1
- data/lib/ffi/gdal/gdal.rb +3 -3
- data/lib/ffi/gdal/grid.rb +2 -2
- data/lib/ffi/gdal/grid_data_metrics_options.rb +1 -1
- data/lib/ffi/gdal/grid_inverse_distance_to_a_power_options.rb +1 -1
- data/lib/ffi/gdal/grid_moving_average_options.rb +1 -1
- data/lib/ffi/gdal/grid_nearest_neighbor_options.rb +1 -1
- data/lib/ffi/gdal/matching.rb +2 -2
- data/lib/ffi/gdal/rpc_info.rb +1 -1
- data/lib/ffi/gdal/transformer_info.rb +1 -1
- data/lib/ffi/gdal/version.rb +1 -1
- data/lib/ffi/gdal/vrt.rb +2 -2
- data/lib/ffi/gdal/warp_options.rb +1 -1
- data/lib/ffi/gdal/warper.rb +2 -2
- data/lib/ffi/gdal.rb +22 -22
- data/lib/ffi/ogr/api.rb +3 -3
- data/lib/ffi/ogr/contour_writer_info.rb +1 -1
- data/lib/ffi/ogr/core.rb +9 -9
- data/lib/ffi/ogr/envelope.rb +1 -1
- data/lib/ffi/ogr/envelope_3d.rb +1 -1
- data/lib/ffi/ogr/featurestyle.rb +1 -1
- data/lib/ffi/ogr/field.rb +1 -1
- data/lib/ffi/ogr/geocoding.rb +2 -2
- data/lib/ffi/ogr/srs_api.rb +63 -63
- data/lib/ffi/ogr/style_param.rb +2 -2
- data/lib/ffi/ogr/style_value.rb +1 -1
- data/lib/ffi/ogr.rb +11 -11
- data/lib/ffi-gdal.rb +8 -8
- data/lib/gdal/color_table.rb +6 -6
- data/lib/gdal/dataset/accessors.rb +101 -0
- data/lib/gdal/{dataset_mixins → dataset}/algorithm_methods.rb +1 -1
- data/lib/gdal/dataset/class_methods.rb +69 -0
- data/lib/gdal/dataset/internal_functions.rb +22 -0
- data/lib/gdal/{dataset_mixins → dataset}/matching.rb +1 -1
- data/lib/gdal/dataset/raster_band_methods.rb +181 -0
- data/lib/gdal/{dataset_mixins → dataset}/warp_methods.rb +1 -1
- data/lib/gdal/dataset.rb +21 -359
- data/lib/gdal/driver.rb +10 -10
- data/lib/gdal/environment_methods.rb +1 -1
- data/lib/gdal/extensions/all.rb +1 -1
- data/lib/gdal/extensions/color_entry/extensions.rb +2 -2
- data/lib/gdal/extensions/color_table/extensions.rb +2 -2
- data/lib/gdal/extensions/dataset/extensions.rb +11 -11
- data/lib/gdal/extensions/driver/extensions.rb +7 -7
- data/lib/gdal/extensions/geo_transform/extensions.rb +2 -2
- data/lib/gdal/extensions/gridder.rb +8 -8
- data/lib/gdal/extensions/gridder_options.rb +6 -6
- data/lib/gdal/extensions/raster_attribute_table/extensions.rb +1 -1
- data/lib/gdal/extensions/raster_band/algorithm_extensions.rb +4 -4
- data/lib/gdal/extensions/raster_band/coloring_extensions.rb +1 -1
- data/lib/gdal/extensions/raster_band/extensions.rb +3 -3
- data/lib/gdal/extensions/raster_band/io_extensions.rb +4 -4
- data/lib/gdal/extensions/raster_band_classifier.rb +3 -3
- data/lib/gdal/geo_transform.rb +1 -1
- data/lib/gdal/grid.rb +6 -6
- data/lib/gdal/grid_algorithms/metric_average_distance.rb +1 -1
- data/lib/gdal/grid_algorithms/metric_average_distance_pts.rb +1 -1
- data/lib/gdal/grid_algorithms/metric_count.rb +1 -1
- data/lib/gdal/grid_algorithms/metric_maximum.rb +1 -1
- data/lib/gdal/grid_algorithms/metric_minimum.rb +1 -1
- data/lib/gdal/grid_algorithms/metric_range.rb +1 -1
- data/lib/gdal/grid_algorithms.rb +9 -9
- data/lib/gdal/internal_helpers.rb +3 -3
- data/lib/gdal/logger.rb +1 -1
- data/lib/gdal/major_object.rb +6 -6
- data/lib/gdal/options.rb +2 -2
- data/lib/gdal/raster_attribute_table.rb +5 -5
- data/lib/gdal/raster_band.rb +24 -24
- data/lib/gdal/rpc_info.rb +2 -2
- data/lib/gdal/transformer.rb +1 -1
- data/lib/gdal/transformers/general_image_projection_transformer.rb +1 -1
- data/lib/gdal/transformers/general_image_projection_transformer2.rb +1 -1
- data/lib/gdal/transformers/general_image_projection_transformer3.rb +1 -1
- data/lib/gdal/version_info.rb +9 -9
- data/lib/gdal/virtual_dataset.rb +4 -4
- data/lib/gdal/warp_operation.rb +2 -2
- data/lib/gdal/warp_options.rb +2 -2
- data/lib/gdal.rb +17 -17
- data/lib/ogr/coordinate_transformation.rb +5 -5
- data/lib/ogr/data_source.rb +9 -9
- data/lib/ogr/driver.rb +9 -9
- data/lib/ogr/envelope.rb +1 -1
- data/lib/ogr/error_handling.rb +1 -1
- data/lib/ogr/extensions/all.rb +1 -1
- data/lib/ogr/extensions/data_source/capability_methods.rb +4 -4
- data/lib/ogr/extensions/data_source/data_source_extensions.rb +1 -1
- data/lib/ogr/extensions/driver/capability_methods.rb +3 -3
- data/lib/ogr/extensions/envelope/extensions.rb +1 -1
- data/lib/ogr/extensions/feature/extensions.rb +1 -1
- data/lib/ogr/extensions/feature_definition/extensions.rb +1 -1
- data/lib/ogr/extensions/geometries/point/extensions.rb +1 -1
- data/lib/ogr/extensions/geometry/container_mixins.rb +10 -10
- data/lib/ogr/extensions/geometry/ewkb_io_extensions.rb +3 -3
- data/lib/ogr/extensions/geometry/ewkb_record.rb +4 -4
- data/lib/ogr/extensions/geometry/extensions.rb +4 -7
- data/lib/ogr/extensions/geometry/rttopo_extensions.rb +2 -2
- data/lib/ogr/extensions/geometry/wkb_record.rb +3 -3
- data/lib/ogr/extensions/geometry_types/curve/extensions.rb +2 -2
- data/lib/ogr/extensions/layer/capability_methods.rb +17 -17
- data/lib/ogr/extensions/layer/extensions.rb +1 -1
- data/lib/ogr/extensions/spatial_reference/extensions.rb +1 -1
- data/lib/ogr/extensions/spatial_reference/initializers.rb +2 -2
- data/lib/ogr/extensions/style_table/extensions.rb +1 -1
- data/lib/ogr/feature.rb +15 -15
- data/lib/ogr/feature_definition.rb +2 -2
- data/lib/ogr/field.rb +5 -5
- data/lib/ogr/field_definition.rb +1 -1
- data/lib/ogr/geocoder.rb +1 -1
- data/lib/ogr/geometries/geometry_collection.rb +2 -2
- data/lib/ogr/geometries/geometry_collection_25d.rb +1 -1
- data/lib/ogr/geometries/line_string.rb +1 -1
- data/lib/ogr/geometries/line_string_25d.rb +1 -1
- data/lib/ogr/geometries/linear_ring.rb +2 -2
- data/lib/ogr/geometries/multi_line_string.rb +2 -2
- data/lib/ogr/geometries/multi_line_string_25d.rb +1 -1
- data/lib/ogr/geometries/multi_point.rb +1 -1
- data/lib/ogr/geometries/multi_point_25d.rb +1 -1
- data/lib/ogr/geometries/multi_polygon.rb +2 -2
- data/lib/ogr/geometries/multi_polygon_25d.rb +1 -1
- data/lib/ogr/geometries/point_25d.rb +1 -1
- data/lib/ogr/geometries/polygon.rb +2 -2
- data/lib/ogr/geometries/polygon_25d.rb +1 -1
- data/lib/ogr/geometry.rb +11 -11
- data/lib/ogr/geometry_types/container.rb +1 -1
- data/lib/ogr/geometry_types/curve.rb +1 -1
- data/lib/ogr/internal_helpers.rb +4 -4
- data/lib/ogr/layer.rb +8 -8
- data/lib/ogr/layer_mixins/ogr_feature_methods.rb +9 -9
- data/lib/ogr/layer_mixins/ogr_field_methods.rb +15 -15
- data/lib/ogr/layer_mixins/ogr_sql_methods.rb +2 -2
- data/lib/ogr/spatial_reference.rb +19 -19
- data/lib/ogr/spatial_reference_mixins/coordinate_system_getter_setters.rb +4 -4
- data/lib/ogr/spatial_reference_mixins/exporters.rb +9 -9
- data/lib/ogr/spatial_reference_mixins/importers.rb +2 -2
- data/lib/ogr/spatial_reference_mixins/morphers.rb +2 -2
- data/lib/ogr/spatial_reference_mixins/parameter_getter_setters.rb +1 -1
- data/lib/ogr/style_table.rb +3 -3
- data/lib/ogr/style_tool.rb +1 -1
- data/lib/ogr.rb +33 -33
- data/rakelib/docker.rake +2 -2
- metadata +11 -145
data/lib/gdal/raster_band.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require_relative
|
7
|
-
require_relative
|
8
|
-
require_relative
|
3
|
+
require "bigdecimal"
|
4
|
+
require "bigdecimal/util"
|
5
|
+
require "narray"
|
6
|
+
require_relative "../gdal"
|
7
|
+
require_relative "raster_band_mixins/algorithm_methods"
|
8
|
+
require_relative "major_object"
|
9
9
|
|
10
10
|
module GDAL
|
11
11
|
class RasterBand # rubocop:disable Metrics/ClassLength
|
@@ -37,7 +37,7 @@ module GDAL
|
|
37
37
|
|
38
38
|
# @raise [GDAL::Error]
|
39
39
|
def flush_cache
|
40
|
-
GDAL::CPLErrorHandler.manually_handle(
|
40
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to flush cache") do
|
41
41
|
FFI::GDAL::GDAL.GDALFlushRasterCache(@c_pointer)
|
42
42
|
end
|
43
43
|
end
|
@@ -79,7 +79,7 @@ module GDAL
|
|
79
79
|
# @param new_color_interp [FFI::GDAL::GDAL::ColorInterp]
|
80
80
|
# @raise [GDAL::Error]
|
81
81
|
def color_interpretation=(new_color_interp)
|
82
|
-
GDAL::CPLErrorHandler.manually_handle(
|
82
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to set color interpretation") do
|
83
83
|
FFI::GDAL::GDAL.GDALSetRasterColorInterpretation(@c_pointer, new_color_interp)
|
84
84
|
end
|
85
85
|
end
|
@@ -102,7 +102,7 @@ module GDAL
|
|
102
102
|
def color_table=(new_color_table)
|
103
103
|
color_table_pointer = GDAL::ColorTable.new_pointer(new_color_table)
|
104
104
|
|
105
|
-
GDAL::CPLErrorHandler.manually_handle(
|
105
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to set color table") do
|
106
106
|
FFI::GDAL::GDAL.GDALSetRasterColorTable(@c_pointer, color_table_pointer)
|
107
107
|
end
|
108
108
|
end
|
@@ -140,7 +140,7 @@ module GDAL
|
|
140
140
|
def category_names=(names)
|
141
141
|
names_pointer = GDAL._string_array_to_pointer(names)
|
142
142
|
|
143
|
-
GDAL::CPLErrorHandler.manually_handle(
|
143
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to set category names") do
|
144
144
|
FFI::GDAL::GDAL.GDALSetRasterCategoryNames(@c_pointer, names_pointer)
|
145
145
|
end
|
146
146
|
end
|
@@ -153,7 +153,7 @@ module GDAL
|
|
153
153
|
def no_data_value
|
154
154
|
associated = FFI::MemoryPointer.new(:bool)
|
155
155
|
value = FFI::GDAL::GDAL.GDALGetRasterNoDataValue(@c_pointer, associated)
|
156
|
-
value = nil if value.to_d == BigDecimal(
|
156
|
+
value = nil if value.to_d == BigDecimal("-10_000_000_000.0")
|
157
157
|
|
158
158
|
{ value: value, is_associated: associated.read_bytes(1).to_bool }
|
159
159
|
end
|
@@ -164,7 +164,7 @@ module GDAL
|
|
164
164
|
# @param value [Float, nil]
|
165
165
|
# @raise [GDAL::Error]
|
166
166
|
def no_data_value=(value)
|
167
|
-
GDAL::CPLErrorHandler.manually_handle(
|
167
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to set NODATA value") do
|
168
168
|
FFI::GDAL::GDAL.GDALSetRasterNoDataValue(@c_pointer, value)
|
169
169
|
end
|
170
170
|
end
|
@@ -251,7 +251,7 @@ module GDAL
|
|
251
251
|
end
|
252
252
|
end
|
253
253
|
|
254
|
-
GDAL::CPLErrorHandler.manually_handle(
|
254
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to create mask band") do
|
255
255
|
FFI::GDAL::GDAL.GDALCreateMaskBand(@c_pointer, flag_value)
|
256
256
|
end
|
257
257
|
end
|
@@ -263,7 +263,7 @@ module GDAL
|
|
263
263
|
# @param imaginary_value [Float]
|
264
264
|
# @raise [GDAL::Error]
|
265
265
|
def fill(real_value, imaginary_value = 0)
|
266
|
-
GDAL::CPLErrorHandler.manually_handle(
|
266
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to fill raster") do
|
267
267
|
FFI::GDAL::GDAL.GDALFillRaster(@c_pointer, real_value, imaginary_value)
|
268
268
|
end
|
269
269
|
end
|
@@ -315,7 +315,7 @@ module GDAL
|
|
315
315
|
mean_ptr = FFI::MemoryPointer.new(:double)
|
316
316
|
standard_deviation_ptr = FFI::MemoryPointer.new(:double)
|
317
317
|
|
318
|
-
GDAL::CPLErrorHandler.manually_handle(
|
318
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to compute raster statistics") do
|
319
319
|
FFI::GDAL::GDAL::GDALComputeRasterStatistics(
|
320
320
|
@c_pointer, # hBand
|
321
321
|
approx_ok, # bApproxOK
|
@@ -352,7 +352,7 @@ module GDAL
|
|
352
352
|
success = FFI::MemoryPointer.new(:bool)
|
353
353
|
result = FFI::GDAL::GDAL.GDALGetRasterScale(@c_pointer, success)
|
354
354
|
|
355
|
-
raise GDAL::Error,
|
355
|
+
raise GDAL::Error, "GDALGetRasterScale failed" unless success.read_bytes(1).to_bool
|
356
356
|
|
357
357
|
result
|
358
358
|
end
|
@@ -360,7 +360,7 @@ module GDAL
|
|
360
360
|
# @param new_scale [Float]
|
361
361
|
# @raise [GDAL::Error]
|
362
362
|
def scale=(new_scale)
|
363
|
-
GDAL::CPLErrorHandler.manually_handle(
|
363
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to set raster scale") do
|
364
364
|
FFI::GDAL::GDAL.GDALSetRasterScale(@c_pointer, new_scale.to_f)
|
365
365
|
end
|
366
366
|
end
|
@@ -381,7 +381,7 @@ module GDAL
|
|
381
381
|
success = FFI::MemoryPointer.new(:bool)
|
382
382
|
result = FFI::GDAL::GDAL.GDALGetRasterOffset(@c_pointer, success)
|
383
383
|
|
384
|
-
raise GDAL::Error,
|
384
|
+
raise GDAL::Error, "GDALGetRasterOffset failed" unless success.read_bytes(1).to_bool
|
385
385
|
|
386
386
|
result
|
387
387
|
end
|
@@ -391,7 +391,7 @@ module GDAL
|
|
391
391
|
# @param new_offset [Float]
|
392
392
|
# @return [Boolean]
|
393
393
|
def offset=(new_offset)
|
394
|
-
GDAL::CPLErrorHandler.manually_handle(
|
394
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to set raster offset") do
|
395
395
|
FFI::GDAL::GDAL.GDALSetRasterOffset(@c_pointer, new_offset)
|
396
396
|
end
|
397
397
|
end
|
@@ -414,7 +414,7 @@ module GDAL
|
|
414
414
|
return
|
415
415
|
end
|
416
416
|
|
417
|
-
GDAL::CPLErrorHandler.manually_handle(
|
417
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to set unit type") do
|
418
418
|
FFI::GDAL::GDAL.GDALSetRasterUnitType(@c_pointer, new_unit_type)
|
419
419
|
end
|
420
420
|
end
|
@@ -431,7 +431,7 @@ module GDAL
|
|
431
431
|
def default_raster_attribute_table=(rat_table)
|
432
432
|
rat_table_ptr = GDAL::RasterAttributeTable.new_pointer(rat_table)
|
433
433
|
|
434
|
-
GDAL::CPLErrorHandler.manually_handle(
|
434
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to set default raster attribute table") do
|
435
435
|
FFI::GDAL::GDAL.GDALSetDefaultRAT(@c_pointer, rat_table_ptr)
|
436
436
|
end
|
437
437
|
end
|
@@ -592,7 +592,7 @@ module GDAL
|
|
592
592
|
destination_pointer = GDAL._pointer(GDAL::RasterBand, destination_band)
|
593
593
|
options_ptr = GDAL::Options.pointer(options)
|
594
594
|
|
595
|
-
GDAL::CPLErrorHandler.manually_handle(
|
595
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to copy whole raster") do
|
596
596
|
FFI::GDAL::GDAL.GDALRasterBandCopyWholeRaster(@c_pointer,
|
597
597
|
destination_pointer,
|
598
598
|
options_ptr,
|
@@ -691,7 +691,7 @@ module GDAL
|
|
691
691
|
def read_block(x_block_number, y_block_number, image_buffer = nil)
|
692
692
|
image_buffer ||= FFI::MemoryPointer.new(:buffer_out, block_buffer_size)
|
693
693
|
|
694
|
-
GDAL::CPLErrorHandler.manually_handle(
|
694
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to read block") do
|
695
695
|
FFI::GDAL::GDAL.GDALReadBlock(@c_pointer, x_block_number, y_block_number, image_buffer)
|
696
696
|
end
|
697
697
|
|
@@ -707,7 +707,7 @@ module GDAL
|
|
707
707
|
def write_block(x_block_number, y_block_number, data_pointer = nil)
|
708
708
|
data_pointer ||= FFI::Buffer.alloc_inout(block_buffer_size)
|
709
709
|
|
710
|
-
GDAL::CPLErrorHandler.manually_handle(
|
710
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to write block") do
|
711
711
|
FFI::GDAL::GDAL.GDALWriteBlock(@c_pointer, x_block_number, y_block_number, data_pointer)
|
712
712
|
end
|
713
713
|
|
data/lib/gdal/rpc_info.rb
CHANGED
data/lib/gdal/transformer.rb
CHANGED
data/lib/gdal/version_info.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "date"
|
4
4
|
|
5
5
|
module GDAL
|
6
6
|
module VersionInfo
|
@@ -8,42 +8,42 @@ module GDAL
|
|
8
8
|
#
|
9
9
|
# @return [String]
|
10
10
|
def version_num
|
11
|
-
FFI::GDAL.GDALVersionInfo(
|
11
|
+
FFI::GDAL.GDALVersionInfo("VERSION_NUM")
|
12
12
|
end
|
13
13
|
|
14
14
|
# @return [Date]
|
15
15
|
def release_date
|
16
|
-
Date.parse(FFI::GDAL.GDALVersionInfo(
|
16
|
+
Date.parse(FFI::GDAL.GDALVersionInfo("RELEASE_DATE"))
|
17
17
|
end
|
18
18
|
|
19
19
|
# Version in the form "1.1.7".
|
20
20
|
#
|
21
21
|
# @return [String]
|
22
22
|
def release_name
|
23
|
-
FFI::GDAL.GDALVersionInfo(
|
23
|
+
FFI::GDAL.GDALVersionInfo("RELEASE_NAME")
|
24
24
|
end
|
25
25
|
|
26
26
|
# The long licensing info.
|
27
27
|
#
|
28
28
|
# @return [String]
|
29
29
|
def license
|
30
|
-
FFI::GDAL.GDALVersionInfo(
|
30
|
+
FFI::GDAL.GDALVersionInfo("LICENSE")
|
31
31
|
end
|
32
32
|
|
33
33
|
# Options used when building GDAL.
|
34
34
|
#
|
35
35
|
# @return [Hash{String => String}]
|
36
36
|
def build_info
|
37
|
-
key_value_pairs = FFI::GDAL.GDALVersionInfo(
|
37
|
+
key_value_pairs = FFI::GDAL.GDALVersionInfo("BUILD_INFO")
|
38
38
|
key_value_pairs.split.each_with_object({}) do |kv, obj|
|
39
|
-
key, value = kv.split(
|
39
|
+
key, value = kv.split("=", 2)
|
40
40
|
obj[key] = value
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
# @return [String]
|
45
45
|
def long_version
|
46
|
-
FFI::GDAL.GDALVersionInfo(
|
46
|
+
FFI::GDAL.GDALVersionInfo("--version")
|
47
47
|
end
|
48
48
|
|
49
49
|
# @param major [Integer]
|
@@ -51,7 +51,7 @@ module GDAL
|
|
51
51
|
# @return [Boolean] +true+ if the runtime GDAL library matches the given
|
52
52
|
# version params.
|
53
53
|
def check_version(major, minor)
|
54
|
-
FFI::GDAL.GDALCheckVersion(major, minor,
|
54
|
+
FFI::GDAL.GDALCheckVersion(major, minor, "FFI::GDAL")
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
data/lib/gdal/virtual_dataset.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require_relative
|
3
|
+
require_relative "../gdal"
|
4
|
+
require_relative "major_object"
|
5
5
|
|
6
6
|
module GDAL
|
7
7
|
class VirtualDataset
|
@@ -19,7 +19,7 @@ module GDAL
|
|
19
19
|
end
|
20
20
|
|
21
21
|
# TODO: Build the xml string
|
22
|
-
def to_xml(path =
|
22
|
+
def to_xml(path = "")
|
23
23
|
xml_node = FFI::GDAL::VRT.VRTSerializeToXML(@c_pointer, path)
|
24
24
|
|
25
25
|
FFI::CPL::MiniXML.CPLSerializeXMLTree(xml_node)
|
@@ -46,7 +46,7 @@ module GDAL
|
|
46
46
|
def add_simple_source(vrt_band, source_band, no_data_value,
|
47
47
|
src_x_offset: 0, src_y_offset: 0, src_x_size: nil, src_y_size: nil,
|
48
48
|
dst_x_offset: 0, dst_y_offset: 0, dst_x_size: nil, dst_y_size: nil,
|
49
|
-
resampling:
|
49
|
+
resampling: "")
|
50
50
|
FFI::GDAL::VRT.VRTAddSimpleSource(
|
51
51
|
vrt_band,
|
52
52
|
source_band, # hSrcBand
|
data/lib/gdal/warp_operation.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../gdal"
|
4
4
|
|
5
5
|
module GDAL
|
6
6
|
class WarpOperation
|
@@ -18,7 +18,7 @@ module GDAL
|
|
18
18
|
def initialize(warp_options)
|
19
19
|
pointer = FFI::GDAL::Warper.GDALCreateWarpOperation(warp_options.c_struct)
|
20
20
|
|
21
|
-
raise GDAL::Error,
|
21
|
+
raise GDAL::Error, "Unable to create warp operation" if pointer.null?
|
22
22
|
|
23
23
|
@c_pointer = FFI::AutoPointer.new(pointer, WarpOperation.method(:release))
|
24
24
|
end
|
data/lib/gdal/warp_options.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../gdal"
|
4
4
|
|
5
5
|
module GDAL
|
6
6
|
class WarpOptions
|
@@ -97,7 +97,7 @@ module GDAL
|
|
97
97
|
|
98
98
|
# @param geometry [OGR::Geometry]
|
99
99
|
def cutline=(geometry)
|
100
|
-
raise
|
100
|
+
raise "Not a geom" unless geometry.is_a?(OGR::Geometry)
|
101
101
|
|
102
102
|
@cutline = geometry
|
103
103
|
|
data/lib/gdal.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require_relative
|
3
|
+
require_relative "ffi-gdal"
|
4
|
+
require_relative "ffi/gdal"
|
5
5
|
|
6
6
|
module GDAL
|
7
7
|
class << self
|
@@ -27,23 +27,23 @@ module GDAL
|
|
27
27
|
end
|
28
28
|
|
29
29
|
# Autoload just the core GDAL object types.
|
30
|
-
autoload :ColorTable, gdal_require(
|
31
|
-
autoload :Dataset, gdal_require(
|
32
|
-
autoload :DataType, gdal_require(
|
33
|
-
autoload :Driver, gdal_require(
|
34
|
-
autoload :GeoTransform, gdal_require(
|
35
|
-
autoload :Logger, gdal_require(
|
36
|
-
autoload :MajorObject, gdal_require(
|
37
|
-
autoload :Options, gdal_require(
|
38
|
-
autoload :RasterAttributeTable, gdal_require(
|
39
|
-
autoload :RasterBand, gdal_require(
|
30
|
+
autoload :ColorTable, gdal_require("gdal/color_table")
|
31
|
+
autoload :Dataset, gdal_require("gdal/dataset")
|
32
|
+
autoload :DataType, gdal_require("gdal/data_type")
|
33
|
+
autoload :Driver, gdal_require("gdal/driver")
|
34
|
+
autoload :GeoTransform, gdal_require("gdal/geo_transform")
|
35
|
+
autoload :Logger, gdal_require("gdal/logger")
|
36
|
+
autoload :MajorObject, gdal_require("gdal/major_object")
|
37
|
+
autoload :Options, gdal_require("gdal/options")
|
38
|
+
autoload :RasterAttributeTable, gdal_require("gdal/raster_attribute_table")
|
39
|
+
autoload :RasterBand, gdal_require("gdal/raster_band")
|
40
40
|
end
|
41
41
|
|
42
|
-
require_relative
|
43
|
-
require_relative
|
44
|
-
require_relative
|
45
|
-
require_relative
|
46
|
-
require_relative
|
42
|
+
require_relative "gdal/exceptions"
|
43
|
+
require_relative "gdal/version_info"
|
44
|
+
require_relative "gdal/environment_methods"
|
45
|
+
require_relative "gdal/internal_helpers"
|
46
|
+
require_relative "gdal/cpl_error_handler"
|
47
47
|
|
48
48
|
module GDAL
|
49
49
|
extend VersionInfo
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require_relative
|
5
|
-
require_relative
|
3
|
+
require "narray"
|
4
|
+
require_relative "../ogr"
|
5
|
+
require_relative "../gdal"
|
6
6
|
|
7
7
|
module OGR
|
8
8
|
class CoordinateTransformation
|
@@ -13,7 +13,7 @@ module OGR
|
|
13
13
|
FFI::GDAL::GDAL.OCTProj4Normalize(proj4_source)
|
14
14
|
else
|
15
15
|
raise OGR::UnsupportedOperation,
|
16
|
-
|
16
|
+
"Your version of GDAL/OGR does not support OCTProj4Normalize"
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -46,7 +46,7 @@ module OGR
|
|
46
46
|
# by the null-pointer check below.
|
47
47
|
pointer = FFI::OGR::SRSAPI.OCTNewCoordinateTransformation(source_ptr, destination_ptr)
|
48
48
|
|
49
|
-
raise GDAL::Error,
|
49
|
+
raise GDAL::Error, "Unable to create coordinate transformation" if pointer.null?
|
50
50
|
|
51
51
|
@c_pointer = pointer
|
52
52
|
end
|
data/lib/ogr/data_source.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require_relative
|
5
|
-
require_relative
|
3
|
+
require_relative "../gdal"
|
4
|
+
require_relative "../ogr"
|
5
|
+
require_relative "../gdal/major_object"
|
6
6
|
|
7
7
|
module OGR
|
8
8
|
class DataSource
|
@@ -14,7 +14,7 @@ module OGR
|
|
14
14
|
# @param path [String]
|
15
15
|
# @param access_flag [String] 'r' for read, 'w', for write.
|
16
16
|
# @return [OGR::DataSource]
|
17
|
-
def self.open(path, access_flag =
|
17
|
+
def self.open(path, access_flag = "r")
|
18
18
|
ds = new(path, access_flag)
|
19
19
|
|
20
20
|
if block_given?
|
@@ -138,9 +138,9 @@ module OGR
|
|
138
138
|
# @param options [Hash] Driver-specific options.
|
139
139
|
# @return [OGR::Layer]
|
140
140
|
def create_layer(name, geometry_type: :wkbUnknown, spatial_reference: nil, **options)
|
141
|
-
unless test_capability(
|
141
|
+
unless test_capability("CreateLayer")
|
142
142
|
raise OGR::UnsupportedOperation,
|
143
|
-
|
143
|
+
"This data source does not support creating layers."
|
144
144
|
end
|
145
145
|
|
146
146
|
spatial_ref_ptr = GDAL._pointer(OGR::SpatialReference, spatial_reference, autorelease: false) if spatial_reference
|
@@ -174,9 +174,9 @@ module OGR
|
|
174
174
|
# @param index [Integer]
|
175
175
|
# @raise [OGR::Failure]
|
176
176
|
def delete_layer(index)
|
177
|
-
unless test_capability(
|
177
|
+
unless test_capability("DeleteLayer")
|
178
178
|
raise OGR::UnsupportedOperation,
|
179
|
-
|
179
|
+
"This data source does not support deleting layers."
|
180
180
|
end
|
181
181
|
|
182
182
|
OGR::ErrorHandling.handle_ogr_err("Unable to delete layer at index #{index}") do
|
@@ -236,7 +236,7 @@ module OGR
|
|
236
236
|
|
237
237
|
# @raise [OGR::Failure]
|
238
238
|
def sync_to_disk
|
239
|
-
OGR::ErrorHandling.handle_ogr_err(
|
239
|
+
OGR::ErrorHandling.handle_ogr_err("Unable to syn datasource to disk") do
|
240
240
|
FFI::OGR::API.OGR_DS_SyncToDisk(@c_pointer)
|
241
241
|
end
|
242
242
|
end
|
data/lib/ogr/driver.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative
|
4
|
-
require_relative
|
5
|
-
require_relative
|
3
|
+
require_relative "../ogr"
|
4
|
+
require_relative "../gdal"
|
5
|
+
require_relative "../gdal/major_object"
|
6
6
|
|
7
7
|
module OGR
|
8
8
|
# Wrapper for OGR's Driver class. In this case, to use a driver, find the
|
@@ -69,7 +69,7 @@ module OGR
|
|
69
69
|
# @param file_name [String]
|
70
70
|
# @param access_flag [String] 'r' or 'w'.
|
71
71
|
# @return [OGR::DataSource, nil]
|
72
|
-
def open(file_name, access_flag =
|
72
|
+
def open(file_name, access_flag = "r")
|
73
73
|
update = OGR._boolean_access_flag(access_flag)
|
74
74
|
|
75
75
|
data_source_ptr = FFI::OGR::API.OGR_Dr_Open(@c_pointer, file_name, update)
|
@@ -87,8 +87,8 @@ module OGR
|
|
87
87
|
# @param options [Hash]
|
88
88
|
# @return [OGR::DataSource, nil]
|
89
89
|
def create_data_source(file_name, **options)
|
90
|
-
unless test_capability(
|
91
|
-
raise OGR::UnsupportedOperation,
|
90
|
+
unless test_capability("CreateDataSource")
|
91
|
+
raise OGR::UnsupportedOperation, "This driver does not support data source creation."
|
92
92
|
end
|
93
93
|
|
94
94
|
options_ptr = GDAL::Options.pointer(options)
|
@@ -97,7 +97,7 @@ module OGR
|
|
97
97
|
file_name, options_ptr)
|
98
98
|
raise OGR::CreateFailure, "Unable to create DataSource '#{file_name}'" if data_source_ptr.null?
|
99
99
|
|
100
|
-
ds = OGR::DataSource.new(data_source_ptr,
|
100
|
+
ds = OGR::DataSource.new(data_source_ptr, "w")
|
101
101
|
yield ds if block_given?
|
102
102
|
|
103
103
|
ds
|
@@ -106,8 +106,8 @@ module OGR
|
|
106
106
|
# @param file_name [String]
|
107
107
|
# @raise [OGR::Failure]
|
108
108
|
def delete_data_source(file_name)
|
109
|
-
unless test_capability(
|
110
|
-
raise OGR::UnsupportedOperation,
|
109
|
+
unless test_capability("DeleteDataSource")
|
110
|
+
raise OGR::UnsupportedOperation, "This driver does not support deleting data sources."
|
111
111
|
end
|
112
112
|
|
113
113
|
OGR::ErrorHandling.handle_ogr_err("Unable to delete data source '#{file_name}'") do
|
data/lib/ogr/envelope.rb
CHANGED
data/lib/ogr/error_handling.rb
CHANGED
data/lib/ogr/extensions/all.rb
CHANGED
@@ -6,23 +6,23 @@ module OGR
|
|
6
6
|
module CapabilityMethods
|
7
7
|
# @return [Boolean] +true+ if the DataSource can create existing Layers.
|
8
8
|
def can_create_layer?
|
9
|
-
test_capability(
|
9
|
+
test_capability("CreateLayer")
|
10
10
|
end
|
11
11
|
|
12
12
|
# @return [Boolean] +true+ if the DataSource can delete existing Layers.
|
13
13
|
def can_delete_layer?
|
14
|
-
test_capability(
|
14
|
+
test_capability("DeleteLayer")
|
15
15
|
end
|
16
16
|
|
17
17
|
# @return [Boolean] +true+ if the DataSource supports creating a
|
18
18
|
# GeometryField after a Layer has been created.
|
19
19
|
def can_create_geometry_field_after_create_layer?
|
20
|
-
test_capability(
|
20
|
+
test_capability("CreateGeomFieldAfterCreateLayer")
|
21
21
|
end
|
22
22
|
|
23
23
|
# @return [Boolean] +true+ if the DataSource supports curve geometries.
|
24
24
|
def supports_curve_geometries?
|
25
|
-
test_capability(
|
25
|
+
test_capability("CurveGeometries")
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "ogr/driver"
|
4
4
|
|
5
5
|
module OGR
|
6
6
|
module DriverMixins
|
@@ -8,12 +8,12 @@ module OGR
|
|
8
8
|
module CapabilityMethods
|
9
9
|
# @return [Boolean] +true+ if this driver supports creating data sources.
|
10
10
|
def can_create_data_source?
|
11
|
-
test_capability(
|
11
|
+
test_capability("CreateDataSource")
|
12
12
|
end
|
13
13
|
|
14
14
|
# @return [Boolean] +true+ if this driver supports deleting data sources.
|
15
15
|
def can_delete_data_source?
|
16
|
-
test_capability(
|
16
|
+
test_capability("DeleteDataSource")
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|