ffi-gdal 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +21 -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 +7 -7
- data/bin/rspec +7 -7
- data/bin/rubocop +7 -7
- 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 -15
- 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 +19 -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
|