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_relative 'base_general_image_projection_transformer'
2
4
 
3
5
  module GDAL
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base_general_image_projection_transformer'
2
4
 
3
5
  module GDAL
@@ -43,7 +45,8 @@ module GDAL
43
45
  @c_pointer = FFI::GDAL::Alg.GDALCreateGenImgProjTransformer2(
44
46
  source_ptr,
45
47
  destination_ptr,
46
- options_ptr)
48
+ options_ptr
49
+ )
47
50
 
48
51
  super()
49
52
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'base_general_image_projection_transformer'
2
4
 
3
5
  module GDAL
@@ -16,7 +18,8 @@ module GDAL
16
18
  source_wkt,
17
19
  source_ptr,
18
20
  destination_wkt,
19
- destination_ptr)
21
+ destination_ptr
22
+ )
20
23
 
21
24
  super()
22
25
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GDAL
2
4
  module Transformers
3
5
  class GeolocationTransformer
@@ -19,7 +21,8 @@ module GDAL
19
21
  @c_pointer = FFI::GDAL::Alg.CreateGeoLocTransformer(
20
22
  base_dataset_ptr,
21
23
  geolocation_info_ptr,
22
- reversed)
24
+ reversed
25
+ )
23
26
  end
24
27
 
25
28
  def destroy!
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GDAL
2
4
  module Transformers
3
5
  class ReprojectionTransformer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GDAL
2
4
  module Transformers
3
5
  class RPCTransformer
@@ -33,7 +35,8 @@ module GDAL
33
35
  rpc_info,
34
36
  reversed,
35
37
  pixel_error_threshold,
36
- options_ptr)
38
+ options_ptr
39
+ )
37
40
  end
38
41
 
39
42
  def destroy!
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module GDAL
2
4
  module Transformers
3
5
  class TPSTransformer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'date'
2
4
 
3
5
  module GDAL
@@ -6,33 +8,33 @@ module GDAL
6
8
  #
7
9
  # @return [String]
8
10
  def version_num
9
- FFI::GDAL.GDALVersionInfo('VERSION_NUM'.freeze)
11
+ FFI::GDAL.GDALVersionInfo('VERSION_NUM')
10
12
  end
11
13
 
12
14
  # @return [Date]
13
15
  def release_date
14
- Date.parse(FFI::GDAL.GDALVersionInfo('RELEASE_DATE'.freeze))
16
+ Date.parse(FFI::GDAL.GDALVersionInfo('RELEASE_DATE'))
15
17
  end
16
18
 
17
19
  # Version in the form "1.1.7".
18
20
  #
19
21
  # @return [String]
20
22
  def release_name
21
- FFI::GDAL.GDALVersionInfo('RELEASE_NAME'.freeze)
23
+ FFI::GDAL.GDALVersionInfo('RELEASE_NAME')
22
24
  end
23
25
 
24
26
  # The long licensing info.
25
27
  #
26
28
  # @return [String]
27
29
  def license
28
- FFI::GDAL.GDALVersionInfo('LICENSE'.freeze)
30
+ FFI::GDAL.GDALVersionInfo('LICENSE')
29
31
  end
30
32
 
31
33
  # Options used when building GDAL.
32
34
  #
33
35
  # @return [Hash{String => String}]
34
36
  def build_info
35
- key_value_pairs = FFI::GDAL.GDALVersionInfo('BUILD_INFO'.freeze)
37
+ key_value_pairs = FFI::GDAL.GDALVersionInfo('BUILD_INFO')
36
38
  key_value_pairs.split.each_with_object({}) do |kv, obj|
37
39
  key, value = kv.split('=', 2)
38
40
  obj[key] = value
@@ -41,7 +43,7 @@ module GDAL
41
43
 
42
44
  # @return [String]
43
45
  def long_version
44
- FFI::GDAL.GDALVersionInfo('--version'.freeze)
46
+ FFI::GDAL.GDALVersionInfo('--version')
45
47
  end
46
48
 
47
49
  # @param major [Fixnum]
@@ -49,7 +51,7 @@ module GDAL
49
51
  # @return [Boolean] +true+ if the runtime GDAL library matches the given
50
52
  # version params.
51
53
  def check_version(major, minor)
52
- FFI::GDAL.GDALCheckVersion(major, minor, 'FFI::GDAL'.freeze)
54
+ FFI::GDAL.GDALCheckVersion(major, minor, 'FFI::GDAL')
53
55
  end
54
56
  end
55
57
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../gdal'
2
4
  require_relative 'major_object'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../gdal'
2
4
 
3
5
  module GDAL
@@ -1,14 +1,32 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../gdal'
2
4
 
3
5
  module GDAL
4
6
  class WarpOptions
5
7
  attr_reader :c_struct
8
+ attr_reader :source_dataset
9
+ attr_reader :destination_dataset
10
+ attr_reader :cutline
6
11
 
7
12
  def initialize(options = {})
8
13
  @c_struct = FFI::GDAL::WarpOptions.new
9
-
10
- options.keys do |k|
11
- @c_struct[k] = options[k]
14
+ @source_dataset = nil
15
+ @destination_dataset = nil
16
+
17
+ options.each_key do |k|
18
+ assign_meth = "#{k}=".to_sym
19
+
20
+ begin
21
+ if respond_to?(assign_meth)
22
+ send(assign_meth, options[k])
23
+ else
24
+ @c_struct[k] = options[k]
25
+ end
26
+ rescue ArgumentError => ex
27
+ new_message = "#{k}; #{ex.message}"
28
+ raise $ERROR_INFO, new_message, $ERROR_INFO.backtrace
29
+ end
12
30
  end
13
31
  end
14
32
 
@@ -21,42 +39,40 @@ module GDAL
21
39
  @c_struct[:warp_operation_options] = GDAL::Options.pointer(options)
22
40
  end
23
41
 
24
- # @param limit [Float]
25
- def warp_memory_limit=(limit)
26
- @c_struct[:warp_memory_limit] = limit
27
- end
28
-
29
- # @param algorithm_type [FFI::GDAL::Warper::ResampleAlg]
30
- def resample_algorithm=(algorithm_type)
31
- @c_struct[:resample_alg] = algorithm_type
32
- end
42
+ # @return [Hash]
43
+ def warp_operation_options
44
+ options = @c_struct[:warp_operation_options]
33
45
 
34
- # @param data_type [FFI::GDAL::GDAL::DataType]
35
- def working_data_type=(data_type)
36
- @c_struct[:working_data_type] = data_type
46
+ GDAL::Options.to_hash(options)
37
47
  end
38
48
 
39
49
  # @param dataset [GDAL::Dataset]
40
50
  def source_dataset=(dataset)
51
+ @source_dataset = dataset
41
52
  @c_struct[:source_dataset] = dataset.c_pointer
42
53
  end
43
54
 
44
55
  # @param dataset [GDAL::Dataset]
45
56
  def destination_dataset=(dataset)
57
+ @destination_dataset = dataset
46
58
  @c_struct[:destination_dataset] = dataset.c_pointer
47
59
  end
48
60
 
49
- # @param count [Fixnum]
50
- def band_count=(count)
51
- @c_struct[:band_count] = count
52
- end
53
-
54
61
  # @param band_numbers [Array<Fixnum>]
55
62
  def source_bands=(band_numbers)
56
- bands_ptr = FFI::MemoryPointer.new(:pointer, band_numbers.length)
63
+ bands_ptr = FFI::MemoryPointer.new(:int, band_numbers.length)
57
64
  bands_ptr.write_array_of_int(band_numbers)
58
65
 
59
66
  @c_struct[:source_bands] = bands_ptr
67
+ @c_struct[:band_count] = band_numbers.length if band_numbers.length > @c_struct[:band_count]
68
+ end
69
+
70
+ # @return [Array<Fixnum>]
71
+ def source_bands
72
+ pointer = @c_struct[:source_bands]
73
+ return [] if pointer.null?
74
+
75
+ pointer.read_array_of_int(@c_struct[:band_count])
60
76
  end
61
77
 
62
78
  # @param band_numbers [Array<Fixnum>]
@@ -65,33 +81,32 @@ module GDAL
65
81
  bands_ptr.write_array_of_int(band_numbers)
66
82
 
67
83
  @c_struct[:destination_bands] = bands_ptr
84
+ @c_struct[:band_count] = band_numbers.length if band_numbers.length > @c_struct[:band_count]
68
85
  end
69
86
 
70
- def transformer_arg=(transformation_object)
71
- @c_struct[:transformer_arg] = transformation_object.c_pointer
87
+ # @return [Array<Fixnum>]
88
+ def destination_bands
89
+ pointer = @c_struct[:destination_bands]
90
+ return [] if pointer.null?
72
91
 
73
- @c_struct[:transformer] = transformation_object.function
92
+ pointer.read_array_of_int(@c_struct[:band_count])
74
93
  end
75
94
 
76
- def transformer=(transformer)
77
- @c_struct[:transformer] = transformer
78
- end
95
+ def transformer_arg=(transformation_object)
96
+ @c_struct[:transformer_arg] = transformation_object.c_pointer
79
97
 
80
- def progress_formatter=(output_proc)
81
- @c_struct[:progress] = output_proc
98
+ @c_struct[:transformer] = transformation_object.function
82
99
  end
83
100
 
84
- def cutline_geometry=(geometry)
101
+ # @param geometry [OGR::Geometry]
102
+ def cutline=(geometry)
85
103
  raise 'Not a geom' unless geometry.is_a?(OGR::Geometry)
104
+ @cutline = geometry
86
105
 
87
106
  @c_struct[:cutline] = geometry.c_pointer
88
- # @c_struct[:cutline] = geometry.clone.c_pointer
89
- end
90
-
91
- def cutline_blend_distance=(distance)
92
- @c_struct[:cutline_blend_distance] = distance
93
107
  end
94
108
 
109
+ # @param values [Array<Float>]
95
110
  def source_no_data_real=(values)
96
111
  values_ptr = FFI::MemoryPointer.new(:double, values.length)
97
112
  values_ptr.write_array_of_double(values)
@@ -99,6 +114,15 @@ module GDAL
99
114
  @c_struct[:source_no_data_real] = values_ptr
100
115
  end
101
116
 
117
+ # @return [Array<Float>]
118
+ def source_no_data_real
119
+ pointer = @c_struct[:source_no_data_real]
120
+ return [] if pointer.null?
121
+
122
+ pointer.read_array_of_double(@c_struct[:band_count])
123
+ end
124
+
125
+ # @param values [Array<Float>]
102
126
  def source_no_data_imaginary=(values)
103
127
  values_ptr = FFI::MemoryPointer.new(:double, values.length)
104
128
  values_ptr.write_array_of_double(values)
@@ -106,6 +130,15 @@ module GDAL
106
130
  @c_struct[:source_no_data_imaginary] = values_ptr
107
131
  end
108
132
 
133
+ # @return [Array<Float>]
134
+ def source_no_data_imaginary
135
+ pointer = @c_struct[:source_no_data_imaginary]
136
+ return [] if pointer.null?
137
+
138
+ pointer.read_array_of_double(@c_struct[:band_count])
139
+ end
140
+
141
+ # @param values [Array<Float>]
109
142
  def destination_no_data_real=(values)
110
143
  values_ptr = FFI::MemoryPointer.new(:double, values.length)
111
144
  values_ptr.write_array_of_double(values)
@@ -113,6 +146,15 @@ module GDAL
113
146
  @c_struct[:destination_no_data_real] = values_ptr
114
147
  end
115
148
 
149
+ # @return [Array<Float>]
150
+ def destination_no_data_real
151
+ pointer = @c_struct[:destination_no_data_real]
152
+ return [] if pointer.null?
153
+
154
+ pointer.read_array_of_double(@c_struct[:band_count])
155
+ end
156
+
157
+ # @param values [Array<Float>]
116
158
  def destination_no_data_imaginary=(values)
117
159
  values_ptr = FFI::MemoryPointer.new(:double, values.length)
118
160
  values_ptr.write_array_of_double(values)
@@ -120,6 +162,30 @@ module GDAL
120
162
  @c_struct[:destination_no_data_imaginary] = values_ptr
121
163
  end
122
164
 
165
+ # @return [Array<Float>]
166
+ def destination_no_data_imaginary
167
+ pointer = @c_struct[:destination_no_data_imaginary]
168
+ return [] if pointer.null?
169
+
170
+ pointer.read_array_of_double(@c_struct[:band_count])
171
+ end
172
+
173
+ # Set a Proc per source band; number of procs in +band_procs+ should equal
174
+ # {band_count}.
175
+ #
176
+ # @param band_procs [Array<Proc>]
177
+ def source_per_band_validity_mask_function=(band_procs)
178
+ mask_func = FFI::GDAL::Warper::MaskFunc
179
+
180
+ funcs = band_procs.map do |band_proc|
181
+ FFI::Function.new(mask_func.result_type, mask_func.param_types, band_proc, blocking: true)
182
+ end
183
+
184
+ pointer = FFI::MemoryPointer.new(:pointer, band_procs.length)
185
+ pointer.write_array_of_pointer(funcs)
186
+ @c_struct[:source_per_band_validity_mask_function] = pointer
187
+ end
188
+
123
189
  # Used for getting attributes of the internal WarpOptions struct.
124
190
  #
125
191
  # @param meth [Symbol] The FFI::GDAL::WarpOptions key.
@@ -128,5 +194,9 @@ module GDAL
128
194
 
129
195
  @c_struct[meth]
130
196
  end
197
+
198
+ def respond_to_missing?(method_name, include_private = false)
199
+ FFI::GDAL::WarpOptions.members.include?(method_name) || super
200
+ end
131
201
  end
132
202
  end
data/lib/ogr.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'ffi-gdal'
2
4
  require_relative 'ogr/internal_helpers'
3
5
  require_relative 'ogr/exceptions'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'narray'
2
4
  require_relative '../ogr'
3
5
  require_relative '../gdal'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'uri'
2
4
  require 'json'
3
5
  require_relative '../gdal'
@@ -110,9 +112,7 @@ module OGR
110
112
  # @param options [Hash] Driver-specific options.
111
113
  # @return [OGR::Layer]
112
114
  def create_layer(name, geometry_type: :wkbUnknown, spatial_reference: nil, **options)
113
- unless can_create_layer?
114
- raise OGR::UnsupportedOperation, 'This data source does not support creating layers.'
115
- end
115
+ raise OGR::UnsupportedOperation, 'This data source does not support creating layers.' unless can_create_layer?
116
116
 
117
117
  spatial_ref_ptr = GDAL._pointer(OGR::SpatialReference, spatial_reference) if spatial_reference
118
118
  options_obj = GDAL::Options.pointer(options)
@@ -120,9 +120,7 @@ module OGR
120
120
  layer_ptr = FFI::OGR::API.OGR_DS_CreateLayer(@c_pointer, name,
121
121
  spatial_ref_ptr, geometry_type, options_obj)
122
122
 
123
- unless layer_ptr
124
- raise OGR::InvalidLayer, "Unable to create layer '#{name}'."
125
- end
123
+ raise OGR::InvalidLayer, "Unable to create layer '#{name}'." unless layer_ptr
126
124
 
127
125
  @layers << OGR::Layer.new(layer_ptr)
128
126
 
@@ -147,9 +145,7 @@ module OGR
147
145
  # @param index [Fixnum]
148
146
  # @return +true+ if successful, otherwise raises an OGR exception.
149
147
  def delete_layer(index)
150
- unless can_delete_layer?
151
- raise OGR::UnsupportedOperation, 'This data source does not support deleting layers.'
152
- end
148
+ raise OGR::UnsupportedOperation, 'This data source does not support deleting layers.' unless can_delete_layer?
153
149
 
154
150
  ogr_err = FFI::OGR::API.OGR_DS_DeleteLayer(@c_pointer, index)
155
151
 
@@ -1,27 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module OGR
2
4
  module DataSourceExtensions
3
5
  # @return [Array<OGR::Layer>]
4
6
  def layers
5
7
  @layers = Array.new(layer_count) { |i| layer(i) }
6
8
  end
7
-
8
- # @return [Hash]
9
- def as_json(options = nil)
10
- {
11
- data_source: {
12
- driver: driver.name,
13
- layer_count: layer_count,
14
- layers: layers.map(&:as_json),
15
- name: name,
16
- style_table: style_table ? style_table.as_json(options) : nil
17
- },
18
- metadata: all_metadata
19
- }
20
- end
21
-
22
- # @return [String]
23
- def to_json(options = nil)
24
- as_json(options).to_json
25
- end
26
9
  end
27
10
  end