rgeo 3.0.0.pre.rc.3 → 3.0.0

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +9 -0
  3. data/ext/geos_c_impl/factory.c +41 -5
  4. data/ext/geos_c_impl/factory.h +13 -2
  5. data/ext/geos_c_impl/geometry.c +151 -122
  6. data/ext/geos_c_impl/geometry_collection.c +17 -19
  7. data/ext/geos_c_impl/line_string.c +46 -36
  8. data/ext/geos_c_impl/point.c +0 -2
  9. data/ext/geos_c_impl/polygon.c +10 -11
  10. data/ext/geos_c_impl/polygon.h +1 -1
  11. data/ext/geos_c_impl/ruby_more.c +7 -0
  12. data/ext/geos_c_impl/ruby_more.h +8 -0
  13. data/lib/rgeo/cartesian/analysis.rb +5 -3
  14. data/lib/rgeo/cartesian/bounding_box.rb +74 -79
  15. data/lib/rgeo/cartesian/calculations.rb +20 -26
  16. data/lib/rgeo/cartesian/factory.rb +47 -49
  17. data/lib/rgeo/cartesian/planar_graph.rb +10 -16
  18. data/lib/rgeo/cartesian/sweepline_intersector.rb +1 -3
  19. data/lib/rgeo/cartesian/valid_op.rb +1 -3
  20. data/lib/rgeo/coord_sys/cs/entities.rb +87 -101
  21. data/lib/rgeo/coord_sys/cs/factories.rb +0 -2
  22. data/lib/rgeo/coord_sys/cs/wkt_parser.rb +70 -29
  23. data/lib/rgeo/feature/curve.rb +0 -1
  24. data/lib/rgeo/feature/factory.rb +25 -27
  25. data/lib/rgeo/feature/factory_generator.rb +3 -4
  26. data/lib/rgeo/feature/geometry.rb +41 -30
  27. data/lib/rgeo/feature/geometry_collection.rb +3 -4
  28. data/lib/rgeo/feature/line_string.rb +1 -2
  29. data/lib/rgeo/feature/linear_ring.rb +0 -1
  30. data/lib/rgeo/feature/multi_curve.rb +0 -1
  31. data/lib/rgeo/feature/multi_surface.rb +0 -1
  32. data/lib/rgeo/feature/point.rb +0 -1
  33. data/lib/rgeo/feature/polygon.rb +1 -2
  34. data/lib/rgeo/feature/surface.rb +0 -1
  35. data/lib/rgeo/feature/types.rb +73 -83
  36. data/lib/rgeo/geographic/factory.rb +87 -80
  37. data/lib/rgeo/geographic/interface.rb +40 -23
  38. data/lib/rgeo/geographic/projected_feature_methods.rb +2 -6
  39. data/lib/rgeo/geographic/projected_window.rb +35 -21
  40. data/lib/rgeo/geographic/simple_mercator_projector.rb +25 -13
  41. data/lib/rgeo/geographic/spherical_feature_methods.rb +8 -3
  42. data/lib/rgeo/geographic/spherical_math.rb +17 -20
  43. data/lib/rgeo/geos/capi_factory.rb +50 -50
  44. data/lib/rgeo/geos/ffi_factory.rb +41 -42
  45. data/lib/rgeo/geos/ffi_feature_methods.rb +72 -97
  46. data/lib/rgeo/geos/interface.rb +16 -16
  47. data/lib/rgeo/geos/utils.rb +3 -3
  48. data/lib/rgeo/geos/zm_factory.rb +50 -42
  49. data/lib/rgeo/geos/zm_feature_methods.rb +15 -8
  50. data/lib/rgeo/impl_helper/basic_geometry_collection_methods.rb +4 -4
  51. data/lib/rgeo/impl_helper/basic_geometry_methods.rb +1 -2
  52. data/lib/rgeo/impl_helper/basic_line_string_methods.rb +18 -24
  53. data/lib/rgeo/impl_helper/basic_point_methods.rb +1 -3
  54. data/lib/rgeo/impl_helper/basic_polygon_methods.rb +15 -16
  55. data/lib/rgeo/impl_helper/utils.rb +3 -9
  56. data/lib/rgeo/impl_helper/valid_op.rb +12 -16
  57. data/lib/rgeo/version.rb +1 -1
  58. data/lib/rgeo/wkrep/wkb_generator.rb +42 -47
  59. data/lib/rgeo/wkrep/wkb_parser.rb +17 -18
  60. data/lib/rgeo/wkrep/wkt_generator.rb +23 -16
  61. data/lib/rgeo/wkrep/wkt_parser.rb +23 -13
  62. metadata +5 -5
@@ -48,7 +48,6 @@ module RGeo
48
48
  # [<tt>:default_srid</tt>]
49
49
  # A SRID to pass to the factory generator if no SRID is present in
50
50
  # the input. Defaults to nil (i.e. don't specify a SRID).
51
-
52
51
  class WKTParser
53
52
  # Create and configure a WKT parser. See the WKTParser
54
53
  # documentation for the options that can be passed.
@@ -66,7 +65,12 @@ module RGeo
66
65
  end
67
66
  @support_ewkt = opts[:support_ewkt] ? true : false
68
67
  @support_wkt12 = opts[:support_wkt12] ? true : false
69
- @strict_wkt11 = @support_ewkt || @support_wkt12 ? false : opts[:strict_wkt11] ? true : false
68
+ @strict_wkt11 =
69
+ if @support_ewkt || @support_wkt12
70
+ false
71
+ else
72
+ opts[:strict_wkt11] ? true : false
73
+ end
70
74
  @ignore_extra_tokens = opts[:ignore_extra_tokens] ? true : false
71
75
  @default_srid = opts[:default_srid]
72
76
  @mutex = Mutex.new
@@ -127,12 +131,13 @@ module RGeo
127
131
  @cur_expect_m = nil
128
132
  @cur_srid = @default_srid
129
133
  if @support_ewkt && str =~ /^srid=(\d+);/i
130
- str = $'
134
+ str = Regexp.last_match&.post_match
131
135
  @cur_srid = Regexp.last_match(1).to_i
132
136
  end
133
137
  begin
134
138
  start_scanner(str)
135
139
  obj = parse_type_tag
140
+
136
141
  if @cur_token && !@ignore_extra_tokens
137
142
  raise Error::ParseError, "Extra tokens beginning with #{@cur_token.inspect}."
138
143
  end
@@ -149,14 +154,19 @@ module RGeo
149
154
  if @cur_expect_z && !@cur_factory_support_z
150
155
  raise Error::ParseError, "Geometry calls for Z coordinate but factory doesn't support it."
151
156
  end
152
- if @cur_expect_m && !@cur_factory_support_m
153
- raise Error::ParseError, "Geometry calls for M coordinate but factory doesn't support it."
154
- end
157
+
158
+ return unless @cur_expect_m && !@cur_factory_support_m
159
+
160
+ raise Error::ParseError, "Geometry calls for M coordinate but factory doesn't support it."
155
161
  end
156
162
 
157
163
  def ensure_factory
158
164
  unless @cur_factory
159
- @cur_factory = @factory_generator.call(srid: @cur_srid, has_z_coordinate: @cur_expect_z, has_m_coordinate: @cur_expect_m)
165
+ @cur_factory = @factory_generator.call(
166
+ srid: @cur_srid,
167
+ has_z_coordinate: @cur_expect_z,
168
+ has_m_coordinate: @cur_expect_m
169
+ )
160
170
  @cur_factory_support_z = @cur_factory.property(:has_z_coordinate) ? true : false
161
171
  @cur_factory_support_m = @cur_factory.property(:has_m_coordinate) ? true : false
162
172
  check_factory_support unless @cur_expect_z.nil?
@@ -202,7 +212,7 @@ module RGeo
202
212
  end
203
213
  case type
204
214
  when "point"
205
- parse_point(true)
215
+ parse_point(convert_empty: true)
206
216
  when "linestring"
207
217
  parse_line_string
208
218
  when "polygon"
@@ -238,9 +248,11 @@ module RGeo
238
248
  num_extras -= 1 if @cur_expect_z
239
249
  @cur_expect_m = num_extras > 0 && (!@cur_factory || @cur_factory_support_m) ? true : false
240
250
  num_extras -= 1 if @cur_expect_m
251
+
241
252
  if num_extras > 0
242
253
  raise Error::ParseError, "Found #{extra.size + 2} coordinates, which is too many for this factory."
243
254
  end
255
+
244
256
  ensure_factory
245
257
  else
246
258
  val = 0
@@ -261,7 +273,7 @@ module RGeo
261
273
  @cur_factory.point(x, y, *extra)
262
274
  end
263
275
 
264
- def parse_point(convert_empty = false)
276
+ def parse_point(convert_empty: false)
265
277
  if convert_empty && @cur_token == "empty"
266
278
  point = ensure_factory.multi_point([])
267
279
  else
@@ -390,13 +402,11 @@ module RGeo
390
402
  end
391
403
 
392
404
  def expect_token_type(type)
393
- unless type === @cur_token
394
- raise Error::ParseError, "#{type.inspect} expected but #{@cur_token.inspect} found."
395
- end
405
+ raise Error::ParseError, "#{type.inspect} expected but #{@cur_token.inspect} found." unless type === @cur_token
396
406
  end
397
407
 
398
408
  def next_token
399
- if @scanner.scan_until(/\(|\)|\[|\]|,|[^\s\(\)\[\],]+/)
409
+ if @scanner.scan_until(/\(|\)|\[|\]|,|[^\s()\[\],]+/)
400
410
  token = @scanner.matched
401
411
  case token
402
412
  when /^[-+]?(\d+(\.\d*)?|\.\d+)(e[-+]?\d+)?$/
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rgeo
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.pre.rc.3
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Azuma
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-10-11 00:00:00.000000000 Z
12
+ date: 2023-01-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi-geos
@@ -238,12 +238,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
238
238
  requirements:
239
239
  - - ">="
240
240
  - !ruby/object:Gem::Version
241
- version: 2.5.0
241
+ version: 2.6.0
242
242
  required_rubygems_version: !ruby/object:Gem::Requirement
243
243
  requirements:
244
- - - ">"
244
+ - - ">="
245
245
  - !ruby/object:Gem::Version
246
- version: 1.3.1
246
+ version: '0'
247
247
  requirements: []
248
248
  rubygems_version: 3.1.4
249
249
  signing_key: