rgeo 0.1.12 → 0.1.13
Sign up to get free protection for your applications and to get access to all the features.
- data/History.rdoc +9 -7
- data/README.rdoc +7 -5
- data/Version +1 -1
- data/ext/geos_c_impl/factory.c +12 -19
- data/ext/geos_c_impl/factory.h +15 -21
- data/ext/geos_c_impl/geometry.c +19 -36
- data/ext/geos_c_impl/geometry.h +2 -12
- data/ext/geos_c_impl/geometry_collection.c +38 -157
- data/ext/geos_c_impl/geometry_collection.h +2 -12
- data/ext/geos_c_impl/line_string.c +83 -80
- data/ext/geos_c_impl/line_string.h +2 -12
- data/ext/geos_c_impl/main.c +5 -0
- data/ext/geos_c_impl/point.c +2 -12
- data/ext/geos_c_impl/point.h +2 -12
- data/ext/geos_c_impl/polygon.c +5 -14
- data/ext/geos_c_impl/polygon.h +2 -12
- data/ext/geos_c_impl/preface.h +8 -0
- data/lib/rgeo.rb +34 -16
- data/lib/rgeo/{geography/simple_spherical/geometry_collection_impl.rb → cartesian.rb} +19 -26
- data/lib/rgeo/cartesian/calculations.rb +129 -0
- data/lib/rgeo/cartesian/interface.rb +85 -0
- data/lib/rgeo/cartesian/simple_factory.rb +159 -0
- data/lib/rgeo/cartesian/simple_feature_classes.rb +187 -0
- data/lib/rgeo/cartesian/simple_feature_methods.rb +97 -0
- data/lib/rgeo/features.rb +1 -0
- data/lib/rgeo/features/curve.rb +3 -2
- data/lib/rgeo/features/factory.rb +62 -37
- data/lib/rgeo/features/geometry.rb +10 -32
- data/lib/rgeo/features/geometry_collection.rb +3 -2
- data/lib/rgeo/features/line.rb +3 -2
- data/lib/rgeo/features/line_string.rb +3 -2
- data/lib/rgeo/features/linear_ring.rb +3 -2
- data/lib/rgeo/features/multi_curve.rb +3 -2
- data/lib/rgeo/features/multi_line_string.rb +3 -2
- data/lib/rgeo/features/multi_point.rb +3 -2
- data/lib/rgeo/features/multi_polygon.rb +3 -2
- data/lib/rgeo/features/multi_surface.rb +3 -2
- data/lib/rgeo/features/point.rb +3 -2
- data/lib/rgeo/features/polygon.rb +3 -2
- data/lib/rgeo/features/surface.rb +3 -2
- data/lib/rgeo/features/types.rb +198 -0
- data/lib/rgeo/geography.rb +4 -14
- data/lib/rgeo/geography/factory.rb +7 -64
- data/lib/rgeo/geography/{simple_spherical/geometry_methods.rb → helper.rb} +4 -13
- data/lib/rgeo/geography/simple_mercator/feature_classes.rb +35 -89
- data/lib/rgeo/geography/simple_mercator/feature_methods.rb +22 -31
- data/lib/rgeo/geography/simple_mercator/projector.rb +4 -8
- data/lib/rgeo/geography/simple_spherical/calculations.rb +11 -9
- data/lib/rgeo/geography/simple_spherical/feature_classes.rb +189 -0
- data/lib/rgeo/geography/simple_spherical/{line_string_impl.rb → feature_methods.rb} +16 -64
- data/lib/rgeo/geos/factory.rb +26 -40
- data/lib/rgeo/geos/impl_additions.rb +3 -5
- data/lib/rgeo/{geography/simple_spherical/polygon_impl.rb → impl_helpers.rb} +16 -26
- data/lib/rgeo/impl_helpers/basic_geometry_collection_methods.rb +186 -0
- data/lib/rgeo/impl_helpers/basic_geometry_methods.rb +90 -0
- data/lib/rgeo/impl_helpers/basic_line_string_methods.rb +188 -0
- data/lib/rgeo/impl_helpers/basic_point_methods.rb +149 -0
- data/lib/rgeo/{geography/common/helper.rb → impl_helpers/basic_polygon_methods.rb} +62 -53
- data/lib/rgeo/{geography/common/polygon_methods.rb → impl_helpers/serialization.rb} +50 -42
- data/tests/common/geometry_collection_tests.rb +9 -7
- data/tests/common/multi_line_string_tests.rb +16 -13
- data/tests/common/multi_point_tests.rb +16 -13
- data/tests/common/multi_polygon_tests.rb +8 -6
- data/tests/common/point_tests.rb +1 -2
- data/tests/common/polygon_tests.rb +9 -9
- data/tests/geos/tc_multi_line_string.rb +2 -2
- data/tests/simple_cartesian/tc_calculations.rb +138 -0
- data/tests/simple_cartesian/tc_geometry_collection.rb +68 -0
- data/tests/simple_cartesian/tc_line_string.rb +70 -0
- data/{lib/rgeo/geography/simple_spherical/multi_line_string_impl.rb → tests/simple_cartesian/tc_multi_line_string.rb} +19 -19
- data/{lib/rgeo/geography/simple_spherical/multi_polygon_impl.rb → tests/simple_cartesian/tc_multi_point.rb} +19 -19
- data/{lib/rgeo/geography/common/geometry_methods.rb → tests/simple_cartesian/tc_multi_polygon.rb} +19 -41
- data/{lib/rgeo/geography/simple_spherical/point_impl.rb → tests/simple_cartesian/tc_point.rb} +33 -35
- data/tests/simple_cartesian/tc_polygon.rb +67 -0
- data/tests/simple_spherical/tc_geometry_collection.rb +68 -0
- data/tests/simple_spherical/tc_line_string.rb +10 -171
- data/tests/simple_spherical/tc_multi_line_string.rb +67 -0
- data/{lib/rgeo/geography/simple_spherical/multi_point_impl.rb → tests/simple_spherical/tc_multi_point.rb} +19 -19
- data/tests/simple_spherical/tc_multi_polygon.rb +70 -0
- data/tests/simple_spherical/tc_point.rb +17 -115
- data/tests/simple_spherical/tc_polygon.rb +67 -0
- metadata +46 -18
- data/ext/geos_c_impl/globals.h +0 -58
- data/lib/rgeo/geography/common/geometry_collection_methods.rb +0 -217
- data/lib/rgeo/geography/common/line_string_methods.rb +0 -201
- data/lib/rgeo/geography/common/point_methods.rb +0 -153
@@ -43,12 +43,7 @@
|
|
43
43
|
|
44
44
|
#include "factory.h"
|
45
45
|
|
46
|
-
|
47
|
-
extern "C" {
|
48
|
-
#if 0
|
49
|
-
}
|
50
|
-
#endif
|
51
|
-
#endif
|
46
|
+
RGEO_BEGIN_C
|
52
47
|
|
53
48
|
|
54
49
|
/*
|
@@ -69,11 +64,6 @@ void rgeo_init_geos_geometry_collection(RGeo_Globals* globals);
|
|
69
64
|
VALUE rgeo_geos_geometry_collections_eql(GEOSContextHandle_t context, const GEOSGeometry* geom1, const GEOSGeometry* geom2);
|
70
65
|
|
71
66
|
|
72
|
-
|
73
|
-
#if 0
|
74
|
-
{
|
75
|
-
#endif
|
76
|
-
}
|
77
|
-
#endif
|
67
|
+
RGEO_END_C
|
78
68
|
|
79
69
|
#endif
|
@@ -48,12 +48,7 @@
|
|
48
48
|
#include "point.h"
|
49
49
|
#include "line_string.h"
|
50
50
|
|
51
|
-
|
52
|
-
extern "C" {
|
53
|
-
#if 0
|
54
|
-
}
|
55
|
-
#endif
|
56
|
-
#endif
|
51
|
+
RGEO_BEGIN_C
|
57
52
|
|
58
53
|
|
59
54
|
static VALUE method_line_string_geometry_type(VALUE self)
|
@@ -89,47 +84,6 @@ static VALUE method_line_geometry_type(VALUE self)
|
|
89
84
|
}
|
90
85
|
|
91
86
|
|
92
|
-
static VALUE method_line_string_cast(VALUE self, VALUE type)
|
93
|
-
{
|
94
|
-
VALUE result = Qnil;
|
95
|
-
const GEOSGeometry* self_geom = RGEO_GET_GEOS_GEOMETRY(self);
|
96
|
-
if (self_geom) {
|
97
|
-
VALUE type_name = rb_funcall(type, rb_intern("name"), 0);
|
98
|
-
char* new_type_str = StringValuePtr(type_name);
|
99
|
-
VALUE klass = Qnil;
|
100
|
-
char is_ring = 0;
|
101
|
-
if (strcmp(new_type_str, "Line") == 0) {
|
102
|
-
if (GEOSGetNumCoordinates_r(RGEO_CONTEXT_FROM_GEOMETRY(self), self_geom) == 2) {
|
103
|
-
klass = rb_const_get_at(RGEO_GLOBALS_FROM_GEOMETRY(self)->geos_module, rb_intern("LineImpl"));
|
104
|
-
}
|
105
|
-
}
|
106
|
-
else if (strcmp(new_type_str, "LinearRing") == 0) {
|
107
|
-
klass = rb_const_get_at(RGEO_GLOBALS_FROM_GEOMETRY(self)->geos_module, rb_intern("LinearRingImpl"));
|
108
|
-
is_ring = 1;
|
109
|
-
}
|
110
|
-
else if (strcmp(new_type_str, "LineString") == 0) {
|
111
|
-
klass = rb_const_get_at(RGEO_GLOBALS_FROM_GEOMETRY(self)->geos_module, rb_intern("LineStringImpl"));
|
112
|
-
}
|
113
|
-
if (!NIL_P(klass)) {
|
114
|
-
const GEOSCoordSequence* self_coord_seq = GEOSGeom_getCoordSeq_r(RGEO_CONTEXT_FROM_GEOMETRY(self), self_geom);
|
115
|
-
if (self_coord_seq) {
|
116
|
-
GEOSCoordSequence* coord_seq = GEOSCoordSeq_clone_r(RGEO_CONTEXT_FROM_GEOMETRY(self), self_coord_seq);
|
117
|
-
if (coord_seq) {
|
118
|
-
GEOSGeometry* geom = is_ring ? GEOSGeom_createLinearRing_r(RGEO_CONTEXT_FROM_GEOMETRY(self), coord_seq) : GEOSGeom_createLineString_r(RGEO_CONTEXT_FROM_GEOMETRY(self), coord_seq);
|
119
|
-
if (geom) {
|
120
|
-
result = rgeo_wrap_geos_geometry(RGEO_FACTORY_FROM_GEOMETRY(self), geom, klass);
|
121
|
-
}
|
122
|
-
}
|
123
|
-
}
|
124
|
-
}
|
125
|
-
if (NIL_P(result)) {
|
126
|
-
result = rb_call_super(1, &type);
|
127
|
-
}
|
128
|
-
}
|
129
|
-
return result;
|
130
|
-
}
|
131
|
-
|
132
|
-
|
133
87
|
static VALUE method_line_string_length(VALUE self)
|
134
88
|
{
|
135
89
|
VALUE result = Qnil;
|
@@ -273,38 +227,49 @@ static VALUE method_line_string_eql(VALUE self, VALUE rhs)
|
|
273
227
|
}
|
274
228
|
|
275
229
|
|
276
|
-
static GEOSCoordSequence* coord_seq_from_array(
|
230
|
+
static GEOSCoordSequence* coord_seq_from_array(VALUE factory, VALUE array, char close)
|
277
231
|
{
|
278
232
|
Check_Type(array, T_ARRAY);
|
279
|
-
|
233
|
+
VALUE point_type = rb_const_get_at(RGEO_GLOBALS_FROM_FACTORY(factory)->features_module, rb_intern("Point"));
|
234
|
+
unsigned int orig_len = (unsigned int)RARRAY_LEN(array);
|
235
|
+
const GEOSGeometry** geoms = ALLOC_N(const GEOSGeometry*, orig_len == 0 ? 1 : orig_len);
|
236
|
+
if (!geoms) {
|
237
|
+
return NULL;
|
238
|
+
}
|
280
239
|
char has_z = 0;
|
281
240
|
unsigned int i;
|
282
|
-
for (i=0; i<
|
283
|
-
const GEOSGeometry* entry_geom =
|
284
|
-
if (!entry_geom
|
241
|
+
for (i=0; i<orig_len; ++i) {
|
242
|
+
const GEOSGeometry* entry_geom = rgeo_convert_to_geos_geometry(factory, rb_ary_entry(array, i), point_type);
|
243
|
+
if (!entry_geom) {
|
244
|
+
free(geoms);
|
285
245
|
return NULL;
|
286
246
|
}
|
287
|
-
|
247
|
+
geoms[i] = entry_geom;
|
248
|
+
if (GEOSHasZ_r(RGEO_CONTEXT_FROM_FACTORY(factory), entry_geom) == 1) {
|
288
249
|
has_z = 1;
|
289
|
-
i = len;
|
290
250
|
}
|
291
251
|
}
|
292
|
-
|
252
|
+
unsigned int len = orig_len;
|
253
|
+
if (orig_len > 0 && close && GEOSEquals_r(RGEO_CONTEXT_FROM_FACTORY(factory), geoms[0], geoms[orig_len-1]) != 1) {
|
254
|
+
++len;
|
255
|
+
}
|
256
|
+
GEOSCoordSequence* coord_seq = GEOSCoordSeq_create_r(RGEO_CONTEXT_FROM_FACTORY(factory), len, has_z ? 3 : 2);
|
293
257
|
if (coord_seq) {
|
294
258
|
for (i=0; i<len; ++i) {
|
295
|
-
const GEOSCoordSequence* cs = GEOSGeom_getCoordSeq_r(
|
259
|
+
const GEOSCoordSequence* cs = GEOSGeom_getCoordSeq_r(RGEO_CONTEXT_FROM_FACTORY(factory), geoms[i == orig_len ? 0 : i]);
|
296
260
|
double x;
|
297
|
-
if (GEOSCoordSeq_getX_r(
|
298
|
-
GEOSCoordSeq_setX_r(
|
261
|
+
if (GEOSCoordSeq_getX_r(RGEO_CONTEXT_FROM_FACTORY(factory), cs, 0, &x)) {
|
262
|
+
GEOSCoordSeq_setX_r(RGEO_CONTEXT_FROM_FACTORY(factory), coord_seq, i, x);
|
299
263
|
}
|
300
|
-
if (GEOSCoordSeq_getY_r(
|
301
|
-
GEOSCoordSeq_setY_r(
|
264
|
+
if (GEOSCoordSeq_getY_r(RGEO_CONTEXT_FROM_FACTORY(factory), cs, 0, &x)) {
|
265
|
+
GEOSCoordSeq_setY_r(RGEO_CONTEXT_FROM_FACTORY(factory), coord_seq, i, x);
|
302
266
|
}
|
303
|
-
if (has_z && GEOSCoordSeq_getZ_r(
|
304
|
-
GEOSCoordSeq_setZ_r(
|
267
|
+
if (has_z && GEOSCoordSeq_getZ_r(RGEO_CONTEXT_FROM_FACTORY(factory), cs, 0, &x)) {
|
268
|
+
GEOSCoordSeq_setZ_r(RGEO_CONTEXT_FROM_FACTORY(factory), coord_seq, i, x);
|
305
269
|
}
|
306
270
|
}
|
307
271
|
}
|
272
|
+
free(geoms);
|
308
273
|
return coord_seq;
|
309
274
|
}
|
310
275
|
|
@@ -312,7 +277,7 @@ static GEOSCoordSequence* coord_seq_from_array(GEOSContextHandle_t context, VALU
|
|
312
277
|
static VALUE cmethod_create_line_string(VALUE module, VALUE factory, VALUE array)
|
313
278
|
{
|
314
279
|
VALUE result = Qnil;
|
315
|
-
GEOSCoordSequence* coord_seq = coord_seq_from_array(
|
280
|
+
GEOSCoordSequence* coord_seq = coord_seq_from_array(factory, array, 0);
|
316
281
|
if (coord_seq) {
|
317
282
|
GEOSGeometry* geom = GEOSGeom_createLineString_r(RGEO_CONTEXT_FROM_FACTORY(factory), coord_seq);
|
318
283
|
if (geom) {
|
@@ -326,7 +291,7 @@ static VALUE cmethod_create_line_string(VALUE module, VALUE factory, VALUE array
|
|
326
291
|
static VALUE cmethod_create_linear_ring(VALUE module, VALUE factory, VALUE array)
|
327
292
|
{
|
328
293
|
VALUE result = Qnil;
|
329
|
-
GEOSCoordSequence* coord_seq = coord_seq_from_array(
|
294
|
+
GEOSCoordSequence* coord_seq = coord_seq_from_array(factory, array, 1);
|
330
295
|
if (coord_seq) {
|
331
296
|
GEOSGeometry* geom = GEOSGeom_createLinearRing_r(RGEO_CONTEXT_FROM_FACTORY(factory), coord_seq);
|
332
297
|
if (geom) {
|
@@ -341,20 +306,20 @@ static VALUE cmethod_create_line(VALUE module, VALUE factory, VALUE start, VALUE
|
|
341
306
|
{
|
342
307
|
VALUE result = Qnil;
|
343
308
|
char has_z = 0;
|
309
|
+
VALUE point_type = rb_const_get_at(RGEO_GLOBALS_FROM_FACTORY(factory)->features_module, rb_intern("Point"));
|
344
310
|
|
345
|
-
const GEOSGeometry*
|
346
|
-
|
347
|
-
if (!entry_geom || GEOSGeomTypeId_r(RGEO_CONTEXT_FROM_FACTORY(factory), entry_geom) != GEOS_POINT) {
|
311
|
+
const GEOSGeometry* start_geom = rgeo_convert_to_geos_geometry(factory, start, point_type);
|
312
|
+
if (!start_geom) {
|
348
313
|
return Qnil;
|
349
314
|
}
|
350
|
-
if (GEOSHasZ_r(RGEO_CONTEXT_FROM_FACTORY(factory),
|
315
|
+
if (GEOSHasZ_r(RGEO_CONTEXT_FROM_FACTORY(factory), start_geom) == 1) {
|
351
316
|
has_z = 1;
|
352
317
|
}
|
353
|
-
|
354
|
-
if (!
|
318
|
+
const GEOSGeometry* end_geom = rgeo_convert_to_geos_geometry(factory, end, point_type);
|
319
|
+
if (!end_geom) {
|
355
320
|
return Qnil;
|
356
321
|
}
|
357
|
-
if (GEOSHasZ_r(RGEO_CONTEXT_FROM_FACTORY(factory),
|
322
|
+
if (GEOSHasZ_r(RGEO_CONTEXT_FROM_FACTORY(factory), end_geom) == 1) {
|
358
323
|
has_z = 1;
|
359
324
|
}
|
360
325
|
|
@@ -362,7 +327,7 @@ static VALUE cmethod_create_line(VALUE module, VALUE factory, VALUE start, VALUE
|
|
362
327
|
if (coord_seq) {
|
363
328
|
const GEOSCoordSequence* cs;
|
364
329
|
double x;
|
365
|
-
cs = GEOSGeom_getCoordSeq_r(RGEO_CONTEXT_FROM_FACTORY(factory),
|
330
|
+
cs = GEOSGeom_getCoordSeq_r(RGEO_CONTEXT_FROM_FACTORY(factory), start_geom);
|
366
331
|
if (GEOSCoordSeq_getX_r(RGEO_CONTEXT_FROM_FACTORY(factory), cs, 0, &x)) {
|
367
332
|
GEOSCoordSeq_setX_r(RGEO_CONTEXT_FROM_FACTORY(factory), coord_seq, 0, x);
|
368
333
|
}
|
@@ -372,7 +337,7 @@ static VALUE cmethod_create_line(VALUE module, VALUE factory, VALUE start, VALUE
|
|
372
337
|
if (has_z && GEOSCoordSeq_getZ_r(RGEO_CONTEXT_FROM_FACTORY(factory), cs, 0, &x)) {
|
373
338
|
GEOSCoordSeq_setZ_r(RGEO_CONTEXT_FROM_FACTORY(factory), coord_seq, 0, x);
|
374
339
|
}
|
375
|
-
cs = GEOSGeom_getCoordSeq_r(RGEO_CONTEXT_FROM_FACTORY(factory),
|
340
|
+
cs = GEOSGeom_getCoordSeq_r(RGEO_CONTEXT_FROM_FACTORY(factory), end_geom);
|
376
341
|
if (GEOSCoordSeq_getX_r(RGEO_CONTEXT_FROM_FACTORY(factory), cs, 0, &x)) {
|
377
342
|
GEOSCoordSeq_setX_r(RGEO_CONTEXT_FROM_FACTORY(factory), coord_seq, 1, x);
|
378
343
|
}
|
@@ -391,6 +356,47 @@ static VALUE cmethod_create_line(VALUE module, VALUE factory, VALUE start, VALUE
|
|
391
356
|
}
|
392
357
|
|
393
358
|
|
359
|
+
static VALUE impl_copy_from(VALUE klass, VALUE factory, VALUE original, char subtype)
|
360
|
+
{
|
361
|
+
VALUE result = Qnil;
|
362
|
+
const GEOSGeometry* original_geom = RGEO_GET_GEOS_GEOMETRY(original);
|
363
|
+
if (original_geom && subtype == 1 && GEOSGetNumCoordinates_r(RGEO_CONTEXT_FROM_FACTORY(factory), original_geom) != 2) {
|
364
|
+
original_geom = NULL;
|
365
|
+
}
|
366
|
+
if (original_geom) {
|
367
|
+
const GEOSCoordSequence* original_coord_seq = GEOSGeom_getCoordSeq_r(RGEO_CONTEXT_FROM_FACTORY(factory), original_geom);
|
368
|
+
if (original_coord_seq) {
|
369
|
+
GEOSCoordSequence* coord_seq = GEOSCoordSeq_clone_r(RGEO_CONTEXT_FROM_FACTORY(factory), original_coord_seq);
|
370
|
+
if (coord_seq) {
|
371
|
+
GEOSGeometry* geom = subtype == 2 ? GEOSGeom_createLinearRing_r(RGEO_CONTEXT_FROM_FACTORY(factory), coord_seq) : GEOSGeom_createLineString_r(RGEO_CONTEXT_FROM_FACTORY(factory), coord_seq);
|
372
|
+
if (geom) {
|
373
|
+
result = rgeo_wrap_geos_geometry(factory, geom, klass);
|
374
|
+
}
|
375
|
+
}
|
376
|
+
}
|
377
|
+
}
|
378
|
+
return result;
|
379
|
+
}
|
380
|
+
|
381
|
+
|
382
|
+
static VALUE cmethod_line_string_copy_from(VALUE klass, VALUE factory, VALUE original)
|
383
|
+
{
|
384
|
+
return impl_copy_from(klass, factory, original, 0);
|
385
|
+
}
|
386
|
+
|
387
|
+
|
388
|
+
static VALUE cmethod_line_copy_from(VALUE klass, VALUE factory, VALUE original)
|
389
|
+
{
|
390
|
+
return impl_copy_from(klass, factory, original, 1);
|
391
|
+
}
|
392
|
+
|
393
|
+
|
394
|
+
static VALUE cmethod_linear_ring_copy_from(VALUE klass, VALUE factory, VALUE original)
|
395
|
+
{
|
396
|
+
return impl_copy_from(klass, factory, original, 2);
|
397
|
+
}
|
398
|
+
|
399
|
+
|
394
400
|
void rgeo_init_geos_line_string(RGeo_Globals* globals)
|
395
401
|
{
|
396
402
|
VALUE geos_line_string_class = rb_define_class_under(globals->geos_module, "LineStringImpl", rb_const_get_at(globals->geos_module, rb_intern("GeometryImpl")));
|
@@ -398,9 +404,9 @@ void rgeo_init_geos_line_string(RGeo_Globals* globals)
|
|
398
404
|
VALUE geos_line_class = rb_define_class_under(globals->geos_module, "LineImpl", geos_line_string_class);
|
399
405
|
|
400
406
|
rb_define_module_function(geos_line_string_class, "create", cmethod_create_line_string, 2);
|
407
|
+
rb_define_module_function(geos_line_string_class, "_copy_from", cmethod_line_string_copy_from, 2);
|
401
408
|
rb_define_method(geos_line_string_class, "eql?", method_line_string_eql, 1);
|
402
409
|
rb_define_method(geos_line_string_class, "geometry_type", method_line_string_geometry_type, 0);
|
403
|
-
rb_define_method(geos_line_string_class, "cast", method_line_string_cast, 1);
|
404
410
|
rb_define_method(geos_line_string_class, "length", method_line_string_length, 0);
|
405
411
|
rb_define_method(geos_line_string_class, "num_points", method_line_string_num_points, 0);
|
406
412
|
rb_define_method(geos_line_string_class, "point_n", method_line_string_point_n, 1);
|
@@ -411,9 +417,11 @@ void rgeo_init_geos_line_string(RGeo_Globals* globals)
|
|
411
417
|
rb_define_method(geos_line_string_class, "is_ring?", method_line_string_is_ring, 0);
|
412
418
|
|
413
419
|
rb_define_module_function(geos_linear_ring_class, "create", cmethod_create_linear_ring, 2);
|
420
|
+
rb_define_module_function(geos_linear_ring_class, "_copy_from", cmethod_linear_ring_copy_from, 2);
|
414
421
|
rb_define_method(geos_linear_ring_class, "geometry_type", method_linear_ring_geometry_type, 0);
|
415
422
|
|
416
423
|
rb_define_module_function(geos_line_class, "create", cmethod_create_line, 3);
|
424
|
+
rb_define_module_function(geos_line_class, "_copy_from", cmethod_line_copy_from, 2);
|
417
425
|
rb_define_method(geos_line_class, "geometry_type", method_line_geometry_type, 0);
|
418
426
|
}
|
419
427
|
|
@@ -458,11 +466,6 @@ VALUE rgeo_is_geos_line_string_closed(GEOSContextHandle_t context, const GEOSGeo
|
|
458
466
|
}
|
459
467
|
|
460
468
|
|
461
|
-
|
462
|
-
#if 0
|
463
|
-
{
|
464
|
-
#endif
|
465
|
-
}
|
466
|
-
#endif
|
469
|
+
RGEO_END_C
|
467
470
|
|
468
471
|
#endif
|
@@ -43,12 +43,7 @@
|
|
43
43
|
|
44
44
|
#include "factory.h"
|
45
45
|
|
46
|
-
|
47
|
-
extern "C" {
|
48
|
-
#if 0
|
49
|
-
}
|
50
|
-
#endif
|
51
|
-
#endif
|
46
|
+
RGEO_BEGIN_C
|
52
47
|
|
53
48
|
|
54
49
|
/*
|
@@ -64,11 +59,6 @@ void rgeo_init_geos_line_string(RGeo_Globals* globals);
|
|
64
59
|
VALUE rgeo_is_geos_line_string_closed(GEOSContextHandle_t context, const GEOSGeometry* geom);
|
65
60
|
|
66
61
|
|
67
|
-
|
68
|
-
#if 0
|
69
|
-
{
|
70
|
-
#endif
|
71
|
-
}
|
72
|
-
#endif
|
62
|
+
RGEO_END_C
|
73
63
|
|
74
64
|
#endif
|
data/ext/geos_c_impl/main.c
CHANGED
data/ext/geos_c_impl/point.c
CHANGED
@@ -46,12 +46,7 @@
|
|
46
46
|
#include "geometry.h"
|
47
47
|
#include "point.h"
|
48
48
|
|
49
|
-
|
50
|
-
extern "C" {
|
51
|
-
#if 0
|
52
|
-
}
|
53
|
-
#endif
|
54
|
-
#endif
|
49
|
+
RGEO_BEGIN_C
|
55
50
|
|
56
51
|
|
57
52
|
static VALUE method_point_geometry_type(VALUE self)
|
@@ -191,11 +186,6 @@ VALUE rgeo_create_geos_point_3d(VALUE factory, double x, double y, double z)
|
|
191
186
|
}
|
192
187
|
|
193
188
|
|
194
|
-
|
195
|
-
#if 0
|
196
|
-
{
|
197
|
-
#endif
|
198
|
-
}
|
199
|
-
#endif
|
189
|
+
RGEO_END_C
|
200
190
|
|
201
191
|
#endif
|
data/ext/geos_c_impl/point.h
CHANGED
@@ -42,12 +42,7 @@
|
|
42
42
|
|
43
43
|
#include "factory.h"
|
44
44
|
|
45
|
-
|
46
|
-
extern "C" {
|
47
|
-
#if 0
|
48
|
-
}
|
49
|
-
#endif
|
50
|
-
#endif
|
45
|
+
RGEO_BEGIN_C
|
51
46
|
|
52
47
|
|
53
48
|
/*
|
@@ -67,11 +62,6 @@ VALUE rgeo_create_geos_point_2d(VALUE factory, double x, double y);
|
|
67
62
|
VALUE rgeo_create_geos_point_3d(VALUE factory, double x, double y, double z);
|
68
63
|
|
69
64
|
|
70
|
-
|
71
|
-
#if 0
|
72
|
-
{
|
73
|
-
#endif
|
74
|
-
}
|
75
|
-
#endif
|
65
|
+
RGEO_END_C
|
76
66
|
|
77
67
|
#endif
|
data/ext/geos_c_impl/polygon.c
CHANGED
@@ -47,12 +47,7 @@
|
|
47
47
|
#include "line_string.h"
|
48
48
|
#include "polygon.h"
|
49
49
|
|
50
|
-
|
51
|
-
extern "C" {
|
52
|
-
#if 0
|
53
|
-
}
|
54
|
-
#endif
|
55
|
-
#endif
|
50
|
+
RGEO_BEGIN_C
|
56
51
|
|
57
52
|
|
58
53
|
static VALUE method_polygon_eql(VALUE self, VALUE rhs)
|
@@ -169,7 +164,8 @@ static VALUE method_polygon_interior_rings(VALUE self)
|
|
169
164
|
static VALUE cmethod_create(VALUE module, VALUE factory, VALUE exterior, VALUE interior_array)
|
170
165
|
{
|
171
166
|
Check_Type(interior_array, T_ARRAY);
|
172
|
-
|
167
|
+
VALUE linear_ring_type = rb_const_get_at(RGEO_GLOBALS_FROM_FACTORY(factory)->features_module, rb_intern("LinearRing"));
|
168
|
+
GEOSGeometry* exterior_geom = rgeo_convert_to_detached_geos_geometry(RGEO_GLOBALS_FROM_FACTORY(factory), exterior, linear_ring_type, NULL);
|
173
169
|
if (exterior_geom) {
|
174
170
|
unsigned int len = (unsigned int)RARRAY_LEN(interior_array);
|
175
171
|
GEOSGeometry** interior_geoms = ALLOC_N(GEOSGeometry*, len == 0 ? 1 : len);
|
@@ -177,7 +173,7 @@ static VALUE cmethod_create(VALUE module, VALUE factory, VALUE exterior, VALUE i
|
|
177
173
|
unsigned int actual_len = 0;
|
178
174
|
unsigned int i;
|
179
175
|
for (i=0; i<len; ++i) {
|
180
|
-
GEOSGeometry* interior_geom = rgeo_convert_to_detached_geos_geometry(RGEO_GLOBALS_FROM_FACTORY(factory), rb_ary_entry(interior_array, i), NULL);
|
176
|
+
GEOSGeometry* interior_geom = rgeo_convert_to_detached_geos_geometry(RGEO_GLOBALS_FROM_FACTORY(factory), rb_ary_entry(interior_array, i), linear_ring_type, NULL);
|
181
177
|
if (interior_geom) {
|
182
178
|
interior_geoms[actual_len++] = interior_geom;
|
183
179
|
}
|
@@ -249,11 +245,6 @@ VALUE rgeo_geos_polygons_eql(GEOSContextHandle_t context, const GEOSGeometry* ge
|
|
249
245
|
}
|
250
246
|
|
251
247
|
|
252
|
-
|
253
|
-
#if 0
|
254
|
-
{
|
255
|
-
#endif
|
256
|
-
}
|
257
|
-
#endif
|
248
|
+
RGEO_END_C
|
258
249
|
|
259
250
|
#endif
|
data/ext/geos_c_impl/polygon.h
CHANGED
@@ -43,12 +43,7 @@
|
|
43
43
|
|
44
44
|
#include "factory.h"
|
45
45
|
|
46
|
-
|
47
|
-
extern "C" {
|
48
|
-
#if 0
|
49
|
-
}
|
50
|
-
#endif
|
51
|
-
#endif
|
46
|
+
RGEO_BEGIN_C
|
52
47
|
|
53
48
|
|
54
49
|
/*
|
@@ -66,11 +61,6 @@ void rgeo_init_geos_polygon(RGeo_Globals* globals);
|
|
66
61
|
VALUE rgeo_geos_polygons_eql(GEOSContextHandle_t context, const GEOSGeometry* geom1, const GEOSGeometry* geom2);
|
67
62
|
|
68
63
|
|
69
|
-
|
70
|
-
#if 0
|
71
|
-
{
|
72
|
-
#endif
|
73
|
-
}
|
74
|
-
#endif
|
64
|
+
RGEO_END_C
|
75
65
|
|
76
66
|
#endif
|