rgeo 2.4.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/.yardopts +6 -0
  3. data/README.md +21 -11
  4. data/ext/geos_c_impl/analysis.c +29 -26
  5. data/ext/geos_c_impl/analysis.h +8 -5
  6. data/ext/geos_c_impl/coordinates.c +27 -21
  7. data/ext/geos_c_impl/coordinates.h +5 -2
  8. data/ext/geos_c_impl/errors.c +19 -10
  9. data/ext/geos_c_impl/errors.h +11 -4
  10. data/ext/geos_c_impl/extconf.rb +41 -29
  11. data/ext/geos_c_impl/factory.c +441 -351
  12. data/ext/geos_c_impl/factory.h +98 -55
  13. data/ext/geos_c_impl/geometry.c +563 -384
  14. data/ext/geos_c_impl/geometry.h +10 -3
  15. data/ext/geos_c_impl/geometry_collection.c +288 -316
  16. data/ext/geos_c_impl/geometry_collection.h +6 -18
  17. data/ext/geos_c_impl/globals.c +99 -21
  18. data/ext/geos_c_impl/globals.h +3 -2
  19. data/ext/geos_c_impl/line_string.c +263 -222
  20. data/ext/geos_c_impl/line_string.h +5 -6
  21. data/ext/geos_c_impl/main.c +8 -9
  22. data/ext/geos_c_impl/point.c +62 -65
  23. data/ext/geos_c_impl/point.h +4 -5
  24. data/ext/geos_c_impl/polygon.c +134 -132
  25. data/ext/geos_c_impl/polygon.h +11 -9
  26. data/ext/geos_c_impl/preface.h +10 -12
  27. data/ext/geos_c_impl/ruby_more.c +67 -0
  28. data/ext/geos_c_impl/ruby_more.h +25 -0
  29. data/lib/rgeo/cartesian/analysis.rb +5 -3
  30. data/lib/rgeo/cartesian/bounding_box.rb +74 -79
  31. data/lib/rgeo/cartesian/calculations.rb +64 -33
  32. data/lib/rgeo/cartesian/factory.rb +57 -102
  33. data/lib/rgeo/cartesian/feature_classes.rb +68 -46
  34. data/lib/rgeo/cartesian/feature_methods.rb +67 -25
  35. data/lib/rgeo/cartesian/interface.rb +6 -41
  36. data/lib/rgeo/cartesian/planar_graph.rb +373 -0
  37. data/lib/rgeo/cartesian/sweepline_intersector.rb +147 -0
  38. data/lib/rgeo/cartesian/valid_op.rb +69 -0
  39. data/lib/rgeo/cartesian.rb +3 -0
  40. data/lib/rgeo/coord_sys/cs/entities.rb +299 -99
  41. data/lib/rgeo/coord_sys/cs/factories.rb +0 -2
  42. data/lib/rgeo/coord_sys/cs/wkt_parser.rb +90 -42
  43. data/lib/rgeo/coord_sys.rb +1 -20
  44. data/lib/rgeo/error.rb +15 -0
  45. data/lib/rgeo/feature/curve.rb +0 -11
  46. data/lib/rgeo/feature/factory.rb +26 -36
  47. data/lib/rgeo/feature/factory_generator.rb +6 -14
  48. data/lib/rgeo/feature/geometry.rb +146 -66
  49. data/lib/rgeo/feature/geometry_collection.rb +16 -9
  50. data/lib/rgeo/feature/line_string.rb +4 -5
  51. data/lib/rgeo/feature/linear_ring.rb +0 -1
  52. data/lib/rgeo/feature/multi_curve.rb +0 -6
  53. data/lib/rgeo/feature/multi_surface.rb +3 -4
  54. data/lib/rgeo/feature/point.rb +4 -5
  55. data/lib/rgeo/feature/polygon.rb +1 -2
  56. data/lib/rgeo/feature/surface.rb +3 -4
  57. data/lib/rgeo/feature/types.rb +73 -83
  58. data/lib/rgeo/geographic/factory.rb +98 -125
  59. data/lib/rgeo/geographic/interface.rb +66 -163
  60. data/lib/rgeo/geographic/projected_feature_classes.rb +21 -9
  61. data/lib/rgeo/geographic/projected_feature_methods.rb +67 -42
  62. data/lib/rgeo/geographic/projected_window.rb +36 -22
  63. data/lib/rgeo/geographic/{proj4_projector.rb → projector.rb} +3 -5
  64. data/lib/rgeo/geographic/simple_mercator_projector.rb +24 -23
  65. data/lib/rgeo/geographic/spherical_feature_classes.rb +29 -9
  66. data/lib/rgeo/geographic/spherical_feature_methods.rb +86 -9
  67. data/lib/rgeo/geographic/spherical_math.rb +17 -20
  68. data/lib/rgeo/geographic.rb +1 -1
  69. data/lib/rgeo/geos/capi_factory.rb +87 -158
  70. data/lib/rgeo/geos/capi_feature_classes.rb +50 -36
  71. data/lib/rgeo/geos/ffi_factory.rb +95 -165
  72. data/lib/rgeo/geos/ffi_feature_classes.rb +34 -10
  73. data/lib/rgeo/geos/ffi_feature_methods.rb +105 -126
  74. data/lib/rgeo/geos/interface.rb +20 -59
  75. data/lib/rgeo/geos/utils.rb +3 -3
  76. data/lib/rgeo/geos/zm_factory.rb +53 -95
  77. data/lib/rgeo/geos/zm_feature_methods.rb +30 -32
  78. data/lib/rgeo/geos.rb +8 -8
  79. data/lib/rgeo/impl_helper/basic_geometry_collection_methods.rb +9 -22
  80. data/lib/rgeo/impl_helper/basic_geometry_methods.rb +1 -2
  81. data/lib/rgeo/impl_helper/basic_line_string_methods.rb +28 -56
  82. data/lib/rgeo/impl_helper/basic_point_methods.rb +2 -14
  83. data/lib/rgeo/impl_helper/basic_polygon_methods.rb +17 -26
  84. data/lib/rgeo/impl_helper/utils.rb +21 -0
  85. data/lib/rgeo/impl_helper/valid_op.rb +350 -0
  86. data/lib/rgeo/impl_helper/validity_check.rb +139 -0
  87. data/lib/rgeo/impl_helper.rb +1 -0
  88. data/lib/rgeo/version.rb +1 -1
  89. data/lib/rgeo/wkrep/wkb_generator.rb +73 -63
  90. data/lib/rgeo/wkrep/wkb_parser.rb +33 -31
  91. data/lib/rgeo/wkrep/wkt_generator.rb +52 -45
  92. data/lib/rgeo/wkrep/wkt_parser.rb +48 -35
  93. data/lib/rgeo.rb +1 -3
  94. metadata +51 -16
  95. data/lib/rgeo/coord_sys/srs_database/entry.rb +0 -107
  96. data/lib/rgeo/coord_sys/srs_database/sr_org.rb +0 -64
  97. data/lib/rgeo/coord_sys/srs_database/url_reader.rb +0 -65
@@ -2,28 +2,27 @@
2
2
  Line string methods for GEOS wrapper
3
3
  */
4
4
 
5
-
6
5
  #ifndef RGEO_GEOS_LINE_STRING_INCLUDED
7
6
  #define RGEO_GEOS_LINE_STRING_INCLUDED
8
7
 
9
- #include <ruby.h>
10
8
  #include <geos_c.h>
9
+ #include <ruby.h>
11
10
 
12
11
  RGEO_BEGIN_C
13
12
 
14
-
15
13
  /*
16
14
  Initializes the line string module. This should be called after
17
15
  the geometry module is initialized.
18
16
  */
19
- void rgeo_init_geos_line_string();
17
+ void
18
+ rgeo_init_geos_line_string();
20
19
 
21
20
  /*
22
21
  Determines whether the given GEOS line string is closed.
23
22
  Returns Qtrue if true, Qfalse if false, or Qnil on an error.
24
23
  */
25
- VALUE rgeo_is_geos_line_string_closed(GEOSContextHandle_t context, const GEOSGeometry* geom);
26
-
24
+ VALUE
25
+ rgeo_is_geos_line_string_closed(const GEOSGeometry* geom);
27
26
 
28
27
  RGEO_END_C
29
28
 
@@ -6,26 +6,26 @@
6
6
 
7
7
  #ifdef RGEO_GEOS_SUPPORTED
8
8
 
9
- #include <ruby.h>
10
9
  #include <geos_c.h>
10
+ #include <ruby.h>
11
11
 
12
- #include "globals.h"
13
-
12
+ #include "analysis.h"
14
13
  #include "errors.h"
15
-
16
14
  #include "factory.h"
17
15
  #include "geometry.h"
18
- #include "point.h"
16
+ #include "geometry_collection.h"
17
+ #include "globals.h"
19
18
  #include "line_string.h"
19
+ #include "point.h"
20
20
  #include "polygon.h"
21
- #include "geometry_collection.h"
22
- #include "analysis.h"
21
+ #include "ruby_more.h"
23
22
 
24
23
  #endif
25
24
 
26
25
  RGEO_BEGIN_C
27
26
 
28
- void Init_geos_c_impl()
27
+ void
28
+ Init_geos_c_impl()
29
29
  {
30
30
  #ifdef RGEO_GEOS_SUPPORTED
31
31
  rgeo_init_geos_globals();
@@ -40,5 +40,4 @@ void Init_geos_c_impl()
40
40
  #endif
41
41
  }
42
42
 
43
-
44
43
  RGEO_END_C
@@ -6,21 +6,19 @@
6
6
 
7
7
  #ifdef RGEO_GEOS_SUPPORTED
8
8
 
9
- #include <ruby.h>
10
9
  #include <geos_c.h>
10
+ #include <ruby.h>
11
11
 
12
- #include "globals.h"
13
-
12
+ #include "coordinates.h"
14
13
  #include "factory.h"
15
14
  #include "geometry.h"
15
+ #include "globals.h"
16
16
  #include "point.h"
17
17
 
18
- #include "coordinates.h"
19
-
20
18
  RGEO_BEGIN_C
21
19
 
22
-
23
- static VALUE method_point_geometry_type(VALUE self)
20
+ static VALUE
21
+ method_point_geometry_type(VALUE self)
24
22
  {
25
23
  VALUE result;
26
24
  RGeo_GeometryData* self_data;
@@ -33,13 +31,12 @@ static VALUE method_point_geometry_type(VALUE self)
33
31
  return result;
34
32
  }
35
33
 
36
-
37
- static VALUE method_point_coordinates(VALUE self)
34
+ static VALUE
35
+ method_point_coordinates(VALUE self)
38
36
  {
39
37
  VALUE result = Qnil;
40
38
  RGeo_GeometryData* self_data;
41
39
  const GEOSGeometry* self_geom;
42
- GEOSContextHandle_t context;
43
40
  const GEOSCoordSequence* coord_sequence;
44
41
  int zCoordinate;
45
42
 
@@ -47,23 +44,23 @@ static VALUE method_point_coordinates(VALUE self)
47
44
  self_geom = self_data->geom;
48
45
 
49
46
  if (self_geom) {
50
- zCoordinate = RGEO_FACTORY_DATA_PTR(self_data->factory)->flags & RGEO_FACTORYFLAGS_SUPPORTS_Z_OR_M;
51
- context = self_data->geos_context;
52
- coord_sequence = GEOSGeom_getCoordSeq_r(context, self_geom);
53
- if(coord_sequence) {
54
- result = rb_ary_pop(extract_points_from_coordinate_sequence(context, coord_sequence, zCoordinate));
47
+ zCoordinate = RGEO_FACTORY_DATA_PTR(self_data->factory)->flags &
48
+ RGEO_FACTORYFLAGS_SUPPORTS_Z_OR_M;
49
+ coord_sequence = GEOSGeom_getCoordSeq(self_geom);
50
+ if (coord_sequence) {
51
+ result = rb_ary_pop(
52
+ extract_points_from_coordinate_sequence(coord_sequence, zCoordinate));
55
53
  }
56
54
  }
57
55
  return result;
58
56
  }
59
57
 
60
-
61
- static VALUE method_point_x(VALUE self)
58
+ static VALUE
59
+ method_point_x(VALUE self)
62
60
  {
63
61
  VALUE result;
64
62
  RGeo_GeometryData* self_data;
65
63
  const GEOSGeometry* self_geom;
66
- GEOSContextHandle_t self_context;
67
64
  const GEOSCoordSequence* coord_seq;
68
65
  double val;
69
66
 
@@ -71,10 +68,9 @@ static VALUE method_point_x(VALUE self)
71
68
  self_data = RGEO_GEOMETRY_DATA_PTR(self);
72
69
  self_geom = self_data->geom;
73
70
  if (self_geom) {
74
- self_context = self_data->geos_context;
75
- coord_seq = GEOSGeom_getCoordSeq_r(self_context, self_geom);
71
+ coord_seq = GEOSGeom_getCoordSeq(self_geom);
76
72
  if (coord_seq) {
77
- if (GEOSCoordSeq_getX_r(self_context, coord_seq, 0, &val)) {
73
+ if (GEOSCoordSeq_getX(coord_seq, 0, &val)) {
78
74
  result = rb_float_new(val);
79
75
  }
80
76
  }
@@ -82,13 +78,12 @@ static VALUE method_point_x(VALUE self)
82
78
  return result;
83
79
  }
84
80
 
85
-
86
- static VALUE method_point_y(VALUE self)
81
+ static VALUE
82
+ method_point_y(VALUE self)
87
83
  {
88
84
  VALUE result;
89
85
  RGeo_GeometryData* self_data;
90
86
  const GEOSGeometry* self_geom;
91
- GEOSContextHandle_t self_context;
92
87
  const GEOSCoordSequence* coord_seq;
93
88
  double val;
94
89
 
@@ -96,10 +91,9 @@ static VALUE method_point_y(VALUE self)
96
91
  self_data = RGEO_GEOMETRY_DATA_PTR(self);
97
92
  self_geom = self_data->geom;
98
93
  if (self_geom) {
99
- self_context = self_data->geos_context;
100
- coord_seq = GEOSGeom_getCoordSeq_r(self_context, self_geom);
94
+ coord_seq = GEOSGeom_getCoordSeq(self_geom);
101
95
  if (coord_seq) {
102
- if (GEOSCoordSeq_getY_r(self_context, coord_seq, 0, &val)) {
96
+ if (GEOSCoordSeq_getY(coord_seq, 0, &val)) {
103
97
  result = rb_float_new(val);
104
98
  }
105
99
  }
@@ -107,13 +101,12 @@ static VALUE method_point_y(VALUE self)
107
101
  return result;
108
102
  }
109
103
 
110
-
111
- static VALUE get_3d_point(VALUE self, int flag)
104
+ static VALUE
105
+ get_3d_point(VALUE self, int flag)
112
106
  {
113
107
  VALUE result;
114
108
  RGeo_GeometryData* self_data;
115
109
  const GEOSGeometry* self_geom;
116
- GEOSContextHandle_t self_context;
117
110
  const GEOSCoordSequence* coord_seq;
118
111
  double val;
119
112
 
@@ -122,10 +115,9 @@ static VALUE get_3d_point(VALUE self, int flag)
122
115
  self_geom = self_data->geom;
123
116
  if (self_geom) {
124
117
  if (RGEO_FACTORY_DATA_PTR(self_data->factory)->flags & flag) {
125
- self_context = self_data->geos_context;
126
- coord_seq = GEOSGeom_getCoordSeq_r(self_context, self_geom);
118
+ coord_seq = GEOSGeom_getCoordSeq(self_geom);
127
119
  if (coord_seq) {
128
- if (GEOSCoordSeq_getZ_r(self_context, coord_seq, 0, &val)) {
120
+ if (GEOSCoordSeq_getZ(coord_seq, 0, &val)) {
129
121
  result = rb_float_new(val);
130
122
  }
131
123
  }
@@ -134,20 +126,20 @@ static VALUE get_3d_point(VALUE self, int flag)
134
126
  return result;
135
127
  }
136
128
 
137
-
138
- static VALUE method_point_z(VALUE self)
129
+ static VALUE
130
+ method_point_z(VALUE self)
139
131
  {
140
132
  return get_3d_point(self, RGEO_FACTORYFLAGS_SUPPORTS_Z);
141
133
  }
142
134
 
143
-
144
- static VALUE method_point_m(VALUE self)
135
+ static VALUE
136
+ method_point_m(VALUE self)
145
137
  {
146
138
  return get_3d_point(self, RGEO_FACTORYFLAGS_SUPPORTS_M);
147
139
  }
148
140
 
149
-
150
- static VALUE method_point_eql(VALUE self, VALUE rhs)
141
+ static VALUE
142
+ method_point_eql(VALUE self, VALUE rhs)
151
143
  {
152
144
  VALUE result;
153
145
  RGeo_GeometryData* self_data;
@@ -155,13 +147,14 @@ static VALUE method_point_eql(VALUE self, VALUE rhs)
155
147
  result = rgeo_geos_klasses_and_factories_eql(self, rhs);
156
148
  if (RTEST(result)) {
157
149
  self_data = RGEO_GEOMETRY_DATA_PTR(self);
158
- result = rgeo_geos_coordseqs_eql(self_data->geos_context, self_data->geom, RGEO_GEOMETRY_DATA_PTR(rhs)->geom, RGEO_FACTORY_DATA_PTR(self_data->factory)->flags & RGEO_FACTORYFLAGS_SUPPORTS_Z_OR_M);
150
+ result = rgeo_geos_geometries_strict_eql(self_data->geom,
151
+ RGEO_GEOMETRY_DATA_PTR(rhs)->geom);
159
152
  }
160
153
  return result;
161
154
  }
162
155
 
163
-
164
- static VALUE method_point_hash(VALUE self)
156
+ static VALUE
157
+ method_point_hash(VALUE self)
165
158
  {
166
159
  st_index_t hash;
167
160
  RGeo_GeometryData* self_data;
@@ -171,19 +164,24 @@ static VALUE method_point_hash(VALUE self)
171
164
  factory = self_data->factory;
172
165
  hash = rb_hash_start(0);
173
166
  hash = rgeo_geos_objbase_hash(factory, rgeo_feature_point_module, hash);
174
- hash = rgeo_geos_coordseq_hash(self_data->geos_context, self_data->geom, hash);
167
+ hash = rgeo_geos_coordseq_hash(self_data->geom, hash);
175
168
  return LONG2FIX(rb_hash_end(hash));
176
169
  }
177
170
 
178
-
179
- static VALUE cmethod_create(VALUE module, VALUE factory, VALUE x, VALUE y, VALUE z)
171
+ static VALUE
172
+ cmethod_create(VALUE module, VALUE factory, VALUE x, VALUE y, VALUE z)
180
173
  {
181
- return rgeo_create_geos_point(factory, rb_num2dbl(x), rb_num2dbl(y),
182
- RGEO_FACTORY_DATA_PTR(factory)->flags & RGEO_FACTORYFLAGS_SUPPORTS_Z_OR_M ? rb_num2dbl(z) : 0);
174
+ return rgeo_create_geos_point(factory,
175
+ rb_num2dbl(x),
176
+ rb_num2dbl(y),
177
+ RGEO_FACTORY_DATA_PTR(factory)->flags &
178
+ RGEO_FACTORYFLAGS_SUPPORTS_Z_OR_M
179
+ ? rb_num2dbl(z)
180
+ : 0);
183
181
  }
184
182
 
185
-
186
- void rgeo_init_geos_point()
183
+ void
184
+ rgeo_init_geos_point()
187
185
  {
188
186
  VALUE geos_point_methods;
189
187
 
@@ -191,38 +189,38 @@ void rgeo_init_geos_point()
191
189
  rb_define_module_function(rgeo_geos_point_class, "create", cmethod_create, 4);
192
190
 
193
191
  // CAPIPointMethods module
194
- geos_point_methods = rb_define_module_under(rgeo_geos_module, "CAPIPointMethods");
192
+ geos_point_methods =
193
+ rb_define_module_under(rgeo_geos_module, "CAPIPointMethods");
195
194
  rb_define_method(geos_point_methods, "rep_equals?", method_point_eql, 1);
196
195
  rb_define_method(geos_point_methods, "eql?", method_point_eql, 1);
197
196
  rb_define_method(geos_point_methods, "hash", method_point_hash, 0);
198
- rb_define_method(geos_point_methods, "geometry_type", method_point_geometry_type, 0);
197
+ rb_define_method(
198
+ geos_point_methods, "geometry_type", method_point_geometry_type, 0);
199
199
  rb_define_method(geos_point_methods, "x", method_point_x, 0);
200
200
  rb_define_method(geos_point_methods, "y", method_point_y, 0);
201
201
  rb_define_method(geos_point_methods, "z", method_point_z, 0);
202
202
  rb_define_method(geos_point_methods, "m", method_point_m, 0);
203
- rb_define_method(geos_point_methods, "coordinates", method_point_coordinates, 0);
203
+ rb_define_method(
204
+ geos_point_methods, "coordinates", method_point_coordinates, 0);
204
205
  }
205
206
 
206
-
207
- VALUE rgeo_create_geos_point(VALUE factory, double x, double y, double z)
207
+ VALUE
208
+ rgeo_create_geos_point(VALUE factory, double x, double y, double z)
208
209
  {
209
210
  VALUE result;
210
- RGeo_FactoryData* factory_data;
211
- GEOSContextHandle_t context;
212
211
  GEOSCoordSequence* coord_seq;
213
212
  GEOSGeometry* geom;
214
213
 
215
214
  result = Qnil;
216
- factory_data = RGEO_FACTORY_DATA_PTR(factory);
217
- context = factory_data->geos_context;
218
- coord_seq = GEOSCoordSeq_create_r(context, 1, 3);
215
+ coord_seq = GEOSCoordSeq_create(1, 3);
219
216
  if (coord_seq) {
220
- if (GEOSCoordSeq_setX_r(context, coord_seq, 0, x)) {
221
- if (GEOSCoordSeq_setY_r(context, coord_seq, 0, y)) {
222
- if (GEOSCoordSeq_setZ_r(context, coord_seq, 0, z)) {
223
- geom = GEOSGeom_createPoint_r(context, coord_seq);
217
+ if (GEOSCoordSeq_setX(coord_seq, 0, x)) {
218
+ if (GEOSCoordSeq_setY(coord_seq, 0, y)) {
219
+ if (GEOSCoordSeq_setZ(coord_seq, 0, z)) {
220
+ geom = GEOSGeom_createPoint(coord_seq);
224
221
  if (geom) {
225
- result = rgeo_wrap_geos_geometry(factory, geom, rgeo_geos_point_class);
222
+ result =
223
+ rgeo_wrap_geos_geometry(factory, geom, rgeo_geos_point_class);
226
224
  }
227
225
  }
228
226
  }
@@ -231,7 +229,6 @@ VALUE rgeo_create_geos_point(VALUE factory, double x, double y, double z)
231
229
  return result;
232
230
  }
233
231
 
234
-
235
232
  RGEO_END_C
236
233
 
237
234
  #endif
@@ -2,7 +2,6 @@
2
2
  Point methods for GEOS wrapper
3
3
  */
4
4
 
5
-
6
5
  #ifndef RGEO_GEOS_POINT_INCLUDED
7
6
  #define RGEO_GEOS_POINT_INCLUDED
8
7
 
@@ -10,18 +9,18 @@
10
9
 
11
10
  RGEO_BEGIN_C
12
11
 
13
-
14
12
  /*
15
13
  Initializes the point module. This should be called after
16
14
  the geometry module is initialized.
17
15
  */
18
- void rgeo_init_geos_point();
16
+ void
17
+ rgeo_init_geos_point();
19
18
 
20
19
  /*
21
20
  Creates a 3d point and returns the ruby object.
22
21
  */
23
- VALUE rgeo_create_geos_point(VALUE factory, double x, double y, double z);
24
-
22
+ VALUE
23
+ rgeo_create_geos_point(VALUE factory, double x, double y, double z);
25
24
 
26
25
  RGEO_END_C
27
26