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.
Files changed (303) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +54 -19
  3. data/.rubocop_todo.yml +65 -0
  4. data/.ruby-version +1 -1
  5. data/Gemfile +2 -0
  6. data/History.md +74 -0
  7. data/README.md +5 -0
  8. data/Rakefile +11 -1
  9. data/bitbucket-pipelines.yml +16 -0
  10. data/examples/extract_and_colorize.rb +7 -10
  11. data/examples/geometries.rb +68 -1
  12. data/examples/gridding.rb +2 -0
  13. data/examples/ogr_layer_to_layer.rb +2 -0
  14. data/examples/raster_erasing.rb +15 -8
  15. data/examples/remove_small_polygons.rb +2 -0
  16. data/examples/testing_gdal.rb +9 -2
  17. data/examples/warping.rb +23 -5
  18. data/ffi-gdal.gemspec +7 -4
  19. data/lib/ext/error_symbols.rb +2 -0
  20. data/lib/ext/ffi_library_function_checks.rb +2 -0
  21. data/lib/ext/float_ext.rb +2 -0
  22. data/lib/ext/narray_ext.rb +2 -0
  23. data/lib/ext/numeric_as_data_type.rb +2 -0
  24. data/lib/ext/to_bool.rb +5 -3
  25. data/lib/ffi-gdal.rb +2 -0
  26. data/lib/ffi/cpl.rb +2 -0
  27. data/lib/ffi/cpl/conv.rb +4 -2
  28. data/lib/ffi/cpl/error.rb +2 -0
  29. data/lib/ffi/cpl/hash_set.rb +2 -0
  30. data/lib/ffi/cpl/http.rb +2 -0
  31. data/lib/ffi/cpl/http_result.rb +2 -0
  32. data/lib/ffi/cpl/list.rb +2 -0
  33. data/lib/ffi/cpl/mime_part.rb +2 -0
  34. data/lib/ffi/cpl/minixml.rb +2 -0
  35. data/lib/ffi/cpl/port.rb +2 -0
  36. data/lib/ffi/cpl/progress.rb +2 -0
  37. data/lib/ffi/cpl/quad_tree.rb +2 -0
  38. data/lib/ffi/cpl/rect_obj.rb +2 -0
  39. data/lib/ffi/cpl/string.rb +2 -0
  40. data/lib/ffi/cpl/vsi.rb +2 -0
  41. data/lib/ffi/cpl/xml_node.rb +2 -0
  42. data/lib/ffi/gdal.rb +3 -3
  43. data/lib/ffi/gdal/alg.rb +2 -0
  44. data/lib/ffi/gdal/color_entry.rb +2 -0
  45. data/lib/ffi/gdal/exceptions.rb +2 -0
  46. data/lib/ffi/gdal/gcp.rb +2 -0
  47. data/lib/ffi/gdal/gdal.rb +2 -0
  48. data/lib/ffi/gdal/grid.rb +2 -0
  49. data/lib/ffi/gdal/grid_data_metrics_options.rb +2 -0
  50. data/lib/ffi/gdal/grid_inverse_distance_to_a_power_options.rb +2 -0
  51. data/lib/ffi/gdal/grid_moving_average_options.rb +2 -0
  52. data/lib/ffi/gdal/grid_nearest_neighbor_options.rb +2 -0
  53. data/lib/ffi/gdal/matching.rb +2 -0
  54. data/lib/ffi/gdal/rpc_info.rb +2 -0
  55. data/lib/ffi/gdal/transformer_info.rb +2 -0
  56. data/lib/ffi/gdal/version.rb +3 -1
  57. data/lib/ffi/gdal/vrt.rb +2 -0
  58. data/lib/ffi/gdal/warp_options.rb +9 -4
  59. data/lib/ffi/gdal/warper.rb +19 -1
  60. data/lib/ffi/ogr.rb +2 -0
  61. data/lib/ffi/ogr/api.rb +2 -0
  62. data/lib/ffi/ogr/contour_writer_info.rb +2 -0
  63. data/lib/ffi/ogr/core.rb +2 -0
  64. data/lib/ffi/ogr/envelope.rb +2 -0
  65. data/lib/ffi/ogr/envelope_3d.rb +2 -0
  66. data/lib/ffi/ogr/featurestyle.rb +2 -0
  67. data/lib/ffi/ogr/field.rb +2 -0
  68. data/lib/ffi/ogr/geocoding.rb +2 -0
  69. data/lib/ffi/ogr/srs_api.rb +3 -0
  70. data/lib/ffi/ogr/style_param.rb +2 -0
  71. data/lib/ffi/ogr/style_value.rb +2 -0
  72. data/lib/gdal.rb +3 -0
  73. data/lib/gdal/color_entry.rb +2 -0
  74. data/lib/gdal/color_entry_mixins/extensions.rb +2 -14
  75. data/lib/gdal/color_interpretation.rb +2 -0
  76. data/lib/gdal/color_table.rb +2 -0
  77. data/lib/gdal/color_table_mixins/extensions.rb +3 -17
  78. data/lib/gdal/color_table_types/cmyk.rb +2 -0
  79. data/lib/gdal/color_table_types/gray.rb +2 -0
  80. data/lib/gdal/color_table_types/hls.rb +2 -0
  81. data/lib/gdal/color_table_types/rgb.rb +2 -0
  82. data/lib/gdal/cpl_error_handler.rb +2 -0
  83. data/lib/gdal/data_type.rb +2 -0
  84. data/lib/gdal/dataset.rb +11 -7
  85. data/lib/gdal/dataset_mixins/algorithm_methods.rb +7 -4
  86. data/lib/gdal/dataset_mixins/extensions.rb +7 -47
  87. data/lib/gdal/dataset_mixins/matching.rb +4 -1
  88. data/lib/gdal/dataset_mixins/warp_methods.rb +52 -11
  89. data/lib/gdal/driver.rb +6 -8
  90. data/lib/gdal/driver_mixins/extensions.rb +2 -0
  91. data/lib/gdal/environment_methods.rb +2 -0
  92. data/lib/gdal/exceptions.rb +2 -0
  93. data/lib/gdal/geo_transform.rb +3 -3
  94. data/lib/gdal/geo_transform_mixins/extensions.rb +2 -17
  95. data/lib/gdal/grid.rb +4 -1
  96. data/lib/gdal/grid_algorithms.rb +2 -0
  97. data/lib/gdal/grid_algorithms/data_metrics_base.rb +2 -0
  98. data/lib/gdal/grid_algorithms/inverse_distance_to_a_power.rb +2 -0
  99. data/lib/gdal/grid_algorithms/metric_average_distance.rb +2 -0
  100. data/lib/gdal/grid_algorithms/metric_average_distance_pts.rb +2 -0
  101. data/lib/gdal/grid_algorithms/metric_count.rb +2 -0
  102. data/lib/gdal/grid_algorithms/metric_maximum.rb +2 -0
  103. data/lib/gdal/grid_algorithms/metric_minimum.rb +2 -0
  104. data/lib/gdal/grid_algorithms/metric_range.rb +2 -0
  105. data/lib/gdal/grid_algorithms/moving_average.rb +2 -0
  106. data/lib/gdal/grid_algorithms/nearest_neighbor.rb +2 -0
  107. data/lib/gdal/gridder.rb +11 -3
  108. data/lib/gdal/gridder/point_extracting.rb +3 -2
  109. data/lib/gdal/gridder_options.rb +2 -0
  110. data/lib/gdal/internal_helpers.rb +3 -4
  111. data/lib/gdal/logger.rb +2 -0
  112. data/lib/gdal/major_object.rb +2 -0
  113. data/lib/gdal/merger.rb +2 -0
  114. data/lib/gdal/options.rb +16 -13
  115. data/lib/gdal/raster_attribute_table.rb +2 -0
  116. data/lib/gdal/raster_attribute_table_mixins/extensions.rb +3 -16
  117. data/lib/gdal/raster_band.rb +11 -6
  118. data/lib/gdal/raster_band_classifier.rb +52 -19
  119. data/lib/gdal/raster_band_mixins/algorithm_extensions.rb +2 -0
  120. data/lib/gdal/raster_band_mixins/algorithm_methods.rb +12 -5
  121. data/lib/gdal/raster_band_mixins/coloring_extensions.rb +3 -1
  122. data/lib/gdal/raster_band_mixins/extensions.rb +6 -35
  123. data/lib/gdal/raster_band_mixins/io_extensions.rb +7 -4
  124. data/lib/gdal/rpc_info.rb +2 -0
  125. data/lib/gdal/transformer.rb +2 -0
  126. data/lib/gdal/transformers/approximate_transformer.rb +4 -1
  127. data/lib/gdal/transformers/base_general_image_projection_transformer.rb +4 -1
  128. data/lib/gdal/transformers/gcp_transformer.rb +6 -2
  129. data/lib/gdal/transformers/general_image_projection_transformer.rb +2 -0
  130. data/lib/gdal/transformers/general_image_projection_transformer2.rb +4 -1
  131. data/lib/gdal/transformers/general_image_projection_transformer3.rb +4 -1
  132. data/lib/gdal/transformers/geolocation_transformer.rb +4 -1
  133. data/lib/gdal/transformers/reprojection_transformer.rb +2 -0
  134. data/lib/gdal/transformers/rpc_transformer.rb +4 -1
  135. data/lib/gdal/transformers/tps_transformer.rb +2 -0
  136. data/lib/gdal/version_info.rb +9 -7
  137. data/lib/gdal/virtual_dataset.rb +2 -0
  138. data/lib/gdal/warp_operation.rb +2 -0
  139. data/lib/gdal/warp_options.rb +105 -35
  140. data/lib/ogr.rb +2 -0
  141. data/lib/ogr/coordinate_transformation.rb +2 -0
  142. data/lib/ogr/data_source.rb +5 -9
  143. data/lib/ogr/data_source_extensions.rb +2 -19
  144. data/lib/ogr/data_source_mixins/capability_methods.rb +2 -0
  145. data/lib/ogr/driver.rb +4 -6
  146. data/lib/ogr/driver_mixins/capability_methods.rb +2 -0
  147. data/lib/ogr/envelope.rb +4 -2
  148. data/lib/ogr/envelope_extensions.rb +2 -22
  149. data/lib/ogr/error_handling.rb +3 -1
  150. data/lib/ogr/exceptions.rb +3 -1
  151. data/lib/ogr/feature.rb +17 -9
  152. data/lib/ogr/feature_definition.rb +7 -4
  153. data/lib/ogr/feature_definition_extensions.rb +2 -18
  154. data/lib/ogr/feature_extensions.rb +2 -27
  155. data/lib/ogr/field.rb +5 -1
  156. data/lib/ogr/field_definition.rb +5 -6
  157. data/lib/ogr/geocoder.rb +2 -0
  158. data/lib/ogr/geometries/geometry_collection.rb +2 -0
  159. data/lib/ogr/geometries/geometry_collection_25d.rb +2 -0
  160. data/lib/ogr/geometries/line_string.rb +2 -1
  161. data/lib/ogr/geometries/line_string_25d.rb +2 -0
  162. data/lib/ogr/geometries/linear_ring.rb +2 -0
  163. data/lib/ogr/geometries/multi_line_string.rb +2 -0
  164. data/lib/ogr/geometries/multi_line_string_25d.rb +2 -0
  165. data/lib/ogr/geometries/multi_point.rb +2 -0
  166. data/lib/ogr/geometries/multi_point_25d.rb +2 -0
  167. data/lib/ogr/geometries/multi_polygon.rb +2 -0
  168. data/lib/ogr/geometries/multi_polygon_25d.rb +2 -0
  169. data/lib/ogr/geometries/none_geometry.rb +2 -0
  170. data/lib/ogr/geometries/point.rb +2 -0
  171. data/lib/ogr/geometries/point_25d.rb +2 -0
  172. data/lib/ogr/geometries/polygon.rb +2 -0
  173. data/lib/ogr/geometries/polygon_25d.rb +2 -0
  174. data/lib/ogr/geometries/unknown_geometry.rb +2 -0
  175. data/lib/ogr/geometry.rb +3 -4
  176. data/lib/ogr/geometry_field_definition.rb +3 -4
  177. data/lib/ogr/geometry_mixins/container_mixins.rb +2 -0
  178. data/lib/ogr/geometry_mixins/extensions.rb +10 -39
  179. data/lib/ogr/geometry_types/container.rb +2 -0
  180. data/lib/ogr/geometry_types/curve.rb +3 -1
  181. data/lib/ogr/geometry_types/surface.rb +2 -0
  182. data/lib/ogr/internal_helpers.rb +2 -0
  183. data/lib/ogr/layer.rb +5 -1
  184. data/lib/ogr/layer_mixins/capability_methods.rb +2 -0
  185. data/lib/ogr/layer_mixins/extensions.rb +9 -27
  186. data/lib/ogr/layer_mixins/ogr_feature_methods.rb +6 -12
  187. data/lib/ogr/layer_mixins/ogr_field_methods.rb +10 -14
  188. data/lib/ogr/layer_mixins/ogr_layer_method_methods.rb +2 -0
  189. data/lib/ogr/layer_mixins/ogr_query_filter_methods.rb +8 -3
  190. data/lib/ogr/layer_mixins/ogr_sql_methods.rb +3 -3
  191. data/lib/ogr/spatial_reference.rb +12 -2
  192. data/lib/ogr/spatial_reference_extensions.rb +2 -26
  193. data/lib/ogr/spatial_reference_mixins/coordinate_system_getter_setters.rb +12 -5
  194. data/lib/ogr/spatial_reference_mixins/exporters.rb +2 -0
  195. data/lib/ogr/spatial_reference_mixins/importers.rb +6 -2
  196. data/lib/ogr/spatial_reference_mixins/morphers.rb +2 -0
  197. data/lib/ogr/spatial_reference_mixins/parameter_getter_setters.rb +2 -0
  198. data/lib/ogr/spatial_reference_mixins/type_checks.rb +2 -0
  199. data/lib/ogr/style_table.rb +2 -0
  200. data/lib/ogr/style_table_extensions.rb +2 -10
  201. data/lib/ogr/style_tool.rb +2 -0
  202. data/spec/ffi-gdal_spec.rb +2 -0
  203. data/spec/integration/gdal/color_table_info_spec.rb +2 -0
  204. data/spec/integration/gdal/dataset_info_spec.rb +15 -13
  205. data/spec/integration/gdal/driver_info_spec.rb +3 -1
  206. data/spec/integration/gdal/geo_transform_info_spec.rb +2 -0
  207. data/spec/integration/gdal/gridder_spec.rb +2 -0
  208. data/spec/integration/gdal/raster_attribute_table_info_spec.rb +2 -0
  209. data/spec/integration/gdal/raster_band_algorithms_spec.rb +2 -0
  210. data/spec/integration/gdal/raster_band_info_spec.rb +37 -15
  211. data/spec/integration/ogr/layer_spec.rb +2 -6
  212. data/spec/spec_helper.rb +3 -1
  213. data/spec/support/images/123.tiff +0 -0
  214. data/spec/support/integration_help.rb +2 -0
  215. data/spec/support/shared_contexts.rb +2 -0
  216. data/spec/support/shared_examples/gdal/major_object_examples.rb +2 -0
  217. data/spec/support/shared_examples/ogr/{a_25D_geometry.rb → a_25d_geometry.rb} +2 -0
  218. data/spec/support/shared_examples/ogr/a_container_geometry.rb +2 -0
  219. data/spec/support/shared_examples/ogr/a_geometry.rb +3 -1
  220. data/spec/support/shared_examples/ogr/a_line_string.rb +2 -0
  221. data/spec/unit/ext/error_symbols_spec.rb +2 -0
  222. data/spec/unit/ext/numeric_as_data_type_spec.rb +2 -0
  223. data/spec/unit/ffi/gdal_spec.rb +3 -0
  224. data/spec/unit/gdal/color_entry_spec.rb +2 -0
  225. data/spec/unit/gdal/color_interpretation_spec.rb +2 -0
  226. data/spec/unit/gdal/color_table_mixins/extensions_spec.rb +2 -0
  227. data/spec/unit/gdal/color_table_spec.rb +2 -0
  228. data/spec/unit/gdal/data_type_spec.rb +2 -0
  229. data/spec/unit/gdal/dataset_mixins/warp_methods_spec.rb +55 -0
  230. data/spec/unit/gdal/dataset_spec.rb +2 -0
  231. data/spec/unit/gdal/driver_mixins/extensions_spec.rb +2 -0
  232. data/spec/unit/gdal/driver_spec.rb +2 -0
  233. data/spec/unit/gdal/environment_methods_spec.rb +2 -0
  234. data/spec/unit/gdal/geo_transform_mixins/extensions_spec.rb +2 -0
  235. data/spec/unit/gdal/geo_transform_spec.rb +2 -13
  236. data/spec/unit/gdal/grid_spec.rb +10 -0
  237. data/spec/unit/gdal/gridder/point_extracting_spec.rb +2 -0
  238. data/spec/unit/gdal/gridder_options_spec.rb +2 -0
  239. data/spec/unit/gdal/gridder_spec.rb +42 -0
  240. data/spec/unit/gdal/internal_helpers_spec.rb +2 -0
  241. data/spec/unit/gdal/major_object_spec.rb +2 -0
  242. data/spec/unit/gdal/options_spec.rb +28 -1
  243. data/spec/unit/gdal/raster_attribute_table_spec.rb +2 -0
  244. data/spec/unit/gdal/raster_band_classifier_spec.rb +43 -5
  245. data/spec/unit/gdal/raster_band_mixins/extensions_spec.rb +2 -0
  246. data/spec/unit/gdal/raster_band_mixins/io_extensions_spec.rb +2 -0
  247. data/spec/unit/gdal/raster_band_spec.rb +2 -0
  248. data/spec/unit/gdal/rpc_info_spec.rb +2 -0
  249. data/spec/unit/gdal/version_info_spec.rb +2 -0
  250. data/spec/unit/gdal/virtual_dataset_spec.rb +2 -0
  251. data/spec/unit/gdal/warp_operation_spec.rb +2 -0
  252. data/spec/unit/gdal/warp_options_spec.rb +338 -0
  253. data/spec/unit/ogr/coordinate_transformation_spec.rb +2 -0
  254. data/spec/unit/ogr/data_source_mixins/capability_methods_spec.rb +2 -0
  255. data/spec/unit/ogr/data_source_spec.rb +2 -0
  256. data/spec/unit/ogr/driver_mixins/capability_methods_spec.rb +2 -0
  257. data/spec/unit/ogr/driver_spec.rb +3 -1
  258. data/spec/unit/ogr/envelope_spec.rb +2 -0
  259. data/spec/unit/ogr/feature_definition_spec.rb +2 -19
  260. data/spec/unit/ogr/feature_extensions_spec.rb +3 -1
  261. data/spec/unit/ogr/feature_spec.rb +3 -3
  262. data/spec/unit/ogr/field_definition_spec.rb +2 -19
  263. data/spec/unit/ogr/field_spec.rb +3 -1
  264. data/spec/unit/ogr/geometries/geometry_collection_25d_spec.rb +2 -0
  265. data/spec/unit/ogr/geometries/geometry_collection_spec.rb +2 -0
  266. data/spec/unit/ogr/geometries/line_string_25d_spec.rb +2 -0
  267. data/spec/unit/ogr/geometries/line_string_spec.rb +2 -0
  268. data/spec/unit/ogr/geometries/linear_ring_spec.rb +2 -0
  269. data/spec/unit/ogr/geometries/multi_line_string_25d_spec.rb +2 -0
  270. data/spec/unit/ogr/geometries/multi_line_string_spec.rb +2 -0
  271. data/spec/unit/ogr/geometries/multi_point_25d_spec.rb +2 -0
  272. data/spec/unit/ogr/geometries/multi_point_spec.rb +2 -0
  273. data/spec/unit/ogr/geometries/multi_polygon_25d_spec.rb +2 -0
  274. data/spec/unit/ogr/geometries/multi_polygon_spec.rb +2 -0
  275. data/spec/unit/ogr/geometries/none_geometry_spec.rb +2 -0
  276. data/spec/unit/ogr/geometries/point_25d_spec.rb +2 -0
  277. data/spec/unit/ogr/geometries/point_spec.rb +2 -0
  278. data/spec/unit/ogr/geometries/polygon_25d_spec.rb +2 -0
  279. data/spec/unit/ogr/geometries/polygon_spec.rb +2 -0
  280. data/spec/unit/ogr/geometries/unknown_geometry_spec.rb +2 -0
  281. data/spec/unit/ogr/geometry_field_definition_spec.rb +2 -16
  282. data/spec/unit/ogr/geometry_spec.rb +2 -0
  283. data/spec/unit/ogr/internal_helpers_spec.rb +2 -0
  284. data/spec/unit/ogr/layer_mixins/capability_methods_spec.rb +2 -0
  285. data/spec/unit/ogr/layer_mixins/ogr_feature_methods_spec.rb +2 -0
  286. data/spec/unit/ogr/layer_mixins/ogr_field_methods_spec.rb +2 -0
  287. data/spec/unit/ogr/layer_mixins/ogr_layer_method_methods_spec.rb +2 -0
  288. data/spec/unit/ogr/layer_mixins/ogr_query_filter_methods_spec.rb +2 -0
  289. data/spec/unit/ogr/layer_mixins/ogr_sql_methods_spec.rb +2 -0
  290. data/spec/unit/ogr/layer_spec.rb +2 -0
  291. data/spec/unit/ogr/spatial_reference_mixins/coordinate_system_getter_setters_spec.rb +2 -0
  292. data/spec/unit/ogr/spatial_reference_mixins/exporters_spec.rb +19 -15
  293. data/spec/unit/ogr/spatial_reference_mixins/importers_spec.rb +2 -0
  294. data/spec/unit/ogr/spatial_reference_mixins/morphers_spec.rb +9 -7
  295. data/spec/unit/ogr/spatial_reference_mixins/parameter_getter_setters_spec.rb +2 -0
  296. data/spec/unit/ogr/spatial_reference_mixins/type_checks_spec.rb +2 -0
  297. data/spec/unit/ogr/spatial_reference_spec.rb +4 -2
  298. data/spec/unit/ogr/style_table_spec.rb +2 -26
  299. data/spec/unit/ogr/style_tool_spec.rb +2 -0
  300. data/spec/unit/version_info_spec.rb +2 -0
  301. metadata +47 -15
  302. data/lib/ogr/field_definition_extensions.rb +0 -22
  303. data/lib/ogr/geometry_field_definition_extensions.rb +0 -19
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'simplecov'
2
4
  SimpleCov.start do
3
5
  add_filter '/spec/'
@@ -7,7 +9,7 @@ SimpleCov.start do
7
9
  add_group 'ext', 'lib/ext'
8
10
  end
9
11
 
10
- $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
12
+ $LOAD_PATH.unshift File.expand_path('lib', __dir__)
11
13
  require 'ffi-gdal'
12
14
  require 'byebug'
13
15
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fileutils'
2
4
 
3
5
  # Helper methods for integration specs.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.shared_context 'OGR::Layer, spatial_reference' do
2
4
  require 'ogr/driver'
3
5
  require 'ogr/spatial_reference'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.shared_examples 'a major object' do
2
4
  describe '#metadata_domain_list' do
3
5
  it 'is an Array of Strings' do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.shared_examples 'a 2.5D geometry' do
2
4
  describe '#flatten_to_2d' do
3
5
  it 'drops the z point(s)' do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Requirements:
2
4
  # * :child_geometry - one that the described class can
3
5
  RSpec.shared_examples 'a container geometry' do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.shared_examples 'a geometry' do
2
4
  require 'ogr'
3
5
 
@@ -353,7 +355,7 @@ RSpec.shared_examples 'a geometry' do
353
355
 
354
356
  describe '#wkb_size' do
355
357
  it 'returns a non-zero integer' do
356
- expect(geometry.wkb_size).to be_a Fixnum
358
+ expect(geometry.wkb_size).to be_a Integer
357
359
 
358
360
  if geometry.name == 'LINEARRING'
359
361
  expect(geometry.wkb_size).to be_zero
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.shared_examples 'a line string' do
2
4
  describe '#dimension' do
3
5
  subject { geometry.dimension }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'ext/error_symbols'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  RSpec.describe Numeric do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'fakefs/safe'
3
5
 
@@ -9,6 +11,7 @@ RSpec.describe FFI::GDAL do
9
11
  end
10
12
 
11
13
  it 'returns GDAL_LIBRARY_PATH + libgdal file name' do
14
+ expect(Dir).to receive(:[]).with(%r{/pants/stuff\.+}).and_return '/pants/stuff.dylib'
12
15
  expect(described_class.find_lib('stuff')).to match %r{\A/pants/stuff\.+}
13
16
  end
14
17
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/color_entry'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/color_interpretation'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/color_table'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/color_table'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/data_type'
3
5
 
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'gdal'
5
+
6
+ RSpec.describe GDAL::Dataset do
7
+ let(:source_file_path) do
8
+ File.expand_path('../../../support/images/osgeo/geotiff/GeogToWGS84GeoKey/GeogToWGS84GeoKey5.tif', __dir__)
9
+ end
10
+
11
+ let(:output_dir) { Dir.mktmpdir(File.basename(__FILE__, '.rb')) }
12
+ let(:output_file) { File.join(output_dir, 'reprojected_image.tif') }
13
+
14
+ after { FileUtils.rm_rf(output_dir) if Dir.exist?(output_dir) }
15
+
16
+ subject { described_class.open(source_file_path, 'r', false) }
17
+
18
+ describe '#reproject_image' do
19
+ let(:dest_dataset) do
20
+ dest_width = subject.raster_x_size / 4
21
+ dest_height = subject.raster_y_size / 4
22
+ dataset = GDAL::Driver.by_name('GTiff').create_dataset(output_file, dest_width, dest_height,
23
+ data_type: subject.raster_band(1).data_type)
24
+ dataset.geo_transform = subject.geo_transform.dup
25
+ dataset.projection = OGR::SpatialReference.new_from_epsg(3857).to_wkt
26
+ dataset
27
+ end
28
+
29
+ after { dest_dataset.close }
30
+
31
+ it 'creates a valid dataset' do
32
+ subject.reproject_image(dest_dataset, :GRA_CubicSpline)
33
+
34
+ dest_dataset.flush_cache
35
+ expect(dest_dataset.projection).to match(/AUTHORITY\[\"EPSG\",\"3857\"\]/)
36
+ expect(dest_dataset.raster_count).to eq(subject.raster_count)
37
+ end
38
+ end
39
+
40
+ describe '#create_and_reproject_image' do
41
+ let(:output_projection) { OGR::SpatialReference.new_from_epsg(3857).to_wkt }
42
+
43
+ it 'creates a valid dataset' do
44
+ subject.create_and_reproject_image(output_file, :GRA_NearestNeighbor,
45
+ OGR::SpatialReference.new_from_epsg(3857).to_wkt, GDAL::Driver.by_name('GTiff'))
46
+
47
+ dest_dataset = GDAL::Dataset.open(output_file, 'r')
48
+ expect(dest_dataset.projection).to match(/AUTHORITY\[\"EPSG\",\"3857\"\]/)
49
+ expect(dest_dataset.raster_count).to eq(subject.raster_count)
50
+
51
+ dest_driver = dest_dataset.driver
52
+ expect(dest_driver.long_name).to eq 'GeoTIFF'
53
+ end
54
+ end
55
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/dataset'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/driver'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/driver'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/environment_methods'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/geo_transform'
3
5
  require 'gdal/geo_transform_mixins/extensions'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/geo_transform'
3
5
 
@@ -259,18 +261,5 @@ RSpec.describe GDAL::GeoTransform do
259
261
  expect(result).to eq pixel: -9000, line: -19_000
260
262
  end
261
263
  end
262
-
263
- describe '#as_json' do
264
- it 'returns the attributes as a Hash' do
265
- expect(subject.as_json).to eq(
266
- x_origin: 0.0,
267
- x_rotation: 0.0,
268
- pixel_width: 0.0,
269
- y_origin: 0.0,
270
- y_rotation: 0.0,
271
- pixel_height: 0.0
272
- )
273
- end
274
- end
275
264
  end
276
265
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/grid'
3
5
 
@@ -12,6 +14,14 @@ RSpec.describe GDAL::Grid do
12
14
  it { is_expected.to respond_to :algorithm_type }
13
15
  end
14
16
 
17
+ describe '#create' do
18
+ context 'no points to grid' do
19
+ it 'raises a GDAL::NoValuesToGrid' do
20
+ expect { subject.create([], {}, nil) }.to raise_exception GDAL::NoValuesToGrid
21
+ end
22
+ end
23
+ end
24
+
15
25
  describe '#make_points_pointer' do
16
26
  context 'array has values' do
17
27
  let(:points) { [1, 2, 3, 4] }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/gridder'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/gridder_options'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/gridder'
3
5
 
@@ -137,4 +139,44 @@ RSpec.describe GDAL::Gridder do
137
139
  end
138
140
  end
139
141
  end
142
+
143
+ describe '#build_block_count' do
144
+ it 'builds block sizes for both x and y' do
145
+ raster_width = 4
146
+ block_x_size = 2
147
+ raster_height = 5
148
+ block_y_size = 3
149
+
150
+ expect(subject).to receive(:build_block_size).with(raster_width, block_x_size).
151
+ and_call_original
152
+ expect(subject).to receive(:build_block_size).with(raster_height, block_y_size).
153
+ and_call_original
154
+
155
+ subject.send(:build_block_count, block_x_size, block_y_size, raster_width, raster_height)
156
+ end
157
+ end
158
+
159
+ describe '#build_block_size' do
160
+ context 'calculation should not be evenly divisible' do
161
+ it 'returns the floor of the count' do
162
+ raster_width = 4
163
+ block_x_size = 2
164
+
165
+ result = subject.send(:build_block_size, raster_width, block_x_size)
166
+
167
+ expect(result).to eq 2
168
+ end
169
+ end
170
+
171
+ context 'calculation should be evenly divisible' do
172
+ it 'returns the floor of the count' do
173
+ raster_width = 4
174
+ block_x_size = 1
175
+
176
+ result = subject.send(:build_block_size, raster_width, block_x_size)
177
+
178
+ expect(result).to eq 4
179
+ end
180
+ end
181
+ end
140
182
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/internal_helpers'
3
5
  require 'ogr/spatial_reference'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/major_object'
3
5
 
@@ -1,6 +1,33 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/options'
3
5
 
4
6
  RSpec.describe GDAL::Options do
5
- pending 'Add some tests!'
7
+ describe '.to_hash' do
8
+ subject { described_class.to_hash(pointer) }
9
+
10
+ context 'options are set' do
11
+ let(:pointer) { described_class.pointer(hash) }
12
+
13
+ let(:hash) do
14
+ {
15
+ one: 'ONE',
16
+ two: 'TWO'
17
+ }
18
+ end
19
+
20
+ it 'returns the Ruby Hash' do
21
+ expect(subject).to eq(hash)
22
+ end
23
+ end
24
+
25
+ context 'pointer is null' do
26
+ let(:pointer) { FFI::MemoryPointer.new(:string) }
27
+
28
+ it 'returns an empty Hash' do
29
+ expect(subject).to eq({})
30
+ end
31
+ end
32
+ end
6
33
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/raster_attribute_table'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'gdal/driver'
3
5
  require 'gdal/raster_band_classifier'
@@ -96,8 +98,8 @@ RSpec.describe GDAL::RasterBandClassifier do
96
98
  end
97
99
 
98
100
  context 'all nodata pixels' do
99
- let(:band_narray) { NArray.byte(0) }
100
- before { allow(raster_band).to receive(:to_na).and_return(band_narray) }
101
+ let(:band_narray) { Numo::Int8.new(3, 5).fill(0) }
102
+ before { allow(raster_band).to receive(:to_nna).and_return(band_narray) }
101
103
 
102
104
  it 'returns an empty Array' do
103
105
  expect(subject.equal_count_ranges(10)).to eq([])
@@ -129,7 +131,7 @@ RSpec.describe GDAL::RasterBandClassifier do
129
131
  end
130
132
 
131
133
  it 'retains its NODATA pixels' do
132
- expect { subject.classify! }.to_not change { raster_band.to_na.eq(-9999.0).count_true }
134
+ expect { subject.classify! }.to_not(change { raster_band.to_na.eq(-9999.0).count_true })
133
135
  end
134
136
  end
135
137
 
@@ -159,7 +161,7 @@ RSpec.describe GDAL::RasterBandClassifier do
159
161
  end
160
162
 
161
163
  it 'retains its NODATA pixels' do
162
- expect { subject.classify! }.to_not change { raster_band.to_na.eq(-9999.0).count_true }
164
+ expect { subject.classify! }.to_not(change { raster_band.to_na.eq(-9999.0).count_true })
163
165
  pixels = raster_band.to_na
164
166
  expect(pixels.eq(-9999).count_true).to eq 640
165
167
  expect(pixels.eq(0).count_true).to eq 0
@@ -190,7 +192,43 @@ RSpec.describe GDAL::RasterBandClassifier do
190
192
  end
191
193
 
192
194
  it 'retains its NODATA pixels' do
193
- expect { subject.classify! }.to_not change { raster_band.to_na.eq(-9999.0).count_true }
195
+ expect { subject.classify! }.to_not(change { raster_band.to_na.eq(-9999.0).count_true })
196
+ end
197
+ end
198
+ end
199
+
200
+ describe '#masked_pixels' do
201
+ let(:pixels) { dataset.raster_band(1).to_nna }
202
+ let(:raster_band) { double 'Band', no_data_value: { value: nodata_value } }
203
+
204
+ before { subject.instance_variable_set(:@raster_band, raster_band) }
205
+
206
+ context 'nodata is NaN' do
207
+ let(:nodata_value) { Float::NAN }
208
+ let(:pixels) { Numo::DFloat.cast(dataset.raster_band(1).to_nna) }
209
+
210
+ before do
211
+ pixels[pixels.eq(0)] = nodata_value
212
+ end
213
+
214
+ it 'removes all nodata values' do
215
+ expect(subject.send(:masked_pixels, pixels).isnan.count_true).to eq 0
216
+ end
217
+ end
218
+
219
+ context 'nodata is a number' do
220
+ let(:nodata_value) { 0 }
221
+
222
+ it 'removes all nodata values' do
223
+ expect(subject.send(:masked_pixels, pixels).eq(0).count_true).to eq 0
224
+ end
225
+ end
226
+
227
+ context 'nodata is nil' do
228
+ let(:nodata_value) { nil }
229
+
230
+ it 'returns the original pixels' do
231
+ expect(subject.send(:masked_pixels, pixels)).to eq pixels
194
232
  end
195
233
  end
196
234
  end