ffi-gdal 1.0.0.beta5 → 1.0.0.beta6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +7 -3
- data/.rubocop.yml +7 -0
- data/.ruby-version +1 -0
- data/Gemfile +1 -1
- data/History.md +143 -1
- data/README.md +5 -11
- data/Rakefile +2 -60
- data/TODO.md +10 -0
- data/examples/geometries.rb +4 -6
- data/examples/gridding.rb +99 -98
- data/examples/ogr_layer_to_layer.rb +0 -2
- data/examples/raster_erasing.rb +47 -0
- data/examples/remove_small_polygons.rb +62 -0
- data/examples/testing_gdal.rb +0 -3
- data/examples/warping.rb +140 -0
- data/ffi-gdal.gemspec +5 -2
- data/lib/ext/error_symbols.rb +1 -1
- data/lib/ext/ffi_library_function_checks.rb +3 -2
- data/lib/ext/float_ext.rb +2 -2
- data/lib/ext/narray_ext.rb +1 -1
- data/lib/ext/numeric_as_data_type.rb +1 -1
- data/lib/ext/to_bool.rb +2 -2
- data/lib/ffi/cpl/conv.rb +1 -3
- data/lib/ffi/cpl/error.rb +0 -3
- data/lib/ffi/cpl/minixml.rb +17 -21
- data/lib/ffi/cpl/progress.rb +27 -0
- data/lib/ffi/cpl/string.rb +0 -8
- data/lib/ffi/cpl/vsi.rb +0 -1
- data/lib/ffi/cpl/xml_node.rb +0 -1
- data/lib/ffi/cpl.rb +15 -0
- data/lib/ffi/gdal/alg.rb +72 -54
- data/lib/ffi/gdal/gdal.rb +669 -672
- data/lib/ffi/gdal/grid.rb +141 -24
- data/lib/ffi/gdal/grid_data_metrics_options.rb +1 -1
- data/lib/ffi/gdal/grid_moving_average_options.rb +1 -1
- data/lib/ffi/gdal/matching.rb +0 -2
- data/lib/ffi/gdal/transformer_info.rb +1 -1
- data/lib/ffi/gdal/version.rb +1 -1
- data/lib/ffi/gdal/vrt.rb +0 -2
- data/lib/ffi/gdal/warp_options.rb +12 -14
- data/lib/ffi/gdal/warper.rb +61 -6
- data/lib/ffi/gdal.rb +18 -3
- data/lib/ffi/ogr/api.rb +10 -21
- data/lib/ffi/ogr/core.rb +9 -12
- data/lib/ffi/ogr/featurestyle.rb +0 -5
- data/lib/ffi/ogr/geocoding.rb +0 -1
- data/lib/ffi/ogr/srs_api.rb +0 -4
- data/lib/ffi/ogr/style_value.rb +1 -2
- data/lib/ffi/ogr.rb +15 -12
- data/lib/ffi-gdal.rb +5 -3
- data/lib/gdal/color_entry.rb +1 -0
- data/lib/gdal/color_interpretation.rb +2 -2
- data/lib/gdal/color_table.rb +14 -14
- data/lib/gdal/color_table_mixins/extensions.rb +4 -4
- data/lib/gdal/cpl_error_handler.rb +12 -14
- data/lib/gdal/data_type.rb +13 -12
- data/lib/gdal/dataset.rb +170 -94
- data/lib/gdal/dataset_mixins/algorithm_methods.rb +47 -21
- data/lib/gdal/dataset_mixins/extensions.rb +32 -61
- data/lib/gdal/dataset_mixins/matching.rb +0 -2
- data/lib/gdal/dataset_mixins/warp_methods.rb +42 -0
- data/lib/gdal/driver.rb +62 -47
- data/lib/gdal/driver_mixins/extensions.rb +2 -7
- data/lib/gdal/environment_methods.rb +13 -10
- data/lib/gdal/exceptions.rb +24 -2
- data/lib/gdal/geo_transform.rb +10 -16
- data/lib/gdal/geo_transform_mixins/extensions.rb +58 -3
- data/lib/gdal/grid.rb +62 -109
- data/lib/gdal/{grid_types → grid_algorithms}/data_metrics_base.rb +1 -3
- data/lib/gdal/{grid_types → grid_algorithms}/inverse_distance_to_a_power.rb +2 -4
- data/lib/gdal/{grid_types → grid_algorithms}/metric_average_distance.rb +2 -2
- data/lib/gdal/{grid_types → grid_algorithms}/metric_average_distance_pts.rb +2 -2
- data/lib/gdal/{grid_types → grid_algorithms}/metric_count.rb +2 -2
- data/lib/gdal/{grid_types → grid_algorithms}/metric_maximum.rb +2 -2
- data/lib/gdal/{grid_types → grid_algorithms}/metric_minimum.rb +2 -2
- data/lib/gdal/{grid_types → grid_algorithms}/metric_range.rb +2 -2
- data/lib/gdal/{grid_types → grid_algorithms}/moving_average.rb +2 -4
- data/lib/gdal/{grid_types → grid_algorithms}/nearest_neighbor.rb +2 -4
- data/lib/gdal/grid_algorithms.rb +22 -0
- data/lib/gdal/gridder/point_extracting.rb +89 -0
- data/lib/gdal/gridder.rb +294 -0
- data/lib/gdal/gridder_options.rb +273 -0
- data/lib/gdal/internal_helpers.rb +132 -23
- data/lib/gdal/major_object.rb +13 -10
- data/lib/gdal/merger.rb +130 -0
- data/lib/gdal/options.rb +3 -2
- data/lib/gdal/raster_attribute_table.rb +74 -51
- data/lib/gdal/raster_attribute_table_mixins/extensions.rb +21 -3
- data/lib/gdal/raster_band.rb +139 -167
- data/lib/gdal/raster_band_classifier.rb +19 -18
- data/lib/gdal/raster_band_mixins/algorithm_extensions.rb +107 -0
- data/lib/gdal/raster_band_mixins/algorithm_methods.rb +79 -40
- data/lib/gdal/raster_band_mixins/coloring_extensions.rb +84 -0
- data/lib/gdal/raster_band_mixins/extensions.rb +34 -169
- data/lib/gdal/raster_band_mixins/io_extensions.rb +180 -0
- data/lib/gdal/rpc_info.rb +1 -2
- data/lib/gdal/transformer.rb +1 -6
- data/lib/gdal/transformers/approximate_transformer.rb +0 -4
- data/lib/gdal/transformers/base_general_image_projection_transformer.rb +0 -6
- data/lib/gdal/transformers/gcp_transformer.rb +2 -6
- data/lib/gdal/transformers/general_image_projection_transformer.rb +8 -7
- data/lib/gdal/transformers/general_image_projection_transformer2.rb +1 -1
- data/lib/gdal/transformers/geolocation_transformer.rb +0 -4
- data/lib/gdal/transformers/reprojection_transformer.rb +0 -8
- data/lib/gdal/transformers/rpc_transformer.rb +0 -4
- data/lib/gdal/transformers/tps_transformer.rb +1 -3
- data/lib/gdal/version_info.rb +7 -8
- data/lib/gdal/virtual_dataset.rb +2 -4
- data/lib/gdal/warp_operation.rb +17 -14
- data/lib/gdal/warp_options.rb +132 -0
- data/lib/gdal.rb +41 -2
- data/lib/ogr/coordinate_transformation.rb +79 -32
- data/lib/ogr/data_source.rb +17 -14
- data/lib/ogr/data_source_extensions.rb +1 -5
- data/lib/ogr/driver.rb +11 -14
- data/lib/ogr/envelope.rb +1 -1
- data/lib/ogr/envelope_extensions.rb +23 -6
- data/lib/ogr/error_handling.rb +3 -3
- data/lib/ogr/exceptions.rb +6 -0
- data/lib/ogr/feature.rb +25 -38
- data/lib/ogr/feature_definition.rb +6 -8
- data/lib/ogr/feature_definition_extensions.rb +2 -6
- data/lib/ogr/feature_extensions.rb +71 -41
- data/lib/ogr/field.rb +16 -15
- data/lib/ogr/field_definition.rb +4 -4
- data/lib/ogr/geocoder.rb +5 -5
- data/lib/ogr/geometries/geometry_collection.rb +4 -1
- data/lib/ogr/geometries/geometry_collection_25d.rb +12 -0
- data/lib/ogr/geometries/line_string.rb +30 -8
- data/lib/ogr/geometries/line_string_25d.rb +21 -0
- data/lib/ogr/geometries/linear_ring.rb +10 -1
- data/lib/ogr/geometries/multi_line_string.rb +2 -1
- data/lib/ogr/geometries/multi_line_string_25d.rb +13 -0
- data/lib/ogr/geometries/multi_point.rb +2 -1
- data/lib/ogr/geometries/multi_point_25d.rb +14 -0
- data/lib/ogr/geometries/multi_polygon.rb +3 -2
- data/lib/ogr/geometries/multi_polygon_25d.rb +13 -0
- data/lib/ogr/geometries/point.rb +20 -23
- data/lib/ogr/geometries/point_25d.rb +48 -0
- data/lib/ogr/geometries/polygon.rb +4 -1
- data/lib/ogr/geometries/polygon_25d.rb +14 -0
- data/lib/ogr/geometry.rb +125 -93
- data/lib/ogr/geometry_field_definition.rb +7 -5
- data/lib/ogr/geometry_mixins/container_mixins.rb +23 -0
- data/lib/ogr/geometry_mixins/extensions.rb +111 -0
- data/lib/ogr/geometry_types/container.rb +10 -3
- data/lib/ogr/geometry_types/curve.rb +68 -23
- data/lib/ogr/geometry_types/surface.rb +0 -9
- data/lib/ogr/internal_helpers.rb +3 -3
- data/lib/ogr/layer.rb +4 -5
- data/lib/ogr/layer_mixins/extensions.rb +242 -17
- data/lib/ogr/layer_mixins/ogr_feature_methods.rb +11 -11
- data/lib/ogr/layer_mixins/ogr_field_methods.rb +6 -11
- data/lib/ogr/layer_mixins/ogr_layer_method_methods.rb +18 -18
- data/lib/ogr/layer_mixins/ogr_query_filter_methods.rb +0 -2
- data/lib/ogr/layer_mixins/ogr_sql_methods.rb +1 -1
- data/lib/ogr/spatial_reference.rb +12 -37
- data/lib/ogr/spatial_reference_mixins/coordinate_system_getter_setters.rb +53 -55
- data/lib/ogr/spatial_reference_mixins/exporters.rb +18 -49
- data/lib/ogr/spatial_reference_mixins/parameter_getter_setters.rb +10 -29
- data/lib/ogr/style_table.rb +2 -2
- data/lib/ogr/style_table_extensions.rb +3 -1
- data/lib/ogr/style_tool.rb +8 -14
- data/lib/ogr.rb +39 -1
- data/spec/ffi-gdal_spec.rb +18 -1
- data/spec/integration/gdal/color_table_info_spec.rb +49 -33
- data/spec/integration/gdal/dataset_info_spec.rb +294 -45
- data/spec/integration/gdal/driver_info_spec.rb +139 -31
- data/spec/integration/gdal/geo_transform_info_spec.rb +197 -26
- data/spec/integration/gdal/gridder_spec.rb +329 -0
- data/spec/integration/gdal/raster_attribute_table_info_spec.rb +216 -11
- data/spec/integration/gdal/raster_band_algorithms_spec.rb +33 -0
- data/spec/integration/gdal/raster_band_info_spec.rb +240 -271
- data/spec/integration/ogr/layer_spec.rb +3 -1
- data/spec/spec_helper.rb +15 -6
- data/spec/support/images/osgeo/gdal/data/hfa/float-rle.img +0 -0
- data/spec/support/images/osgeo/geotiff/GeogToWGS84GeoKey/GeogToWGS84GeoKey5.lgo +31 -0
- data/spec/support/images/osgeo/geotiff/GeogToWGS84GeoKey/GeogToWGS84GeoKey5.tif +0 -0
- data/spec/support/images/osgeo/geotiff/GeogToWGS84GeoKey/GeogToWGS84GeoKey5.tif.msk +0 -0
- data/spec/support/images/osgeo/geotiff/GeogToWGS84GeoKey/GeogToWGS84GeoKey5.txt +10 -0
- data/spec/support/images/osgeo/geotiff/gdal_eg/cea.tif +0 -0
- data/spec/support/images/osgeo/geotiff/gdal_eg/cea.txt +84 -0
- data/spec/support/images/osgeo/geotiff/zi_imaging/image0.lgo +45 -0
- data/spec/support/images/osgeo/geotiff/zi_imaging/image0.tif +0 -0
- data/spec/support/integration_help.rb +32 -2
- data/spec/support/shared_examples/gdal/major_object_examples.rb +0 -6
- data/spec/support/shared_examples/ogr/a_geometry.rb +1 -1
- data/spec/unit/ffi/gdal_spec.rb +1 -1
- data/spec/unit/gdal/color_entry_spec.rb +1 -0
- data/spec/unit/gdal/color_interpretation_spec.rb +1 -0
- data/spec/unit/gdal/dataset_spec.rb +53 -2
- data/spec/unit/gdal/geo_transform_mixins/extensions_spec.rb +67 -0
- data/spec/unit/gdal/geo_transform_spec.rb +1 -1
- data/spec/unit/gdal/grid_spec.rb +83 -0
- data/spec/unit/gdal/gridder/point_extracting_spec.rb +99 -0
- data/spec/unit/gdal/gridder_options_spec.rb +183 -0
- data/spec/unit/gdal/gridder_spec.rb +140 -0
- data/spec/unit/gdal/internal_helpers_spec.rb +166 -2
- data/spec/unit/gdal/major_object_spec.rb +2 -0
- data/spec/unit/gdal/options_spec.rb +1 -0
- data/spec/unit/gdal/raster_band_classifier_spec.rb +70 -12
- data/spec/unit/gdal/raster_band_mixins/extensions_spec.rb +71 -0
- data/spec/unit/gdal/raster_band_mixins/io_extensions_spec.rb +133 -0
- data/spec/unit/gdal/raster_band_spec.rb +1 -0
- data/spec/unit/gdal/rpc_info_spec.rb +1 -0
- data/spec/unit/gdal/version_info_spec.rb +2 -0
- data/spec/unit/gdal/warp_operation_spec.rb +1 -0
- data/spec/unit/ogr/coordinate_transformation_spec.rb +102 -0
- data/spec/unit/ogr/data_source_spec.rb +12 -0
- data/spec/unit/ogr/feature_extensions_spec.rb +88 -0
- data/spec/unit/ogr/feature_spec.rb +30 -46
- data/spec/unit/ogr/geometries/geometry_collection_25d_spec.rb +23 -0
- data/spec/unit/ogr/geometries/geometry_collection_spec.rb +3 -3
- data/spec/unit/ogr/geometries/line_string_25d_spec.rb +23 -0
- data/spec/unit/ogr/geometries/line_string_spec.rb +2 -2
- data/spec/unit/ogr/geometries/linear_ring_spec.rb +2 -2
- data/spec/unit/ogr/geometries/multi_line_string_25d_spec.rb +23 -0
- data/spec/unit/ogr/geometries/multi_point_25d_spec.rb +23 -0
- data/spec/unit/ogr/geometries/multi_polygon_25d_spec.rb +23 -0
- data/spec/unit/ogr/geometries/point_25d_spec.rb +23 -0
- data/spec/unit/ogr/geometries/point_spec.rb +14 -24
- data/spec/unit/ogr/geometries/polygon_25d_spec.rb +23 -0
- data/spec/unit/ogr/geometries/polygon_spec.rb +1 -1
- data/spec/unit/ogr/geometry_field_definition_spec.rb +1 -1
- data/spec/unit/ogr/geometry_spec.rb +196 -30
- data/spec/unit/ogr/internal_helpers_spec.rb +20 -9
- data/spec/unit/ogr/layer_mixins/ogr_feature_methods_spec.rb +14 -6
- data/spec/unit/ogr/spatial_reference_mixins/exporters_spec.rb +9 -1
- data/spec/unit/ogr/spatial_reference_mixins/parameter_getter_setters_spec.rb +2 -1
- data/spec/unit/ogr/style_table_spec.rb +1 -1
- data/tmp/.keep +0 -0
- metadata +121 -19
- data/examples/points.txt +0 -127
- data/lib/gdal/grid_types.rb +0 -22
- data/lib/ogr/geometries/point_extensions.rb +0 -32
- data/lib/ogr/geometry_extensions.rb +0 -59
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ogr'
|
3
|
+
|
4
|
+
RSpec.describe OGR::MultiLineString25D do
|
5
|
+
describe '#type' do
|
6
|
+
context 'when created with data' do
|
7
|
+
subject { OGR::Geometry.create_from_wkt(wkt) }
|
8
|
+
let(:wkt) { 'MULTILINESTRING((1 2 3, 2 2 3),(9 9 9, 10 10 10))' }
|
9
|
+
|
10
|
+
it 'returns :wkbMultiLineString25D' do
|
11
|
+
expect(subject.type).to eq :wkbMultiLineString25D
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when created without data' do
|
16
|
+
subject { described_class.new }
|
17
|
+
|
18
|
+
it 'returns :wkbMultiLineString' do
|
19
|
+
expect(subject.type).to eq :wkbMultiLineString
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ogr'
|
3
|
+
|
4
|
+
RSpec.describe OGR::MultiPoint25D do
|
5
|
+
describe '#type' do
|
6
|
+
context 'when created with data' do
|
7
|
+
subject { OGR::Geometry.create_from_wkt(wkt) }
|
8
|
+
let(:wkt) { 'MULTIPOINT((1 2 3),(2 2 3))' }
|
9
|
+
|
10
|
+
it 'returns :wkbPoint25D' do
|
11
|
+
expect(subject.type).to eq :wkbMultiPoint25D
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when created without data' do
|
16
|
+
subject { described_class.new }
|
17
|
+
|
18
|
+
it 'returns :wkbPoint' do
|
19
|
+
expect(subject.type).to eq :wkbMultiPoint
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ogr'
|
3
|
+
|
4
|
+
RSpec.describe OGR::MultiPolygon25D do
|
5
|
+
describe '#type' do
|
6
|
+
context 'when created with data' do
|
7
|
+
subject { OGR::Geometry.create_from_wkt(wkt) }
|
8
|
+
let(:wkt) { 'MULTIPOLYGON(((0 0 1,0 1 1,1 1 1,0 0 1)),((0 0 5,1 1 5,1 0 5,0 0 5)))' }
|
9
|
+
|
10
|
+
it 'returns :wkbMultiPolygon25D' do
|
11
|
+
expect(subject.type).to eq :wkbMultiPolygon25D
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when created without data' do
|
16
|
+
subject { described_class.new }
|
17
|
+
|
18
|
+
it 'returns :wkbMultiPolygon' do
|
19
|
+
expect(subject.type).to eq :wkbMultiPolygon
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ogr'
|
3
|
+
|
4
|
+
RSpec.describe OGR::Point25D do
|
5
|
+
describe '#type' do
|
6
|
+
context 'when created with data' do
|
7
|
+
subject { OGR::Geometry.create_from_wkt(wkt) }
|
8
|
+
let(:wkt) { 'POINT(1 2 3)' }
|
9
|
+
|
10
|
+
it 'returns :wkbPoint25D' do
|
11
|
+
expect(subject.type).to eq :wkbPoint25D
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when created without data' do
|
16
|
+
subject { described_class.new }
|
17
|
+
|
18
|
+
it 'returns :wkbPoint' do
|
19
|
+
expect(subject.type).to eq :wkbPoint
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -203,36 +203,30 @@ RSpec.describe OGR::Point do
|
|
203
203
|
end
|
204
204
|
end
|
205
205
|
|
206
|
-
describe '#
|
206
|
+
describe '#point_value' do
|
207
207
|
it 'returns x & y as an array' do
|
208
|
-
expect(subject.
|
208
|
+
expect(subject.point_value).to eq([1.0, 2.0])
|
209
209
|
end
|
210
210
|
end
|
211
211
|
|
212
212
|
describe '#set_point' do
|
213
213
|
it 'changes the x & y values' do
|
214
|
-
expect
|
215
|
-
|
216
|
-
end.to change { subject.points }.
|
217
|
-
from([[1, 2]]).to([[5.0, 6.0, 0.0]])
|
214
|
+
expect { subject.set_point(5, 6) }.to change { subject.point_value }.
|
215
|
+
from([1.0, 2.0]).to([5.0, 6.0])
|
218
216
|
end
|
219
217
|
end
|
220
218
|
|
221
219
|
describe '#add_point' do
|
222
220
|
it 'changes the x & y values' do
|
223
|
-
expect
|
224
|
-
|
225
|
-
end.to change { subject.points }.
|
226
|
-
from([[1, 2]]).to([[5.0, 6.0, 0.0]])
|
221
|
+
expect { subject.add_point(5, 6) }.to change { subject.point_value }.
|
222
|
+
from([1.0, 2.0]).to([5.0, 6.0])
|
227
223
|
end
|
228
224
|
end
|
229
225
|
|
230
226
|
describe '#empty!' do
|
231
227
|
it 'clears the point' do
|
232
|
-
expect
|
233
|
-
|
234
|
-
end.to change { subject.points }.
|
235
|
-
from([[1, 2]]).to([[]])
|
228
|
+
expect { subject.empty! }.to change { subject.point_value }.
|
229
|
+
from([1.0, 2.0]).to([])
|
236
230
|
end
|
237
231
|
end
|
238
232
|
end
|
@@ -282,27 +276,23 @@ RSpec.describe OGR::Point do
|
|
282
276
|
end
|
283
277
|
end
|
284
278
|
|
285
|
-
describe '#
|
279
|
+
describe '#point_value' do
|
286
280
|
it 'returns an empty array' do
|
287
|
-
expect(subject.
|
281
|
+
expect(subject.point_value).to eq([])
|
288
282
|
end
|
289
283
|
end
|
290
284
|
|
291
285
|
describe '#set_point' do
|
292
286
|
it 'changes the x & y values' do
|
293
|
-
expect
|
294
|
-
|
295
|
-
end.to change { subject.points }.
|
296
|
-
from([[]]).to([[5.0, 6.0, 0.0]])
|
287
|
+
expect { subject.set_point(5, 6) }.to change { subject.point_value }.
|
288
|
+
from([]).to([5.0, 6.0])
|
297
289
|
end
|
298
290
|
end
|
299
291
|
|
300
292
|
describe '#add_point' do
|
301
293
|
it 'changes the x & y values' do
|
302
|
-
expect
|
303
|
-
|
304
|
-
end.to change { subject.points }.
|
305
|
-
from([[]]).to([[5.0, 6.0, 0.0]])
|
294
|
+
expect { subject.add_point(5, 6) }.to change { subject.point_value }.
|
295
|
+
from([]).to([5.0, 6.0])
|
306
296
|
end
|
307
297
|
end
|
308
298
|
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ogr'
|
3
|
+
|
4
|
+
RSpec.describe OGR::Polygon25D do
|
5
|
+
describe '#type' do
|
6
|
+
context 'when created with data' do
|
7
|
+
subject { OGR::Geometry.create_from_wkt(wkt) }
|
8
|
+
let(:wkt) { 'POLYGON((0 0 1,0 1 1,1 1 1,0 0 1))' }
|
9
|
+
|
10
|
+
it 'returns :wkbPolygon25D' do
|
11
|
+
expect(subject.type).to eq :wkbPolygon25D
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context 'when created without data' do
|
16
|
+
subject { described_class.new }
|
17
|
+
|
18
|
+
it 'returns :wkbPolygon' do
|
19
|
+
expect(subject.type).to eq :wkbPolygon
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -3,7 +3,7 @@ require 'ogr/geometry'
|
|
3
3
|
|
4
4
|
RSpec.describe OGR::Polygon do
|
5
5
|
subject(:polygon) { OGR::Geometry.create_from_wkt(wkt) }
|
6
|
-
let(:wkt) { 'POLYGON((
|
6
|
+
let(:wkt) { 'POLYGON((10 10, 20 20, 30 30))' }
|
7
7
|
|
8
8
|
it_behaves_like 'a geometry' do
|
9
9
|
let(:geometry) { polygon }
|
@@ -8,7 +8,7 @@ RSpec.describe OGR::GeometryFieldDefinition do
|
|
8
8
|
describe '#destroy!' do
|
9
9
|
it 'sets the c_pointer to nil' do
|
10
10
|
subject.destroy!
|
11
|
-
expect(subject.instance_variable_get(:@
|
11
|
+
expect(subject.instance_variable_get(:@c_pointer)).
|
12
12
|
to be_nil
|
13
13
|
end
|
14
14
|
end
|
@@ -12,7 +12,7 @@ RSpec.describe OGR::Geometry do
|
|
12
12
|
|
13
13
|
context 'a 2.5D Point' do
|
14
14
|
let(:wkt) { 'POINT(1 32 100)' }
|
15
|
-
it { is_expected.to be_a OGR::
|
15
|
+
it { is_expected.to be_a OGR::Point25D }
|
16
16
|
end
|
17
17
|
|
18
18
|
context 'a 2D LineString' do
|
@@ -22,7 +22,7 @@ RSpec.describe OGR::Geometry do
|
|
22
22
|
|
23
23
|
context 'a 2.5D LineString' do
|
24
24
|
let(:wkt) { 'LINESTRING(3 4 19,12 23 20)' }
|
25
|
-
it { is_expected.to be_a OGR::
|
25
|
+
it { is_expected.to be_a OGR::LineString25D }
|
26
26
|
end
|
27
27
|
|
28
28
|
context 'a 2D Polygon' do
|
@@ -32,7 +32,7 @@ RSpec.describe OGR::Geometry do
|
|
32
32
|
|
33
33
|
context 'a 2.5D Polygon' do
|
34
34
|
let(:wkt) { 'POLYGON((1 1 1,2 2 2,3 3 3))' }
|
35
|
-
it { is_expected.to be_a OGR::
|
35
|
+
it { is_expected.to be_a OGR::Polygon25D }
|
36
36
|
end
|
37
37
|
|
38
38
|
context 'a 2D MultiPoint' do
|
@@ -40,24 +40,24 @@ RSpec.describe OGR::Geometry do
|
|
40
40
|
it { is_expected.to be_a OGR::MultiPoint }
|
41
41
|
end
|
42
42
|
|
43
|
-
context 'a
|
43
|
+
context 'a 2.5D MultiPoint' do
|
44
44
|
let(:wkt) { 'MULTIPOINT((1 1 1),(2 2 2))' }
|
45
|
-
it { is_expected.to be_a OGR::
|
45
|
+
it { is_expected.to be_a OGR::MultiPoint25D }
|
46
46
|
end
|
47
47
|
|
48
48
|
context 'a 2D MultiLineString' do
|
49
|
-
let(:wkt) { 'MULTILINESTRING((3 4),(100
|
49
|
+
let(:wkt) { 'MULTILINESTRING((3 4),(100 20))' }
|
50
50
|
it { is_expected.to be_a OGR::MultiLineString }
|
51
51
|
end
|
52
52
|
|
53
53
|
context 'a 2.5D MultiLineString' do
|
54
|
-
let(:wkt) { 'MULTILINESTRING((3 4 19),(100
|
55
|
-
it { is_expected.to be_a OGR::
|
54
|
+
let(:wkt) { 'MULTILINESTRING((3 4 19),(100 20 40))' }
|
55
|
+
it { is_expected.to be_a OGR::MultiLineString25D }
|
56
56
|
end
|
57
57
|
|
58
58
|
context 'a 2D MultiPolygon' do
|
59
59
|
let(:wkt) do
|
60
|
-
'MULTIPOLYGON(((1 1,2 2,3 3)),((100 100,
|
60
|
+
'MULTIPOLYGON(((1 1,2 2,3 3)),((100 100, 20 20, 30 30)))'
|
61
61
|
end
|
62
62
|
|
63
63
|
it { is_expected.to be_a OGR::MultiPolygon }
|
@@ -65,10 +65,10 @@ RSpec.describe OGR::Geometry do
|
|
65
65
|
|
66
66
|
context 'a 2.5D MultiPolygon' do
|
67
67
|
let(:wkt) do
|
68
|
-
'MULTIPOLYGON(((1 1 1,2 2 2,3 3 3)),((100 100 100,
|
68
|
+
'MULTIPOLYGON(((1 1 1,2 2 2,3 3 3)),((100 100 100, 20 20 20, 30 30 30)))'
|
69
69
|
end
|
70
70
|
|
71
|
-
it { is_expected.to be_a OGR::
|
71
|
+
it { is_expected.to be_a OGR::MultiPolygon25D }
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
@@ -88,7 +88,7 @@ RSpec.describe OGR::Geometry do
|
|
88
88
|
{ type: :Point, coordinates: [1.0, 2.0, 3.0] }.to_json
|
89
89
|
end
|
90
90
|
|
91
|
-
it { is_expected.to be_a OGR::
|
91
|
+
it { is_expected.to be_a OGR::Point25D }
|
92
92
|
end
|
93
93
|
|
94
94
|
context 'a 2D LineString' do
|
@@ -114,7 +114,7 @@ RSpec.describe OGR::Geometry do
|
|
114
114
|
}.to_json
|
115
115
|
end
|
116
116
|
|
117
|
-
it { is_expected.to be_a OGR::
|
117
|
+
it { is_expected.to be_a OGR::LineString25D }
|
118
118
|
end
|
119
119
|
|
120
120
|
context 'a 2D Polygon' do
|
@@ -144,7 +144,7 @@ RSpec.describe OGR::Geometry do
|
|
144
144
|
}.to_json
|
145
145
|
end
|
146
146
|
|
147
|
-
it { is_expected.to be_a OGR::
|
147
|
+
it { is_expected.to be_a OGR::Polygon25D }
|
148
148
|
end
|
149
149
|
|
150
150
|
context 'a 2D MultiPoint' do
|
@@ -170,7 +170,7 @@ RSpec.describe OGR::Geometry do
|
|
170
170
|
}.to_json
|
171
171
|
end
|
172
172
|
|
173
|
-
it { is_expected.to be_a OGR::
|
173
|
+
it { is_expected.to be_a OGR::MultiPoint25D }
|
174
174
|
end
|
175
175
|
|
176
176
|
context 'a 2D MultiLineString' do
|
@@ -181,7 +181,7 @@ RSpec.describe OGR::Geometry do
|
|
181
181
|
[
|
182
182
|
[3.0, 4.0], [21.0, 27.0], [2.0, 5.0]
|
183
183
|
], [
|
184
|
-
[100.0,
|
184
|
+
[100.0, 20.0], [982.0, 6.0]
|
185
185
|
]
|
186
186
|
]
|
187
187
|
}.to_json
|
@@ -198,13 +198,13 @@ RSpec.describe OGR::Geometry do
|
|
198
198
|
[
|
199
199
|
[3.0, 4.0, 19.0], [21.0, 27.0, 30.0]
|
200
200
|
], [
|
201
|
-
[100.0,
|
201
|
+
[100.0, 20.0, 400.0], [92.0, 6.0, 47.1]
|
202
202
|
]
|
203
203
|
]
|
204
204
|
}.to_json
|
205
205
|
end
|
206
206
|
|
207
|
-
it { is_expected.to be_a OGR::
|
207
|
+
it { is_expected.to be_a OGR::MultiLineString25D }
|
208
208
|
end
|
209
209
|
|
210
210
|
context 'a 2D MultiPolygon' do
|
@@ -220,7 +220,7 @@ RSpec.describe OGR::Geometry do
|
|
220
220
|
]
|
221
221
|
], [
|
222
222
|
[
|
223
|
-
[100.0, 100.0], [
|
223
|
+
[100.0, 100.0], [20.0, 20.0], [30.0, 30.0]
|
224
224
|
], [
|
225
225
|
[10.0, 10.0], [20.0, 20.0], [30.0, 30.0]
|
226
226
|
]
|
@@ -245,7 +245,7 @@ RSpec.describe OGR::Geometry do
|
|
245
245
|
]
|
246
246
|
], [
|
247
247
|
[
|
248
|
-
[100.0, 100.0, 100.0], [
|
248
|
+
[100.0, 100.0, 100.0], [20.0, 20.0, 20.0], [30.0, 30.0, 30.0]
|
249
249
|
], [
|
250
250
|
[10.0, 10.0, 10.0], [20.0, 20.0, 20.0], [30.0, 30.0, 30.0]
|
251
251
|
]
|
@@ -254,7 +254,7 @@ RSpec.describe OGR::Geometry do
|
|
254
254
|
}.to_json
|
255
255
|
end
|
256
256
|
|
257
|
-
it { is_expected.to be_a OGR::
|
257
|
+
it { is_expected.to be_a OGR::MultiPolygon25D }
|
258
258
|
end
|
259
259
|
end
|
260
260
|
|
@@ -274,7 +274,7 @@ RSpec.describe OGR::Geometry do
|
|
274
274
|
'<gml:Point><gml:coordinates>1,7,25</gml:coordinates></gml:Point>'
|
275
275
|
end
|
276
276
|
|
277
|
-
it { is_expected.to be_a OGR::
|
277
|
+
it { is_expected.to be_a OGR::Point25D }
|
278
278
|
end
|
279
279
|
|
280
280
|
context 'a 2D LineString' do
|
@@ -290,7 +290,7 @@ RSpec.describe OGR::Geometry do
|
|
290
290
|
'<gml:LineString><gml:coordinates>3,4,19</gml:coordinates></gml:LineString>'
|
291
291
|
end
|
292
292
|
|
293
|
-
it { is_expected.to be_a OGR::
|
293
|
+
it { is_expected.to be_a OGR::LineString25D }
|
294
294
|
end
|
295
295
|
|
296
296
|
context 'a 2D Polygon' do
|
@@ -322,7 +322,7 @@ RSpec.describe OGR::Geometry do
|
|
322
322
|
GML
|
323
323
|
end
|
324
324
|
|
325
|
-
it { is_expected.to be_a OGR::
|
325
|
+
it { is_expected.to be_a OGR::Polygon25D }
|
326
326
|
end
|
327
327
|
|
328
328
|
context 'a 2D MultiPoint' do
|
@@ -384,7 +384,7 @@ RSpec.describe OGR::Geometry do
|
|
384
384
|
GML
|
385
385
|
end
|
386
386
|
|
387
|
-
it { is_expected.to be_a OGR::
|
387
|
+
it { is_expected.to be_a OGR::MultiPoint25D }
|
388
388
|
end
|
389
389
|
|
390
390
|
context 'a 2D MultiLineString' do
|
@@ -398,7 +398,7 @@ RSpec.describe OGR::Geometry do
|
|
398
398
|
</gml:lineStringMember>
|
399
399
|
<gml:lineStringMember>
|
400
400
|
<gml:LineString>
|
401
|
-
<gml:coordinates>100,
|
401
|
+
<gml:coordinates>100,20</gml:coordinates>
|
402
402
|
</gml:LineString>
|
403
403
|
</gml:lineStringMember>
|
404
404
|
</gml:MultiLineString>
|
@@ -419,14 +419,14 @@ RSpec.describe OGR::Geometry do
|
|
419
419
|
</gml:lineStringMember>
|
420
420
|
<gml:lineStringMember>
|
421
421
|
<gml:LineString>
|
422
|
-
<gml:coordinates>100,
|
422
|
+
<gml:coordinates>100,20,40</gml:coordinates>
|
423
423
|
</gml:LineString>
|
424
424
|
</gml:lineStringMember>
|
425
425
|
</gml:MultiLineString>
|
426
426
|
GML
|
427
427
|
end
|
428
428
|
|
429
|
-
it { is_expected.to be_a OGR::
|
429
|
+
it { is_expected.to be_a OGR::MultiLineString25D }
|
430
430
|
end
|
431
431
|
|
432
432
|
context 'a 2D MultiPolygon' do
|
@@ -446,7 +446,7 @@ RSpec.describe OGR::Geometry do
|
|
446
446
|
<gml:Polygon>
|
447
447
|
<gml:outerBoundaryIs>
|
448
448
|
<gml:LinearRing>
|
449
|
-
<gml:coordinates>100,100
|
449
|
+
<gml:coordinates>100,100 20,20 30,30</gml:coordinates>
|
450
450
|
</gml:LinearRing>
|
451
451
|
</gml:outerBoundaryIs>
|
452
452
|
</gml:Polygon>
|
@@ -475,7 +475,7 @@ RSpec.describe OGR::Geometry do
|
|
475
475
|
<gml:Polygon>
|
476
476
|
<gml:outerBoundaryIs>
|
477
477
|
<gml:LinearRing>
|
478
|
-
<gml:coordinates>100,100,9
|
478
|
+
<gml:coordinates>100,100,9 20,20,9 30,30,9</gml:coordinates>
|
479
479
|
</gml:LinearRing>
|
480
480
|
</gml:outerBoundaryIs>
|
481
481
|
</gml:Polygon>
|
@@ -484,8 +484,143 @@ RSpec.describe OGR::Geometry do
|
|
484
484
|
GML
|
485
485
|
end
|
486
486
|
|
487
|
+
it { is_expected.to be_a OGR::MultiPolygon25D }
|
488
|
+
end
|
489
|
+
end
|
490
|
+
|
491
|
+
describe '.create_from_wkb' do
|
492
|
+
subject { OGR::Geometry.create_from_wkb(wkb) }
|
493
|
+
|
494
|
+
context 'a 2D Point' do
|
495
|
+
# POINT(1 32)
|
496
|
+
let(:wkb) { ['0101000000000000000000f03f0000000000004040'].pack('H*') }
|
497
|
+
it { is_expected.to be_a OGR::Point }
|
498
|
+
end
|
499
|
+
|
500
|
+
context 'a 2.5D Point' do
|
501
|
+
# POINT(1 32 100)
|
502
|
+
let(:wkb) { ['01e9030000000000000000f03f00000000000040400000000000005940'].pack('H*') }
|
503
|
+
it { is_expected.to be_a OGR::Point }
|
504
|
+
end
|
505
|
+
|
506
|
+
context 'a 2D LineString' do
|
507
|
+
# LINESTRING(3 19,12 20)
|
508
|
+
let(:wkb) do
|
509
|
+
['0102000000020000000000000000000840000000000000334000000000000028400000000000003440'].pack('H*')
|
510
|
+
end
|
511
|
+
it { is_expected.to be_a OGR::LineString }
|
512
|
+
end
|
513
|
+
|
514
|
+
context 'a 2.5D LineString' do
|
515
|
+
# LINESTRING(3 4 19,12 13 20)
|
516
|
+
let(:wkb) do
|
517
|
+
hex = '01ea030000020000000000000000000840000000000000104000000000000' \
|
518
|
+
'03340000000000000284000000000000037400000000000003440'
|
519
|
+
[hex].pack('H*')
|
520
|
+
end
|
521
|
+
|
522
|
+
it { is_expected.to be_a OGR::LineString25D }
|
523
|
+
end
|
524
|
+
|
525
|
+
context 'a 2D Polygon' do
|
526
|
+
# 'POLYGON((1 1,2 1,3 0,1 1))'
|
527
|
+
let(:wkb) do
|
528
|
+
hex = '01030000000100000004000000000000000000f03f000000000000f03f0000' \
|
529
|
+
'000000000040000000000000f03f00000000000008400000000000000000000000' \
|
530
|
+
'000000f03f000000000000f03f'
|
531
|
+
[hex].pack('H*')
|
532
|
+
end
|
533
|
+
|
534
|
+
it { is_expected.to be_a OGR::Polygon }
|
535
|
+
end
|
536
|
+
|
537
|
+
context 'a 2.5D Polygon' do
|
538
|
+
let(:wkb) do
|
539
|
+
# 'POLYGON((1 1 1,2 1 1,2 0 1,1 1 1))'
|
540
|
+
hex = '01eb0300000100000004000000000000000000f03f000000000000f03f0000' \
|
541
|
+
'00000000f03f0000000000000040000000000000f03f000000000000f03f000000' \
|
542
|
+
'00000000400000000000000000000000000000f03f000000000000f03f00000000' \
|
543
|
+
'0000f03f000000000000f03f'
|
544
|
+
[hex].pack('H*')
|
545
|
+
end
|
546
|
+
it { is_expected.to be_a OGR::Polygon25D }
|
547
|
+
end
|
548
|
+
|
549
|
+
context 'a 2D MultiPoint' do
|
550
|
+
let(:wkb) do
|
551
|
+
# 'MULTIPOINT((0 0),(1 1))'
|
552
|
+
hex = '01040000000200000001010000000000000000000000000000000000000001' \
|
553
|
+
'01000000000000000000f03f000000000000f03f'
|
554
|
+
[hex].pack('H*')
|
555
|
+
end
|
556
|
+
it { is_expected.to be_a OGR::MultiPoint }
|
557
|
+
end
|
558
|
+
|
559
|
+
context 'a 2.5D MultiPoint' do
|
560
|
+
let(:wkb) do
|
561
|
+
# 'MULTIPOINT((0 0 0),(1 1 1))'
|
562
|
+
hex = '01ec0300000200000001e90300000000000000000000000000000000000000' \
|
563
|
+
'0000000000000001e9030000000000000000f03f000000000000f03f0000000000' \
|
564
|
+
'00f03f'
|
565
|
+
[hex].pack('H*')
|
566
|
+
end
|
567
|
+
it { is_expected.to be_a OGR::MultiPoint25D }
|
568
|
+
end
|
569
|
+
|
570
|
+
context 'a 2D MultiLineString' do
|
571
|
+
let(:wkb) do
|
572
|
+
# 'MULTILINESTRING((1 1,2 2, 3 3),(10 10,20 20,30 30))'
|
573
|
+
hex = '010500000002000000010200000003000000000000000000f03f0000000000' \
|
574
|
+
'00f03f000000000000004000000000000000400000000000000840000000000000' \
|
575
|
+
'084001020000000300000000000000000024400000000000002440000000000000' \
|
576
|
+
'344000000000000034400000000000003e400000000000003e40'
|
577
|
+
[hex].pack('H*')
|
578
|
+
end
|
579
|
+
it { is_expected.to be_a OGR::MultiLineString }
|
580
|
+
end
|
581
|
+
|
582
|
+
context 'a 2.5D MultiLineString' do
|
583
|
+
let(:wkb) do
|
584
|
+
# MULTILINESTRING((3 4 19,100 20 40),(5 5 5,6 6 6,7 7 7))
|
585
|
+
hex = '01ed0300000200000001ea0300000200000000000000000008400000000000' \
|
586
|
+
'001040000000000000334000000000000059400000000000003440000000000000' \
|
587
|
+
'444001ea0300000300000000000000000014400000000000001440000000000000' \
|
588
|
+
'14400000000000001840000000000000184000000000000018400000000000001c' \
|
589
|
+
'400000000000001c400000000000001c40'
|
590
|
+
[hex].pack('H*')
|
591
|
+
end
|
592
|
+
it { is_expected.to be_a OGR::MultiLineString25D }
|
593
|
+
end
|
594
|
+
|
595
|
+
context 'a 2D MultiPolygon' do
|
596
|
+
# 'MULTIPOLYGON(((1 1,2 1,2 0,1 1)),((100 100,20 20,30 30,100 100)))'
|
597
|
+
let(:wkb) do
|
598
|
+
hex = '01060000000200000001030000000100000004000000000000000000f03f00' \
|
599
|
+
'0000000000f03f0000000000000040000000000000f03f00000000000000400000' \
|
600
|
+
'000000000000000000000000f03f000000000000f03f0103000000010000000400' \
|
601
|
+
'000000000000000059400000000000005940000000000000344000000000000034' \
|
602
|
+
'400000000000003e400000000000003e4000000000000059400000000000005940'
|
603
|
+
[hex].pack('H*')
|
604
|
+
end
|
605
|
+
|
487
606
|
it { is_expected.to be_a OGR::MultiPolygon }
|
488
607
|
end
|
608
|
+
|
609
|
+
context 'a 2.5D MultiPolygon' do
|
610
|
+
# 'MULTIPOLYGON(((1 1 1,2 1 2,2 0 3,1 1 1)),((100 100 100,20 20 20,30 30 30,100 100 100)))'
|
611
|
+
let(:wkb) do
|
612
|
+
hex = '01ee0300000200000001eb0300000100000004000000000000000000f03f00' \
|
613
|
+
'0000000000f03f000000000000f03f0000000000000040000000000000f03f0000' \
|
614
|
+
'000000000040000000000000004000000000000000000000000000000840000000' \
|
615
|
+
'000000f03f000000000000f03f000000000000f03f01eb03000001000000040000' \
|
616
|
+
'000000000000005940000000000000594000000000000059400000000000003440' \
|
617
|
+
'000000000000344000000000000034400000000000003e400000000000003e4000' \
|
618
|
+
'00000000003e40000000000000594000000000000059400000000000005940'
|
619
|
+
[hex].pack('H*')
|
620
|
+
end
|
621
|
+
|
622
|
+
it { is_expected.to be_a OGR::MultiPolygon25D }
|
623
|
+
end
|
489
624
|
end
|
490
625
|
|
491
626
|
describe '.type_to_name' do
|
@@ -539,4 +674,35 @@ RSpec.describe OGR::Geometry do
|
|
539
674
|
it { is_expected.to eq 'Unrecognised: 101' }
|
540
675
|
end
|
541
676
|
end
|
677
|
+
|
678
|
+
describe '#utm_zone' do
|
679
|
+
let(:geom) { OGR::Geometry.create_from_wkt(wkt) }
|
680
|
+
|
681
|
+
let(:wkt) do
|
682
|
+
'LINESTRING(100 100, 20 20, 30 30, 100 100)'
|
683
|
+
end
|
684
|
+
|
685
|
+
context 'no spatial_reference' do
|
686
|
+
subject { geom.utm_zone }
|
687
|
+
it { is_expected.to be_nil }
|
688
|
+
end
|
689
|
+
|
690
|
+
context 'SRID is 4326' do
|
691
|
+
subject { geom.utm_zone }
|
692
|
+
before { geom.spatial_reference = OGR::SpatialReference.new_from_epsg(4326) }
|
693
|
+
it { is_expected.to eq(36) }
|
694
|
+
end
|
695
|
+
|
696
|
+
context 'SRID is not 4326' do
|
697
|
+
before { geom.spatial_reference = OGR::SpatialReference.new_from_epsg(3857) }
|
698
|
+
|
699
|
+
it 'transforms to 4326 then figures out the zone' do
|
700
|
+
duped_subject = geom.dup
|
701
|
+
expect(geom).to receive(:dup).and_return(duped_subject)
|
702
|
+
expect(duped_subject).to receive(:transform_to!).and_call_original
|
703
|
+
|
704
|
+
geom.utm_zone
|
705
|
+
end
|
706
|
+
end
|
707
|
+
end
|
542
708
|
end
|