georuby 2.3.0 → 2.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -9
- data/Rakefile +13 -14
- data/lib/geo_ruby/ewk.rb +2 -0
- data/lib/geo_ruby/{simple_features → ewk}/ewkb_parser.rb +206 -218
- data/lib/geo_ruby/ewk/ewkt_parser.rb +321 -0
- data/lib/geo_ruby/geojson.rb +27 -32
- data/lib/geo_ruby/georss.rb +88 -66
- data/lib/geo_ruby/gpx.rb +113 -1
- data/lib/geo_ruby/kml.rb +43 -31
- data/lib/geo_ruby/shp.rb +1 -0
- data/lib/geo_ruby/shp4r/dbf.rb +7 -3
- data/lib/geo_ruby/shp4r/shp.rb +297 -284
- data/lib/geo_ruby/simple_features.rb +2 -6
- data/lib/geo_ruby/simple_features/circle.rb +15 -13
- data/lib/geo_ruby/simple_features/envelope.rb +84 -77
- data/lib/geo_ruby/simple_features/geometry.rb +89 -69
- data/lib/geo_ruby/simple_features/geometry_collection.rb +46 -43
- data/lib/geo_ruby/simple_features/geometry_factory.rb +50 -47
- data/lib/geo_ruby/simple_features/helper.rb +14 -14
- data/lib/geo_ruby/simple_features/line_string.rb +94 -97
- data/lib/geo_ruby/simple_features/linear_ring.rb +4 -9
- data/lib/geo_ruby/simple_features/multi_line_string.rb +18 -21
- data/lib/geo_ruby/simple_features/multi_point.rb +18 -20
- data/lib/geo_ruby/simple_features/multi_polygon.rb +19 -25
- data/lib/geo_ruby/simple_features/point.rb +134 -128
- data/lib/geo_ruby/simple_features/polygon.rb +60 -59
- data/lib/geo_ruby/version.rb +1 -1
- data/spec/data/geojson/feature.json +9 -0
- data/spec/data/geojson/feature_collection.json +3 -4
- data/spec/geo_ruby/{simple_features → ewk}/ewkb_parser_spec.rb +56 -57
- data/spec/geo_ruby/{simple_features → ewk}/ewkt_parser_spec.rb +62 -63
- data/spec/geo_ruby/geojson_spec.rb +34 -17
- data/spec/geo_ruby/georss_spec.rb +76 -64
- data/spec/geo_ruby/{gpx4r/gpx_spec.rb → gpx_spec.rb} +25 -25
- data/spec/geo_ruby/kml_spec.rb +40 -36
- data/spec/geo_ruby/shp4r/shp_spec.rb +51 -51
- data/spec/geo_ruby/simple_features/circle_spec.rb +2 -2
- data/spec/geo_ruby/simple_features/envelope_spec.rb +8 -8
- data/spec/geo_ruby/simple_features/geometry_collection_spec.rb +26 -26
- data/spec/geo_ruby/simple_features/geometry_factory_spec.rb +5 -5
- data/spec/geo_ruby/simple_features/geometry_spec.rb +8 -8
- data/spec/geo_ruby/simple_features/line_string_spec.rb +102 -102
- data/spec/geo_ruby/simple_features/linear_ring_spec.rb +7 -7
- data/spec/geo_ruby/simple_features/multi_line_string_spec.rb +20 -20
- data/spec/geo_ruby/simple_features/multi_point_spec.rb +16 -16
- data/spec/geo_ruby/simple_features/multi_polygon_spec.rb +19 -19
- data/spec/geo_ruby/simple_features/point_spec.rb +180 -174
- data/spec/geo_ruby/simple_features/polygon_spec.rb +55 -56
- data/spec/geo_ruby_spec.rb +4 -4
- data/spec/spec_helper.rb +19 -13
- metadata +10 -9
- data/lib/geo_ruby/gpx4r/gpx.rb +0 -118
- data/lib/geo_ruby/simple_features/ewkt_parser.rb +0 -336
@@ -1,31 +1,30 @@
|
|
1
1
|
require 'geo_ruby/simple_features/geometry'
|
2
2
|
|
3
3
|
module GeoRuby
|
4
|
-
|
5
4
|
module SimpleFeatures
|
6
|
-
|
7
5
|
# Represents a polygon as an array of linear rings (see LinearRing).
|
8
|
-
# No check is performed regarding the validity of the geometries
|
6
|
+
# No check is performed regarding the validity of the geometries
|
7
|
+
# forming the polygon.
|
9
8
|
class Polygon < Geometry
|
10
|
-
#the list of rings forming the polygon
|
9
|
+
# the list of rings forming the polygon
|
11
10
|
attr_reader :rings
|
12
11
|
|
13
|
-
def initialize(srid = DEFAULT_SRID,with_z=false,with_m=false)
|
14
|
-
super(srid,with_z,with_m)
|
12
|
+
def initialize(srid = DEFAULT_SRID, with_z = false, with_m = false)
|
13
|
+
super(srid, with_z, with_m)
|
15
14
|
@rings = []
|
16
15
|
end
|
17
16
|
|
18
|
-
#Delegate the unknown methods to the rings array
|
19
|
-
def method_missing(method_name
|
20
|
-
@rings.send(method_name
|
17
|
+
# Delegate the unknown methods to the rings array
|
18
|
+
def method_missing(method_name, *args, &b)
|
19
|
+
@rings.send(method_name, *args, &b)
|
21
20
|
end
|
22
21
|
|
23
|
-
#Bounding box in 2D/3D. Returns an array of 2 points
|
22
|
+
# Bounding box in 2D/3D. Returns an array of 2 points
|
24
23
|
def bounding_box
|
25
|
-
|
24
|
+
if !with_z
|
26
25
|
@rings[0].bounding_box
|
27
26
|
else
|
28
|
-
result = @rings[0].bounding_box #valid for x and y
|
27
|
+
result = @rings[0].bounding_box # valid for x and y
|
29
28
|
max_z, min_z = result[1].z, result[0].z
|
30
29
|
1.upto(size - 1) do |index|
|
31
30
|
bbox = @rings[index].bounding_box
|
@@ -47,47 +46,50 @@ module GeoRuby
|
|
47
46
|
max_m = lrmr[1] if lrmr[1] > max_m
|
48
47
|
min_m = lrmr[0] if lrmr[0] < min_m
|
49
48
|
end
|
50
|
-
[min_m,max_m]
|
49
|
+
[min_m, max_m]
|
51
50
|
else
|
52
|
-
[0,0]
|
51
|
+
[0, 0]
|
53
52
|
end
|
54
53
|
end
|
55
54
|
|
56
|
-
#tests for other equality. The SRID is not taken into account.
|
55
|
+
# tests for other equality. The SRID is not taken into account.
|
57
56
|
def ==(other_polygon)
|
58
|
-
if other_polygon.class != self.class
|
59
|
-
|
57
|
+
if other_polygon.class != self.class ||
|
58
|
+
length != other_polygon.length
|
60
59
|
false
|
61
60
|
else
|
62
|
-
index=0
|
63
|
-
while index<length
|
61
|
+
index = 0
|
62
|
+
while index < length
|
64
63
|
return false if self[index] != other_polygon[index]
|
65
|
-
index+=1
|
64
|
+
index += 1
|
66
65
|
end
|
67
66
|
true
|
68
67
|
end
|
69
68
|
end
|
70
69
|
|
71
|
-
#
|
72
|
-
|
73
|
-
|
74
|
-
|
70
|
+
# Binary representation of a polygon.
|
71
|
+
# Without the headers neccessary for a valid WKB string
|
72
|
+
def binary_representation(allow_z = true, allow_m = true)
|
73
|
+
rep = [length].pack('V')
|
74
|
+
each { |linear_ring| rep << linear_ring.binary_representation(allow_z, allow_m) }
|
75
75
|
rep
|
76
76
|
end
|
77
77
|
|
78
|
-
#WKB geometry type
|
78
|
+
# WKB geometry type
|
79
79
|
def binary_geometry_type
|
80
80
|
3
|
81
81
|
end
|
82
82
|
|
83
|
-
#Text representation of a polygon
|
84
|
-
def text_representation(allow_z=true,allow_m=true)
|
85
|
-
@rings.
|
83
|
+
# Text representation of a polygon
|
84
|
+
def text_representation(allow_z = true, allow_m = true)
|
85
|
+
@rings.map do |line_string|
|
86
|
+
'(' + line_string.text_representation(allow_z, allow_m) + ')'
|
87
|
+
end.join(',')
|
86
88
|
end
|
87
89
|
|
88
|
-
#WKT geometry type
|
90
|
+
# WKT geometry type
|
89
91
|
def text_geometry_type
|
90
|
-
|
92
|
+
'POLYGON'
|
91
93
|
end
|
92
94
|
|
93
95
|
# Contains a point?
|
@@ -95,38 +97,39 @@ module GeoRuby
|
|
95
97
|
!@rings.select { |lr| lr.contains_point? point }.empty?
|
96
98
|
end
|
97
99
|
|
98
|
-
#georss simple representation : outputs only the outer ring
|
100
|
+
# georss simple representation : outputs only the outer ring
|
99
101
|
def georss_simple_representation(options)
|
100
|
-
georss_ns = options[:georss_ns] ||
|
102
|
+
georss_ns = options[:georss_ns] || 'georss'
|
101
103
|
geom_attr = options[:geom_attr]
|
102
104
|
"<#{georss_ns}:polygon#{geom_attr}>" + self[0].georss_poslist + "</#{georss_ns}:polygon>\n"
|
103
105
|
end
|
104
106
|
|
105
|
-
#georss w3c representation : outputs the first point of the outer ring
|
107
|
+
# georss w3c representation : outputs the first point of the outer ring
|
106
108
|
def georss_w3cgeo_representation(options)
|
107
|
-
w3cgeo_ns = options[:w3cgeo_ns] ||
|
109
|
+
w3cgeo_ns = options[:w3cgeo_ns] || 'geo'
|
108
110
|
|
109
111
|
"<#{w3cgeo_ns}:lat>#{self[0][0].y}</#{w3cgeo_ns}:lat>\n<#{w3cgeo_ns}:long>#{self[0][0].x}</#{w3cgeo_ns}:long>\n"
|
110
112
|
end
|
111
|
-
|
113
|
+
|
114
|
+
# georss gml representation
|
112
115
|
def georss_gml_representation(options)
|
113
|
-
georss_ns = options[:georss_ns] ||
|
114
|
-
gml_ns = options[:gml_ns] ||
|
116
|
+
georss_ns = options[:georss_ns] || 'georss'
|
117
|
+
gml_ns = options[:gml_ns] || 'gml'
|
115
118
|
|
116
119
|
result = "<#{georss_ns}:where>\n<#{gml_ns}:Polygon>\n<#{gml_ns}:exterior>\n<#{gml_ns}:LinearRing>\n<#{gml_ns}:posList>\n" + self[0].georss_poslist + "\n</#{gml_ns}:posList>\n</#{gml_ns}:LinearRing>\n</#{gml_ns}:exterior>\n</#{gml_ns}:Polygon>\n</#{georss_ns}:where>\n"
|
117
120
|
end
|
118
121
|
|
119
|
-
#outputs the geometry in kml format : options are <tt>:id</tt>, <tt>:tesselate</tt>, <tt>:extrude</tt>,
|
120
|
-
|
121
|
-
#it won't be used by GE anyway: clampToGround is the default)
|
122
|
+
# outputs the geometry in kml format : options are <tt>:id</tt>, <tt>:tesselate</tt>, <tt>:extrude</tt>,
|
123
|
+
# <tt>:altitude_mode</tt>. If the altitude_mode option is not present, the Z (if present) will not be output (since
|
124
|
+
# it won't be used by GE anyway: clampToGround is the default)
|
122
125
|
def kml_representation(options = {})
|
123
126
|
result = "<Polygon#{options[:id_attr]}>\n"
|
124
127
|
result += options[:geom_data] if options[:geom_data]
|
125
128
|
rings.each_with_index do |ring, i|
|
126
129
|
if i == 0
|
127
|
-
boundary =
|
130
|
+
boundary = 'outerBoundaryIs'
|
128
131
|
else
|
129
|
-
boundary =
|
132
|
+
boundary = 'innerBoundaryIs'
|
130
133
|
end
|
131
134
|
result += "<#{boundary}><LinearRing><coordinates>\n"
|
132
135
|
result += ring.kml_poslist(options)
|
@@ -136,36 +139,34 @@ module GeoRuby
|
|
136
139
|
end
|
137
140
|
|
138
141
|
def to_coordinates
|
139
|
-
rings.map
|
142
|
+
rings.map(&:to_coordinates)
|
140
143
|
end
|
141
144
|
|
142
|
-
def as_json(
|
143
|
-
{:
|
145
|
+
def as_json(_options = {})
|
146
|
+
{ type: 'Polygon', coordinates: to_coordinates }
|
144
147
|
end
|
145
148
|
|
146
|
-
#creates a new polygon. Accepts an array of linear strings as argument
|
147
|
-
def self.from_linear_rings(linear_rings,srid = DEFAULT_SRID,with_z=false,with_m=false)
|
148
|
-
polygon = new(srid,with_z,with_m)
|
149
|
+
# creates a new polygon. Accepts an array of linear strings as argument
|
150
|
+
def self.from_linear_rings(linear_rings, srid = DEFAULT_SRID, with_z = false, with_m = false)
|
151
|
+
polygon = new(srid, with_z, with_m)
|
149
152
|
polygon.concat(linear_rings)
|
150
153
|
polygon
|
151
154
|
end
|
152
155
|
|
153
|
-
#creates a new polygon. Accepts a sequence of points as argument
|
154
|
-
|
155
|
-
|
156
|
-
polygon
|
156
|
+
# creates a new polygon. Accepts a sequence of points as argument:
|
157
|
+
# ((x,y)....(x,y)),((x,y).....(x,y))
|
158
|
+
def self.from_coordinates(point_sequences, srid = DEFAULT_SRID, z = false, m = false)
|
159
|
+
polygon = new(srid, z, m)
|
160
|
+
polygon.concat(point_sequences.map { |points| LinearRing.from_coordinates(points, srid, z, m) })
|
157
161
|
polygon
|
158
162
|
end
|
159
163
|
|
160
|
-
#creates a new polygon from a list of Points (pt1....ptn),(pti....ptj)
|
161
|
-
def self.from_points(point_sequences, srid=DEFAULT_SRID,
|
162
|
-
polygon = new(srid,
|
163
|
-
polygon.concat(
|
164
|
+
# creates a new polygon from a list of Points (pt1....ptn),(pti....ptj)
|
165
|
+
def self.from_points(point_sequences, srid = DEFAULT_SRID, z = false, m = false)
|
166
|
+
polygon = new(srid, z, m)
|
167
|
+
polygon.concat(point_sequences.map { |points| LinearRing.from_points(points, srid, z, m) })
|
164
168
|
polygon
|
165
169
|
end
|
166
|
-
|
167
170
|
end
|
168
|
-
|
169
171
|
end
|
170
|
-
|
171
172
|
end
|
data/lib/geo_ruby/version.rb
CHANGED
@@ -1,158 +1,157 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
-
|
2
|
+
# rubocop:disable Metrics/LineLength
|
3
3
|
describe GeoRuby::SimpleFeatures::EWKBParser do
|
4
4
|
|
5
5
|
before(:each) do
|
6
|
-
@factory = GeoRuby::SimpleFeatures::GeometryFactory
|
7
|
-
@hex_ewkb_parser = GeoRuby::SimpleFeatures::HexEWKBParser
|
6
|
+
@factory = GeoRuby::SimpleFeatures::GeometryFactory.new
|
7
|
+
@hex_ewkb_parser = GeoRuby::SimpleFeatures::HexEWKBParser.new(@factory)
|
8
8
|
end
|
9
9
|
|
10
|
-
it
|
11
|
-
@hex_ewkb_parser.parse(
|
10
|
+
it 'test_point2d' do
|
11
|
+
@hex_ewkb_parser.parse('01010000207B000000CDCCCCCCCCCC28406666666666A64640')
|
12
12
|
point = @factory.geometry
|
13
13
|
expect(point).to be_instance_of GeoRuby::SimpleFeatures::Point
|
14
14
|
expect(point).to eq(GeoRuby::SimpleFeatures::Point.from_x_y(12.4, 45.3, 123))
|
15
15
|
end
|
16
16
|
|
17
|
-
it
|
18
|
-
@hex_ewkb_parser.parse(
|
17
|
+
it 'test_point2d_BigEndian' do
|
18
|
+
@hex_ewkb_parser.parse('00000000014013A035BD512EC7404A3060C38F3669')
|
19
19
|
point = @factory.geometry
|
20
20
|
expect(point).to be_instance_of GeoRuby::SimpleFeatures::Point
|
21
21
|
expect(point).to eq(GeoRuby::SimpleFeatures::Point.from_x_y(4.906455, 52.377953))
|
22
22
|
end
|
23
23
|
|
24
|
-
it
|
25
|
-
@hex_ewkb_parser.parse(
|
24
|
+
it 'test_point3dz' do
|
25
|
+
@hex_ewkb_parser.parse('01010000A07B000000CDCCCCCCCCCC28406666666666A646400000000000000CC0')
|
26
26
|
point = @factory.geometry
|
27
27
|
expect(point).to be_instance_of GeoRuby::SimpleFeatures::Point
|
28
28
|
expect(point).to eq(GeoRuby::SimpleFeatures::Point.from_x_y_z(12.4, 45.3, -3.5, 123))
|
29
29
|
end
|
30
30
|
|
31
|
-
it
|
32
|
-
@hex_ewkb_parser.parse(
|
31
|
+
it 'test_point4d' do
|
32
|
+
@hex_ewkb_parser.parse('01010000E07B000000CDCCCCCCCCCC28406666666666A646400000000000000CC00000000000002E40')
|
33
33
|
point = @factory.geometry
|
34
34
|
expect(point).to be_instance_of GeoRuby::SimpleFeatures::Point
|
35
35
|
expect(point).to eq(GeoRuby::SimpleFeatures::Point.from_x_y_z_m(12.4, 45.3, -3.5, 15, 123))
|
36
36
|
end
|
37
37
|
|
38
|
-
it
|
39
|
-
@hex_ewkb_parser.parse(
|
38
|
+
it 'test_line_string' do
|
39
|
+
@hex_ewkb_parser.parse('01020000200001000002000000CDCCCCCCCCCC28406666666666A646C03333333333B34640CDCCCCCCCCCC4440')
|
40
40
|
line_string = @factory.geometry
|
41
41
|
expect(line_string).to be_instance_of GeoRuby::SimpleFeatures::LineString
|
42
|
-
expect(line_string).to eq(GeoRuby::SimpleFeatures::LineString.from_coordinates([[12.4
|
42
|
+
expect(line_string).to eq(GeoRuby::SimpleFeatures::LineString.from_coordinates([[12.4, -45.3], [45.4, 41.6]], 256))
|
43
43
|
|
44
|
-
@hex_ewkb_parser.parse(
|
44
|
+
@hex_ewkb_parser.parse('01020000A00001000002000000CDCCCCCCCCCC28406666666666A646C06666666666A641403333333333B34640CDCCCCCCCCCC44409A99999999992840')
|
45
45
|
line_string = @factory.geometry
|
46
46
|
expect(line_string).to be_instance_of GeoRuby::SimpleFeatures::LineString
|
47
|
-
expect(line_string).to eq(GeoRuby::SimpleFeatures::LineString.from_coordinates([[12.4
|
47
|
+
expect(line_string).to eq(GeoRuby::SimpleFeatures::LineString.from_coordinates([[12.4, -45.3, 35.3], [45.4, 41.6, 12.3]], 256, true))
|
48
48
|
|
49
|
-
@hex_ewkb_parser.parse(
|
49
|
+
@hex_ewkb_parser.parse('01020000E00001000002000000CDCCCCCCCCCC28406666666666A646C06666666666A64140CDCCCCCCCC8C46403333333333B34640CDCCCCCCCCCC44409A999999999928403D0AD7A3701D4440')
|
50
50
|
line_string = @factory.geometry
|
51
51
|
expect(line_string).to be_instance_of GeoRuby::SimpleFeatures::LineString
|
52
|
-
expect(line_string).to eq(GeoRuby::SimpleFeatures::LineString.from_coordinates([[12.4
|
52
|
+
expect(line_string).to eq(GeoRuby::SimpleFeatures::LineString.from_coordinates([[12.4, -45.3, 35.3, 45.1], [45.4, 41.6, 12.3, 40.23]], 256, true, true))
|
53
53
|
end
|
54
54
|
|
55
|
-
it
|
56
|
-
@hex_ewkb_parser.parse(
|
55
|
+
it 'test_polygon' do
|
56
|
+
@hex_ewkb_parser.parse('0103000020000100000200000005000000000000000000000000000000000000000000000000001040000000000000000000000000000010400000000000001040000000000000000000000000000010400000000000000000000000000000000005000000000000000000F03F000000000000F03F0000000000000840000000000000F03F00000000000008400000000000000840000000000000F03F0000000000000840000000000000F03F000000000000F03F')
|
57
57
|
polygon = @factory.geometry
|
58
58
|
expect(polygon).to be_instance_of GeoRuby::SimpleFeatures::Polygon
|
59
|
-
expect(polygon).to eq(GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0],[4,0],[4,4],[0,4],[0,0]],[[1,1],[3,1],[3,3],[1,3],[1,1]]],256))
|
59
|
+
expect(polygon).to eq(GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0], [4, 0], [4, 4], [0, 4], [0, 0]], [[1, 1], [3, 1], [3, 3], [1, 3], [1, 1]]], 256))
|
60
60
|
|
61
|
-
@hex_ewkb_parser.parse(
|
61
|
+
@hex_ewkb_parser.parse('01030000A000010000020000000500000000000000000000000000000000000000000000000000004000000000000010400000000000000000000000000000004000000000000010400000000000001040000000000000004000000000000000000000000000001040000000000000004000000000000000000000000000000000000000000000004005000000000000000000F03F000000000000F03F00000000000000400000000000000840000000000000F03F0000000000000040000000000000084000000000000008400000000000000040000000000000F03F00000000000008400000000000000040000000000000F03F000000000000F03F0000000000000040')
|
62
62
|
polygon = @factory.geometry
|
63
63
|
expect(polygon).to be_instance_of GeoRuby::SimpleFeatures::Polygon
|
64
|
-
expect(polygon).to eq(GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0,2],[4,0,2],[4,4,2],[0,4,2],[0,0,2]],[[1,1,2],[3,1,2],[3,3,2],[1,3,2],[1,1,2]]],256,true))
|
64
|
+
expect(polygon).to eq(GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0, 2], [4, 0, 2], [4, 4, 2], [0, 4, 2], [0, 0, 2]], [[1, 1, 2], [3, 1, 2], [3, 3, 2], [1, 3, 2], [1, 1, 2]]], 256, true))
|
65
65
|
|
66
|
-
@hex_ewkb_parser.parse(
|
66
|
+
@hex_ewkb_parser.parse('010300006000010000020000000500000000000000000000000000000000000000000000000000004000000000000010400000000000000000000000000000004000000000000010400000000000001040000000000000004000000000000000000000000000001040000000000000004000000000000000000000000000000000000000000000004005000000000000000000F03F000000000000F03F00000000000000400000000000000840000000000000F03F0000000000000040000000000000084000000000000008400000000000000040000000000000F03F00000000000008400000000000000040000000000000F03F000000000000F03F0000000000000040')
|
67
67
|
polygon = @factory.geometry
|
68
68
|
expect(polygon).to be_instance_of GeoRuby::SimpleFeatures::Polygon
|
69
|
-
expect(polygon).to eq(GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0,2],[4,0,2],[4,4,2],[0,4,2],[0,0,2]],[[1,1,2],[3,1,2],[3,3,2],[1,3,2],[1,1,2]]],256,false,true))
|
69
|
+
expect(polygon).to eq(GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0, 2], [4, 0, 2], [4, 4, 2], [0, 4, 2], [0, 0, 2]], [[1, 1, 2], [3, 1, 2], [3, 3, 2], [1, 3, 2], [1, 1, 2]]], 256, false, true))
|
70
70
|
|
71
|
-
@hex_ewkb_parser.parse(
|
71
|
+
@hex_ewkb_parser.parse('01030000E0000100000200000005000000000000000000000000000000000000000000000000000040CDCCCCCCCC8C46C00000000000001040000000000000000000000000000000400000000000001440000000000000104000000000000010400000000000000040AE47E17A14AE1240000000000000000000000000000010400000000000000040713D0AD7A370F53F000000000000000000000000000000000000000000000040CDCCCCCCCC8C46C005000000000000000000F03F000000000000F03F00000000000000409A999999999928400000000000000840000000000000F03F00000000000000400000000000C05E400000000000000840000000000000084000000000000000406666666666662840000000000000F03F000000000000084000000000000000400000000000002840000000000000F03F000000000000F03F00000000000000409A99999999992840')
|
72
72
|
polygon = @factory.geometry
|
73
73
|
expect(polygon).to be_instance_of GeoRuby::SimpleFeatures::Polygon
|
74
|
-
expect(polygon).to eq(GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0,0,2
|
74
|
+
expect(polygon).to eq(GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0, 2, -45.1], [4, 0, 2, 5], [4, 4, 2, 4.67], [0, 4, 2, 1.34], [0, 0, 2, -45.1]], [[1, 1, 2, 12.3], [3, 1, 2, 123], [3, 3, 2, 12.2], [1, 3, 2, 12], [1, 1, 2, 12.3]]], 256, true, true))
|
75
75
|
end
|
76
76
|
|
77
|
-
it
|
78
|
-
@hex_ewkb_parser.parse(
|
77
|
+
it 'test_geometry_collection' do
|
78
|
+
@hex_ewkb_parser.parse('010700002000010000020000000101000000AE47E17A14AE12403333333333B34640010200000002000000CDCCCCCCCCCC16406666666666E628403333333333E350400000000000004B40')
|
79
79
|
geometry_collection = @factory.geometry
|
80
80
|
expect(geometry_collection).to be_instance_of GeoRuby::SimpleFeatures::GeometryCollection
|
81
81
|
|
82
|
-
expect(geometry_collection).to eq(GeoRuby::SimpleFeatures::GeometryCollection.from_geometries([GeoRuby::SimpleFeatures::Point.from_x_y(4.67,45.4,256),GeoRuby::SimpleFeatures::LineString.from_coordinates([[5.7,12.45],[67.55,54]],256)],256))
|
82
|
+
expect(geometry_collection).to eq(GeoRuby::SimpleFeatures::GeometryCollection.from_geometries([GeoRuby::SimpleFeatures::Point.from_x_y(4.67, 45.4, 256), GeoRuby::SimpleFeatures::LineString.from_coordinates([[5.7, 12.45], [67.55, 54]], 256)], 256))
|
83
83
|
expect(geometry_collection[0].srid).to eql(256)
|
84
84
|
|
85
|
-
@hex_ewkb_parser.parse(
|
85
|
+
@hex_ewkb_parser.parse('01070000E0000100000200000001010000C0AE47E17A14AE12403333333333B34640F6285C8FC2D54640666666666666024001020000C002000000CDCCCCCCCCCC16406666666666E628403D0AD7A3703D124033333333339358403333333333E350400000000000004B4066666666666628403333333333330B40')
|
86
86
|
geometry_collection = @factory.geometry
|
87
87
|
expect(geometry_collection).to be_instance_of GeoRuby::SimpleFeatures::GeometryCollection
|
88
|
-
expect(geometry_collection).to eq(GeoRuby::SimpleFeatures::GeometryCollection.from_geometries([GeoRuby::SimpleFeatures::Point.from_x_y_z_m(4.67,45.4,45.67,2.3,256),GeoRuby::SimpleFeatures::LineString.from_coordinates([[5.7,12.45,4.56,98.3],[67.55,54,12.2,3.4]],256,true, true)],256,true, true))
|
88
|
+
expect(geometry_collection).to eq(GeoRuby::SimpleFeatures::GeometryCollection.from_geometries([GeoRuby::SimpleFeatures::Point.from_x_y_z_m(4.67, 45.4, 45.67, 2.3, 256), GeoRuby::SimpleFeatures::LineString.from_coordinates([[5.7, 12.45, 4.56, 98.3], [67.55, 54, 12.2, 3.4]], 256, true, true)], 256, true, true))
|
89
89
|
expect(geometry_collection[0].srid).to eql(256)
|
90
90
|
end
|
91
91
|
|
92
|
-
it
|
93
|
-
@hex_ewkb_parser.parse(
|
92
|
+
it 'test_multi_point' do
|
93
|
+
@hex_ewkb_parser.parse('0104000020BC010000030000000101000000CDCCCCCCCCCC28403333333333D35EC0010100000066666666664650C09A99999999D95E4001010000001F97DD388EE35E400000000000C05E40')
|
94
94
|
multi_point = @factory.geometry
|
95
95
|
expect(multi_point).to be_instance_of GeoRuby::SimpleFeatures::MultiPoint
|
96
|
-
expect(multi_point).to eq(GeoRuby::SimpleFeatures::MultiPoint.from_coordinates([[12.4
|
96
|
+
expect(multi_point).to eq(GeoRuby::SimpleFeatures::MultiPoint.from_coordinates([[12.4, -123.3], [-65.1, 123.4], [123.55555555, 123]], 444))
|
97
97
|
expect(multi_point.srid).to eql(444)
|
98
98
|
expect(multi_point[0].srid).to eql(444)
|
99
99
|
|
100
|
-
@hex_ewkb_parser.parse(
|
100
|
+
@hex_ewkb_parser.parse('01040000A0BC010000030000000101000080CDCCCCCCCCCC28403333333333D35EC00000000000001240010100008066666666664650C09A99999999D95E40333333333333F33F01010000801F97DD388EE35E400000000000C05E406666666666660240')
|
101
101
|
multi_point = @factory.geometry
|
102
102
|
expect(multi_point).to be_instance_of GeoRuby::SimpleFeatures::MultiPoint
|
103
|
-
expect(multi_point).to eq(GeoRuby::SimpleFeatures::MultiPoint.from_coordinates([[12.4
|
103
|
+
expect(multi_point).to eq(GeoRuby::SimpleFeatures::MultiPoint.from_coordinates([[12.4, -123.3, 4.5], [-65.1, 123.4, 1.2], [123.55555555, 123, 2.3]], 444, true))
|
104
104
|
expect(multi_point.srid).to eql(444)
|
105
105
|
expect(multi_point[0].srid).to eql(444)
|
106
106
|
end
|
107
107
|
|
108
|
-
it
|
109
|
-
@hex_ewkb_parser.parse(
|
108
|
+
it 'test_multi_line_string' do
|
109
|
+
@hex_ewkb_parser.parse('01050000200001000002000000010200000002000000000000000000F83F9A99999999994640E4BD6A65C20F4BC0FA7E6ABC749388BF010200000003000000000000000000F83F9A99999999994640E4BD6A65C20F4BC0FA7E6ABC749388BF39B4C876BE8F46403333333333D35E40')
|
110
110
|
multi_line_string = @factory.geometry
|
111
111
|
expect(multi_line_string).to be_instance_of GeoRuby::SimpleFeatures::MultiLineString
|
112
|
-
expect(multi_line_string).to eq(GeoRuby::SimpleFeatures::MultiLineString.from_line_strings([GeoRuby::SimpleFeatures::LineString.from_coordinates([[1.5,45.2],[-54.12312
|
112
|
+
expect(multi_line_string).to eq(GeoRuby::SimpleFeatures::MultiLineString.from_line_strings([GeoRuby::SimpleFeatures::LineString.from_coordinates([[1.5, 45.2], [-54.12312, -0.012]], 256), GeoRuby::SimpleFeatures::LineString.from_coordinates([[1.5, 45.2], [-54.12312, -0.012], [45.123, 123.3]], 256)], 256))
|
113
113
|
expect(multi_line_string.srid).to eql(256)
|
114
114
|
expect(multi_line_string[0].srid).to eql(256)
|
115
115
|
|
116
|
-
@hex_ewkb_parser.parse(
|
116
|
+
@hex_ewkb_parser.parse('0105000020000100000200000001020000C002000000000000000000F83F9A99999999994640CDCCCCCCCCCCF43F333333333333F33FE4BD6A65C20F4BC0FA7E6ABC749388BF333333333333F33F000000000000124001020000C003000000000000000000F83F9A99999999994640666666666666144000000000000012C0E4BD6A65C20F4BC0FA7E6ABC749388BF3333333333331BC03333333333330B4039B4C876BE8F46403333333333D35E40000000000000124033333333333315C0')
|
117
117
|
multi_line_string = @factory.geometry
|
118
118
|
expect(multi_line_string).to be_instance_of GeoRuby::SimpleFeatures::MultiLineString
|
119
|
-
expect(multi_line_string).to eq(GeoRuby::SimpleFeatures::MultiLineString.from_line_strings([GeoRuby::SimpleFeatures::LineString.from_coordinates([[1.5,45.2,1.3,1.2],[-54.12312
|
119
|
+
expect(multi_line_string).to eq(GeoRuby::SimpleFeatures::MultiLineString.from_line_strings([GeoRuby::SimpleFeatures::LineString.from_coordinates([[1.5, 45.2, 1.3, 1.2], [-54.12312, -0.012, 1.2, 4.5]], 256, true, true), GeoRuby::SimpleFeatures::LineString.from_coordinates([[1.5, 45.2, 5.1, -4.5], [-54.12312, -0.012, -6.8, 3.4], [45.123, 123.3, 4.5, -5.3]], 256, true, true)], 256, true, true))
|
120
120
|
expect(multi_line_string.srid).to eql(256)
|
121
121
|
expect(multi_line_string[0].srid).to eql(256)
|
122
122
|
end
|
123
123
|
|
124
|
-
it
|
125
|
-
@hex_ewkb_parser.parse(
|
124
|
+
it 'test_multi_polygon' do
|
125
|
+
@hex_ewkb_parser.parse('0106000020000100000200000001030000000200000004000000CDCCCCCCCCCC28406666666666A646C03333333333B34640CDCCCCCCCCCC44406DE7FBA9F1D211403D2CD49AE61DF13FCDCCCCCCCCCC28406666666666A646C004000000333333333333034033333333333315409A999999999915408A8EE4F21FD2F63FEC51B81E85EB2C40F6285C8FC2F5F03F3333333333330340333333333333154001030000000200000005000000000000000000000000000000000000000000000000001040000000000000000000000000000010400000000000001040000000000000000000000000000010400000000000000000000000000000000005000000000000000000F03F000000000000F03F0000000000000840000000000000F03F00000000000008400000000000000840000000000000F03F0000000000000840000000000000F03F000000000000F03F')
|
126
126
|
multi_polygon = @factory.geometry
|
127
127
|
expect(multi_polygon).to be_instance_of GeoRuby::SimpleFeatures::MultiPolygon
|
128
|
-
expect(multi_polygon).to eq(GeoRuby::SimpleFeatures::MultiPolygon.from_polygons([GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4
|
128
|
+
expect(multi_polygon).to eq(GeoRuby::SimpleFeatures::MultiPolygon.from_polygons([GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4, -45.3], [45.4, 41.6], [4.456, 1.0698], [12.4, -45.3]], [[2.4, 5.3], [5.4, 1.4263], [14.46, 1.06], [2.4, 5.3]]], 256), GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0], [4, 0], [4, 4], [0, 4], [0, 0]], [[1, 1], [3, 1], [3, 3], [1, 3], [1, 1]]], 256)], 256))
|
129
129
|
expect(multi_polygon.srid).to eql(256)
|
130
130
|
expect(multi_polygon[0].srid).to eql(256)
|
131
131
|
|
132
|
-
@hex_ewkb_parser.parse(
|
132
|
+
@hex_ewkb_parser.parse('0106000020000100000200000001030000400200000004000000CDCCCCCCCCCC28406666666666A646C0333333333333F33F3333333333B34640CDCCCCCCCCCC4440333333333333F33F6DE7FBA9F1D211403D2CD49AE61DF13F333333333333F33FCDCCCCCCCCCC28406666666666A646C0333333333333F33F0400000033333333333303403333333333331540333333333333F33F9A999999999915408A8EE4F21FD2F63F333333333333F33FEC51B81E85EB2C40F6285C8FC2F5F03F333333333333F33F33333333333303403333333333331540333333333333F33F0103000040020000000500000000000000000000000000000000000000333333333333F33F00000000000010400000000000000000333333333333F33F00000000000010400000000000001040666666666666024000000000000000000000000000001040333333333333F33F00000000000000000000000000000000333333333333F33F05000000000000000000F03F000000000000F03F9A999999999901400000000000000840000000000000F03F6666666666660A40000000000000084000000000000008409A9999999999F13F000000000000F03F00000000000008403333333333330340000000000000F03F000000000000F03F9A99999999990140')
|
133
133
|
multi_polygon = @factory.geometry
|
134
134
|
expect(multi_polygon).to be_instance_of GeoRuby::SimpleFeatures::MultiPolygon
|
135
|
-
expect(multi_polygon).to eq(GeoRuby::SimpleFeatures::MultiPolygon.from_polygons([GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4
|
135
|
+
expect(multi_polygon).to eq(GeoRuby::SimpleFeatures::MultiPolygon.from_polygons([GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[12.4, -45.3, 1.2], [45.4, 41.6, 1.2], [4.456, 1.0698, 1.2], [12.4, -45.3, 1.2]], [[2.4, 5.3, 1.2], [5.4, 1.4263, 1.2], [14.46, 1.06, 1.2], [2.4, 5.3, 1.2]]], 256, false, true), GeoRuby::SimpleFeatures::Polygon.from_coordinates([[[0, 0, 1.2], [4, 0, 1.2], [4, 4, 2.3], [0, 4, 1.2], [0, 0, 1.2]], [[1, 1, 2.2], [3, 1, 3.3], [3, 3, 1.1], [1, 3, 2.4], [1, 1, 2.2]]], 256, false, true)], 256, false, true))
|
136
136
|
expect(multi_polygon.srid).to eql(256)
|
137
137
|
expect(multi_polygon[0].srid).to eql(256)
|
138
138
|
end
|
139
139
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
expect {@hex_ewkb_parser.parse("01010000207B000000CDCCCCCCCCCC28406666666666A64640A345")}.to raise_error(GeoRuby::SimpleFeatures::EWKBFormatError)
|
140
|
+
it 'test_failure_trailing_data' do
|
141
|
+
# added A345 at the end
|
142
|
+
expect { @hex_ewkb_parser.parse('01010000207B000000CDCCCCCCCCCC28406666666666A64640A345') }.to raise_error(GeoRuby::SimpleFeatures::EWKBFormatError)
|
144
143
|
end
|
145
144
|
|
146
|
-
it
|
147
|
-
expect {@hex_ewkb_parser.parse(
|
145
|
+
it 'test_failure_unknown_geometry_type' do
|
146
|
+
expect { @hex_ewkb_parser.parse('01090000207B000000CDCCCCCCCCCC28406666666666A64640') }.to raise_error(GeoRuby::SimpleFeatures::EWKBFormatError)
|
148
147
|
end
|
149
148
|
|
150
|
-
it
|
151
|
-
expect {@hex_ewkb_parser.parse(
|
149
|
+
it 'test_failure_m' do
|
150
|
+
expect { @hex_ewkb_parser.parse('01010000607B000000CDCCCCCCCCCC28406666666666A64640') }.to raise_error(GeoRuby::SimpleFeatures::EWKBFormatError)
|
152
151
|
end
|
153
152
|
|
154
|
-
it
|
155
|
-
expect {@hex_ewkb_parser.parse(
|
153
|
+
it 'test_failure_truncated_data' do
|
154
|
+
expect { @hex_ewkb_parser.parse('01010000207B000000CDCCCCCCCCCC2840666666') }.to raise_error(GeoRuby::SimpleFeatures::EWKBFormatError)
|
156
155
|
end
|
157
156
|
|
158
157
|
end
|