librtree 0.8.1 → 0.8.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/rtree/extconf.rb +0 -2
- data/ext/rtree/rtree.c +137 -71
- data/lib/rtree.rb +76 -11
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad62e4e446f6fb4571d33f6498bf9df26d5b360a0325cde40ead187ebcb0be04
|
4
|
+
data.tar.gz: d462f690013c36933961206659026af7fe9b50ea6d23198f15a0965247390192
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19e997efe8519f2db02e10f69f8d60af57c376e9a6de7f38bc8f3613cbd8287800e096816f1c37361c122c0a7c99e41bd97f7842ddebdf0357395e31a666739b
|
7
|
+
data.tar.gz: bf1911bade3fcba763aee1f4a451dd9638f8e9c3b06577482b09bc134942282d031538d8a436ee161ec4334c7f2dfdadfcf8ac1349dc3d32b053c69390e5eb7f
|
data/ext/rtree/extconf.rb
CHANGED
@@ -20,11 +20,9 @@ puts LIB_DIRS.inspect
|
|
20
20
|
|
21
21
|
dir_config('librtree', HEADER_DIRS, LIB_DIRS)
|
22
22
|
|
23
|
-
abort 'missing csv.h' unless find_header('csv.h')
|
24
23
|
abort 'missing jansson.h' unless find_header('jansson.h')
|
25
24
|
abort 'missing rtree.h' unless find_header('rtree.h')
|
26
25
|
|
27
|
-
abort "libcsv is missing" unless find_library('csv', 'csv_init')
|
28
26
|
abort "libjansson is missing" unless find_library('jansson', 'json_pack')
|
29
27
|
abort "librtree is missing" unless find_library('rtree', 'rtree_new')
|
30
28
|
|
data/ext/rtree/rtree.c
CHANGED
@@ -1,35 +1,48 @@
|
|
1
1
|
#include <ruby.h>
|
2
2
|
#include <ruby/io.h>
|
3
|
+
#include <ruby/version.h>
|
3
4
|
|
4
5
|
#include <rtree.h>
|
6
|
+
#include <rtree/package.h>
|
5
7
|
|
6
8
|
#include <errno.h>
|
7
9
|
#include <stdint.h>
|
8
10
|
|
9
|
-
typedef struct
|
10
|
-
{
|
11
|
-
void *rtree;
|
12
|
-
} lrt_t;
|
13
11
|
|
14
|
-
static void
|
12
|
+
static void lrt_dfree(void *p)
|
15
13
|
{
|
16
|
-
|
17
|
-
|
18
|
-
if (lrt->rtree)
|
19
|
-
{
|
20
|
-
rtree_destroy(lrt->rtree);
|
21
|
-
lrt->rtree = NULL;
|
22
|
-
}
|
14
|
+
rtree_destroy((rtree_t*)p);
|
23
15
|
}
|
24
16
|
|
25
|
-
static
|
17
|
+
static size_t lrt_dsize(const void *p)
|
26
18
|
{
|
27
|
-
|
28
|
-
|
19
|
+
return rtree_bytes((const rtree_t*)p);
|
20
|
+
}
|
29
21
|
|
30
|
-
|
22
|
+
static rb_data_type_t type = {
|
23
|
+
.wrap_struct_name = "rtree-wrap",
|
24
|
+
.function = {
|
25
|
+
.dmark = NULL,
|
26
|
+
.dfree = lrt_dfree,
|
27
|
+
.dsize = lrt_dsize,
|
28
|
+
#if RUBY_API_VERSION_CODE < 20700
|
29
|
+
.reserved = { NULL, NULL }
|
30
|
+
#else
|
31
|
+
.dcompact = NULL,
|
32
|
+
.reserved = { NULL }
|
33
|
+
#endif
|
34
|
+
},
|
35
|
+
.parent = NULL,
|
36
|
+
.data = NULL,
|
37
|
+
.flags = RUBY_TYPED_FREE_IMMEDIATELY
|
38
|
+
};
|
31
39
|
|
32
|
-
|
40
|
+
static VALUE lrt_alloc(VALUE cls)
|
41
|
+
{
|
42
|
+
rtree_t *rtree;;
|
43
|
+
if ((rtree = rtree_alloc()) == NULL)
|
44
|
+
rb_raise(rb_eNoMemError, "failed to alloc rtree");
|
45
|
+
return TypedData_Wrap_Struct(cls, &type, rtree);
|
33
46
|
}
|
34
47
|
|
35
48
|
static VALUE lrt_init(VALUE self, VALUE dim_obj, VALUE flags_obj)
|
@@ -40,31 +53,28 @@ static VALUE lrt_init(VALUE self, VALUE dim_obj, VALUE flags_obj)
|
|
40
53
|
Check_Type(dim_obj, T_FIXNUM);
|
41
54
|
state_flags_t flags = FIX2UINT(flags_obj);
|
42
55
|
|
43
|
-
|
44
|
-
|
56
|
+
rtree_t *rtree;
|
57
|
+
TypedData_Get_Struct(self, rtree_t, &type, rtree);
|
45
58
|
|
46
|
-
if ((
|
47
|
-
rb_raise(rb_eNoMemError, "failed to
|
59
|
+
if ((rtree_init(rtree, dim, flags)) != 0)
|
60
|
+
rb_raise(rb_eNoMemError, "failed to init rtree");
|
48
61
|
|
49
62
|
return self;
|
50
63
|
}
|
51
64
|
|
52
65
|
static VALUE lrt_release(VALUE self)
|
53
66
|
{
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
free(lrt->rtree);
|
58
|
-
|
67
|
+
rtree_t *rtree;
|
68
|
+
TypedData_Get_Struct(self, rtree_t, &type, rtree);
|
69
|
+
rtree_destroy(rtree);
|
59
70
|
return self;
|
60
71
|
}
|
61
72
|
|
62
73
|
static VALUE lrt_height(VALUE self)
|
63
74
|
{
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
return INT2NUM(rtree_height(lrt->rtree));
|
75
|
+
rtree_t *rtree;
|
76
|
+
TypedData_Get_Struct(self, rtree_t, &type, rtree);
|
77
|
+
return INT2NUM(rtree_height(rtree));
|
68
78
|
}
|
69
79
|
|
70
80
|
static VALUE lrt_add_rect(VALUE self, VALUE id_obj, VALUE coord_obj)
|
@@ -72,11 +82,9 @@ static VALUE lrt_add_rect(VALUE self, VALUE id_obj, VALUE coord_obj)
|
|
72
82
|
Check_Type(coord_obj, T_ARRAY);
|
73
83
|
Check_Type(id_obj, T_FIXNUM);
|
74
84
|
|
75
|
-
|
76
|
-
|
85
|
+
rtree_t *rtree;
|
86
|
+
TypedData_Get_Struct(self, rtree_t, &type, rtree);
|
77
87
|
|
78
|
-
rtree_t
|
79
|
-
*rtree = lrt->rtree;
|
80
88
|
rtree_id_t
|
81
89
|
id = FIX2ULONG(id_obj);
|
82
90
|
size_t
|
@@ -132,11 +140,10 @@ static VALUE lrt_update(VALUE self)
|
|
132
140
|
if (!rb_block_given_p())
|
133
141
|
rb_raise(rb_eArgError, "Expected block");
|
134
142
|
|
135
|
-
|
136
|
-
|
137
|
-
rtree_t *rtree = lrt->rtree;
|
138
|
-
size_t len = 2 * state_dims(rtree->state);
|
143
|
+
rtree_t *rtree;
|
144
|
+
TypedData_Get_Struct(self, rtree_t, &type, rtree);
|
139
145
|
|
146
|
+
size_t len = 2 * state_dims(rtree->state);
|
140
147
|
int err = rtree_update(rtree, update_cb, &len);
|
141
148
|
|
142
149
|
if (err != 0)
|
@@ -169,11 +176,9 @@ static VALUE lrt_search(VALUE self, VALUE coord_obj)
|
|
169
176
|
|
170
177
|
Check_Type(coord_obj, T_ARRAY);
|
171
178
|
|
172
|
-
|
173
|
-
|
179
|
+
rtree_t *rtree;
|
180
|
+
TypedData_Get_Struct(self, rtree_t, &type, rtree);
|
174
181
|
|
175
|
-
rtree_t
|
176
|
-
*rtree = lrt->rtree;
|
177
182
|
size_t
|
178
183
|
len = RARRAY_LEN(coord_obj),
|
179
184
|
dim = state_dims(rtree->state);
|
@@ -215,12 +220,7 @@ static VALUE deserialise(VALUE cls, VALUE io_obj, deserialise_t *f)
|
|
215
220
|
rb_raise(rb_eRuntimeError, "Failed read from stream");
|
216
221
|
}
|
217
222
|
|
218
|
-
|
219
|
-
VALUE obj = Data_Make_Struct(cls, lrt_t, NULL, lrt_free, lrt);
|
220
|
-
|
221
|
-
lrt->rtree = rtree;
|
222
|
-
|
223
|
-
return obj;
|
223
|
+
return TypedData_Wrap_Struct(cls, &type, rtree);
|
224
224
|
}
|
225
225
|
|
226
226
|
static VALUE lrt_json_read(VALUE cls, VALUE io_obj)
|
@@ -259,12 +259,7 @@ static VALUE lrt_csv_read(VALUE cls,
|
|
259
259
|
rb_raise(rb_eRuntimeError, "Failed read from stream");
|
260
260
|
}
|
261
261
|
|
262
|
-
|
263
|
-
VALUE obj = Data_Make_Struct(cls, lrt_t, NULL, lrt_free, lrt);
|
264
|
-
|
265
|
-
lrt->rtree = rtree;
|
266
|
-
|
267
|
-
return obj;
|
262
|
+
return TypedData_Wrap_Struct(cls, &type, rtree);
|
268
263
|
}
|
269
264
|
|
270
265
|
/* serialisation */
|
@@ -281,9 +276,8 @@ static VALUE serialise(VALUE self, VALUE io_obj, serialise_t *f)
|
|
281
276
|
rb_io_check_writable(io);
|
282
277
|
FILE *fp = rb_io_stdio_file(io);
|
283
278
|
|
284
|
-
|
285
|
-
|
286
|
-
rtree_t *rtree = lrt->rtree;
|
279
|
+
rtree_t *rtree;
|
280
|
+
TypedData_Get_Struct(self, rtree_t, &type, rtree);
|
287
281
|
|
288
282
|
int err = f(rtree, fp);
|
289
283
|
if (err != 0)
|
@@ -304,12 +298,10 @@ static VALUE lrt_bsrt_write(VALUE self, VALUE io_obj)
|
|
304
298
|
|
305
299
|
static VALUE lrt_identical(VALUE self, VALUE other)
|
306
300
|
{
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
rtree_t
|
311
|
-
*rtree_self = lrt_self->rtree,
|
312
|
-
*rtree_other = lrt_other->rtree;
|
301
|
+
rtree_t *rtree_self, *rtree_other;
|
302
|
+
|
303
|
+
TypedData_Get_Struct(self, rtree_t, &type, rtree_self);
|
304
|
+
TypedData_Get_Struct(other, rtree_t, &type, rtree_other);
|
313
305
|
|
314
306
|
if (rtree_identical(rtree_self, rtree_other))
|
315
307
|
return Qtrue;
|
@@ -319,12 +311,12 @@ static VALUE lrt_identical(VALUE self, VALUE other)
|
|
319
311
|
|
320
312
|
static VALUE lrt_clone(VALUE self)
|
321
313
|
{
|
322
|
-
lrt_t *lrt;
|
323
|
-
Data_Get_Struct(self, lrt_t, lrt);
|
324
314
|
rtree_t *rtree;
|
315
|
+
TypedData_Get_Struct(self, rtree_t, &type, rtree);
|
325
316
|
|
317
|
+
rtree_t *clone;
|
326
318
|
errno = 0;
|
327
|
-
if ((
|
319
|
+
if ((clone = rtree_clone(rtree)) == NULL)
|
328
320
|
{
|
329
321
|
if (errno)
|
330
322
|
rb_sys_fail(__func__);
|
@@ -332,13 +324,73 @@ static VALUE lrt_clone(VALUE self)
|
|
332
324
|
rb_raise(rb_eRuntimeError, "Failed clone");
|
333
325
|
}
|
334
326
|
|
335
|
-
|
336
|
-
|
337
|
-
|
327
|
+
return TypedData_Wrap_Struct(CLASS_OF(self), &type, clone);
|
328
|
+
}
|
329
|
+
|
330
|
+
static VALUE state_size_access(VALUE self, size_t (*f)(const state_t*))
|
331
|
+
{
|
332
|
+
rtree_t *rtree;
|
333
|
+
TypedData_Get_Struct(self, rtree_t, &type, rtree);
|
334
|
+
return INT2NUM(f(rtree->state));
|
335
|
+
}
|
336
|
+
|
337
|
+
static VALUE lrt_dim(VALUE self)
|
338
|
+
{
|
339
|
+
return state_size_access(self, state_dims);
|
340
|
+
}
|
341
|
+
|
342
|
+
static VALUE lrt_page_size(VALUE self)
|
343
|
+
{
|
344
|
+
return state_size_access(self, state_page_size);
|
345
|
+
}
|
346
|
+
|
347
|
+
static VALUE lrt_node_size(VALUE self)
|
348
|
+
{
|
349
|
+
return state_size_access(self, state_node_size);
|
350
|
+
}
|
338
351
|
|
339
|
-
|
352
|
+
static VALUE lrt_rect_size(VALUE self)
|
353
|
+
{
|
354
|
+
return state_size_access(self, state_rect_size);
|
355
|
+
}
|
356
|
+
|
357
|
+
static VALUE lrt_branch_size(VALUE self)
|
358
|
+
{
|
359
|
+
return state_size_access(self, state_branch_size);
|
360
|
+
}
|
361
|
+
|
362
|
+
static VALUE lrt_branching_factor(VALUE self)
|
363
|
+
{
|
364
|
+
return state_size_access(self, state_branching_factor);
|
365
|
+
}
|
340
366
|
|
341
|
-
|
367
|
+
static VALUE lrt_unit_sphere_volume(VALUE self)
|
368
|
+
{
|
369
|
+
rtree_t *rtree;
|
370
|
+
TypedData_Get_Struct(self, rtree_t, &type, rtree);
|
371
|
+
return DBL2NUM(state_unit_sphere_volume(rtree->state));
|
372
|
+
}
|
373
|
+
|
374
|
+
static VALUE lrt_size(VALUE self)
|
375
|
+
{
|
376
|
+
rtree_t *rtree;
|
377
|
+
TypedData_Get_Struct(self, rtree_t, &type, rtree);
|
378
|
+
return INT2NUM(rtree_bytes(rtree));
|
379
|
+
}
|
380
|
+
|
381
|
+
static VALUE lrt_version(VALUE self)
|
382
|
+
{
|
383
|
+
return rb_str_new_cstr(rtree_package_version);
|
384
|
+
}
|
385
|
+
|
386
|
+
static VALUE lrt_bugreport(VALUE self)
|
387
|
+
{
|
388
|
+
return rb_str_new_cstr(rtree_package_bugreport);
|
389
|
+
}
|
390
|
+
|
391
|
+
static VALUE lrt_url(VALUE self)
|
392
|
+
{
|
393
|
+
return rb_str_new_cstr(rtree_package_url);
|
342
394
|
}
|
343
395
|
|
344
396
|
void Init_rtree(void)
|
@@ -356,7 +408,21 @@ void Init_rtree(void)
|
|
356
408
|
rb_define_method(cls, "json_write", lrt_json_write, 1);
|
357
409
|
rb_define_method(cls, "bsrt_write", lrt_bsrt_write, 1);
|
358
410
|
rb_define_method(cls, "eq?", lrt_identical, 1);
|
411
|
+
rb_define_method(cls, "dim", lrt_dim, 0);
|
412
|
+
rb_define_method(cls, "size", lrt_size, 0);
|
413
|
+
rb_define_method(cls, "page_size", lrt_page_size, 0);
|
414
|
+
rb_define_method(cls, "node_size", lrt_node_size, 0);
|
415
|
+
rb_define_method(cls, "rect_size", lrt_rect_size, 0);
|
416
|
+
rb_define_method(cls, "branch_size", lrt_branch_size, 0);
|
417
|
+
rb_define_method(cls, "branching_factor", lrt_branching_factor, 0);
|
418
|
+
rb_define_method(cls, "unit_sphere_volume", lrt_unit_sphere_volume, 0);
|
419
|
+
rb_define_singleton_method(cls, "version", lrt_version, 0);
|
420
|
+
rb_define_singleton_method(cls, "bugreport", lrt_bugreport, 0);
|
421
|
+
rb_define_singleton_method(cls, "url", lrt_url, 0);
|
359
422
|
rb_define_singleton_method(cls, "json_read", lrt_json_read, 1);
|
360
423
|
rb_define_singleton_method(cls, "bsrt_read", lrt_bsrt_read, 1);
|
361
424
|
rb_define_singleton_method(cls, "csv_read", lrt_csv_read, 3);
|
425
|
+
rb_define_const(cls, "SPLIT_QUADRATIC", INT2NUM(RTREE_SPLIT_QUADRATIC));
|
426
|
+
rb_define_const(cls, "SPLIT_LINEAR", INT2NUM(RTREE_SPLIT_LINEAR));
|
427
|
+
rb_define_const(cls, "SPLIT_GREENE", INT2NUM(RTREE_SPLIT_GREENE));
|
362
428
|
}
|
data/lib/rtree.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# The C
|
1
|
+
# The Ruby/C interface, which is not documented in YARD.
|
2
2
|
class RTreeC ; end
|
3
3
|
|
4
4
|
# @author RTree J. J. Green
|
@@ -96,7 +96,7 @@ class RTree < RTreeC
|
|
96
96
|
# Build a new RTree instance from CSV stream
|
97
97
|
# @param io [IO] a readable stream object
|
98
98
|
# @param dim [Integer] the dimension of the tree
|
99
|
-
# @param split [:linear, :quadratic] See {#initialize}
|
99
|
+
# @param split [:linear, :quadratic, :greene] See {#initialize}
|
100
100
|
# @param node_page [Integer] See {#initialize}
|
101
101
|
# @return [RTree] the newly built RTree
|
102
102
|
# @note The CSV file (without header) should have the id in the
|
@@ -120,13 +120,30 @@ class RTree < RTreeC
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
|
+
# @return [Array<Integer>] version of librtree
|
124
|
+
def version
|
125
|
+
@version ||= super.split('.').map(&:to_i)
|
126
|
+
end
|
127
|
+
|
128
|
+
# @return [String] email address for librtree bug reports
|
129
|
+
def bugreport
|
130
|
+
super
|
131
|
+
end
|
132
|
+
|
133
|
+
# @return [String] librtree homepage
|
134
|
+
def url
|
135
|
+
super
|
136
|
+
end
|
137
|
+
|
123
138
|
# @!visibility private
|
124
139
|
def split_flag(split)
|
125
140
|
case split
|
126
141
|
when :quadratic
|
127
|
-
|
142
|
+
self::SPLIT_QUADRATIC
|
128
143
|
when :linear
|
129
|
-
|
144
|
+
self::SPLIT_LINEAR
|
145
|
+
when :greene
|
146
|
+
self::SPLIT_GREENE
|
130
147
|
else
|
131
148
|
raise ArgumentError, "bad split value: #{split}"
|
132
149
|
end
|
@@ -165,9 +182,10 @@ class RTree < RTreeC
|
|
165
182
|
|
166
183
|
# Initialize a new (empty) RTree
|
167
184
|
# @param dim [Integer] the dimension of the tree
|
168
|
-
# @param split [:linear, :quadratic] determines the splitting
|
169
|
-
# the linear strategy is faster to build, the quadratic
|
170
|
-
# better-quality R-
|
185
|
+
# @param split [:linear, :quadratic, :greene] determines the splitting
|
186
|
+
# strategy, the linear strategy is faster to build, the quadratic
|
187
|
+
# and greene strategies produces a better-quality R-trees which is
|
188
|
+
# faster to query.
|
171
189
|
# @param node_page [Integer] the nodes-per-page value. This value can
|
172
190
|
# affect performance quite dramatically, particularly build time. A
|
173
191
|
# value which is too large would result in an infeasible branching
|
@@ -233,7 +251,7 @@ class RTree < RTreeC
|
|
233
251
|
# is much faster than rebuilding the R-tree; in this Ruby interface
|
234
252
|
# the callback must convert C floats to Ruby, yield them to the
|
235
253
|
# block and then convert the returned Ruby Floats to C; so we would
|
236
|
-
# expect that it loses much of its
|
254
|
+
# expect that it loses much of its competitive advantage when
|
237
255
|
# compared to an R-tree rebuild.
|
238
256
|
def update!
|
239
257
|
super
|
@@ -252,7 +270,7 @@ class RTree < RTreeC
|
|
252
270
|
end
|
253
271
|
|
254
272
|
# Serialise to JSON stream
|
255
|
-
# @param io [IO] a
|
273
|
+
# @param io [IO] a writable stream
|
256
274
|
# @return [self]
|
257
275
|
# @see .json_read
|
258
276
|
# @example Write to file
|
@@ -262,7 +280,7 @@ class RTree < RTreeC
|
|
262
280
|
end
|
263
281
|
|
264
282
|
# Serialise to BSRT (binary serialised R-tree) stream
|
265
|
-
# @param io [IO] a
|
283
|
+
# @param io [IO] a writable stream
|
266
284
|
# @return [self]
|
267
285
|
# @see .bsrt_read
|
268
286
|
# @example Write to file
|
@@ -292,7 +310,7 @@ class RTree < RTreeC
|
|
292
310
|
end
|
293
311
|
|
294
312
|
# Equality of RTrees. This is a rather strict equality,
|
295
|
-
# not only must the tree have the same
|
313
|
+
# not only must the tree have the same rectangles, they
|
296
314
|
# must be in the same order. Certainly {#clone} will produce
|
297
315
|
# an instance which is equal in this sense.
|
298
316
|
# @return [Boolean] true if the instances are identical
|
@@ -302,6 +320,52 @@ class RTree < RTreeC
|
|
302
320
|
|
303
321
|
alias_method(:==, :eq?)
|
304
322
|
|
323
|
+
# @return [Integer] the dimension of the R-tree
|
324
|
+
def dim
|
325
|
+
super
|
326
|
+
end
|
327
|
+
|
328
|
+
# @return [Integer] the total bytes allocated for the instance
|
329
|
+
# @note This method traverses the entire tree summing the
|
330
|
+
# contributions for each node (rather than maintaining a
|
331
|
+
# running count). Performance-minded users may wish to
|
332
|
+
# cache this value (invalidating the cache when calling
|
333
|
+
# {#add_rect} of course).
|
334
|
+
def size
|
335
|
+
super
|
336
|
+
end
|
337
|
+
|
338
|
+
# @return [Integer] the bytes in a page of memory
|
339
|
+
def page_size
|
340
|
+
super
|
341
|
+
end
|
342
|
+
|
343
|
+
# @return [Integer] the size in bytes of a node
|
344
|
+
def node_size
|
345
|
+
super
|
346
|
+
end
|
347
|
+
|
348
|
+
# @return [Integer] the size in bytes of a rectangle
|
349
|
+
def rect_size
|
350
|
+
super
|
351
|
+
end
|
352
|
+
|
353
|
+
# @return [Integer] the size in bytes of a branch
|
354
|
+
def branch_size
|
355
|
+
super
|
356
|
+
end
|
357
|
+
|
358
|
+
# @return [Integer] the number of branches from each node
|
359
|
+
def branching_factor
|
360
|
+
super
|
361
|
+
end
|
362
|
+
|
363
|
+
# @return [Float] the volume of the unit sphere in the R-tree's
|
364
|
+
# dimension
|
365
|
+
def unit_sphere_volume
|
366
|
+
super
|
367
|
+
end
|
368
|
+
|
305
369
|
private
|
306
370
|
|
307
371
|
attr_reader :split, :node_page
|
@@ -334,6 +398,7 @@ class RTree < RTreeC
|
|
334
398
|
result
|
335
399
|
end
|
336
400
|
|
401
|
+
|
337
402
|
end
|
338
403
|
|
339
404
|
require 'rtree/rtree'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: librtree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- J.J. Green
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -95,8 +95,8 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '1'
|
97
97
|
description: |
|
98
|
-
A Ruby extension
|
99
|
-
|
98
|
+
A Ruby extension implementing the R-tree spatial-index of
|
99
|
+
Guttman-Green.
|
100
100
|
email: j.j.green@gmx.co.uk
|
101
101
|
executables: []
|
102
102
|
extensions:
|
@@ -119,14 +119,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
119
|
requirements:
|
120
120
|
- - ">="
|
121
121
|
- !ruby/object:Gem::Version
|
122
|
-
version: '0'
|
122
|
+
version: '2.0'
|
123
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
124
|
requirements:
|
125
125
|
- - ">="
|
126
126
|
- !ruby/object:Gem::Version
|
127
127
|
version: '0'
|
128
128
|
requirements:
|
129
|
-
- The librtree library
|
129
|
+
- The librtree library (1.0.6 or later)
|
130
130
|
rubygems_version: 3.1.2
|
131
131
|
signing_key:
|
132
132
|
specification_version: 4
|