georuby 1.9.9 → 2.0.0
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.
- data/lib/geo_ruby.rb +1 -15
- data/lib/geo_ruby/geojson.rb +2 -0
- data/lib/geo_ruby/georss.rb +1 -0
- data/lib/geo_ruby/kml.rb +1 -1
- data/lib/geo_ruby/simple_features.rb +25 -0
- data/lib/geo_ruby/version.rb +1 -1
- data/spec/geo_ruby/geojson_spec.rb +26 -26
- data/spec/geo_ruby/georss_spec.rb +215 -3
- data/spec/geo_ruby/gpx4r/gpx_spec.rb +19 -22
- data/spec/geo_ruby/kml_spec.rb +6 -6
- data/spec/geo_ruby/shp4r/shp_spec.rb +36 -38
- data/spec/geo_ruby/simple_features/circle_spec.rb +3 -5
- data/spec/geo_ruby/simple_features/envelope_spec.rb +8 -8
- data/spec/geo_ruby/simple_features/ewkb_parser_spec.rb +45 -45
- data/spec/geo_ruby/simple_features/ewkt_parser_spec.rb +49 -49
- data/spec/geo_ruby/simple_features/geometry_collection_spec.rb +20 -20
- data/spec/geo_ruby/simple_features/geometry_factory_spec.rb +2 -2
- data/spec/geo_ruby/simple_features/geometry_spec.rb +9 -12
- data/spec/geo_ruby/simple_features/line_string_spec.rb +53 -53
- data/spec/geo_ruby/simple_features/linear_ring_spec.rb +6 -6
- data/spec/geo_ruby/simple_features/multi_line_string_spec.rb +13 -13
- data/spec/geo_ruby/simple_features/multi_point_spec.rb +10 -10
- data/spec/geo_ruby/simple_features/multi_polygon_spec.rb +13 -13
- data/spec/geo_ruby/simple_features/point_spec.rb +52 -52
- data/spec/geo_ruby/simple_features/polygon_spec.rb +40 -40
- data/spec/geo_ruby_spec.rb +7 -12
- data/spec/spec_helper.rb +1 -9
- metadata +21 -5
- data/spec/geo_ruby/georss.rb +0 -218
data/lib/geo_ruby.rb
CHANGED
@@ -1,21 +1,7 @@
|
|
1
1
|
# $:.unshift(File.dirname(__FILE__)) #unless
|
2
2
|
# $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
|
-
require 'geo_ruby/simple_features
|
5
|
-
require 'geo_ruby/simple_features/ewkt_parser'
|
6
|
-
require 'geo_ruby/simple_features/ewkb_parser'
|
7
|
-
require 'geo_ruby/simple_features/geometry'
|
8
|
-
require 'geo_ruby/simple_features/point'
|
9
|
-
require 'geo_ruby/simple_features/line_string'
|
10
|
-
require 'geo_ruby/simple_features/linear_ring'
|
11
|
-
require 'geo_ruby/simple_features/circle'
|
12
|
-
require 'geo_ruby/simple_features/polygon'
|
13
|
-
require 'geo_ruby/simple_features/multi_point'
|
14
|
-
require 'geo_ruby/simple_features/multi_line_string'
|
15
|
-
require 'geo_ruby/simple_features/multi_polygon'
|
16
|
-
require 'geo_ruby/simple_features/geometry_collection'
|
17
|
-
require 'geo_ruby/simple_features/envelope'
|
18
|
-
require 'geo_ruby/simple_features/geometry_factory'
|
4
|
+
require 'geo_ruby/simple_features'
|
19
5
|
|
20
6
|
# Require if you need
|
21
7
|
# require 'geo_ruby/shp4r/shp'
|
data/lib/geo_ruby/geojson.rb
CHANGED
@@ -8,6 +8,7 @@ rescue LoadError
|
|
8
8
|
end
|
9
9
|
|
10
10
|
module GeoRuby
|
11
|
+
|
11
12
|
#Raised when an error in the GeoJSON string is detected
|
12
13
|
class GeojsonFormatError < StandardError
|
13
14
|
end
|
@@ -73,6 +74,7 @@ module GeoRuby
|
|
73
74
|
|
74
75
|
|
75
76
|
class GeojsonParser
|
77
|
+
include GeoRuby::SimpleFeatures
|
76
78
|
attr_reader :geometry
|
77
79
|
|
78
80
|
def parse(geojson, srid=DEFAULT_SRID)
|
data/lib/geo_ruby/georss.rb
CHANGED
@@ -21,6 +21,7 @@ module GeoRuby
|
|
21
21
|
#Parses GeoRSS strings
|
22
22
|
#You can also use directly the static method Geometry.from_georss
|
23
23
|
class GeorssParser
|
24
|
+
include GeoRuby::SimpleFeatures
|
24
25
|
attr_reader :georss_tags, :geometry
|
25
26
|
|
26
27
|
#Parses the georss geometry passed as argument and notifies the factory of events
|
data/lib/geo_ruby/kml.rb
CHANGED
@@ -61,7 +61,7 @@ module GeoRuby
|
|
61
61
|
def accumulate_end(e); @buffer << "</#{e[0]}>"; end
|
62
62
|
|
63
63
|
def parse_coordinates(buffer)
|
64
|
-
if(buffer =~ /<coordinates>(.+)<\/coordinates>/)
|
64
|
+
if(buffer =~ /<coordinates>(.+)<\/coordinates>/m)
|
65
65
|
$1.gsub(/\n/, " ").strip.split(/\s+/).each do |coord|
|
66
66
|
x,y,z = coord.split(',')
|
67
67
|
if(x.nil? || y.nil?)
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module GeoRuby
|
2
|
+
module SimpleFeatures
|
3
|
+
|
4
|
+
%w[
|
5
|
+
geometry
|
6
|
+
circle
|
7
|
+
envelope
|
8
|
+
ewkb_parser
|
9
|
+
ewkt_parser
|
10
|
+
geometry_collection
|
11
|
+
geometry_factory
|
12
|
+
helper
|
13
|
+
line_string
|
14
|
+
linear_ring
|
15
|
+
multi_line_string
|
16
|
+
multi_point
|
17
|
+
multi_polygon
|
18
|
+
point
|
19
|
+
polygon
|
20
|
+
].each do |rel_file|
|
21
|
+
require File.join(File.dirname(__FILE__), 'simple_features', rel_file)
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
data/lib/geo_ruby/version.rb
CHANGED
@@ -7,25 +7,25 @@ DATA_DIR = File.dirname(__FILE__) + '/../data/geojson/'
|
|
7
7
|
#
|
8
8
|
# TODO Refactor comon test approaches into methods
|
9
9
|
# TODO Add use of contexts?
|
10
|
-
describe GeojsonParser do
|
10
|
+
describe GeoRuby::GeojsonParser do
|
11
11
|
|
12
|
-
it "should create a specified Point" do
|
12
|
+
it "should create a specified GeoRuby::SimpleFeatures::Point" do
|
13
13
|
point_json = %{ { "type": "Point", "coordinates": [100.0, 0.0] } }
|
14
|
-
point = Geometry.from_geojson(point_json)
|
15
|
-
point.class.should eql(Point)
|
14
|
+
point = GeoRuby::SimpleFeatures::Geometry.from_geojson(point_json)
|
15
|
+
point.class.should eql(GeoRuby::SimpleFeatures::Point)
|
16
16
|
point_hash = JSON.parse(point_json)
|
17
17
|
point.to_coordinates.should eql(point_hash['coordinates'])
|
18
18
|
end
|
19
19
|
|
20
|
-
it "should create a specified LineString" do
|
20
|
+
it "should create a specified GeoRuby::SimpleFeatures::LineString" do
|
21
21
|
ls_json = %{ { "type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]} }
|
22
|
-
line_string = Geometry.from_geojson(ls_json)
|
23
|
-
line_string.class.should eql(LineString)
|
22
|
+
line_string = GeoRuby::SimpleFeatures::Geometry.from_geojson(ls_json)
|
23
|
+
line_string.class.should eql(GeoRuby::SimpleFeatures::LineString)
|
24
24
|
ls_hash = JSON.parse(ls_json)
|
25
25
|
line_string.to_coordinates.should eql(ls_hash['coordinates'])
|
26
26
|
end
|
27
27
|
|
28
|
-
it "should create a specified Polygon" do
|
28
|
+
it "should create a specified GeoRuby::SimpleFeatures::Polygon" do
|
29
29
|
poly_json = <<-EOJ
|
30
30
|
{ "type": "Polygon",
|
31
31
|
"coordinates": [
|
@@ -34,26 +34,26 @@ describe GeojsonParser do
|
|
34
34
|
]
|
35
35
|
}
|
36
36
|
EOJ
|
37
|
-
polygon = Geometry.from_geojson(poly_json)
|
38
|
-
polygon.class.should eql(Polygon)
|
37
|
+
polygon = GeoRuby::SimpleFeatures::Geometry.from_geojson(poly_json)
|
38
|
+
polygon.class.should eql(GeoRuby::SimpleFeatures::Polygon)
|
39
39
|
polygon.rings.size.should eql(2)
|
40
40
|
poly_hash = JSON.parse(poly_json)
|
41
41
|
polygon.to_coordinates.should eql(poly_hash['coordinates'])
|
42
42
|
end
|
43
43
|
|
44
|
-
it "should create a specified MultiPoint" do
|
44
|
+
it "should create a specified GeoRuby::SimpleFeatures::MultiPoint" do
|
45
45
|
mp_json = <<-EOJ
|
46
46
|
{ "type": "MultiPoint",
|
47
47
|
"coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
|
48
48
|
}
|
49
49
|
EOJ
|
50
|
-
multi_point = Geometry.from_geojson(mp_json)
|
51
|
-
multi_point.class.should eql(MultiPoint)
|
50
|
+
multi_point = GeoRuby::SimpleFeatures::Geometry.from_geojson(mp_json)
|
51
|
+
multi_point.class.should eql(GeoRuby::SimpleFeatures::MultiPoint)
|
52
52
|
mp_hash = JSON.parse(mp_json)
|
53
53
|
multi_point.to_coordinates.should eql(mp_hash['coordinates'])
|
54
54
|
end
|
55
55
|
|
56
|
-
it "should create a specified MultiLineString" do
|
56
|
+
it "should create a specified GeoRuby::SimpleFeatures::MultiLineString" do
|
57
57
|
mls_json = <<-EOJ
|
58
58
|
{ "type": "MultiLineString",
|
59
59
|
"coordinates": [
|
@@ -62,13 +62,13 @@ describe GeojsonParser do
|
|
62
62
|
]
|
63
63
|
}
|
64
64
|
EOJ
|
65
|
-
multi_ls = Geometry.from_geojson(mls_json)
|
66
|
-
multi_ls.class.should eql(MultiLineString)
|
65
|
+
multi_ls = GeoRuby::SimpleFeatures::Geometry.from_geojson(mls_json)
|
66
|
+
multi_ls.class.should eql(GeoRuby::SimpleFeatures::MultiLineString)
|
67
67
|
mls_hash = JSON.parse(mls_json)
|
68
68
|
multi_ls.to_coordinates.should eql(mls_hash['coordinates'])
|
69
69
|
end
|
70
70
|
|
71
|
-
it "should create a specifiead MultiPolygon" do
|
71
|
+
it "should create a specifiead GeoRuby::SimpleFeatures::MultiPolygon" do
|
72
72
|
mpoly_json = <<-EOJ
|
73
73
|
{ "type": "MultiPolygon",
|
74
74
|
"coordinates": [
|
@@ -78,13 +78,13 @@ describe GeojsonParser do
|
|
78
78
|
]
|
79
79
|
}
|
80
80
|
EOJ
|
81
|
-
mpoly = Geometry.from_geojson(mpoly_json)
|
82
|
-
mpoly.class.should eql(MultiPolygon)
|
81
|
+
mpoly = GeoRuby::SimpleFeatures::Geometry.from_geojson(mpoly_json)
|
82
|
+
mpoly.class.should eql(GeoRuby::SimpleFeatures::MultiPolygon)
|
83
83
|
mpoly_hash = JSON.parse(mpoly_json)
|
84
84
|
mpoly.to_coordinates.should eql(mpoly_hash['coordinates'])
|
85
85
|
end
|
86
86
|
|
87
|
-
it "should create a specified GeometryCollection" do
|
87
|
+
it "should create a specified GeoRuby::SimpleFeatures::GeometryCollection" do
|
88
88
|
gcol_json = <<-EOJ
|
89
89
|
{ "type": "GeometryCollection",
|
90
90
|
"geometries": [
|
@@ -97,8 +97,8 @@ describe GeojsonParser do
|
|
97
97
|
]
|
98
98
|
}
|
99
99
|
EOJ
|
100
|
-
gcol = Geometry.from_geojson(gcol_json)
|
101
|
-
gcol.class.should eql(GeometryCollection)
|
100
|
+
gcol = GeoRuby::SimpleFeatures::Geometry.from_geojson(gcol_json)
|
101
|
+
gcol.class.should eql(GeoRuby::SimpleFeatures::GeometryCollection)
|
102
102
|
gcol_hash = JSON.parse(gcol_json)
|
103
103
|
gcol.geometries.each_with_index do |g,i|
|
104
104
|
gh = gcol_hash['geometries'][i]
|
@@ -120,8 +120,8 @@ describe GeojsonParser do
|
|
120
120
|
}
|
121
121
|
}
|
122
122
|
EOJ
|
123
|
-
f = Geometry.from_geojson(feature_json)
|
124
|
-
f.class.should eql(GeojsonFeature)
|
123
|
+
f = GeoRuby::SimpleFeatures::Geometry.from_geojson(feature_json)
|
124
|
+
f.class.should eql(GeoRuby::GeojsonFeature)
|
125
125
|
feature_hash = JSON.parse(feature_json)
|
126
126
|
f.id.should eql(feature_hash['id'])
|
127
127
|
f.properties.should eql(feature_hash['properties'])
|
@@ -131,8 +131,8 @@ describe GeojsonParser do
|
|
131
131
|
|
132
132
|
it "should create a specified FeatureCollection" do
|
133
133
|
fcol_json = File.read(DATA_DIR + 'feature_collection.json')
|
134
|
-
fcol = Geometry.from_geojson(fcol_json)
|
135
|
-
fcol.class.should eql(GeojsonFeatureCollection)
|
134
|
+
fcol = GeoRuby::SimpleFeatures::Geometry.from_geojson(fcol_json)
|
135
|
+
fcol.class.should eql(GeoRuby::GeojsonFeatureCollection)
|
136
136
|
fcol_hash = JSON.parse(fcol_json)
|
137
137
|
fcol.features.each_with_index do |f,i|
|
138
138
|
fgh = fcol_hash['features'][i]['geometry']
|
@@ -2,13 +2,225 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
|
3
3
|
RSS_DATA_DIR = File.dirname(__FILE__) + '/../data/georss/'
|
4
4
|
|
5
|
-
describe GeorssParser do
|
5
|
+
describe GeoRuby::GeorssParser do
|
6
6
|
|
7
7
|
it "should parse an rss file" do
|
8
|
-
geo =
|
9
|
-
geo.should be_a Point
|
8
|
+
geo = subject.parse(File.read(RSS_DATA_DIR + "/w3c.xml"))
|
9
|
+
geo.should be_a GeoRuby::SimpleFeatures::Point
|
10
10
|
end
|
11
11
|
|
12
|
+
it "test_point_creation" do
|
13
|
+
point = GeoRuby::SimpleFeatures::Point.from_x_y(3,4)
|
12
14
|
|
15
|
+
point.as_georss(:dialect => :simple, :elev => 45.7, :featuretypetag => "hoyoyo").gsub("\n","").should eql("<georss:point featuretypetag=\"hoyoyo\" elev=\"45.7\">4 3</georss:point>")
|
16
|
+
point.as_georss(:dialect => :w3cgeo).gsub("\n","").should eql("<geo:lat>4</geo:lat><geo:long>3</geo:long>")
|
17
|
+
point.as_georss(:dialect => :gml).gsub("\n","").should eql("<georss:where><gml:Point><gml:pos>4 3</gml:pos></gml:Point></georss:where>")
|
18
|
+
|
19
|
+
point.as_kml(:id => "HOYOYO-42").gsub("\n","").should eql("<Point id=\"HOYOYO-42\"><coordinates>3,4</coordinates></Point>")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "test_line_string" do
|
23
|
+
ls = GeoRuby::SimpleFeatures::LineString.from_points([GeoRuby::SimpleFeatures::Point.from_lon_lat_z(12.4,-45.3,56),GeoRuby::SimpleFeatures::Point.from_lon_lat_z(45.4,41.6,45)],123,true)
|
24
|
+
|
25
|
+
ls.as_georss.gsub("\n","").should eql("<georss:line>-45.3 12.4 41.6 45.4</georss:line>")
|
26
|
+
ls.as_georss(:dialect => :w3cgeo).gsub("\n","").should eql("<geo:lat>-45.3</geo:lat><geo:long>12.4</geo:long>")
|
27
|
+
ls.as_georss(:dialect => :gml).gsub("\n","").should eql("<georss:where><gml:LineString><gml:posList>-45.3 12.4 41.6 45.4</gml:posList></gml:LineString></georss:where>")
|
28
|
+
|
29
|
+
ls.as_kml(:extrude => 1, :altitude_mode => "absolute").gsub("\n","").should eql("<LineString><extrude>1</extrude><altitudeMode>absolute</altitudeMode><coordinates>12.4,-45.3,56 45.4,41.6,45</coordinates></LineString>")
|
30
|
+
end
|
31
|
+
|
32
|
+
it "test_polygon" do
|
33
|
+
linear_ring1 = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]],256)
|
34
|
+
linear_ring2 = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[2.4,5.3],[5.4,1.4263],[14.46,1.06],[2.4,5.3]],256)
|
35
|
+
polygon = GeoRuby::SimpleFeatures::Polygon.from_linear_rings([linear_ring1,linear_ring2],256)
|
36
|
+
|
37
|
+
polygon.as_georss(:georss_ns => "hoyoyo").gsub("\n","").should eql("<hoyoyo:polygon>-45.3 12.4 41.6 45.4 1.0698 4.456 -45.3 12.4</hoyoyo:polygon>")
|
38
|
+
polygon.as_georss(:dialect => :w3cgeo, :w3cgeo_ns => "bouyoul").gsub("\n","").should eql("<bouyoul:lat>-45.3</bouyoul:lat><bouyoul:long>12.4</bouyoul:long>")
|
39
|
+
polygon.as_georss(:dialect => :gml).gsub("\n","").should eql("<georss:where><gml:Polygon><gml:exterior><gml:LinearRing><gml:posList>-45.3 12.4 41.6 45.4 1.0698 4.456 -45.3 12.4</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></georss:where>")
|
40
|
+
|
41
|
+
polygon.as_kml.gsub("\n","").should eql("<Polygon><outerBoundaryIs><LinearRing><coordinates>12.4,-45.3 45.4,41.6 4.456,1.0698 12.4,-45.3</coordinates></LinearRing></outerBoundaryIs><innerBoundaryIs><LinearRing><coordinates>2.4,5.3 5.4,1.4263 14.46,1.06 2.4,5.3</coordinates></LinearRing></innerBoundaryIs></Polygon>")
|
42
|
+
end
|
43
|
+
|
44
|
+
it "test_geometry_collection" do
|
45
|
+
gc = 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)
|
46
|
+
|
47
|
+
#only the first geometry is output
|
48
|
+
gc.as_georss(:dialect => :simple,:floor => 4).gsub("\n","").should eql("<georss:point floor=\"4\">45.4 4.67</georss:point>")
|
49
|
+
gc.as_georss(:dialect => :w3cgeo).gsub("\n","").should eql("<geo:lat>45.4</geo:lat><geo:long>4.67</geo:long>")
|
50
|
+
gc.as_georss(:dialect => :gml).gsub("\n","").should eql("<georss:where><gml:Point><gml:pos>45.4 4.67</gml:pos></gml:Point></georss:where>")
|
51
|
+
|
52
|
+
gc.as_kml(:id => "HOYOYO-42").gsub("\n","").should eql("<MultiGeometry id=\"HOYOYO-42\"><Point><coordinates>4.67,45.4</coordinates></Point><LineString><coordinates>5.7,12.45 67.55,54</coordinates></LineString></MultiGeometry>")
|
53
|
+
end
|
54
|
+
|
55
|
+
it "test_envelope" do
|
56
|
+
linear_ring1 = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[12,-45,5],[45,41,6],[4,1,8],[12.4,-45,3]],256,true)
|
57
|
+
linear_ring2 = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[2,5,9],[5.4,1,-5.4],[14,1,34],[2,5,3]],256,true)
|
58
|
+
polygon = GeoRuby::SimpleFeatures::Polygon.from_linear_rings([linear_ring1,linear_ring2],256,true)
|
59
|
+
|
60
|
+
e = polygon.envelope
|
61
|
+
|
62
|
+
e.as_georss(:dialect => :simple).gsub("\n","").should eql("<georss:box>-45 4 41 45</georss:box>")
|
63
|
+
#center
|
64
|
+
e.as_georss(:dialect => :w3cgeo).gsub("\n","").should eql("<geo:lat>-2</geo:lat><geo:long>24</geo:long>")
|
65
|
+
e.as_georss(:dialect => :gml).gsub("\n","").should eql("<georss:where><gml:Envelope><gml:LowerCorner>-45 4</gml:LowerCorner><gml:UpperCorner>41 45</gml:UpperCorner></gml:Envelope></georss:where>")
|
66
|
+
|
67
|
+
e.as_kml.gsub("\n","").should eql("<LatLonAltBox><north>41</north><south>-45</south><east>45</east><west>4</west><minAltitude>-5.4</minAltitude><maxAltitude>34</maxAltitude></LatLonAltBox>")
|
68
|
+
end
|
69
|
+
|
70
|
+
it "test_point_georss_read" do
|
71
|
+
#W3CGeo
|
72
|
+
str = " <geo:lat >12.3</geo:lat >\n\t <geo:long> 4.56</geo:long> "
|
73
|
+
geom = GeoRuby::SimpleFeatures::Geometry.from_georss(str)
|
74
|
+
geom.class.should eql(GeoRuby::SimpleFeatures::Point)
|
75
|
+
geom.lat.should eql(12.3)
|
76
|
+
geom.lon.should eql(4.56)
|
77
|
+
|
78
|
+
str = " <geo:Point> \n \t <geo:long> 4.56</geo:long> \n\t <geo:lat >12.3</geo:lat > </geo:Point> "
|
79
|
+
geom = GeoRuby::SimpleFeatures::Geometry.from_georss(str)
|
80
|
+
geom.class.should eql(GeoRuby::SimpleFeatures::Point)
|
81
|
+
geom.lat.should eql(12.3)
|
82
|
+
geom.lon.should eql(4.56)
|
83
|
+
|
84
|
+
#gml
|
85
|
+
str = " <georss:where> \t\r <gml:Point > \t <gml:pos> 4 \t 3 </gml:pos> </gml:Point> </georss:where>"
|
86
|
+
geom = GeoRuby::SimpleFeatures::Geometry.from_georss(str)
|
87
|
+
geom.class.should eql(GeoRuby::SimpleFeatures::Point)
|
88
|
+
geom.lat.should eql(4.0)
|
89
|
+
geom.lon.should eql(3.0)
|
90
|
+
|
91
|
+
#simple
|
92
|
+
str = "<georss:point > 4 \r\t 3 \t</georss:point >"
|
93
|
+
geom = GeoRuby::SimpleFeatures::Geometry.from_georss(str)
|
94
|
+
geom.class.should eql(GeoRuby::SimpleFeatures::Point)
|
95
|
+
geom.lat.should eql(4.0)
|
96
|
+
geom.lon.should eql(3.0)
|
97
|
+
|
98
|
+
#simple with tags
|
99
|
+
str = "<georss:point featuretypetag=\"hoyoyo\" elev=\"45.7\" \n floor=\"2\" relationshiptag=\"puyopuyo\" radius=\"42\" > 4 \n 3 \t</georss:point >"
|
100
|
+
geom,tags = GeoRuby::SimpleFeatures::Geometry.from_georss_with_tags(str)
|
101
|
+
geom.class.should eql(GeoRuby::SimpleFeatures::Point)
|
102
|
+
geom.lat.should eql(4.0)
|
103
|
+
geom.lon.should eql(3.0)
|
104
|
+
tags.featuretypetag.should eql("hoyoyo")
|
105
|
+
tags.elev.should eql(45.7)
|
106
|
+
tags.relationshiptag.should eql("puyopuyo")
|
107
|
+
tags.floor.should eql(2)
|
108
|
+
tags.radius.should eql(42.0)
|
109
|
+
end
|
110
|
+
|
111
|
+
it "test_line_string_georss_read" do
|
112
|
+
ls = GeoRuby::SimpleFeatures::LineString.from_points([GeoRuby::SimpleFeatures::Point.from_lon_lat(12.4,-45.3),GeoRuby::SimpleFeatures::Point.from_lon_lat(45.4,41.6)])
|
113
|
+
|
114
|
+
str = "<georss:line > -45.3 12.4 \n \r41.6\t 45.4</georss:line>"
|
115
|
+
geom = GeoRuby::SimpleFeatures::Geometry.from_georss(str)
|
116
|
+
geom.class.should eql(GeoRuby::SimpleFeatures::LineString)
|
117
|
+
ls.should == geom
|
118
|
+
|
119
|
+
str = "<georss:where><gml:LineString><gml:posList>-45.3 12.4 41.6 45.4</gml:posList></gml:LineString></georss:where>"
|
120
|
+
geom = GeoRuby::SimpleFeatures::Geometry.from_georss(str)
|
121
|
+
geom.class.should eql(GeoRuby::SimpleFeatures::LineString)
|
122
|
+
ls.should == geom
|
123
|
+
end
|
124
|
+
|
125
|
+
it "test_polygon_georss_read" do
|
126
|
+
linear_ring = GeoRuby::SimpleFeatures::LinearRing.from_coordinates([[12.4,-45.3],[45.4,41.6],[4.456,1.0698],[12.4,-45.3]])
|
127
|
+
polygon = GeoRuby::SimpleFeatures::Polygon.from_linear_rings([linear_ring])
|
128
|
+
|
129
|
+
str = "<hoyoyo:polygon featuretypetag=\"42\" > -45.3 12.4 41.6 \n\r 45.4 1.0698 \r 4.456 -45.3 12.4 </hoyoyo:polygon>"
|
130
|
+
geom = GeoRuby::SimpleFeatures::Geometry.from_georss(str)
|
131
|
+
geom.class.should eql(GeoRuby::SimpleFeatures::Polygon)
|
132
|
+
polygon.should == geom
|
133
|
+
|
134
|
+
str = "<georss:where>\r\t \n <gml:Polygon><gml:exterior> <gml:LinearRing><gml:posList> -45.3 \n\r 12.4 41.6 \n\t 45.4 1.0698 4.456 -45.3 12.4</gml:posList></gml:LinearRing></gml:exterior></gml:Polygon></georss:where>"
|
135
|
+
geom = GeoRuby::SimpleFeatures::Geometry.from_georss(str)
|
136
|
+
geom.class.should eql(GeoRuby::SimpleFeatures::Polygon)
|
137
|
+
polygon.should == geom
|
138
|
+
end
|
139
|
+
|
140
|
+
it "test_envelope_georss_read" do
|
141
|
+
e = GeoRuby::SimpleFeatures::Envelope.from_coordinates([[4.456,-45.3],[45.4,41.6]])
|
142
|
+
|
143
|
+
str = "<georss:box >-45.3 4.456 \n41.6 45.4</georss:box>"
|
144
|
+
geom = GeoRuby::SimpleFeatures::Geometry.from_georss(str)
|
145
|
+
geom.class.should eql(GeoRuby::SimpleFeatures::Envelope)
|
146
|
+
geom.should == e
|
147
|
+
|
148
|
+
str = "<georss:where><gml:Envelope><gml:lowerCorner>-45.3 \n 4.456</gml:lowerCorner><gml:upperCorner>41.6 \t\n 45.4</gml:upperCorner></gml:Envelope></georss:where>"
|
149
|
+
geom = GeoRuby::SimpleFeatures::Geometry.from_georss(str)
|
150
|
+
geom.class.should eql(GeoRuby::SimpleFeatures::Envelope)
|
151
|
+
geom.should == e
|
152
|
+
end
|
153
|
+
|
154
|
+
it "test_kml_read" do
|
155
|
+
g = GeoRuby::SimpleFeatures::Geometry.from_kml("<Point><coordinates>45,12,25</coordinates></Point>")
|
156
|
+
g.should be_a GeoRuby::SimpleFeatures::Point
|
157
|
+
g.should == GeoRuby::SimpleFeatures::Point.from_x_y_z('45','12','25')
|
158
|
+
|
159
|
+
g = GeoRuby::SimpleFeatures::Geometry.from_kml("<LineString>
|
160
|
+
<extrude>1</extrude>
|
161
|
+
<tessellate>1</tessellate>
|
162
|
+
<coordinates>
|
163
|
+
-122.364383,37.824664,0 -122.364152,37.824322,0
|
164
|
+
</coordinates>
|
165
|
+
</LineString>")
|
166
|
+
g.should be_a GeoRuby::SimpleFeatures::LineString
|
167
|
+
g.length.should eql(2)
|
168
|
+
g.should == GeoRuby::SimpleFeatures::LineString.from_points([GeoRuby::SimpleFeatures::Point.from_x_y_z('-122.364383','37.824664','0'),GeoRuby::SimpleFeatures::Point.from_x_y_z('-122.364152','37.824322','0')],4326,true)
|
169
|
+
|
170
|
+
g = GeoRuby::SimpleFeatures::Geometry.from_kml("<Polygon>
|
171
|
+
<extrude>1</extrude>
|
172
|
+
<altitudeMode>relativeToGround</altitudeMode>
|
173
|
+
<outerBoundaryIs>
|
174
|
+
<LinearRing>
|
175
|
+
<coordinates>
|
176
|
+
-122.366278,37.818844,30
|
177
|
+
-122.365248,37.819267,30
|
178
|
+
-122.365640,37.819861,30
|
179
|
+
-122.366669,37.819429,30
|
180
|
+
-122.366278,37.818844,30
|
181
|
+
</coordinates>
|
182
|
+
</LinearRing>
|
183
|
+
</outerBoundaryIs>
|
184
|
+
<innerBoundaryIs>
|
185
|
+
<LinearRing>
|
186
|
+
<coordinates>
|
187
|
+
-122.366212,37.818977,30
|
188
|
+
-122.365424,37.819294,30
|
189
|
+
-122.365704,37.819731,30
|
190
|
+
-122.366488,37.819402,30
|
191
|
+
-122.366212,37.818977,30
|
192
|
+
</coordinates>
|
193
|
+
</LinearRing>
|
194
|
+
</innerBoundaryIs>
|
195
|
+
<innerBoundaryIs>
|
196
|
+
<LinearRing>
|
197
|
+
<coordinates>
|
198
|
+
-122.366212,37.818977,30
|
199
|
+
-122.365424,37.819294,30
|
200
|
+
-122.365704,37.819731,30
|
201
|
+
-122.366488,37.819402,30
|
202
|
+
-122.366212,37.818977,30
|
203
|
+
</coordinates>
|
204
|
+
</LinearRing>
|
205
|
+
</innerBoundaryIs>
|
206
|
+
</Polygon>")
|
207
|
+
g.should be_a GeoRuby::SimpleFeatures::Polygon
|
208
|
+
g.length.should eql(3)
|
209
|
+
end
|
210
|
+
|
211
|
+
it "test_to_kml_for_point_does_not_raise_type_error_if_geom_data_not_provided" do
|
212
|
+
point = GeoRuby::SimpleFeatures::Point.from_coordinates([1.6,2.8],123)
|
213
|
+
lambda { point.kml_representation }.should_not raise_error(TypeError)
|
214
|
+
end
|
215
|
+
|
216
|
+
it "test_to_kml_for_polygon_does_not_raise_type_error_if_geom_data_not_provided" do
|
217
|
+
polygon = 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)
|
218
|
+
lambda { polygon.kml_representation }.should_not raise_error(TypeError)
|
219
|
+
end
|
220
|
+
|
221
|
+
it "test_to_kml_for_line_string_does_not_raise_type_error_if_geom_data_not_provided" do
|
222
|
+
ls = GeoRuby::SimpleFeatures::LineString.from_coordinates([[5.7,12.45],[67.55,54]],256)
|
223
|
+
lambda { ls.kml_representation }.should_not raise_error(TypeError)
|
224
|
+
end
|
13
225
|
|
14
226
|
end
|