ffi-gdal 1.0.0.beta6 → 1.0.0.beta11
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 +5 -5
- data/.rubocop.yml +54 -19
- data/.rubocop_todo.yml +65 -0
- data/.ruby-version +1 -1
- data/Gemfile +2 -0
- data/History.md +74 -0
- data/README.md +5 -0
- data/Rakefile +11 -1
- data/bitbucket-pipelines.yml +16 -0
- data/examples/extract_and_colorize.rb +7 -10
- data/examples/geometries.rb +68 -1
- data/examples/gridding.rb +2 -0
- data/examples/ogr_layer_to_layer.rb +2 -0
- data/examples/raster_erasing.rb +15 -8
- data/examples/remove_small_polygons.rb +2 -0
- data/examples/testing_gdal.rb +9 -2
- data/examples/warping.rb +23 -5
- data/ffi-gdal.gemspec +7 -4
- data/lib/ext/error_symbols.rb +2 -0
- data/lib/ext/ffi_library_function_checks.rb +2 -0
- data/lib/ext/float_ext.rb +2 -0
- data/lib/ext/narray_ext.rb +2 -0
- data/lib/ext/numeric_as_data_type.rb +2 -0
- data/lib/ext/to_bool.rb +5 -3
- data/lib/ffi-gdal.rb +2 -0
- data/lib/ffi/cpl.rb +2 -0
- data/lib/ffi/cpl/conv.rb +4 -2
- data/lib/ffi/cpl/error.rb +2 -0
- data/lib/ffi/cpl/hash_set.rb +2 -0
- data/lib/ffi/cpl/http.rb +2 -0
- data/lib/ffi/cpl/http_result.rb +2 -0
- data/lib/ffi/cpl/list.rb +2 -0
- data/lib/ffi/cpl/mime_part.rb +2 -0
- data/lib/ffi/cpl/minixml.rb +2 -0
- data/lib/ffi/cpl/port.rb +2 -0
- data/lib/ffi/cpl/progress.rb +2 -0
- data/lib/ffi/cpl/quad_tree.rb +2 -0
- data/lib/ffi/cpl/rect_obj.rb +2 -0
- data/lib/ffi/cpl/string.rb +2 -0
- data/lib/ffi/cpl/vsi.rb +2 -0
- data/lib/ffi/cpl/xml_node.rb +2 -0
- data/lib/ffi/gdal.rb +3 -3
- data/lib/ffi/gdal/alg.rb +2 -0
- data/lib/ffi/gdal/color_entry.rb +2 -0
- data/lib/ffi/gdal/exceptions.rb +2 -0
- data/lib/ffi/gdal/gcp.rb +2 -0
- data/lib/ffi/gdal/gdal.rb +2 -0
- data/lib/ffi/gdal/grid.rb +2 -0
- data/lib/ffi/gdal/grid_data_metrics_options.rb +2 -0
- data/lib/ffi/gdal/grid_inverse_distance_to_a_power_options.rb +2 -0
- data/lib/ffi/gdal/grid_moving_average_options.rb +2 -0
- data/lib/ffi/gdal/grid_nearest_neighbor_options.rb +2 -0
- data/lib/ffi/gdal/matching.rb +2 -0
- data/lib/ffi/gdal/rpc_info.rb +2 -0
- data/lib/ffi/gdal/transformer_info.rb +2 -0
- data/lib/ffi/gdal/version.rb +3 -1
- data/lib/ffi/gdal/vrt.rb +2 -0
- data/lib/ffi/gdal/warp_options.rb +9 -4
- data/lib/ffi/gdal/warper.rb +19 -1
- data/lib/ffi/ogr.rb +2 -0
- data/lib/ffi/ogr/api.rb +2 -0
- data/lib/ffi/ogr/contour_writer_info.rb +2 -0
- data/lib/ffi/ogr/core.rb +2 -0
- data/lib/ffi/ogr/envelope.rb +2 -0
- data/lib/ffi/ogr/envelope_3d.rb +2 -0
- data/lib/ffi/ogr/featurestyle.rb +2 -0
- data/lib/ffi/ogr/field.rb +2 -0
- data/lib/ffi/ogr/geocoding.rb +2 -0
- data/lib/ffi/ogr/srs_api.rb +3 -0
- data/lib/ffi/ogr/style_param.rb +2 -0
- data/lib/ffi/ogr/style_value.rb +2 -0
- data/lib/gdal.rb +3 -0
- data/lib/gdal/color_entry.rb +2 -0
- data/lib/gdal/color_entry_mixins/extensions.rb +2 -14
- data/lib/gdal/color_interpretation.rb +2 -0
- data/lib/gdal/color_table.rb +2 -0
- data/lib/gdal/color_table_mixins/extensions.rb +3 -17
- data/lib/gdal/color_table_types/cmyk.rb +2 -0
- data/lib/gdal/color_table_types/gray.rb +2 -0
- data/lib/gdal/color_table_types/hls.rb +2 -0
- data/lib/gdal/color_table_types/rgb.rb +2 -0
- data/lib/gdal/cpl_error_handler.rb +2 -0
- data/lib/gdal/data_type.rb +2 -0
- data/lib/gdal/dataset.rb +11 -7
- data/lib/gdal/dataset_mixins/algorithm_methods.rb +7 -4
- data/lib/gdal/dataset_mixins/extensions.rb +7 -47
- data/lib/gdal/dataset_mixins/matching.rb +4 -1
- data/lib/gdal/dataset_mixins/warp_methods.rb +52 -11
- data/lib/gdal/driver.rb +6 -8
- data/lib/gdal/driver_mixins/extensions.rb +2 -0
- data/lib/gdal/environment_methods.rb +2 -0
- data/lib/gdal/exceptions.rb +2 -0
- data/lib/gdal/geo_transform.rb +3 -3
- data/lib/gdal/geo_transform_mixins/extensions.rb +2 -17
- data/lib/gdal/grid.rb +4 -1
- data/lib/gdal/grid_algorithms.rb +2 -0
- data/lib/gdal/grid_algorithms/data_metrics_base.rb +2 -0
- data/lib/gdal/grid_algorithms/inverse_distance_to_a_power.rb +2 -0
- data/lib/gdal/grid_algorithms/metric_average_distance.rb +2 -0
- data/lib/gdal/grid_algorithms/metric_average_distance_pts.rb +2 -0
- data/lib/gdal/grid_algorithms/metric_count.rb +2 -0
- data/lib/gdal/grid_algorithms/metric_maximum.rb +2 -0
- data/lib/gdal/grid_algorithms/metric_minimum.rb +2 -0
- data/lib/gdal/grid_algorithms/metric_range.rb +2 -0
- data/lib/gdal/grid_algorithms/moving_average.rb +2 -0
- data/lib/gdal/grid_algorithms/nearest_neighbor.rb +2 -0
- data/lib/gdal/gridder.rb +11 -3
- data/lib/gdal/gridder/point_extracting.rb +3 -2
- data/lib/gdal/gridder_options.rb +2 -0
- data/lib/gdal/internal_helpers.rb +3 -4
- data/lib/gdal/logger.rb +2 -0
- data/lib/gdal/major_object.rb +2 -0
- data/lib/gdal/merger.rb +2 -0
- data/lib/gdal/options.rb +16 -13
- data/lib/gdal/raster_attribute_table.rb +2 -0
- data/lib/gdal/raster_attribute_table_mixins/extensions.rb +3 -16
- data/lib/gdal/raster_band.rb +11 -6
- data/lib/gdal/raster_band_classifier.rb +52 -19
- data/lib/gdal/raster_band_mixins/algorithm_extensions.rb +2 -0
- data/lib/gdal/raster_band_mixins/algorithm_methods.rb +12 -5
- data/lib/gdal/raster_band_mixins/coloring_extensions.rb +3 -1
- data/lib/gdal/raster_band_mixins/extensions.rb +6 -35
- data/lib/gdal/raster_band_mixins/io_extensions.rb +7 -4
- data/lib/gdal/rpc_info.rb +2 -0
- data/lib/gdal/transformer.rb +2 -0
- data/lib/gdal/transformers/approximate_transformer.rb +4 -1
- data/lib/gdal/transformers/base_general_image_projection_transformer.rb +4 -1
- data/lib/gdal/transformers/gcp_transformer.rb +6 -2
- data/lib/gdal/transformers/general_image_projection_transformer.rb +2 -0
- data/lib/gdal/transformers/general_image_projection_transformer2.rb +4 -1
- data/lib/gdal/transformers/general_image_projection_transformer3.rb +4 -1
- data/lib/gdal/transformers/geolocation_transformer.rb +4 -1
- data/lib/gdal/transformers/reprojection_transformer.rb +2 -0
- data/lib/gdal/transformers/rpc_transformer.rb +4 -1
- data/lib/gdal/transformers/tps_transformer.rb +2 -0
- data/lib/gdal/version_info.rb +9 -7
- data/lib/gdal/virtual_dataset.rb +2 -0
- data/lib/gdal/warp_operation.rb +2 -0
- data/lib/gdal/warp_options.rb +105 -35
- data/lib/ogr.rb +2 -0
- data/lib/ogr/coordinate_transformation.rb +2 -0
- data/lib/ogr/data_source.rb +5 -9
- data/lib/ogr/data_source_extensions.rb +2 -19
- data/lib/ogr/data_source_mixins/capability_methods.rb +2 -0
- data/lib/ogr/driver.rb +4 -6
- data/lib/ogr/driver_mixins/capability_methods.rb +2 -0
- data/lib/ogr/envelope.rb +4 -2
- data/lib/ogr/envelope_extensions.rb +2 -22
- data/lib/ogr/error_handling.rb +3 -1
- data/lib/ogr/exceptions.rb +3 -1
- data/lib/ogr/feature.rb +17 -9
- data/lib/ogr/feature_definition.rb +7 -4
- data/lib/ogr/feature_definition_extensions.rb +2 -18
- data/lib/ogr/feature_extensions.rb +2 -27
- data/lib/ogr/field.rb +5 -1
- data/lib/ogr/field_definition.rb +5 -6
- data/lib/ogr/geocoder.rb +2 -0
- data/lib/ogr/geometries/geometry_collection.rb +2 -0
- data/lib/ogr/geometries/geometry_collection_25d.rb +2 -0
- data/lib/ogr/geometries/line_string.rb +2 -1
- data/lib/ogr/geometries/line_string_25d.rb +2 -0
- data/lib/ogr/geometries/linear_ring.rb +2 -0
- data/lib/ogr/geometries/multi_line_string.rb +2 -0
- data/lib/ogr/geometries/multi_line_string_25d.rb +2 -0
- data/lib/ogr/geometries/multi_point.rb +2 -0
- data/lib/ogr/geometries/multi_point_25d.rb +2 -0
- data/lib/ogr/geometries/multi_polygon.rb +2 -0
- data/lib/ogr/geometries/multi_polygon_25d.rb +2 -0
- data/lib/ogr/geometries/none_geometry.rb +2 -0
- data/lib/ogr/geometries/point.rb +2 -0
- data/lib/ogr/geometries/point_25d.rb +2 -0
- data/lib/ogr/geometries/polygon.rb +2 -0
- data/lib/ogr/geometries/polygon_25d.rb +2 -0
- data/lib/ogr/geometries/unknown_geometry.rb +2 -0
- data/lib/ogr/geometry.rb +3 -4
- data/lib/ogr/geometry_field_definition.rb +3 -4
- data/lib/ogr/geometry_mixins/container_mixins.rb +2 -0
- data/lib/ogr/geometry_mixins/extensions.rb +10 -39
- data/lib/ogr/geometry_types/container.rb +2 -0
- data/lib/ogr/geometry_types/curve.rb +3 -1
- data/lib/ogr/geometry_types/surface.rb +2 -0
- data/lib/ogr/internal_helpers.rb +2 -0
- data/lib/ogr/layer.rb +5 -1
- data/lib/ogr/layer_mixins/capability_methods.rb +2 -0
- data/lib/ogr/layer_mixins/extensions.rb +9 -27
- data/lib/ogr/layer_mixins/ogr_feature_methods.rb +6 -12
- data/lib/ogr/layer_mixins/ogr_field_methods.rb +10 -14
- data/lib/ogr/layer_mixins/ogr_layer_method_methods.rb +2 -0
- data/lib/ogr/layer_mixins/ogr_query_filter_methods.rb +8 -3
- data/lib/ogr/layer_mixins/ogr_sql_methods.rb +3 -3
- data/lib/ogr/spatial_reference.rb +12 -2
- data/lib/ogr/spatial_reference_extensions.rb +2 -26
- data/lib/ogr/spatial_reference_mixins/coordinate_system_getter_setters.rb +12 -5
- data/lib/ogr/spatial_reference_mixins/exporters.rb +2 -0
- data/lib/ogr/spatial_reference_mixins/importers.rb +6 -2
- data/lib/ogr/spatial_reference_mixins/morphers.rb +2 -0
- data/lib/ogr/spatial_reference_mixins/parameter_getter_setters.rb +2 -0
- data/lib/ogr/spatial_reference_mixins/type_checks.rb +2 -0
- data/lib/ogr/style_table.rb +2 -0
- data/lib/ogr/style_table_extensions.rb +2 -10
- data/lib/ogr/style_tool.rb +2 -0
- data/spec/ffi-gdal_spec.rb +2 -0
- data/spec/integration/gdal/color_table_info_spec.rb +2 -0
- data/spec/integration/gdal/dataset_info_spec.rb +15 -13
- data/spec/integration/gdal/driver_info_spec.rb +3 -1
- data/spec/integration/gdal/geo_transform_info_spec.rb +2 -0
- data/spec/integration/gdal/gridder_spec.rb +2 -0
- data/spec/integration/gdal/raster_attribute_table_info_spec.rb +2 -0
- data/spec/integration/gdal/raster_band_algorithms_spec.rb +2 -0
- data/spec/integration/gdal/raster_band_info_spec.rb +37 -15
- data/spec/integration/ogr/layer_spec.rb +2 -6
- data/spec/spec_helper.rb +3 -1
- data/spec/support/images/123.tiff +0 -0
- data/spec/support/integration_help.rb +2 -0
- data/spec/support/shared_contexts.rb +2 -0
- data/spec/support/shared_examples/gdal/major_object_examples.rb +2 -0
- data/spec/support/shared_examples/ogr/{a_25D_geometry.rb → a_25d_geometry.rb} +2 -0
- data/spec/support/shared_examples/ogr/a_container_geometry.rb +2 -0
- data/spec/support/shared_examples/ogr/a_geometry.rb +3 -1
- data/spec/support/shared_examples/ogr/a_line_string.rb +2 -0
- data/spec/unit/ext/error_symbols_spec.rb +2 -0
- data/spec/unit/ext/numeric_as_data_type_spec.rb +2 -0
- data/spec/unit/ffi/gdal_spec.rb +3 -0
- data/spec/unit/gdal/color_entry_spec.rb +2 -0
- data/spec/unit/gdal/color_interpretation_spec.rb +2 -0
- data/spec/unit/gdal/color_table_mixins/extensions_spec.rb +2 -0
- data/spec/unit/gdal/color_table_spec.rb +2 -0
- data/spec/unit/gdal/data_type_spec.rb +2 -0
- data/spec/unit/gdal/dataset_mixins/warp_methods_spec.rb +55 -0
- data/spec/unit/gdal/dataset_spec.rb +2 -0
- data/spec/unit/gdal/driver_mixins/extensions_spec.rb +2 -0
- data/spec/unit/gdal/driver_spec.rb +2 -0
- data/spec/unit/gdal/environment_methods_spec.rb +2 -0
- data/spec/unit/gdal/geo_transform_mixins/extensions_spec.rb +2 -0
- data/spec/unit/gdal/geo_transform_spec.rb +2 -13
- data/spec/unit/gdal/grid_spec.rb +10 -0
- data/spec/unit/gdal/gridder/point_extracting_spec.rb +2 -0
- data/spec/unit/gdal/gridder_options_spec.rb +2 -0
- data/spec/unit/gdal/gridder_spec.rb +42 -0
- data/spec/unit/gdal/internal_helpers_spec.rb +2 -0
- data/spec/unit/gdal/major_object_spec.rb +2 -0
- data/spec/unit/gdal/options_spec.rb +28 -1
- data/spec/unit/gdal/raster_attribute_table_spec.rb +2 -0
- data/spec/unit/gdal/raster_band_classifier_spec.rb +43 -5
- data/spec/unit/gdal/raster_band_mixins/extensions_spec.rb +2 -0
- data/spec/unit/gdal/raster_band_mixins/io_extensions_spec.rb +2 -0
- data/spec/unit/gdal/raster_band_spec.rb +2 -0
- data/spec/unit/gdal/rpc_info_spec.rb +2 -0
- data/spec/unit/gdal/version_info_spec.rb +2 -0
- data/spec/unit/gdal/virtual_dataset_spec.rb +2 -0
- data/spec/unit/gdal/warp_operation_spec.rb +2 -0
- data/spec/unit/gdal/warp_options_spec.rb +338 -0
- data/spec/unit/ogr/coordinate_transformation_spec.rb +2 -0
- data/spec/unit/ogr/data_source_mixins/capability_methods_spec.rb +2 -0
- data/spec/unit/ogr/data_source_spec.rb +2 -0
- data/spec/unit/ogr/driver_mixins/capability_methods_spec.rb +2 -0
- data/spec/unit/ogr/driver_spec.rb +3 -1
- data/spec/unit/ogr/envelope_spec.rb +2 -0
- data/spec/unit/ogr/feature_definition_spec.rb +2 -19
- data/spec/unit/ogr/feature_extensions_spec.rb +3 -1
- data/spec/unit/ogr/feature_spec.rb +3 -3
- data/spec/unit/ogr/field_definition_spec.rb +2 -19
- data/spec/unit/ogr/field_spec.rb +3 -1
- data/spec/unit/ogr/geometries/geometry_collection_25d_spec.rb +2 -0
- data/spec/unit/ogr/geometries/geometry_collection_spec.rb +2 -0
- data/spec/unit/ogr/geometries/line_string_25d_spec.rb +2 -0
- data/spec/unit/ogr/geometries/line_string_spec.rb +2 -0
- data/spec/unit/ogr/geometries/linear_ring_spec.rb +2 -0
- data/spec/unit/ogr/geometries/multi_line_string_25d_spec.rb +2 -0
- data/spec/unit/ogr/geometries/multi_line_string_spec.rb +2 -0
- data/spec/unit/ogr/geometries/multi_point_25d_spec.rb +2 -0
- data/spec/unit/ogr/geometries/multi_point_spec.rb +2 -0
- data/spec/unit/ogr/geometries/multi_polygon_25d_spec.rb +2 -0
- data/spec/unit/ogr/geometries/multi_polygon_spec.rb +2 -0
- data/spec/unit/ogr/geometries/none_geometry_spec.rb +2 -0
- data/spec/unit/ogr/geometries/point_25d_spec.rb +2 -0
- data/spec/unit/ogr/geometries/point_spec.rb +2 -0
- data/spec/unit/ogr/geometries/polygon_25d_spec.rb +2 -0
- data/spec/unit/ogr/geometries/polygon_spec.rb +2 -0
- data/spec/unit/ogr/geometries/unknown_geometry_spec.rb +2 -0
- data/spec/unit/ogr/geometry_field_definition_spec.rb +2 -16
- data/spec/unit/ogr/geometry_spec.rb +2 -0
- data/spec/unit/ogr/internal_helpers_spec.rb +2 -0
- data/spec/unit/ogr/layer_mixins/capability_methods_spec.rb +2 -0
- data/spec/unit/ogr/layer_mixins/ogr_feature_methods_spec.rb +2 -0
- data/spec/unit/ogr/layer_mixins/ogr_field_methods_spec.rb +2 -0
- data/spec/unit/ogr/layer_mixins/ogr_layer_method_methods_spec.rb +2 -0
- data/spec/unit/ogr/layer_mixins/ogr_query_filter_methods_spec.rb +2 -0
- data/spec/unit/ogr/layer_mixins/ogr_sql_methods_spec.rb +2 -0
- data/spec/unit/ogr/layer_spec.rb +2 -0
- data/spec/unit/ogr/spatial_reference_mixins/coordinate_system_getter_setters_spec.rb +2 -0
- data/spec/unit/ogr/spatial_reference_mixins/exporters_spec.rb +19 -15
- data/spec/unit/ogr/spatial_reference_mixins/importers_spec.rb +2 -0
- data/spec/unit/ogr/spatial_reference_mixins/morphers_spec.rb +9 -7
- data/spec/unit/ogr/spatial_reference_mixins/parameter_getter_setters_spec.rb +2 -0
- data/spec/unit/ogr/spatial_reference_mixins/type_checks_spec.rb +2 -0
- data/spec/unit/ogr/spatial_reference_spec.rb +4 -2
- data/spec/unit/ogr/style_table_spec.rb +2 -26
- data/spec/unit/ogr/style_tool_spec.rb +2 -0
- data/spec/unit/version_info_spec.rb +2 -0
- metadata +47 -15
- data/lib/ogr/field_definition_extensions.rb +0 -22
- data/lib/ogr/geometry_field_definition_extensions.rb +0 -19
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'json'
|
2
4
|
|
3
5
|
module GDAL
|
@@ -10,7 +12,7 @@ module GDAL
|
|
10
12
|
case value.class
|
11
13
|
when String then set_value_as_string(row, field, value)
|
12
14
|
when Float then set_value_as_double(row, field, value)
|
13
|
-
when
|
15
|
+
when Integer then set_value_as_integer(row, field, value)
|
14
16
|
else raise GDAL::UnknownRasterAttributeTableType, "Unknown value type for value '#{value}'"
|
15
17
|
end
|
16
18
|
end
|
@@ -39,21 +41,6 @@ module GDAL
|
|
39
41
|
|
40
42
|
column_count.times { |i| yield column(i) }
|
41
43
|
end
|
42
|
-
|
43
|
-
# @return [Hash]
|
44
|
-
def as_json(_options = nil)
|
45
|
-
{
|
46
|
-
column_count: column_count,
|
47
|
-
columns: columns,
|
48
|
-
linear_binning: linear_binning,
|
49
|
-
row_count: row_count
|
50
|
-
}
|
51
|
-
end
|
52
|
-
|
53
|
-
# @return [String]
|
54
|
-
def to_json(options = nil)
|
55
|
-
as_json(options).to_json
|
56
|
-
end
|
57
44
|
end
|
58
45
|
end
|
59
46
|
end
|
data/lib/gdal/raster_band.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'narray'
|
4
|
+
require 'numo/narray'
|
2
5
|
require_relative '../gdal'
|
3
6
|
require_relative 'raster_band_mixins/algorithm_extensions'
|
4
7
|
require_relative 'raster_band_mixins/algorithm_methods'
|
@@ -138,7 +141,7 @@ module GDAL
|
|
138
141
|
def category_names=(names)
|
139
142
|
names_pointer = GDAL._string_array_to_pointer(names)
|
140
143
|
|
141
|
-
|
144
|
+
FFI::GDAL::GDAL.GDALSetRasterCategoryNames(@c_pointer, names_pointer)
|
142
145
|
end
|
143
146
|
|
144
147
|
# The no data value for a band is generally a special marker value used to
|
@@ -149,16 +152,18 @@ module GDAL
|
|
149
152
|
def no_data_value
|
150
153
|
associated = FFI::MemoryPointer.new(:bool)
|
151
154
|
value = FFI::GDAL::GDAL.GDALGetRasterNoDataValue(@c_pointer, associated)
|
155
|
+
value = nil if value == -10_000_000_000.0
|
152
156
|
|
153
157
|
{ value: value, is_associated: associated.read_bytes(1).to_bool }
|
154
158
|
end
|
155
159
|
|
156
|
-
# Sets the no data value for this band.
|
160
|
+
# Sets the no data value for this band. Do nothing if attempting to set to nil, because removing a no data value
|
161
|
+
# is impossible until GDAL 2.1.
|
157
162
|
#
|
158
|
-
# @param value [Float]
|
163
|
+
# @param value [Float, nil]
|
159
164
|
# @return [Boolean]
|
160
165
|
def no_data_value=(value)
|
161
|
-
!!FFI::GDAL::GDAL.GDALSetRasterNoDataValue(@c_pointer, value)
|
166
|
+
!!FFI::GDAL::GDAL.GDALSetRasterNoDataValue(@c_pointer, value) if value
|
162
167
|
end
|
163
168
|
|
164
169
|
# @return [Fixnum]
|
@@ -214,7 +219,7 @@ module GDAL
|
|
214
219
|
flag_list.reverse_each.with_index do |flag, i|
|
215
220
|
flag = flag.to_i
|
216
221
|
|
217
|
-
if i
|
222
|
+
if i.zero? && flag == 1
|
218
223
|
flags << :GMF_ALL_VALID
|
219
224
|
elsif i == 1 && flag == 1
|
220
225
|
flags << :GMF_PER_DATASET
|
@@ -271,7 +276,7 @@ module GDAL
|
|
271
276
|
standard_deviation = FFI::MemoryPointer.new(:double)
|
272
277
|
|
273
278
|
handler = GDAL::CPLErrorHandler.new
|
274
|
-
handler.on_warning = proc {
|
279
|
+
handler.on_warning = proc { {} }
|
275
280
|
handler.on_none = proc do
|
276
281
|
{
|
277
282
|
minimum: min.read_double,
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../gdal'
|
2
4
|
|
3
5
|
module GDAL
|
@@ -49,19 +51,22 @@ module GDAL
|
|
49
51
|
# @param range_count [Fixnum] The number of ranges to create.
|
50
52
|
# @return [Array<Hash>, nil]
|
51
53
|
def equal_count_ranges(range_count)
|
52
|
-
|
53
|
-
|
54
|
-
|
54
|
+
pixels = @raster_band.to_nna
|
55
|
+
masked_pixels = masked_pixels(pixels)
|
56
|
+
|
57
|
+
return [] if masked_pixels.empty?
|
55
58
|
|
59
|
+
sorted_and_masked_pixels = masked_pixels.to_a.sort
|
56
60
|
range_size = (sorted_and_masked_pixels.size / range_count).to_i
|
57
61
|
|
58
|
-
log "Masked pixel count/total pixel count: #{sorted_and_masked_pixels.size}/#{
|
62
|
+
log "Masked pixel count/total pixel count: #{sorted_and_masked_pixels.size}/#{pixels.size}"
|
59
63
|
log "Min pixel value: #{sorted_and_masked_pixels.min}"
|
60
64
|
log "Max pixel value: #{sorted_and_masked_pixels.max}"
|
61
65
|
log "Range size: #{range_size}"
|
62
66
|
|
63
67
|
break_values = Array.new(range_count) { |i| sorted_and_masked_pixels[range_size * i] }.uniq
|
64
68
|
log "Break values: #{break_values}"
|
69
|
+
|
65
70
|
return if break_values.uniq.size != range_count
|
66
71
|
|
67
72
|
breakpoint_calculator = lambda do |range_number|
|
@@ -71,13 +76,9 @@ module GDAL
|
|
71
76
|
range_for_type(min, max)
|
72
77
|
end
|
73
78
|
|
74
|
-
|
79
|
+
Array.new(range_count) do |i|
|
75
80
|
range = breakpoint_calculator.call(i)
|
76
|
-
|
77
|
-
ranges << {
|
78
|
-
range: range,
|
79
|
-
map_to: (i + 1).to_data_type(@raster_band.data_type)
|
80
|
-
}
|
81
|
+
{ range: range, map_to: (i + 1).to_data_type(@raster_band.data_type) }
|
81
82
|
end
|
82
83
|
end
|
83
84
|
|
@@ -86,26 +87,58 @@ module GDAL
|
|
86
87
|
# values, so if you don't want to overwrite the Dataset you're working with,
|
87
88
|
# you should copy it first.
|
88
89
|
def classify!
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
90
|
+
band_pixels = @raster_band.to_nna
|
91
|
+
new_band_pixels = band_pixels.clone
|
92
|
+
data_pixels = if nodata_value
|
93
|
+
nodata_is_nan? ? ~band_pixels.isnan : band_pixels.ne(nodata_value)
|
94
|
+
else
|
95
|
+
Numo::Bit.cast(band_pixels.new_ones)
|
96
|
+
end
|
93
97
|
|
94
98
|
@ranges.each do |r|
|
95
|
-
new_band_pixels[
|
96
|
-
band_pixels.ne(nodata_value).
|
97
|
-
and(band_pixels.le(r[:range].max)).
|
98
|
-
and(band_pixels.ge(r[:range].min))
|
99
|
-
] = r[:map_to]
|
99
|
+
new_band_pixels[data_pixels & band_pixels.le(r[:range].max) & band_pixels.ge(r[:range].min)] = r[:map_to]
|
100
100
|
end
|
101
101
|
|
102
|
+
mask_nan(new_band_pixels, data_pixels) if nodata_is_nan?
|
102
103
|
@raster_band.write_xy_narray(new_band_pixels)
|
103
104
|
end
|
104
105
|
|
106
|
+
# @return [Numeric] NODATA value for the @raster_band.
|
107
|
+
def nodata_value
|
108
|
+
@raster_band.no_data_value[:value]
|
109
|
+
end
|
110
|
+
|
111
|
+
# @return [Boolean] True if NODATA is NaN.
|
112
|
+
def nodata_is_nan?
|
113
|
+
nodata_value.is_a?(Float) && nodata_value.nan?
|
114
|
+
end
|
115
|
+
|
105
116
|
private
|
106
117
|
|
118
|
+
# @param pixels [Numo::NArray]
|
119
|
+
# @return [Numo::NArray]
|
120
|
+
def masked_pixels(pixels)
|
121
|
+
no_data = @raster_band.no_data_value[:value]
|
122
|
+
|
123
|
+
if no_data
|
124
|
+
mask = no_data.is_a?(Float) && no_data.nan? ? ~pixels.isnan : pixels.ne(no_data)
|
125
|
+
pixels[mask]
|
126
|
+
else
|
127
|
+
pixels
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
107
131
|
def range_for_type(min, max)
|
108
132
|
min.to_data_type(@raster_band.data_type)..max.to_data_type(@raster_band.data_type)
|
109
133
|
end
|
134
|
+
|
135
|
+
# Set nodata pixels to 0 and set the nodata value to 0.
|
136
|
+
#
|
137
|
+
# @param new_band_pixels [Numo::NArray]
|
138
|
+
# @param data_pixels [Numo::Bit]
|
139
|
+
def mask_nan(new_band_pixels, data_pixels)
|
140
|
+
new_band_pixels[~data_pixels] = 0
|
141
|
+
@raster_band.no_data_value = 0
|
142
|
+
end
|
110
143
|
end
|
111
144
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GDAL
|
2
4
|
module RasterBandMixins
|
3
5
|
module AlgorithmMethods
|
@@ -34,7 +36,8 @@ module GDAL
|
|
34
36
|
colors,
|
35
37
|
color_table.c_pointer,
|
36
38
|
progress_function,
|
37
|
-
progress_arg
|
39
|
+
progress_arg
|
40
|
+
)
|
38
41
|
|
39
42
|
color_table
|
40
43
|
end
|
@@ -75,7 +78,8 @@ module GDAL
|
|
75
78
|
output_ptr,
|
76
79
|
color_table_ptr,
|
77
80
|
progress_function,
|
78
|
-
progress_arg
|
81
|
+
progress_arg
|
82
|
+
)
|
79
83
|
|
80
84
|
output_band
|
81
85
|
end
|
@@ -97,7 +101,8 @@ module GDAL
|
|
97
101
|
x_offset,
|
98
102
|
y_offset,
|
99
103
|
x_size,
|
100
|
-
y_size
|
104
|
+
y_size
|
105
|
+
)
|
101
106
|
end
|
102
107
|
|
103
108
|
# Computes the proximity of all pixels in the proximity_band to those in
|
@@ -134,7 +139,8 @@ module GDAL
|
|
134
139
|
proximity_band_ptr,
|
135
140
|
options_ptr,
|
136
141
|
progress_function,
|
137
|
-
progress_arg
|
142
|
+
progress_arg
|
143
|
+
)
|
138
144
|
end
|
139
145
|
|
140
146
|
# Fill selected raster regions by interpolation from the edges. It
|
@@ -324,7 +330,8 @@ module GDAL
|
|
324
330
|
connectedness,
|
325
331
|
options_ptr,
|
326
332
|
progress_function,
|
327
|
-
progress_arg
|
333
|
+
progress_arg
|
334
|
+
)
|
328
335
|
end
|
329
336
|
end
|
330
337
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GDAL
|
2
4
|
module RasterBandMixins
|
3
5
|
# RasterBand methods added for dealing with colorizing.
|
@@ -74,7 +76,7 @@ module GDAL
|
|
74
76
|
|
75
77
|
# @param hex [String]
|
76
78
|
def hex_to_rgb(hex)
|
77
|
-
hex.sub
|
79
|
+
hex = hex.sub(/^#/, '')
|
78
80
|
matches = hex.match(/(?<red>[a-zA-Z0-9]{2})(?<green>[a-zA-Z0-9]{2})(?<blue>[a-zA-Z0-9]{2})/)
|
79
81
|
|
80
82
|
[matches[:red].to_i(16), matches[:green].to_i(16), matches[:blue].to_i(16)]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'json'
|
2
4
|
|
3
5
|
module GDAL
|
@@ -35,6 +37,10 @@ module GDAL
|
|
35
37
|
narray.to_type(narray_type)
|
36
38
|
end
|
37
39
|
|
40
|
+
def to_nna
|
41
|
+
Numo::NArray[to_a]
|
42
|
+
end
|
43
|
+
|
38
44
|
# Each pixel of the raster projected using the dataset's geo_transform.
|
39
45
|
# The output NArray is a 3D array where the inner-most array is a the
|
40
46
|
# lat an lon, those are contained in an array per pixel line, and finally
|
@@ -62,41 +68,6 @@ module GDAL
|
|
62
68
|
def pixel_count
|
63
69
|
x_size * y_size
|
64
70
|
end
|
65
|
-
|
66
|
-
# @return [Hash]
|
67
|
-
def as_json(_options = nil)
|
68
|
-
{
|
69
|
-
raster_band: {
|
70
|
-
block_size: block_size,
|
71
|
-
category_names: category_names,
|
72
|
-
color_interpretation: color_interpretation,
|
73
|
-
color_table: color_table,
|
74
|
-
data_type: data_type,
|
75
|
-
default_histogram: default_histogram(true),
|
76
|
-
default_raster_attribute_table: default_raster_attribute_table,
|
77
|
-
has_arbitrary_overviews: arbitrary_overviews?,
|
78
|
-
mask_flags: mask_flags,
|
79
|
-
maximum_value: maximum_value,
|
80
|
-
minimum_value: minimum_value,
|
81
|
-
no_data_value: no_data_value,
|
82
|
-
number: number,
|
83
|
-
offset: offset,
|
84
|
-
overview_count: overview_count,
|
85
|
-
overviews: overviews,
|
86
|
-
scale: scale,
|
87
|
-
statistics: statistics,
|
88
|
-
unit_type: unit_type,
|
89
|
-
x_size: x_size,
|
90
|
-
y_size: y_size
|
91
|
-
},
|
92
|
-
metadata: all_metadata
|
93
|
-
}
|
94
|
-
end
|
95
|
-
|
96
|
-
# @return [String]
|
97
|
-
def to_json(options = nil)
|
98
|
-
as_json(options).to_json
|
99
|
-
end
|
100
71
|
end
|
101
72
|
end
|
102
73
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GDAL
|
2
4
|
module RasterBandMixins
|
3
5
|
# Methods for reading & writing RasterBands that didn't come from GDAL.
|
@@ -24,6 +26,7 @@ module GDAL
|
|
24
26
|
# @param pixel_array [NArray] The 2d list of pixels.
|
25
27
|
def write_xy_narray(pixel_array)
|
26
28
|
data_pointer = FFI::MemoryPointer.new(:buffer_out, block_buffer_size)
|
29
|
+
read_start = 0
|
27
30
|
|
28
31
|
block_count[:y].times do |y_block_number|
|
29
32
|
block_count[:x].times do |x_block_number|
|
@@ -31,14 +34,14 @@ module GDAL
|
|
31
34
|
x_block_size = calculate_x_block_size(x_block_number)
|
32
35
|
|
33
36
|
pixel_count_per_block = x_block_size * y_block_size
|
34
|
-
|
35
|
-
read_range = ((read_offset - 1) * pixel_count_per_block)...(read_offset * pixel_count_per_block)
|
37
|
+
read_range = (read_start...(read_start + pixel_count_per_block))
|
36
38
|
pixels = pixel_array[read_range]
|
37
39
|
GDAL._write_pointer(data_pointer, data_type, pixels.to_a)
|
38
40
|
|
39
41
|
write_block(x_block_number, y_block_number, data_pointer)
|
40
42
|
|
41
43
|
data_pointer.clear
|
44
|
+
read_start = read_range.end
|
42
45
|
end
|
43
46
|
end
|
44
47
|
end
|
@@ -69,7 +72,7 @@ module GDAL
|
|
69
72
|
# Determines not only x and y block counts (how many blocks there are in
|
70
73
|
# the raster band when using GDAL's suggested block size), but remainder
|
71
74
|
# x and y counts for when the total number of pixels and lines does not
|
72
|
-
# divide
|
75
|
+
# divide evenly using GDAL's block count.
|
73
76
|
#
|
74
77
|
# @return [Hash{x => Fixnum, x_remainder => Fixnum, y => Fixnum,
|
75
78
|
# y_remainder => Fixnum}]
|
@@ -135,7 +138,7 @@ module GDAL
|
|
135
138
|
read_block(x_block_number, y_block_number, data_pointer)
|
136
139
|
pixels = GDAL._read_pointer(data_pointer, data_type, block_buffer_size)
|
137
140
|
|
138
|
-
yield(pixels, x_block_size, y_block_size)
|
141
|
+
yield(Array(pixels), x_block_size, y_block_size)
|
139
142
|
end
|
140
143
|
end
|
141
144
|
end
|
data/lib/gdal/rpc_info.rb
CHANGED
data/lib/gdal/transformer.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GDAL
|
2
4
|
module Transformers
|
3
5
|
class ApproximateTransformer
|
@@ -18,7 +20,8 @@ module GDAL
|
|
18
20
|
@c_pointer = FFI::GDAL::Alg.GDALCreateApproxTransformer(
|
19
21
|
base_transformer_function,
|
20
22
|
transformer_arg_ptr,
|
21
|
-
max_error
|
23
|
+
max_error
|
24
|
+
)
|
22
25
|
end
|
23
26
|
|
24
27
|
def destroy!
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GDAL
|
2
4
|
module Transformers
|
3
5
|
class BaseGeneralImageProjectionTransformer
|
@@ -32,7 +34,8 @@ module GDAL
|
|
32
34
|
geo_transform_ptr = GDAL._pointer(GDAL::GeoTransform, geo_transform)
|
33
35
|
|
34
36
|
FFI::GDAL::Alg.GDALSetGenImgProjTransformerDstGeoTransform(
|
35
|
-
@c_pointer, geo_transform_ptr
|
37
|
+
@c_pointer, geo_transform_ptr
|
38
|
+
)
|
36
39
|
end
|
37
40
|
end
|
38
41
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module GDAL
|
2
4
|
module Transformers
|
3
5
|
class GCPTransformer
|
@@ -25,13 +27,15 @@ module GDAL
|
|
25
27
|
gcp_list.size,
|
26
28
|
gcp_list_ptr,
|
27
29
|
requested_polynomial_order,
|
28
|
-
reversed
|
30
|
+
reversed
|
31
|
+
)
|
29
32
|
else
|
30
33
|
FFI::GDAL::Alg.GDALCreateGCPTransformer(
|
31
34
|
gcp_list.size,
|
32
35
|
gcp_list_ptr,
|
33
36
|
requested_polynomial_order,
|
34
|
-
reversed
|
37
|
+
reversed
|
38
|
+
)
|
35
39
|
end
|
36
40
|
end
|
37
41
|
|