rgeo 2.3.0 → 3.0.0.pre.rc.1
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.
- checksums.yaml +4 -4
- data/.yardopts +6 -0
- data/README.md +1 -0
- data/ext/geos_c_impl/analysis.c +8 -6
- data/ext/geos_c_impl/analysis.h +1 -3
- data/ext/geos_c_impl/errors.c +10 -8
- data/ext/geos_c_impl/errors.h +7 -3
- data/ext/geos_c_impl/extconf.rb +3 -0
- data/ext/geos_c_impl/factory.c +251 -182
- data/ext/geos_c_impl/factory.h +43 -62
- data/ext/geos_c_impl/geometry.c +56 -24
- data/ext/geos_c_impl/geometry.h +8 -3
- data/ext/geos_c_impl/geometry_collection.c +41 -148
- data/ext/geos_c_impl/geometry_collection.h +1 -14
- data/ext/geos_c_impl/globals.c +91 -0
- data/ext/geos_c_impl/globals.h +45 -0
- data/ext/geos_c_impl/line_string.c +28 -29
- data/ext/geos_c_impl/line_string.h +1 -3
- data/ext/geos_c_impl/main.c +10 -9
- data/ext/geos_c_impl/point.c +9 -8
- data/ext/geos_c_impl/point.h +1 -3
- data/ext/geos_c_impl/polygon.c +15 -51
- data/ext/geos_c_impl/polygon.h +1 -3
- data/ext/geos_c_impl/preface.h +8 -0
- data/lib/rgeo/cartesian/analysis.rb +2 -2
- data/lib/rgeo/cartesian/calculations.rb +54 -17
- data/lib/rgeo/cartesian/factory.rb +0 -7
- data/lib/rgeo/cartesian/feature_classes.rb +66 -46
- data/lib/rgeo/cartesian/feature_methods.rb +56 -20
- data/lib/rgeo/cartesian/interface.rb +0 -6
- data/lib/rgeo/cartesian/planar_graph.rb +379 -0
- data/lib/rgeo/cartesian/sweepline_intersector.rb +149 -0
- data/lib/rgeo/cartesian/valid_op.rb +71 -0
- data/lib/rgeo/cartesian.rb +3 -0
- data/lib/rgeo/coord_sys/cs/wkt_parser.rb +6 -6
- data/lib/rgeo/error.rb +15 -0
- data/lib/rgeo/feature/curve.rb +12 -2
- data/lib/rgeo/feature/geometry.rb +38 -28
- data/lib/rgeo/feature/geometry_collection.rb +13 -5
- data/lib/rgeo/feature/line_string.rb +3 -3
- data/lib/rgeo/feature/multi_curve.rb +6 -1
- data/lib/rgeo/feature/multi_surface.rb +3 -3
- data/lib/rgeo/feature/point.rb +4 -4
- data/lib/rgeo/feature/surface.rb +3 -3
- data/lib/rgeo/geographic/factory.rb +0 -7
- data/lib/rgeo/geographic/interface.rb +4 -18
- data/lib/rgeo/geographic/proj4_projector.rb +0 -2
- data/lib/rgeo/geographic/projected_feature_classes.rb +21 -9
- data/lib/rgeo/geographic/projected_feature_methods.rb +63 -30
- data/lib/rgeo/geographic/simple_mercator_projector.rb +0 -2
- data/lib/rgeo/geographic/spherical_feature_classes.rb +29 -9
- data/lib/rgeo/geographic/spherical_feature_methods.rb +68 -2
- data/lib/rgeo/geos/capi_factory.rb +21 -31
- data/lib/rgeo/geos/capi_feature_classes.rb +64 -11
- data/lib/rgeo/geos/ffi_factory.rb +0 -28
- data/lib/rgeo/geos/ffi_feature_classes.rb +34 -10
- data/lib/rgeo/geos/ffi_feature_methods.rb +53 -10
- data/lib/rgeo/geos/interface.rb +18 -10
- data/lib/rgeo/geos/zm_factory.rb +0 -12
- data/lib/rgeo/geos/zm_feature_methods.rb +30 -5
- data/lib/rgeo/impl_helper/basic_geometry_collection_methods.rb +18 -8
- data/lib/rgeo/impl_helper/basic_geometry_methods.rb +1 -1
- data/lib/rgeo/impl_helper/basic_line_string_methods.rb +37 -26
- data/lib/rgeo/impl_helper/basic_point_methods.rb +13 -3
- data/lib/rgeo/impl_helper/basic_polygon_methods.rb +8 -3
- data/lib/rgeo/impl_helper/valid_op.rb +354 -0
- data/lib/rgeo/impl_helper/validity_check.rb +138 -0
- data/lib/rgeo/impl_helper.rb +1 -0
- data/lib/rgeo/version.rb +1 -1
- data/lib/rgeo/wkrep/wkb_generator.rb +1 -1
- data/lib/rgeo/wkrep/wkt_generator.rb +6 -6
- metadata +30 -7
@@ -10,10 +10,13 @@
|
|
10
10
|
#include <ruby.h>
|
11
11
|
#include <geos_c.h>
|
12
12
|
|
13
|
+
#include "globals.h"
|
14
|
+
|
13
15
|
#include "factory.h"
|
14
16
|
#include "geometry.h"
|
15
17
|
#include "line_string.h"
|
16
18
|
#include "polygon.h"
|
19
|
+
#include "geometry.h"
|
17
20
|
#include "geometry_collection.h"
|
18
21
|
|
19
22
|
#include "coordinates.h"
|
@@ -41,9 +44,6 @@ static VALUE create_geometry_collection(VALUE module, int type, VALUE factory, V
|
|
41
44
|
VALUE cast_type;
|
42
45
|
GEOSGeometry* geom;
|
43
46
|
GEOSGeometry* collection;
|
44
|
-
char problem;
|
45
|
-
GEOSGeometry* igeom;
|
46
|
-
GEOSGeometry* jgeom;
|
47
47
|
|
48
48
|
result = Qnil;
|
49
49
|
Check_Type(array, T_ARRAY);
|
@@ -56,13 +56,13 @@ static VALUE create_geometry_collection(VALUE module, int type, VALUE factory, V
|
|
56
56
|
cast_type = Qnil;
|
57
57
|
switch (type) {
|
58
58
|
case GEOS_MULTIPOINT:
|
59
|
-
cast_type =
|
59
|
+
cast_type = rgeo_feature_point_module;
|
60
60
|
break;
|
61
61
|
case GEOS_MULTILINESTRING:
|
62
|
-
cast_type =
|
62
|
+
cast_type = rgeo_feature_line_string_module;
|
63
63
|
break;
|
64
64
|
case GEOS_MULTIPOLYGON:
|
65
|
-
cast_type =
|
65
|
+
cast_type = rgeo_feature_polygon_module;
|
66
66
|
break;
|
67
67
|
}
|
68
68
|
for (i=0; i<len; ++i) {
|
@@ -88,32 +88,6 @@ static VALUE create_geometry_collection(VALUE module, int type, VALUE factory, V
|
|
88
88
|
}
|
89
89
|
else {
|
90
90
|
collection = GEOSGeom_createCollection_r(geos_context, type, geoms, len);
|
91
|
-
// Due to a limitation of GEOS, the MultiPolygon assertions are not checked.
|
92
|
-
// We do that manually here.
|
93
|
-
if (collection && type == GEOS_MULTIPOLYGON && (factory_data->flags & 1) == 0) {
|
94
|
-
problem = 0;
|
95
|
-
for (i=1; i<len; ++i) {
|
96
|
-
for (j=0; j<i; ++j) {
|
97
|
-
igeom = geoms[i];
|
98
|
-
jgeom = geoms[j];
|
99
|
-
problem = GEOSRelatePattern_r(geos_context, igeom, jgeom, "2********");
|
100
|
-
if (problem) {
|
101
|
-
break;
|
102
|
-
}
|
103
|
-
problem = GEOSRelatePattern_r(geos_context, igeom, jgeom, "****1****");
|
104
|
-
if (problem) {
|
105
|
-
break;
|
106
|
-
}
|
107
|
-
}
|
108
|
-
if (problem) {
|
109
|
-
break;
|
110
|
-
}
|
111
|
-
}
|
112
|
-
if (problem) {
|
113
|
-
GEOSGeom_destroy_r(geos_context, collection);
|
114
|
-
collection = NULL;
|
115
|
-
}
|
116
|
-
}
|
117
91
|
if (collection) {
|
118
92
|
result = rgeo_wrap_geos_geometry(factory, collection, module);
|
119
93
|
RGEO_GEOMETRY_DATA_PTR(result)->klasses = klasses;
|
@@ -141,7 +115,7 @@ static VALUE method_geometry_collection_eql(VALUE self, VALUE rhs)
|
|
141
115
|
result = rgeo_geos_klasses_and_factories_eql(self, rhs);
|
142
116
|
if (RTEST(result)) {
|
143
117
|
self_data = RGEO_GEOMETRY_DATA_PTR(self);
|
144
|
-
result =
|
118
|
+
result = rgeo_geos_geometries_strict_eql(self_data->geos_context, self_data->geom, RGEO_GEOMETRY_DATA_PTR(rhs)->geom);
|
145
119
|
}
|
146
120
|
return result;
|
147
121
|
}
|
@@ -156,8 +130,7 @@ static VALUE method_geometry_collection_hash(VALUE self)
|
|
156
130
|
self_data = RGEO_GEOMETRY_DATA_PTR(self);
|
157
131
|
factory = self_data->factory;
|
158
132
|
hash = rb_hash_start(0);
|
159
|
-
hash = rgeo_geos_objbase_hash(factory,
|
160
|
-
RGEO_FACTORY_DATA_PTR(factory)->globals->feature_geometry_collection, hash);
|
133
|
+
hash = rgeo_geos_objbase_hash(factory, rgeo_feature_geometry_collection_module, hash);
|
161
134
|
hash = rgeo_geos_geometry_collection_hash(self_data->geos_context, self_data->geom, hash);
|
162
135
|
return LONG2FIX(rb_hash_end(hash));
|
163
136
|
}
|
@@ -171,7 +144,7 @@ static VALUE method_geometry_collection_geometry_type(VALUE self)
|
|
171
144
|
result = Qnil;
|
172
145
|
self_data = RGEO_GEOMETRY_DATA_PTR(self);
|
173
146
|
if (self_data->geom) {
|
174
|
-
result =
|
147
|
+
result = rgeo_feature_geometry_collection_module;
|
175
148
|
}
|
176
149
|
return result;
|
177
150
|
}
|
@@ -239,6 +212,8 @@ static VALUE method_geometry_collection_brackets(VALUE self, VALUE n)
|
|
239
212
|
|
240
213
|
static VALUE method_geometry_collection_each(VALUE self)
|
241
214
|
{
|
215
|
+
RETURN_ENUMERATOR(self, 0, 0); /* return enum_for(__callee__) unless block_given? */
|
216
|
+
|
242
217
|
RGeo_GeometryData* self_data;
|
243
218
|
const GEOSGeometry* self_geom;
|
244
219
|
int len;
|
@@ -249,27 +224,22 @@ static VALUE method_geometry_collection_each(VALUE self)
|
|
249
224
|
|
250
225
|
self_data = RGEO_GEOMETRY_DATA_PTR(self);
|
251
226
|
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
rb_yield(elem);
|
264
|
-
}
|
227
|
+
self_geom = self_data->geom;
|
228
|
+
if (self_geom) {
|
229
|
+
GEOSContextHandle_t self_context = self_data->geos_context;
|
230
|
+
len = GEOSGetNumGeometries_r(self_context, self_geom);
|
231
|
+
if (len > 0) {
|
232
|
+
klasses = self_data->klasses;
|
233
|
+
for (i=0; i<len; ++i) {
|
234
|
+
elem_geom = GEOSGetGeometryN_r(self_context, self_geom, i);
|
235
|
+
elem = rgeo_wrap_geos_geometry_clone(self_data->factory, elem_geom, NIL_P(klasses) ? Qnil : rb_ary_entry(klasses, i));
|
236
|
+
if (!NIL_P(elem)) {
|
237
|
+
rb_yield(elem);
|
265
238
|
}
|
266
239
|
}
|
267
240
|
}
|
268
|
-
return self;
|
269
|
-
}
|
270
|
-
else {
|
271
|
-
return rb_funcall(self, RGEO_FACTORY_DATA_PTR(self_data->factory)->globals->id_enum_for, 0);
|
272
241
|
}
|
242
|
+
return self;
|
273
243
|
}
|
274
244
|
|
275
245
|
static VALUE method_multi_point_geometry_type(VALUE self)
|
@@ -280,7 +250,7 @@ static VALUE method_multi_point_geometry_type(VALUE self)
|
|
280
250
|
result = Qnil;
|
281
251
|
self_data = RGEO_GEOMETRY_DATA_PTR(self);
|
282
252
|
if (self_data->geom) {
|
283
|
-
result =
|
253
|
+
result = rgeo_feature_multi_point_module;
|
284
254
|
}
|
285
255
|
return result;
|
286
256
|
}
|
@@ -295,8 +265,7 @@ static VALUE method_multi_point_hash(VALUE self)
|
|
295
265
|
self_data = RGEO_GEOMETRY_DATA_PTR(self);
|
296
266
|
factory = self_data->factory;
|
297
267
|
hash = rb_hash_start(0);
|
298
|
-
hash = rgeo_geos_objbase_hash(factory,
|
299
|
-
RGEO_FACTORY_DATA_PTR(factory)->globals->feature_multi_point, hash);
|
268
|
+
hash = rgeo_geos_objbase_hash(factory, rgeo_feature_multi_point_module, hash);
|
300
269
|
hash = rgeo_geos_geometry_collection_hash(self_data->geos_context, self_data->geom, hash);
|
301
270
|
return LONG2FIX(rb_hash_end(hash));
|
302
271
|
}
|
@@ -342,7 +311,7 @@ static VALUE method_multi_line_string_geometry_type(VALUE self)
|
|
342
311
|
result = Qnil;
|
343
312
|
self_data = RGEO_GEOMETRY_DATA_PTR(self);
|
344
313
|
if (self_data->geom) {
|
345
|
-
result =
|
314
|
+
result = rgeo_feature_multi_line_string_module;
|
346
315
|
}
|
347
316
|
return result;
|
348
317
|
}
|
@@ -357,8 +326,7 @@ static VALUE method_multi_line_string_hash(VALUE self)
|
|
357
326
|
self_data = RGEO_GEOMETRY_DATA_PTR(self);
|
358
327
|
factory = self_data->factory;
|
359
328
|
hash = rb_hash_start(0);
|
360
|
-
hash = rgeo_geos_objbase_hash(factory,
|
361
|
-
RGEO_FACTORY_DATA_PTR(factory)->globals->feature_multi_line_string, hash);
|
329
|
+
hash = rgeo_geos_objbase_hash(factory, rgeo_feature_multi_line_string_module, hash);
|
362
330
|
hash = rgeo_geos_geometry_collection_hash(self_data->geos_context, self_data->geom, hash);
|
363
331
|
return LONG2FIX(rb_hash_end(hash));
|
364
332
|
}
|
@@ -396,7 +364,7 @@ static VALUE method_multi_line_string_coordinates(VALUE self)
|
|
396
364
|
|
397
365
|
self_data = RGEO_GEOMETRY_DATA_PTR(self);
|
398
366
|
self_geom = self_data->geom;
|
399
|
-
|
367
|
+
|
400
368
|
if(self_geom) {
|
401
369
|
zCoordinate = RGEO_FACTORY_DATA_PTR(self_data->factory)->flags & RGEO_FACTORYFLAGS_SUPPORTS_Z_OR_M;
|
402
370
|
context = self_data->geos_context;
|
@@ -472,7 +440,7 @@ static VALUE method_multi_polygon_geometry_type(VALUE self)
|
|
472
440
|
result = Qnil;
|
473
441
|
self_data = RGEO_GEOMETRY_DATA_PTR(self);
|
474
442
|
if (self_data->geom) {
|
475
|
-
result =
|
443
|
+
result = rgeo_feature_multi_polygon_module;
|
476
444
|
}
|
477
445
|
return result;
|
478
446
|
}
|
@@ -487,8 +455,7 @@ static VALUE method_multi_polygon_hash(VALUE self)
|
|
487
455
|
self_data = RGEO_GEOMETRY_DATA_PTR(self);
|
488
456
|
factory = self_data->factory;
|
489
457
|
hash = rb_hash_start(0);
|
490
|
-
hash = rgeo_geos_objbase_hash(factory,
|
491
|
-
RGEO_FACTORY_DATA_PTR(factory)->globals->feature_multi_polygon, hash);
|
458
|
+
hash = rgeo_geos_objbase_hash(factory, rgeo_feature_multi_polygon_module, hash);
|
492
459
|
hash = rgeo_geos_geometry_collection_hash(self_data->geos_context, self_data->geom, hash);
|
493
460
|
return LONG2FIX(rb_hash_end(hash));
|
494
461
|
}
|
@@ -508,7 +475,7 @@ static VALUE method_multi_polygon_coordinates(VALUE self)
|
|
508
475
|
|
509
476
|
self_data = RGEO_GEOMETRY_DATA_PTR(self);
|
510
477
|
self_geom = self_data->geom;
|
511
|
-
|
478
|
+
|
512
479
|
if(self_geom) {
|
513
480
|
zCoordinate = RGEO_FACTORY_DATA_PTR(self_data->factory)->flags & RGEO_FACTORYFLAGS_SUPPORTS_Z_OR_M;
|
514
481
|
context = self_data->geos_context;
|
@@ -586,7 +553,7 @@ static VALUE cmethod_multi_polygon_create(VALUE module, VALUE factory, VALUE arr
|
|
586
553
|
/**** INITIALIZATION FUNCTION ****/
|
587
554
|
|
588
555
|
|
589
|
-
void rgeo_init_geos_geometry_collection(
|
556
|
+
void rgeo_init_geos_geometry_collection()
|
590
557
|
{
|
591
558
|
VALUE geos_geometry_collection_methods;
|
592
559
|
VALUE geos_multi_point_methods;
|
@@ -594,13 +561,13 @@ void rgeo_init_geos_geometry_collection(RGeo_Globals* globals)
|
|
594
561
|
VALUE geos_multi_polygon_methods;
|
595
562
|
|
596
563
|
// Class methods for geometry collection classes
|
597
|
-
rb_define_module_function(
|
598
|
-
rb_define_module_function(
|
599
|
-
rb_define_module_function(
|
600
|
-
rb_define_module_function(
|
564
|
+
rb_define_module_function(rgeo_geos_geometry_collection_class, "create", cmethod_geometry_collection_create, 2);
|
565
|
+
rb_define_module_function(rgeo_geos_multi_point_class, "create", cmethod_multi_point_create, 2);
|
566
|
+
rb_define_module_function(rgeo_geos_multi_line_string_class, "create", cmethod_multi_line_string_create, 2);
|
567
|
+
rb_define_module_function(rgeo_geos_multi_polygon_class, "create", cmethod_multi_polygon_create, 2);
|
601
568
|
|
602
569
|
// Methods for GeometryCollectionImpl
|
603
|
-
geos_geometry_collection_methods = rb_define_module_under(
|
570
|
+
geos_geometry_collection_methods = rb_define_module_under(rgeo_geos_module, "CAPIGeometryCollectionMethods");
|
604
571
|
rb_define_method(geos_geometry_collection_methods, "rep_equals?", method_geometry_collection_eql, 1);
|
605
572
|
rb_define_method(geos_geometry_collection_methods, "eql?", method_geometry_collection_eql, 1);
|
606
573
|
rb_define_method(geos_geometry_collection_methods, "hash", method_geometry_collection_hash, 0);
|
@@ -614,21 +581,21 @@ void rgeo_init_geos_geometry_collection(RGeo_Globals* globals)
|
|
614
581
|
|
615
582
|
|
616
583
|
// Methods for MultiPointImpl
|
617
|
-
geos_multi_point_methods = rb_define_module_under(
|
584
|
+
geos_multi_point_methods = rb_define_module_under(rgeo_geos_module, "CAPIMultiPointMethods");
|
618
585
|
rb_define_method(geos_multi_point_methods, "geometry_type", method_multi_point_geometry_type, 0);
|
619
586
|
rb_define_method(geos_multi_point_methods, "hash", method_multi_point_hash, 0);
|
620
587
|
rb_define_method(geos_multi_point_methods, "coordinates", method_multi_point_coordinates, 0);
|
621
588
|
|
622
589
|
// Methods for MultiLineStringImpl
|
623
|
-
geos_multi_line_string_methods = rb_define_module_under(
|
590
|
+
geos_multi_line_string_methods = rb_define_module_under(rgeo_geos_module, "CAPIMultiLineStringMethods");
|
624
591
|
rb_define_method(geos_multi_line_string_methods, "geometry_type", method_multi_line_string_geometry_type, 0);
|
625
592
|
rb_define_method(geos_multi_line_string_methods, "length", method_multi_line_string_length, 0);
|
626
|
-
rb_define_method(geos_multi_line_string_methods, "
|
593
|
+
rb_define_method(geos_multi_line_string_methods, "closed?", method_multi_line_string_is_closed, 0);
|
627
594
|
rb_define_method(geos_multi_line_string_methods, "hash", method_multi_line_string_hash, 0);
|
628
595
|
rb_define_method(geos_multi_line_string_methods, "coordinates", method_multi_line_string_coordinates, 0);
|
629
596
|
|
630
597
|
// Methods for MultiPolygonImpl
|
631
|
-
geos_multi_polygon_methods = rb_define_module_under(
|
598
|
+
geos_multi_polygon_methods = rb_define_module_under(rgeo_geos_module, "CAPIMultiPolygonMethods");
|
632
599
|
rb_define_method(geos_multi_polygon_methods, "geometry_type", method_multi_polygon_geometry_type, 0);
|
633
600
|
rb_define_method(geos_multi_polygon_methods, "area", method_multi_polygon_area, 0);
|
634
601
|
rb_define_method(geos_multi_polygon_methods, "centroid", method_multi_polygon_centroid, 0);
|
@@ -640,80 +607,6 @@ void rgeo_init_geos_geometry_collection(RGeo_Globals* globals)
|
|
640
607
|
/**** OTHER PUBLIC FUNCTIONS ****/
|
641
608
|
|
642
609
|
|
643
|
-
VALUE rgeo_geos_geometry_collections_eql(GEOSContextHandle_t context, const GEOSGeometry* geom1, const GEOSGeometry* geom2, char check_z)
|
644
|
-
{
|
645
|
-
VALUE result;
|
646
|
-
int len1;
|
647
|
-
int len2;
|
648
|
-
int i;
|
649
|
-
const GEOSGeometry* sub_geom1;
|
650
|
-
const GEOSGeometry* sub_geom2;
|
651
|
-
int type1;
|
652
|
-
int type2;
|
653
|
-
|
654
|
-
result = Qnil;
|
655
|
-
if (geom1 && geom2) {
|
656
|
-
len1 = GEOSGetNumGeometries_r(context, geom1);
|
657
|
-
len2 = GEOSGetNumGeometries_r(context, geom2);
|
658
|
-
if (len1 >= 0 && len2 >= 0) {
|
659
|
-
if (len1 == len2) {
|
660
|
-
result = Qtrue;
|
661
|
-
for (i=0; i<len1; ++i) {
|
662
|
-
sub_geom1 = GEOSGetGeometryN_r(context, geom1, i);
|
663
|
-
sub_geom2 = GEOSGetGeometryN_r(context, geom2, i);
|
664
|
-
if (sub_geom1 && sub_geom2) {
|
665
|
-
type1 = GEOSGeomTypeId_r(context, sub_geom1);
|
666
|
-
type2 = GEOSGeomTypeId_r(context, sub_geom2);
|
667
|
-
if (type1 >= 0 && type2 >= 0) {
|
668
|
-
if (type1 == type2) {
|
669
|
-
switch (type1) {
|
670
|
-
case GEOS_POINT:
|
671
|
-
case GEOS_LINESTRING:
|
672
|
-
case GEOS_LINEARRING:
|
673
|
-
result = rgeo_geos_coordseqs_eql(context, sub_geom1, sub_geom2, check_z);
|
674
|
-
break;
|
675
|
-
case GEOS_POLYGON:
|
676
|
-
result = rgeo_geos_polygons_eql(context, sub_geom1, sub_geom2, check_z);
|
677
|
-
break;
|
678
|
-
case GEOS_GEOMETRYCOLLECTION:
|
679
|
-
case GEOS_MULTIPOINT:
|
680
|
-
case GEOS_MULTILINESTRING:
|
681
|
-
case GEOS_MULTIPOLYGON:
|
682
|
-
result = rgeo_geos_geometry_collections_eql(context, sub_geom1, sub_geom2, check_z);
|
683
|
-
break;
|
684
|
-
default:
|
685
|
-
result = Qnil;
|
686
|
-
break;
|
687
|
-
}
|
688
|
-
if (!RTEST(result)) {
|
689
|
-
break;
|
690
|
-
}
|
691
|
-
}
|
692
|
-
else {
|
693
|
-
result = Qfalse;
|
694
|
-
break;
|
695
|
-
}
|
696
|
-
}
|
697
|
-
else {
|
698
|
-
result = Qnil;
|
699
|
-
break;
|
700
|
-
}
|
701
|
-
}
|
702
|
-
else {
|
703
|
-
result = Qnil;
|
704
|
-
break;
|
705
|
-
}
|
706
|
-
}
|
707
|
-
}
|
708
|
-
else {
|
709
|
-
result = Qfalse;
|
710
|
-
}
|
711
|
-
}
|
712
|
-
}
|
713
|
-
return result;
|
714
|
-
}
|
715
|
-
|
716
|
-
|
717
610
|
st_index_t rgeo_geos_geometry_collection_hash(GEOSContextHandle_t context, const GEOSGeometry* geom, st_index_t hash)
|
718
611
|
{
|
719
612
|
const GEOSGeometry* sub_geom;
|
@@ -9,8 +9,6 @@
|
|
9
9
|
#include <ruby.h>
|
10
10
|
#include <geos_c.h>
|
11
11
|
|
12
|
-
#include "factory.h"
|
13
|
-
|
14
12
|
RGEO_BEGIN_C
|
15
13
|
|
16
14
|
|
@@ -18,18 +16,7 @@ RGEO_BEGIN_C
|
|
18
16
|
Initializes the geometry collection module. This should be called after
|
19
17
|
the geometry module is initialized.
|
20
18
|
*/
|
21
|
-
void rgeo_init_geos_geometry_collection(
|
22
|
-
|
23
|
-
/*
|
24
|
-
Comopares the contents of two geometry collections. Does not test the
|
25
|
-
types of the collections themselves, but tests the types, values, and
|
26
|
-
contents of all the contents. The two given geometries MUST be
|
27
|
-
collection types-- i.e. GeometryCollection, MultiPoint, MultiLineString,
|
28
|
-
or MultiPolygon.
|
29
|
-
Returns Qtrue if the contents of the two geometry collections are equal,
|
30
|
-
Qfalse if they are inequal, or Qnil if an error occurs.
|
31
|
-
*/
|
32
|
-
VALUE rgeo_geos_geometry_collections_eql(GEOSContextHandle_t context, const GEOSGeometry* geom1, const GEOSGeometry* geom2, char check_z);
|
19
|
+
void rgeo_init_geos_geometry_collection();
|
33
20
|
|
34
21
|
/*
|
35
22
|
A tool for building up hash values.
|
@@ -0,0 +1,91 @@
|
|
1
|
+
#include "preface.h"
|
2
|
+
|
3
|
+
#ifdef RGEO_GEOS_SUPPORTED
|
4
|
+
|
5
|
+
#include <ruby.h>
|
6
|
+
|
7
|
+
#include "globals.h"
|
8
|
+
|
9
|
+
RGEO_BEGIN_C
|
10
|
+
|
11
|
+
VALUE rgeo_module;
|
12
|
+
|
13
|
+
VALUE rgeo_feature_module;
|
14
|
+
VALUE rgeo_feature_geometry_module;
|
15
|
+
VALUE rgeo_feature_point_module;
|
16
|
+
VALUE rgeo_feature_line_string_module;
|
17
|
+
VALUE rgeo_feature_linear_ring_module;
|
18
|
+
VALUE rgeo_feature_line_module;
|
19
|
+
VALUE rgeo_feature_polygon_module;
|
20
|
+
VALUE rgeo_feature_geometry_collection_module;
|
21
|
+
VALUE rgeo_feature_multi_point_module;
|
22
|
+
VALUE rgeo_feature_multi_line_string_module;
|
23
|
+
VALUE rgeo_feature_multi_polygon_module;
|
24
|
+
|
25
|
+
VALUE rgeo_geos_module;
|
26
|
+
VALUE rgeo_geos_geometry_class;
|
27
|
+
VALUE rgeo_geos_point_class;
|
28
|
+
VALUE rgeo_geos_line_string_class;
|
29
|
+
VALUE rgeo_geos_linear_ring_class;
|
30
|
+
VALUE rgeo_geos_line_class;
|
31
|
+
VALUE rgeo_geos_polygon_class;
|
32
|
+
VALUE rgeo_geos_geometry_collection_class;
|
33
|
+
VALUE rgeo_geos_multi_point_class;
|
34
|
+
VALUE rgeo_geos_multi_line_string_class;
|
35
|
+
VALUE rgeo_geos_multi_polygon_class;
|
36
|
+
|
37
|
+
void rgeo_init_geos_globals()
|
38
|
+
{
|
39
|
+
rgeo_module = rb_define_module("RGeo");
|
40
|
+
rb_gc_register_mark_object(rgeo_module);
|
41
|
+
|
42
|
+
rgeo_feature_module = rb_define_module_under(rgeo_module, "Feature");
|
43
|
+
rb_gc_register_mark_object(rgeo_feature_module);
|
44
|
+
rgeo_feature_geometry_module = rb_const_get_at(rgeo_feature_module, rb_intern("Geometry"));
|
45
|
+
rb_gc_register_mark_object(rgeo_feature_geometry_module);
|
46
|
+
rgeo_feature_point_module = rb_const_get_at(rgeo_feature_module, rb_intern("Point"));
|
47
|
+
rb_gc_register_mark_object(rgeo_feature_point_module);
|
48
|
+
rgeo_feature_line_string_module = rb_const_get_at(rgeo_feature_module, rb_intern("LineString"));
|
49
|
+
rb_gc_register_mark_object(rgeo_feature_line_string_module);
|
50
|
+
rgeo_feature_linear_ring_module = rb_const_get_at(rgeo_feature_module, rb_intern("LinearRing"));
|
51
|
+
rb_gc_register_mark_object(rgeo_feature_linear_ring_module);
|
52
|
+
rgeo_feature_line_module = rb_const_get_at(rgeo_feature_module, rb_intern("Line"));
|
53
|
+
rb_gc_register_mark_object(rgeo_feature_line_module);
|
54
|
+
rgeo_feature_polygon_module = rb_const_get_at(rgeo_feature_module, rb_intern("Polygon"));
|
55
|
+
rb_gc_register_mark_object(rgeo_feature_polygon_module);
|
56
|
+
rgeo_feature_geometry_collection_module = rb_const_get_at(rgeo_feature_module, rb_intern("GeometryCollection"));
|
57
|
+
rb_gc_register_mark_object(rgeo_feature_geometry_collection_module);
|
58
|
+
rgeo_feature_multi_point_module = rb_const_get_at(rgeo_feature_module, rb_intern("MultiPoint"));
|
59
|
+
rb_gc_register_mark_object(rgeo_feature_multi_point_module);
|
60
|
+
rgeo_feature_multi_line_string_module = rb_const_get_at(rgeo_feature_module, rb_intern("MultiLineString"));
|
61
|
+
rb_gc_register_mark_object(rgeo_feature_multi_line_string_module);
|
62
|
+
rgeo_feature_multi_polygon_module = rb_const_get_at(rgeo_feature_module, rb_intern("MultiPolygon"));
|
63
|
+
rb_gc_register_mark_object(rgeo_feature_multi_polygon_module);
|
64
|
+
|
65
|
+
rgeo_geos_module = rb_define_module_under(rgeo_module, "Geos");
|
66
|
+
rb_gc_register_mark_object(rgeo_geos_module);
|
67
|
+
rgeo_geos_geometry_class = rb_define_class_under(rgeo_geos_module, "CAPIGeometryImpl", rb_cObject);
|
68
|
+
rb_gc_register_mark_object(rgeo_geos_geometry_class);
|
69
|
+
rgeo_geos_point_class = rb_define_class_under(rgeo_geos_module, "CAPIPointImpl", rb_cObject);
|
70
|
+
rb_gc_register_mark_object(rgeo_geos_point_class);
|
71
|
+
rgeo_geos_line_string_class = rb_define_class_under(rgeo_geos_module, "CAPILineStringImpl", rb_cObject);
|
72
|
+
rb_gc_register_mark_object(rgeo_geos_line_string_class);
|
73
|
+
rgeo_geos_linear_ring_class = rb_define_class_under(rgeo_geos_module, "CAPILinearRingImpl", rb_cObject);
|
74
|
+
rb_gc_register_mark_object(rgeo_geos_linear_ring_class);
|
75
|
+
rgeo_geos_line_class = rb_define_class_under(rgeo_geos_module, "CAPILineImpl", rb_cObject);
|
76
|
+
rb_gc_register_mark_object(rgeo_geos_line_class);
|
77
|
+
rgeo_geos_polygon_class = rb_define_class_under(rgeo_geos_module, "CAPIPolygonImpl", rb_cObject);
|
78
|
+
rb_gc_register_mark_object(rgeo_geos_polygon_class);
|
79
|
+
rgeo_geos_geometry_collection_class = rb_define_class_under(rgeo_geos_module, "CAPIGeometryCollectionImpl", rb_cObject);
|
80
|
+
rb_gc_register_mark_object(rgeo_geos_geometry_collection_class);
|
81
|
+
rgeo_geos_multi_point_class = rb_define_class_under(rgeo_geos_module, "CAPIMultiPointImpl", rb_cObject);
|
82
|
+
rb_gc_register_mark_object(rgeo_geos_multi_point_class);
|
83
|
+
rgeo_geos_multi_line_string_class = rb_define_class_under(rgeo_geos_module, "CAPIMultiLineStringImpl", rb_cObject);
|
84
|
+
rb_gc_register_mark_object(rgeo_geos_multi_line_string_class);
|
85
|
+
rgeo_geos_multi_polygon_class = rb_define_class_under(rgeo_geos_module, "CAPIMultiPolygonImpl", rb_cObject);
|
86
|
+
rb_gc_register_mark_object(rgeo_geos_multi_polygon_class);
|
87
|
+
}
|
88
|
+
|
89
|
+
RGEO_END_C
|
90
|
+
|
91
|
+
#endif
|
@@ -0,0 +1,45 @@
|
|
1
|
+
/*
|
2
|
+
Per-interpreter globals.
|
3
|
+
Most of these are cached references to commonly used classes, modules,
|
4
|
+
and symbols so we don't have to do a lot of constant lookups and calls
|
5
|
+
to rb_intern.
|
6
|
+
*/
|
7
|
+
|
8
|
+
#ifndef RGEO_GEOS_GLOBALS_INCLUDED
|
9
|
+
#define RGEO_GEOS_GLOBALS_INCLUDED
|
10
|
+
|
11
|
+
#include <ruby.h>
|
12
|
+
|
13
|
+
RGEO_BEGIN_C
|
14
|
+
|
15
|
+
extern VALUE rgeo_module;
|
16
|
+
|
17
|
+
extern VALUE rgeo_feature_module;
|
18
|
+
extern VALUE rgeo_feature_geometry_module;
|
19
|
+
extern VALUE rgeo_feature_point_module;
|
20
|
+
extern VALUE rgeo_feature_line_string_module;
|
21
|
+
extern VALUE rgeo_feature_linear_ring_module;
|
22
|
+
extern VALUE rgeo_feature_line_module;
|
23
|
+
extern VALUE rgeo_feature_polygon_module;
|
24
|
+
extern VALUE rgeo_feature_geometry_collection_module;
|
25
|
+
extern VALUE rgeo_feature_multi_point_module;
|
26
|
+
extern VALUE rgeo_feature_multi_line_string_module;
|
27
|
+
extern VALUE rgeo_feature_multi_polygon_module;
|
28
|
+
|
29
|
+
extern VALUE rgeo_geos_module;
|
30
|
+
extern VALUE rgeo_geos_geometry_class;
|
31
|
+
extern VALUE rgeo_geos_point_class;
|
32
|
+
extern VALUE rgeo_geos_line_string_class;
|
33
|
+
extern VALUE rgeo_geos_linear_ring_class;
|
34
|
+
extern VALUE rgeo_geos_line_class;
|
35
|
+
extern VALUE rgeo_geos_polygon_class;
|
36
|
+
extern VALUE rgeo_geos_geometry_collection_class;
|
37
|
+
extern VALUE rgeo_geos_multi_point_class;
|
38
|
+
extern VALUE rgeo_geos_multi_line_string_class;
|
39
|
+
extern VALUE rgeo_geos_multi_polygon_class;
|
40
|
+
|
41
|
+
void rgeo_init_geos_globals();
|
42
|
+
|
43
|
+
RGEO_END_C
|
44
|
+
|
45
|
+
#endif
|