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/extensions/all.rb
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
9
|
-
require
|
|
10
|
-
require
|
|
11
|
-
require
|
|
3
|
+
require "narray"
|
|
4
|
+
require "ffi-gdal"
|
|
5
|
+
require "gdal/dataset"
|
|
6
|
+
require "gdal/raster_band"
|
|
7
|
+
require "gdal/warp_operation"
|
|
8
|
+
require "ogr/driver"
|
|
9
|
+
require "ogr/layer"
|
|
10
|
+
require "ogr/spatial_reference"
|
|
11
|
+
require "ogr/coordinate_transformation"
|
|
12
12
|
|
|
13
13
|
module GDAL
|
|
14
14
|
class Dataset
|
|
@@ -97,8 +97,8 @@ module GDAL
|
|
|
97
97
|
# of Integers.
|
|
98
98
|
# @return [OGR::DataSource]
|
|
99
99
|
def to_vector(file_name, vector_driver_name, geometry_type: :wkbUnknown,
|
|
100
|
-
layer_name_prefix:
|
|
101
|
-
field_name_prefix:
|
|
100
|
+
layer_name_prefix: "band_number", band_numbers: [1],
|
|
101
|
+
field_name_prefix: "field", use_band_masks: true)
|
|
102
102
|
band_numbers = [band_numbers] unless band_numbers.is_a?(Array)
|
|
103
103
|
ogr_driver = OGR::Driver.by_name(vector_driver_name)
|
|
104
104
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "gdal/driver"
|
|
4
4
|
|
|
5
5
|
module GDAL
|
|
6
6
|
class Driver
|
|
@@ -60,32 +60,32 @@ module GDAL
|
|
|
60
60
|
|
|
61
61
|
# @return [Boolean]
|
|
62
62
|
def can_open_datasets?
|
|
63
|
-
metadata_item(
|
|
63
|
+
metadata_item("DCAP_OPEN") == "YES"
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
# @return [Boolean]
|
|
67
67
|
def can_create_datasets?
|
|
68
|
-
metadata_item(
|
|
68
|
+
metadata_item("DCAP_CREATE") == "YES"
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
# @return [Boolean]
|
|
72
72
|
def can_copy_datasets?
|
|
73
|
-
metadata_item(
|
|
73
|
+
metadata_item("DCAP_CREATECOPY") == "YES"
|
|
74
74
|
end
|
|
75
75
|
|
|
76
76
|
# @return [Boolean]
|
|
77
77
|
def can_do_virtual_io?
|
|
78
|
-
metadata_item(
|
|
78
|
+
metadata_item("DCAP_VIRTUALIO") == "YES"
|
|
79
79
|
end
|
|
80
80
|
|
|
81
81
|
# @return [Boolean]
|
|
82
82
|
def can_do_rasters?
|
|
83
|
-
metadata_item(
|
|
83
|
+
metadata_item("DCAP_RASTER") == "YES"
|
|
84
84
|
end
|
|
85
85
|
|
|
86
86
|
# @return [Boolean]
|
|
87
87
|
def can_do_vectors?
|
|
88
|
-
metadata_item(
|
|
88
|
+
metadata_item("DCAP_VECTOR") == "YES"
|
|
89
89
|
end
|
|
90
90
|
end
|
|
91
91
|
end
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require_relative
|
|
8
|
-
require_relative
|
|
3
|
+
require "narray"
|
|
4
|
+
require "gdal"
|
|
5
|
+
require "gdal/options"
|
|
6
|
+
require "ogr"
|
|
7
|
+
require_relative "gridder_options"
|
|
8
|
+
require_relative "gridder/point_extracting"
|
|
9
9
|
|
|
10
10
|
module GDAL
|
|
11
11
|
# Somewhat analogous to the gdal_grid utility.
|
|
@@ -95,7 +95,7 @@ module GDAL
|
|
|
95
95
|
spatial_ref = @options.output_projection || @source_layer.spatial_reference
|
|
96
96
|
|
|
97
97
|
unless spatial_ref
|
|
98
|
-
log
|
|
98
|
+
log "No spatial reference specified"
|
|
99
99
|
return
|
|
100
100
|
end
|
|
101
101
|
|
|
@@ -204,7 +204,7 @@ module GDAL
|
|
|
204
204
|
@options.grid.create(points, extents, data_ptr, output_size,
|
|
205
205
|
progress_arg, scaled_progress_ptr)
|
|
206
206
|
|
|
207
|
-
raster_band.raster_io(
|
|
207
|
+
raster_band.raster_io("w", data_ptr, x_offset: x_offset, y_offset: y_offset,
|
|
208
208
|
x_size: x_request, y_size: y_request,
|
|
209
209
|
buffer_x_size: x_request, buffer_y_size: y_request)
|
|
210
210
|
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
3
|
+
require "gdal/grid"
|
|
4
|
+
require "gdal/options"
|
|
5
|
+
require "ogr/exceptions"
|
|
6
|
+
require "ogr/geometry"
|
|
7
|
+
require "ogr/spatial_reference"
|
|
8
8
|
|
|
9
9
|
module GDAL
|
|
10
10
|
# Object to be used with a {GDAL::Gridder}.
|
|
@@ -123,7 +123,7 @@ module GDAL
|
|
|
123
123
|
def initialize(algorithm_type)
|
|
124
124
|
# Options with defaults
|
|
125
125
|
@output_data_type = :GDT_Float64
|
|
126
|
-
@output_format =
|
|
126
|
+
@output_format = "GTiff"
|
|
127
127
|
@output_size = { width: 256, height: 256 }
|
|
128
128
|
|
|
129
129
|
# Options without defaults
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "gdal/raster_band"
|
|
4
4
|
|
|
5
5
|
module GDAL
|
|
6
6
|
class RasterBand
|
|
@@ -66,11 +66,11 @@ module GDAL
|
|
|
66
66
|
|
|
67
67
|
unless erase_value
|
|
68
68
|
raise GDAL::NoRasterEraseValue,
|
|
69
|
-
|
|
69
|
+
"Cannot erase values, RasterBand does not have a NODATA value set"
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
y_size.times do |line_num|
|
|
73
|
-
pixel_row = raster_io(
|
|
73
|
+
pixel_row = raster_io("r", x_size: x_size, y_size: 1, x_offset: 0, y_offset: line_num)
|
|
74
74
|
pixel_values = GDAL._read_pointer(pixel_row, data_type, x_size)
|
|
75
75
|
row_changed = false
|
|
76
76
|
pixel_num = 0
|
|
@@ -101,7 +101,7 @@ module GDAL
|
|
|
101
101
|
# @param line_number [Integer]
|
|
102
102
|
def rewrite_pixel_row(write_buffer, pixel_values, line_number)
|
|
103
103
|
GDAL._write_pointer(write_buffer, data_type, pixel_values)
|
|
104
|
-
raster_io(
|
|
104
|
+
raster_io("w", write_buffer, x_size: x_size, y_size: 1, y_offset: line_number)
|
|
105
105
|
write_buffer.clear
|
|
106
106
|
end
|
|
107
107
|
end
|
|
@@ -76,7 +76,7 @@ module GDAL
|
|
|
76
76
|
|
|
77
77
|
# @param hex [String]
|
|
78
78
|
def hex_to_rgb(hex)
|
|
79
|
-
hex = hex.sub(/^#/,
|
|
79
|
+
hex = hex.sub(/^#/, "")
|
|
80
80
|
matches = hex.match(/(?<red>[a-zA-Z0-9]{2})(?<green>[a-zA-Z0-9]{2})(?<blue>[a-zA-Z0-9]{2})/)
|
|
81
81
|
|
|
82
82
|
[matches[:red].to_i(16), matches[:green].to_i(16), matches[:blue].to_i(16)]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "gdal/raster_band"
|
|
4
4
|
|
|
5
5
|
module GDAL
|
|
6
6
|
class RasterBand
|
|
@@ -14,7 +14,7 @@ module GDAL
|
|
|
14
14
|
return enum_for(:readlines) unless block_given?
|
|
15
15
|
|
|
16
16
|
y_size.times do |row_number|
|
|
17
|
-
scan_line = raster_io(
|
|
17
|
+
scan_line = raster_io("r", x_size: x_size, y_size: 1, y_offset: row_number)
|
|
18
18
|
line_array = GDAL._read_pointer(scan_line, data_type, x_size)
|
|
19
19
|
|
|
20
20
|
yield line_array
|
|
@@ -57,7 +57,7 @@ module GDAL
|
|
|
57
57
|
data_pointer = GDAL._pointer_from_data_type(data_type)
|
|
58
58
|
GDAL._write_pointer(data_pointer, data_type, new_value)
|
|
59
59
|
|
|
60
|
-
raster_io(
|
|
60
|
+
raster_io("w", data_pointer, x_size: 1, y_size: 1, x_offset: x, y_offset: y, buffer_x_size: 1, buffer_y_size: 1)
|
|
61
61
|
end
|
|
62
62
|
|
|
63
63
|
# Convenience method for directly getting a single pixel value.
|
|
@@ -66,7 +66,7 @@ module GDAL
|
|
|
66
66
|
# @param y [Integer] Row number of the pixel to get.
|
|
67
67
|
# @return [Number]
|
|
68
68
|
def pixel_value(x, y)
|
|
69
|
-
output = raster_io(
|
|
69
|
+
output = raster_io("r", x_size: 1, y_size: 1, x_offset: x, y_offset: y, buffer_x_size: 1, buffer_y_size: 1)
|
|
70
70
|
|
|
71
71
|
GDAL._read_pointer(output, data_type)
|
|
72
72
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require "gdal"
|
|
4
|
+
require "numo/narray"
|
|
5
5
|
|
|
6
6
|
module GDAL
|
|
7
7
|
# Takes a list of Ranges of color values and remaps them. Note that these
|
|
@@ -35,7 +35,7 @@ module GDAL
|
|
|
35
35
|
# @param range [Range] The range of values to map to a new value.
|
|
36
36
|
# @param map_to_value [Number]
|
|
37
37
|
def add_range(range, map_to_value)
|
|
38
|
-
raise
|
|
38
|
+
raise "range must be a Ruby Range" unless range.is_a? Range
|
|
39
39
|
|
|
40
40
|
@ranges << { range: range, map_to: map_to_value }
|
|
41
41
|
end
|
data/lib/gdal/geo_transform.rb
CHANGED
data/lib/gdal/grid.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require_relative
|
|
6
|
-
require_relative
|
|
3
|
+
require "forwardable"
|
|
4
|
+
require "narray"
|
|
5
|
+
require_relative "../gdal"
|
|
6
|
+
require_relative "grid_algorithms"
|
|
7
7
|
|
|
8
8
|
module GDAL
|
|
9
9
|
# Wrapper for GDAL's [Grid API](http://www.gdal.org/grid_tutorial.html).
|
|
@@ -38,7 +38,7 @@ module GDAL
|
|
|
38
38
|
points = points.to_a if points.is_a? NArray
|
|
39
39
|
point_count = points.length
|
|
40
40
|
log "Number of points: #{point_count}"
|
|
41
|
-
raise GDAL::NoValuesToGrid,
|
|
41
|
+
raise GDAL::NoValuesToGrid, "No points to grid" if point_count.zero?
|
|
42
42
|
|
|
43
43
|
points = points.transpose
|
|
44
44
|
x_input_coordinates_ptr = make_points_pointer(points[0])
|
|
@@ -73,7 +73,7 @@ module GDAL
|
|
|
73
73
|
|
|
74
74
|
# @param points [Array]
|
|
75
75
|
def make_points_pointer(points)
|
|
76
|
-
raise GDAL::Error,
|
|
76
|
+
raise GDAL::Error, "No points to make pointer for" if points.compact.empty?
|
|
77
77
|
|
|
78
78
|
input_coordinates_ptr = FFI::MemoryPointer.new(:double, points.length)
|
|
79
79
|
input_coordinates_ptr.write_array_of_double(points)
|
data/lib/gdal/grid_algorithms.rb
CHANGED
|
@@ -3,22 +3,22 @@
|
|
|
3
3
|
module GDAL
|
|
4
4
|
module GridAlgorithms
|
|
5
5
|
autoload :InverseDistanceToAPower,
|
|
6
|
-
File.expand_path(
|
|
6
|
+
File.expand_path("grid_algorithms/inverse_distance_to_a_power", __dir__)
|
|
7
7
|
autoload :MetricAverageDistance,
|
|
8
|
-
File.expand_path(
|
|
8
|
+
File.expand_path("grid_algorithms/metric_average_distance", __dir__)
|
|
9
9
|
autoload :MetricAverageDistancePts,
|
|
10
|
-
File.expand_path(
|
|
10
|
+
File.expand_path("grid_algorithms/metric_average_distance_pts", __dir__)
|
|
11
11
|
autoload :MetricCount,
|
|
12
|
-
File.expand_path(
|
|
12
|
+
File.expand_path("grid_algorithms/metric_count", __dir__)
|
|
13
13
|
autoload :MetricMaximum,
|
|
14
|
-
File.expand_path(
|
|
14
|
+
File.expand_path("grid_algorithms/metric_maximum", __dir__)
|
|
15
15
|
autoload :MetricMinimum,
|
|
16
|
-
File.expand_path(
|
|
16
|
+
File.expand_path("grid_algorithms/metric_minimum", __dir__)
|
|
17
17
|
autoload :MetricRange,
|
|
18
|
-
File.expand_path(
|
|
18
|
+
File.expand_path("grid_algorithms/metric_range", __dir__)
|
|
19
19
|
autoload :MovingAverage,
|
|
20
|
-
File.expand_path(
|
|
20
|
+
File.expand_path("grid_algorithms/moving_average", __dir__)
|
|
21
21
|
autoload :NearestNeighbor,
|
|
22
|
-
File.expand_path(
|
|
22
|
+
File.expand_path("grid_algorithms/nearest_neighbor", __dir__)
|
|
23
23
|
end
|
|
24
24
|
end
|
|
@@ -124,7 +124,7 @@ module GDAL
|
|
|
124
124
|
yield result_ptr_ptr
|
|
125
125
|
|
|
126
126
|
result = if result_ptr_ptr.null?
|
|
127
|
-
|
|
127
|
+
""
|
|
128
128
|
else
|
|
129
129
|
GDAL._read_pointer_pointer_safely(result_ptr_ptr, :string)
|
|
130
130
|
end
|
|
@@ -241,8 +241,8 @@ module GDAL
|
|
|
241
241
|
# @raise [GDAL::InvalidAccessFlag] If +char+ is not 'r' or 'w'.
|
|
242
242
|
def _gdal_access_flag(char)
|
|
243
243
|
case char
|
|
244
|
-
when
|
|
245
|
-
when
|
|
244
|
+
when "r" then :GF_Read
|
|
245
|
+
when "w" then :GF_Write
|
|
246
246
|
else raise GDAL::InvalidAccessFlag, "Invalid access flag: #{char}"
|
|
247
247
|
end
|
|
248
248
|
end
|
data/lib/gdal/logger.rb
CHANGED
data/lib/gdal/major_object.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative
|
|
4
|
-
require
|
|
3
|
+
require_relative "../gdal"
|
|
4
|
+
require "multi_xml"
|
|
5
5
|
|
|
6
6
|
module GDAL
|
|
7
7
|
module MajorObject
|
|
@@ -31,7 +31,7 @@ module GDAL
|
|
|
31
31
|
data_array = m.get_array_of_string(0)
|
|
32
32
|
|
|
33
33
|
data_array.each_with_object({}) do |key_value_pair, obj|
|
|
34
|
-
key, value = key_value_pair.split(
|
|
34
|
+
key, value = key_value_pair.split("=", 2)
|
|
35
35
|
|
|
36
36
|
begin
|
|
37
37
|
obj[key] = MultiXml.parse(value)
|
|
@@ -44,15 +44,15 @@ module GDAL
|
|
|
44
44
|
# @param name [String]
|
|
45
45
|
# @param domain [String]
|
|
46
46
|
# @return [String]
|
|
47
|
-
def metadata_item(name, domain =
|
|
47
|
+
def metadata_item(name, domain = "")
|
|
48
48
|
item, ptr = FFI::GDAL::GDAL.GDALGetMetadataItem(@c_pointer, name, domain)
|
|
49
49
|
ptr.autorelease = false
|
|
50
50
|
|
|
51
51
|
item
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
-
def set_metadata_item(name, value, domain =
|
|
55
|
-
GDAL::CPLErrorHandler.manually_handle(
|
|
54
|
+
def set_metadata_item(name, value, domain = "")
|
|
55
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to set metadata item") do
|
|
56
56
|
FFI::GDAL::GDAL.GDALSetMetadataItem(@c_pointer, name, value.to_s, domain)
|
|
57
57
|
end
|
|
58
58
|
end
|
data/lib/gdal/options.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "ffi"
|
|
4
4
|
|
|
5
5
|
module GDAL
|
|
6
6
|
# A wrapper for the way GDAL does key/value pair options for methods.
|
|
@@ -39,7 +39,7 @@ module GDAL
|
|
|
39
39
|
key_and_value, ptr = FFI::CPL::String.CSLGetField(pointer, i)
|
|
40
40
|
ptr.autorelease = false
|
|
41
41
|
|
|
42
|
-
key, value = key_and_value.split(
|
|
42
|
+
key, value = key_and_value.split("=")
|
|
43
43
|
o[key.downcase.to_sym] = value
|
|
44
44
|
end
|
|
45
45
|
end
|
|
@@ -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 RasterAttributeTable
|
|
@@ -13,7 +13,7 @@ module GDAL
|
|
|
13
13
|
color_table_ptr = GDAL._pointer(GDAL::ColorTable, color_table, autorelease: false)
|
|
14
14
|
rat_ptr = FFI::GDAL::GDAL.GDALCreateRasterAttributeTable
|
|
15
15
|
|
|
16
|
-
GDAL::CPLErrorHandler.manually_handle(
|
|
16
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to initialize from ColorTable") do
|
|
17
17
|
FFI::GDAL::GDAL.GDALRATInitializeFromColorTable(rat_ptr, color_table_ptr)
|
|
18
18
|
end
|
|
19
19
|
|
|
@@ -110,7 +110,7 @@ module GDAL
|
|
|
110
110
|
# @param usage [FFI::GDAL::GDALRATFieldUsage]
|
|
111
111
|
# @raise [GDAL::Error]
|
|
112
112
|
def create_column(name, type, usage)
|
|
113
|
-
GDAL::CPLErrorHandler.manually_handle(
|
|
113
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to create column") do
|
|
114
114
|
FFI::GDAL::GDAL.GDALRATCreateColumn(@c_pointer, name, type, usage)
|
|
115
115
|
end
|
|
116
116
|
end
|
|
@@ -202,7 +202,7 @@ module GDAL
|
|
|
202
202
|
# @param bin_size [Float]
|
|
203
203
|
# @raise [GDAL::Error]
|
|
204
204
|
def set_linear_binning(row_0_minimum, bin_size)
|
|
205
|
-
GDAL::CPLErrorHandler.manually_handle(
|
|
205
|
+
GDAL::CPLErrorHandler.manually_handle("Unable to set linear binning") do
|
|
206
206
|
FFI::GDAL::GDAL.GDALRATSetLinearBinning(@c_pointer, row_0_minimum, bin_size)
|
|
207
207
|
end
|
|
208
208
|
end
|
|
@@ -219,7 +219,7 @@ module GDAL
|
|
|
219
219
|
|
|
220
220
|
# @param file_path [String] Without giving a +file_path+, dumps to STDOUT.
|
|
221
221
|
def dump_readable(file_path = nil)
|
|
222
|
-
file_ptr = file_path ? FFI::CPL::Conv.CPLOpenShared(file_path,
|
|
222
|
+
file_ptr = file_path ? FFI::CPL::Conv.CPLOpenShared(file_path, "w", false) : nil
|
|
223
223
|
FFI::GDAL::GDAL.GDALRATDumpReadable(@c_pointer, file_ptr)
|
|
224
224
|
FFI::CPL::Conv.CPLCloseShared(file_ptr) if file_ptr
|
|
225
225
|
end
|