librtree 0.8.0 → 0.8.5
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 +134 -71
- data/lib/rtree.rb +79 -6
- 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: c9abe4061328dd6a2b8b9f1c00a38f76332a0f0a188af7a5d3e6f1125eab346e
|
4
|
+
data.tar.gz: 4029ed06803576cc76ec7bd8d3d1eb9a2d628da9fd982d04e80b643177fce244
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6b7005f8ec37a45ff8ee894de5642eb969a26af72ad9fa330aeeae1c746447d786b309301e84116de595bed40f70bef8683fbd9a969b2b9c2cabb32e5c4d374
|
7
|
+
data.tar.gz: c4c6641e2cdfd9f14f21b50047fe2f304ab1446eb643a0f6cd3acd594fbc37469cf71c78434daa82b759bdb2741a1f887add7809d72c7bbc3f39886aee3ecc9b
|
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,6 +408,17 @@ 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);
|
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
|
@@ -7,6 +7,12 @@ class RTreeC ; end
|
|
7
7
|
# {http://soliton.vm.bytemark.co.uk/pub/jjg/en/code/librtree librtree}
|
8
8
|
# implementing the R-tree spatial index of Guttman-Green.
|
9
9
|
#
|
10
|
+
# Use
|
11
|
+
#
|
12
|
+
# require 'rtree'
|
13
|
+
#
|
14
|
+
# to make the {RTree} class available.
|
15
|
+
#
|
10
16
|
# Given a set or rectangles (or higher dimensional cuboids) and their
|
11
17
|
# associated ids, one can build an {RTree} using the {.csv_read} class
|
12
18
|
# method or repeated calls to the {#add_rect} instance method. The
|
@@ -43,7 +49,7 @@ class RTreeC ; end
|
|
43
49
|
# it as payload. In particular, the value may be non-unique and may be zero.
|
44
50
|
# One should note that the id type used internally by the library is
|
45
51
|
# determined at compile-time (with the RTREE_ID_TYPE variable) and by
|
46
|
-
# default this is a
|
52
|
+
# default this is a 64-bit unsigned integer.
|
47
53
|
#
|
48
54
|
class RTree < RTreeC
|
49
55
|
|
@@ -93,6 +99,11 @@ class RTree < RTreeC
|
|
93
99
|
# @param split [:linear, :quadratic] See {#initialize}
|
94
100
|
# @param node_page [Integer] See {#initialize}
|
95
101
|
# @return [RTree] the newly built RTree
|
102
|
+
# @note The CSV file (without header) should have the id in the
|
103
|
+
# first column, then twice as many floats as the dimension.
|
104
|
+
# Extra columns may be present and will be ignored (this
|
105
|
+
# useful feature is the reason that the dimension is a required
|
106
|
+
# argument).
|
96
107
|
def csv_read(io, dim, split: :quadratic, node_page: 0)
|
97
108
|
flags = split_flag(split) | node_page_flag(node_page)
|
98
109
|
super(io, dim, flags)
|
@@ -109,6 +120,21 @@ class RTree < RTreeC
|
|
109
120
|
end
|
110
121
|
end
|
111
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
|
+
|
112
138
|
# @!visibility private
|
113
139
|
def split_flag(split)
|
114
140
|
case split
|
@@ -222,7 +248,7 @@ class RTree < RTreeC
|
|
222
248
|
# is much faster than rebuilding the R-tree; in this Ruby interface
|
223
249
|
# the callback must convert C floats to Ruby, yield them to the
|
224
250
|
# block and then convert the returned Ruby Floats to C; so we would
|
225
|
-
# expect that it loses much of its
|
251
|
+
# expect that it loses much of its competitive advantage when
|
226
252
|
# compared to an R-tree rebuild.
|
227
253
|
def update!
|
228
254
|
super
|
@@ -241,7 +267,7 @@ class RTree < RTreeC
|
|
241
267
|
end
|
242
268
|
|
243
269
|
# Serialise to JSON stream
|
244
|
-
# @param io [IO] a
|
270
|
+
# @param io [IO] a writable stream
|
245
271
|
# @return [self]
|
246
272
|
# @see .json_read
|
247
273
|
# @example Write to file
|
@@ -251,7 +277,7 @@ class RTree < RTreeC
|
|
251
277
|
end
|
252
278
|
|
253
279
|
# Serialise to BSRT (binary serialised R-tree) stream
|
254
|
-
# @param io [IO] a
|
280
|
+
# @param io [IO] a writable stream
|
255
281
|
# @return [self]
|
256
282
|
# @see .bsrt_read
|
257
283
|
# @example Write to file
|
@@ -281,7 +307,7 @@ class RTree < RTreeC
|
|
281
307
|
end
|
282
308
|
|
283
309
|
# Equality of RTrees. This is a rather strict equality,
|
284
|
-
# not only must the tree have the same
|
310
|
+
# not only must the tree have the same rectangles, they
|
285
311
|
# must be in the same order. Certainly {#clone} will produce
|
286
312
|
# an instance which is equal in this sense.
|
287
313
|
# @return [Boolean] true if the instances are identical
|
@@ -291,6 +317,52 @@ class RTree < RTreeC
|
|
291
317
|
|
292
318
|
alias_method(:==, :eq?)
|
293
319
|
|
320
|
+
# @return [Integer] the dimension of the R-tree
|
321
|
+
def dim
|
322
|
+
super
|
323
|
+
end
|
324
|
+
|
325
|
+
# @return [Integer] the total bytes allocated for the instance
|
326
|
+
# @note This method traverses the entire tree summing the
|
327
|
+
# contributions for each node (rather than maintaining a
|
328
|
+
# running count). Performance-minded users may wish to
|
329
|
+
# cache this value (invalidating the cache when calling
|
330
|
+
# {#add_rect} of course).
|
331
|
+
def size
|
332
|
+
super
|
333
|
+
end
|
334
|
+
|
335
|
+
# @return [Integer] the bytes in a page of memory
|
336
|
+
def page_size
|
337
|
+
super
|
338
|
+
end
|
339
|
+
|
340
|
+
# @return [Integer] the size in bytes of a node
|
341
|
+
def node_size
|
342
|
+
super
|
343
|
+
end
|
344
|
+
|
345
|
+
# @return [Integer] the size in bytes of a rectangle
|
346
|
+
def rect_size
|
347
|
+
super
|
348
|
+
end
|
349
|
+
|
350
|
+
# @return [Integer] the size in bytes of a branch
|
351
|
+
def branch_size
|
352
|
+
super
|
353
|
+
end
|
354
|
+
|
355
|
+
# @return [Integer] the number of branches from each node
|
356
|
+
def branching_factor
|
357
|
+
super
|
358
|
+
end
|
359
|
+
|
360
|
+
# @return [Float] the volume of the unit sphere in the R-tree's
|
361
|
+
# dimension
|
362
|
+
def unit_sphere_volume
|
363
|
+
super
|
364
|
+
end
|
365
|
+
|
294
366
|
private
|
295
367
|
|
296
368
|
attr_reader :split, :node_page
|
@@ -323,6 +395,7 @@ class RTree < RTreeC
|
|
323
395
|
result
|
324
396
|
end
|
325
397
|
|
398
|
+
|
326
399
|
end
|
327
400
|
|
328
401
|
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.5
|
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-13 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
|
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.5 or later)
|
130
130
|
rubygems_version: 3.1.2
|
131
131
|
signing_key:
|
132
132
|
specification_version: 4
|