georuby 2.3.0 → 2.5.1
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 +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
|