shp 0.0.2 → 0.0.3
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 +8 -8
- data/ext/shp/shape_object.cpp +240 -0
- data/ext/shp/shape_object.hpp +19 -0
- data/lib/shp/version.rb +1 -1
- data/spec/shp_spec.rb +93 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjNiZWRkYzhhNjE3OGQ5YWExMWRmNzM1ODg3OTIwM2RmZTAzMWEyYg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MmFkMTAxZGFiMDU3MmU1NTJiMDQ2ZjcwMzE5M2Y0NjhjNGE2MmIwZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NmViNzUwY2FhYjBkZTVmNzMwYzc0NjhhYTY4N2VjMTU4ODY4NTY5N2E0ZGFj
|
10
|
+
NjIxZjE0MDczNmRiODQ4MzkwNzZmMDY3MjQ1N2IzM2EwODUwOGNjM2I4OWRj
|
11
|
+
NzM1NmViMTA5YTI2NWMxZGQ5NjJiOGRkMmY4YjVmOWQyNjA3YmU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MmRkNjhjYmM5MjEyZmVkOTYzM2U5NjVmOWY2MTVjYjUxZGE0YjE3OGFkNzY2
|
14
|
+
OWEwMDIzMjhiNGJmZTEwYzg0ZGRlNjJhZDc4ZjhhZDBlOTJhMmJhY2E2NzE0
|
15
|
+
NTA3NjgzNGMxOTE2NjA1NDY3MmVlNDAxOWI5YTFjNWJlMjk1M2U=
|
data/ext/shp/shape_object.cpp
CHANGED
@@ -46,11 +46,251 @@ VALUE shape_object::destroy(VALUE self)
|
|
46
46
|
return Qnil;
|
47
47
|
}
|
48
48
|
|
49
|
+
VALUE shape_object::get_shape_type(VALUE self)
|
50
|
+
{
|
51
|
+
shape_object *object = unwrap(self);
|
52
|
+
|
53
|
+
CHECK_VALID_HANDLE(object->value());
|
54
|
+
|
55
|
+
return INT2FIX(object->value()->nSHPType);
|
56
|
+
}
|
57
|
+
|
58
|
+
VALUE shape_object::get_shape_id(VALUE self)
|
59
|
+
{
|
60
|
+
shape_object *object = unwrap(self);
|
61
|
+
|
62
|
+
CHECK_VALID_HANDLE(object->value());
|
63
|
+
|
64
|
+
return INT2FIX(object->value()->nShapeId);
|
65
|
+
}
|
66
|
+
|
67
|
+
VALUE shape_object::get_shape_parts(VALUE self)
|
68
|
+
{
|
69
|
+
shape_object *object = unwrap(self);
|
70
|
+
|
71
|
+
CHECK_VALID_HANDLE(object->value());
|
72
|
+
|
73
|
+
return INT2FIX(object->value()->nParts);
|
74
|
+
}
|
75
|
+
|
76
|
+
VALUE shape_object::get_shape_part_starts(VALUE self)
|
77
|
+
{
|
78
|
+
shape_object *object = unwrap(self);
|
79
|
+
|
80
|
+
CHECK_VALID_HANDLE(object->value());
|
81
|
+
|
82
|
+
VALUE result = rb_ary_new();
|
83
|
+
|
84
|
+
SHPObject *obj = object->value();
|
85
|
+
|
86
|
+
if (obj && obj->panPartStart) {
|
87
|
+
for (int i = 0; i < obj->nParts; ++i) {
|
88
|
+
rb_ary_push(result, INT2FIX(obj->panPartStart[i]));
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
return result;
|
93
|
+
}
|
94
|
+
|
95
|
+
VALUE shape_object::get_shape_part_types(VALUE self)
|
96
|
+
{
|
97
|
+
shape_object *object = unwrap(self);
|
98
|
+
|
99
|
+
CHECK_VALID_HANDLE(object->value());
|
100
|
+
|
101
|
+
VALUE result = rb_ary_new();
|
102
|
+
|
103
|
+
SHPObject *obj = object->value();
|
104
|
+
|
105
|
+
if (obj && obj->panPartType) {
|
106
|
+
for (int i = 0; i < obj->nParts; ++i) {
|
107
|
+
rb_ary_push(result, INT2FIX(obj->panPartType[i]));
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
return result;
|
112
|
+
}
|
113
|
+
|
114
|
+
VALUE shape_object::get_vertex_count(VALUE self)
|
115
|
+
{
|
116
|
+
shape_object *object = unwrap(self);
|
117
|
+
|
118
|
+
CHECK_VALID_HANDLE(object->value());
|
119
|
+
|
120
|
+
return INT2FIX(object->value()->nVertices);
|
121
|
+
}
|
122
|
+
|
123
|
+
VALUE shape_object::get_x(VALUE self)
|
124
|
+
{
|
125
|
+
shape_object *object = unwrap(self);
|
126
|
+
|
127
|
+
CHECK_VALID_HANDLE(object->value());
|
128
|
+
|
129
|
+
VALUE result = rb_ary_new();
|
130
|
+
|
131
|
+
SHPObject *obj = object->value();
|
132
|
+
|
133
|
+
if (obj && obj->padfX) {
|
134
|
+
for (int i = 0; i < obj->nVertices; ++i) {
|
135
|
+
rb_ary_push(result, rb_float_new(obj->padfX[i]));
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
return result;
|
140
|
+
}
|
141
|
+
|
142
|
+
VALUE shape_object::get_y(VALUE self)
|
143
|
+
{
|
144
|
+
shape_object *object = unwrap(self);
|
145
|
+
|
146
|
+
CHECK_VALID_HANDLE(object->value());
|
147
|
+
|
148
|
+
VALUE result = rb_ary_new();
|
149
|
+
|
150
|
+
SHPObject *obj = object->value();
|
151
|
+
|
152
|
+
if (obj && obj->padfY) {
|
153
|
+
for (int i = 0; i < obj->nVertices; ++i) {
|
154
|
+
rb_ary_push(result, rb_float_new(obj->padfY[i]));
|
155
|
+
}
|
156
|
+
}
|
157
|
+
|
158
|
+
return result;
|
159
|
+
}
|
160
|
+
|
161
|
+
VALUE shape_object::get_z(VALUE self)
|
162
|
+
{
|
163
|
+
shape_object *object = unwrap(self);
|
164
|
+
|
165
|
+
CHECK_VALID_HANDLE(object->value());
|
166
|
+
|
167
|
+
VALUE result = rb_ary_new();
|
168
|
+
|
169
|
+
SHPObject *obj = object->value();
|
170
|
+
|
171
|
+
if (obj && obj->padfZ) {
|
172
|
+
for (int i = 0; i < obj->nVertices; ++i) {
|
173
|
+
rb_ary_push(result, rb_float_new(obj->padfZ[i]));
|
174
|
+
}
|
175
|
+
}
|
176
|
+
|
177
|
+
return result;
|
178
|
+
}
|
179
|
+
|
180
|
+
VALUE shape_object::get_m(VALUE self)
|
181
|
+
{
|
182
|
+
shape_object *object = unwrap(self);
|
183
|
+
|
184
|
+
CHECK_VALID_HANDLE(object->value());
|
185
|
+
|
186
|
+
VALUE result = rb_ary_new();
|
187
|
+
|
188
|
+
SHPObject *obj = object->value();
|
189
|
+
|
190
|
+
if (obj && obj->padfM) {
|
191
|
+
for (int i = 0; i < obj->nVertices; ++i) {
|
192
|
+
rb_ary_push(result, rb_float_new(obj->padfM[i]));
|
193
|
+
}
|
194
|
+
}
|
195
|
+
|
196
|
+
return result;
|
197
|
+
}
|
198
|
+
|
199
|
+
VALUE shape_object::get_x_min(VALUE self)
|
200
|
+
{
|
201
|
+
shape_object *object = unwrap(self);
|
202
|
+
|
203
|
+
CHECK_VALID_HANDLE(object->value());
|
204
|
+
|
205
|
+
return rb_float_new(object->value()->dfXMin);
|
206
|
+
}
|
207
|
+
|
208
|
+
VALUE shape_object::get_y_min(VALUE self)
|
209
|
+
{
|
210
|
+
shape_object *object = unwrap(self);
|
211
|
+
|
212
|
+
CHECK_VALID_HANDLE(object->value());
|
213
|
+
|
214
|
+
return rb_float_new(object->value()->dfYMin);
|
215
|
+
}
|
216
|
+
|
217
|
+
VALUE shape_object::get_z_min(VALUE self)
|
218
|
+
{
|
219
|
+
shape_object *object = unwrap(self);
|
220
|
+
|
221
|
+
CHECK_VALID_HANDLE(object->value());
|
222
|
+
|
223
|
+
return rb_float_new(object->value()->dfZMin);
|
224
|
+
}
|
225
|
+
|
226
|
+
VALUE shape_object::get_m_min(VALUE self)
|
227
|
+
{
|
228
|
+
shape_object *object = unwrap(self);
|
229
|
+
|
230
|
+
CHECK_VALID_HANDLE(object->value());
|
231
|
+
|
232
|
+
return rb_float_new(object->value()->dfMMin);
|
233
|
+
}
|
234
|
+
|
235
|
+
VALUE shape_object::get_x_max(VALUE self)
|
236
|
+
{
|
237
|
+
shape_object *object = unwrap(self);
|
238
|
+
|
239
|
+
CHECK_VALID_HANDLE(object->value());
|
240
|
+
|
241
|
+
return rb_float_new(object->value()->dfXMax);
|
242
|
+
}
|
243
|
+
|
244
|
+
VALUE shape_object::get_y_max(VALUE self)
|
245
|
+
{
|
246
|
+
shape_object *object = unwrap(self);
|
247
|
+
|
248
|
+
CHECK_VALID_HANDLE(object->value());
|
249
|
+
|
250
|
+
return rb_float_new(object->value()->dfYMax);
|
251
|
+
}
|
252
|
+
|
253
|
+
VALUE shape_object::get_z_max(VALUE self)
|
254
|
+
{
|
255
|
+
shape_object *object = unwrap(self);
|
256
|
+
|
257
|
+
CHECK_VALID_HANDLE(object->value());
|
258
|
+
|
259
|
+
return rb_float_new(object->value()->dfZMax);
|
260
|
+
}
|
261
|
+
|
262
|
+
VALUE shape_object::get_m_max(VALUE self)
|
263
|
+
{
|
264
|
+
shape_object *object = unwrap(self);
|
265
|
+
|
266
|
+
CHECK_VALID_HANDLE(object->value());
|
267
|
+
|
268
|
+
return rb_float_new(object->value()->dfMMax);
|
269
|
+
}
|
270
|
+
|
49
271
|
void shape_object::define(VALUE module)
|
50
272
|
{
|
51
273
|
shape_object::_klass = rb_define_class_under(module, "ShapeObject", rb_cObject);
|
52
274
|
base::define(shape_object::_klass, false);
|
53
275
|
rb_define_method(shape_object::_klass, "compute_extents", SHP_METHOD(shape_object::compute_extents), 0);
|
276
|
+
rb_define_method(shape_object::_klass, "get_shape_type", SHP_METHOD(shape_object::get_shape_type), 0);
|
277
|
+
rb_define_method(shape_object::_klass, "get_shape_id", SHP_METHOD(shape_object::get_shape_id), 0);
|
278
|
+
rb_define_method(shape_object::_klass, "get_shape_parts", SHP_METHOD(shape_object::get_shape_parts), 0);
|
279
|
+
rb_define_method(shape_object::_klass, "get_shape_part_starts", SHP_METHOD(shape_object::get_shape_part_starts), 0);
|
280
|
+
rb_define_method(shape_object::_klass, "get_shape_part_types", SHP_METHOD(shape_object::get_shape_part_types), 0);
|
281
|
+
rb_define_method(shape_object::_klass, "get_vertex_count", SHP_METHOD(shape_object::get_vertex_count), 0);
|
282
|
+
rb_define_method(shape_object::_klass, "get_x", SHP_METHOD(shape_object::get_x), 0);
|
283
|
+
rb_define_method(shape_object::_klass, "get_y", SHP_METHOD(shape_object::get_y), 0);
|
284
|
+
rb_define_method(shape_object::_klass, "get_z", SHP_METHOD(shape_object::get_z), 0);
|
285
|
+
rb_define_method(shape_object::_klass, "get_m", SHP_METHOD(shape_object::get_m), 0);
|
286
|
+
rb_define_method(shape_object::_klass, "get_x_min", SHP_METHOD(shape_object::get_x_min), 0);
|
287
|
+
rb_define_method(shape_object::_klass, "get_y_min", SHP_METHOD(shape_object::get_y_min), 0);
|
288
|
+
rb_define_method(shape_object::_klass, "get_z_min", SHP_METHOD(shape_object::get_z_min), 0);
|
289
|
+
rb_define_method(shape_object::_klass, "get_m_min", SHP_METHOD(shape_object::get_m_min), 0);
|
290
|
+
rb_define_method(shape_object::_klass, "get_x_max", SHP_METHOD(shape_object::get_x_max), 0);
|
291
|
+
rb_define_method(shape_object::_klass, "get_y_max", SHP_METHOD(shape_object::get_y_max), 0);
|
292
|
+
rb_define_method(shape_object::_klass, "get_z_max", SHP_METHOD(shape_object::get_z_max), 0);
|
293
|
+
rb_define_method(shape_object::_klass, "get_m_max", SHP_METHOD(shape_object::get_m_max), 0);
|
54
294
|
rb_define_method(shape_object::_klass, "destroy", SHP_METHOD(shape_object::destroy), 0);
|
55
295
|
}
|
56
296
|
|
data/ext/shp/shape_object.hpp
CHANGED
@@ -13,6 +13,25 @@ namespace shp {
|
|
13
13
|
static VALUE compute_extents(VALUE self);
|
14
14
|
static VALUE destroy(VALUE self);
|
15
15
|
|
16
|
+
static VALUE get_shape_type(VALUE self);
|
17
|
+
static VALUE get_shape_id(VALUE self);
|
18
|
+
static VALUE get_shape_parts(VALUE self);
|
19
|
+
static VALUE get_shape_part_starts(VALUE self);
|
20
|
+
static VALUE get_shape_part_types(VALUE self);
|
21
|
+
static VALUE get_vertex_count(VALUE self);
|
22
|
+
static VALUE get_x(VALUE self);
|
23
|
+
static VALUE get_y(VALUE self);
|
24
|
+
static VALUE get_z(VALUE self);
|
25
|
+
static VALUE get_m(VALUE self);
|
26
|
+
static VALUE get_x_min(VALUE self);
|
27
|
+
static VALUE get_y_min(VALUE self);
|
28
|
+
static VALUE get_z_min(VALUE self);
|
29
|
+
static VALUE get_m_min(VALUE self);
|
30
|
+
static VALUE get_x_max(VALUE self);
|
31
|
+
static VALUE get_y_max(VALUE self);
|
32
|
+
static VALUE get_z_max(VALUE self);
|
33
|
+
static VALUE get_m_max(VALUE self);
|
34
|
+
|
16
35
|
virtual VALUE klass();
|
17
36
|
static VALUE _klass;
|
18
37
|
|
data/lib/shp/version.rb
CHANGED
data/spec/shp_spec.rb
CHANGED
@@ -127,6 +127,98 @@ describe "SHP" do
|
|
127
127
|
lambda { file.close }.should_not raise_error
|
128
128
|
lambda { file.get_info }.should raise_error
|
129
129
|
end
|
130
|
-
end
|
131
130
|
|
131
|
+
context 'shp' do
|
132
|
+
before(:each) do
|
133
|
+
sni_office = [ [ -82.72932529449463, 27.93789618055838 ],
|
134
|
+
[ -82.72932529449463, 27.93768765436987 ],
|
135
|
+
[ -82.72909998893738, 27.93767817589719 ],
|
136
|
+
[ -82.72911071777344, 27.93719003343022 ],
|
137
|
+
[ -82.72869229316710, 27.93717581565543 ],
|
138
|
+
[ -82.72868156433105, 27.93741277832466 ],
|
139
|
+
[ -82.72886931896210, 27.93741751757274 ],
|
140
|
+
[ -82.72886931896210, 27.93788670210399 ],
|
141
|
+
[ -82.72932529449463, 27.93789618055838 ] ]
|
142
|
+
|
143
|
+
x_values = sni_office.map { |v| v[0] }
|
144
|
+
y_values = sni_office.map { |v| v[1] }
|
145
|
+
|
146
|
+
@shp = SHP::Shapefile.create('testfile_polygons', 5)
|
147
|
+
@shape = SHP::Shapefile.create_simple_object(5, x_values.count, x_values, y_values, nil)
|
148
|
+
@shp.write_object(-1, @shape)
|
149
|
+
@obj = @shp.read_object(0)
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'should return the shape type' do
|
153
|
+
@obj.get_shape_type.should eq(5)
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'should return the shape id' do
|
157
|
+
@obj.get_shape_id.should eq(0)
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'should return the shape part count' do
|
161
|
+
@obj.get_shape_parts.should eq(1)
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'should return the shape part start offsets' do
|
165
|
+
@obj.get_shape_part_starts.should eq([0])
|
166
|
+
end
|
167
|
+
|
168
|
+
it 'should return the shape part types' do
|
169
|
+
@obj.get_shape_part_types.should eq([5]) # [SHPP_RING]
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'should return the vertex count' do
|
173
|
+
@obj.get_vertex_count.should eq(9)
|
174
|
+
end
|
175
|
+
|
176
|
+
it 'should return the x values' do
|
177
|
+
@obj.get_x.should eq([-82.72932529449463, -82.72932529449463, -82.72909998893738, -82.72911071777344, -82.7286922931671, -82.72868156433105, -82.7288693189621, -82.7288693189621, -82.72932529449463])
|
178
|
+
end
|
179
|
+
|
180
|
+
it 'should return the y values' do
|
181
|
+
@obj.get_y.should eq([27.93789618055838, 27.93768765436987, 27.93767817589719, 27.93719003343022, 27.93717581565543, 27.93741277832466, 27.93741751757274, 27.93788670210399, 27.93789618055838])
|
182
|
+
end
|
183
|
+
|
184
|
+
it 'should return the z values' do
|
185
|
+
@obj.get_z.should eq([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
|
186
|
+
end
|
132
187
|
|
188
|
+
it 'should return the m values' do
|
189
|
+
@obj.get_z.should eq([0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
|
190
|
+
end
|
191
|
+
|
192
|
+
it 'should return the x min' do
|
193
|
+
@obj.get_x_min.should eq(-82.72932529449463)
|
194
|
+
end
|
195
|
+
|
196
|
+
it 'should return the y min' do
|
197
|
+
@obj.get_y_min.should eq(27.93717581565543)
|
198
|
+
end
|
199
|
+
|
200
|
+
it 'should return the z min' do
|
201
|
+
@obj.get_z_min.should eq(0)
|
202
|
+
end
|
203
|
+
|
204
|
+
it 'should return the m min' do
|
205
|
+
@obj.get_m_min.should eq(0)
|
206
|
+
end
|
207
|
+
|
208
|
+
it 'should return the x max' do
|
209
|
+
@obj.get_x_max.should eq(-82.72868156433105)
|
210
|
+
end
|
211
|
+
|
212
|
+
it 'should return the y max' do
|
213
|
+
@obj.get_y_max.should eq(27.93789618055838)
|
214
|
+
end
|
215
|
+
|
216
|
+
it 'should return the z max' do
|
217
|
+
@obj.get_z_max.should eq(0)
|
218
|
+
end
|
219
|
+
|
220
|
+
it 'should return the m max' do
|
221
|
+
@obj.get_m_max.should eq(0)
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zac McCormick
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|