schleyfox-ruby_kml 0.1.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.
- data/CHANGELOG +2 -0
- data/LICENSE +7 -0
- data/README.textile +31 -0
- data/Rakefile +134 -0
- data/examples/melbourne-stations.kml +18 -0
- data/lib/kml/color_style.rb +34 -0
- data/lib/kml/container.rb +16 -0
- data/lib/kml/document.rb +26 -0
- data/lib/kml/feature.rb +161 -0
- data/lib/kml/folder.rb +12 -0
- data/lib/kml/geometry.rb +86 -0
- data/lib/kml/ground_overlay.rb +18 -0
- data/lib/kml/hot_spot.rb +31 -0
- data/lib/kml/icon.rb +15 -0
- data/lib/kml/icon_style.rb +52 -0
- data/lib/kml/lat_lon_box.rb +36 -0
- data/lib/kml/line_string.rb +40 -0
- data/lib/kml/line_style.rb +15 -0
- data/lib/kml/linear_ring.rb +49 -0
- data/lib/kml/link.rb +51 -0
- data/lib/kml/look_at.rb +21 -0
- data/lib/kml/model.rb +4 -0
- data/lib/kml/multi_geometry.rb +5 -0
- data/lib/kml/object.rb +29 -0
- data/lib/kml/overlay.rb +20 -0
- data/lib/kml/placemark.rb +36 -0
- data/lib/kml/point.rb +47 -0
- data/lib/kml/poly_style.rb +16 -0
- data/lib/kml/polygon.rb +44 -0
- data/lib/kml/snippet.rb +25 -0
- data/lib/kml/style.rb +23 -0
- data/lib/kml/style_map.rb +39 -0
- data/lib/kml/style_selector.rb +7 -0
- data/lib/kml/version.rb +9 -0
- data/lib/kml.rb +7 -0
- data/lib/kml_file.rb +28 -0
- data/test/kml/point_test.rb +10 -0
- data/test/kml_file_test.rb +220 -0
- data/test/test_helper.rb +23 -0
- metadata +93 -0
@@ -0,0 +1,220 @@
|
|
1
|
+
require "#{File.dirname(__FILE__)}/test_helper"
|
2
|
+
|
3
|
+
class KMLFileTest < Test::Unit::TestCase
|
4
|
+
include KML
|
5
|
+
|
6
|
+
def test_placemark
|
7
|
+
kml = KMLFile.new
|
8
|
+
kml.objects << Placemark.new(
|
9
|
+
:name => 'Simple placemark',
|
10
|
+
:description => 'Attached to the ground. Intelligently places itself at the height of the underlying terrain.',
|
11
|
+
:geometry => Point.new(:coordinates=>'-122.0822035425683,37.42228990140251,0')
|
12
|
+
)
|
13
|
+
write_and_show(kml, File.dirname(__FILE__) + '/simple_placemark.kml')
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_cdata_description
|
17
|
+
description = <<-DESC
|
18
|
+
<h1>CDATA Tags are useful!</h1>
|
19
|
+
<p><font color="red">Text is <i>more readable</i> and
|
20
|
+
<b>easier to write</b> when you can avoid using entity
|
21
|
+
references.</font></p>
|
22
|
+
DESC
|
23
|
+
|
24
|
+
kml = KMLFile.new
|
25
|
+
document = Document.new(
|
26
|
+
:name => 'Document with CDATA example',
|
27
|
+
:snippet => Snippet.new("Document level snippet")
|
28
|
+
)
|
29
|
+
document.features << Placemark.new(
|
30
|
+
:name => 'CDATA example',
|
31
|
+
:description => description,
|
32
|
+
:snippet => Snippet.new("Example of a snippet"),
|
33
|
+
:geometry => Point.new(:coordinates=>'-122.0822035425683,37.4228,0')
|
34
|
+
)
|
35
|
+
kml.objects << document
|
36
|
+
write_and_show(kml, File.dirname(__FILE__) + '/cdata_and_snippet.kml')
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_ground_overlays
|
40
|
+
kml = KMLFile.new
|
41
|
+
folder = Folder.new(
|
42
|
+
:name => 'Ground Overlays',
|
43
|
+
:description => 'Examples of ground overlays'
|
44
|
+
)
|
45
|
+
folder.features << GroundOverlay.new(
|
46
|
+
:name => 'Large-scale overlay on terrain',
|
47
|
+
:description => 'Overlay shows Mount Etna erupting on July 13th, 2001.',
|
48
|
+
:icon => Icon.new(:href => 'http://code.google.com/apis/kml/documentation/etna.jpg'),
|
49
|
+
:lat_lon_box => LatLonBox.new(
|
50
|
+
:north => 37.91904192681665,
|
51
|
+
:south => 37.46543388598137,
|
52
|
+
:east => 15.35832653742206,
|
53
|
+
:west => 14.60128369746704,
|
54
|
+
:rotation => -0.1556640799496235
|
55
|
+
)
|
56
|
+
)
|
57
|
+
kml.objects << folder
|
58
|
+
write_and_show(kml, File.dirname(__FILE__) + '/ground_overlays.kml')
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_paths
|
62
|
+
kml = KMLFile.new
|
63
|
+
kml.objects << Document.new(
|
64
|
+
:name => 'Paths',
|
65
|
+
:description => 'Examples of paths. Note that the tessellate tag is by default
|
66
|
+
set to 0. If you want to create tessellated lines, they must be authored
|
67
|
+
(or edited) directly in KML.',
|
68
|
+
:styles => [
|
69
|
+
Style.new(
|
70
|
+
:id => 'yellowLineGreenPoly',
|
71
|
+
:line_style => LineStyle.new(:color => '7f00ffff', :width => 4),
|
72
|
+
:poly_style => PolyStyle.new(:color => '7f00ff00')
|
73
|
+
)
|
74
|
+
],
|
75
|
+
:features => [
|
76
|
+
Placemark.new(
|
77
|
+
:name => 'Absolute Extruded',
|
78
|
+
:description => 'Transparent green wall with yellow outlines',
|
79
|
+
:style_url => '#yellowLineGreenPoly',
|
80
|
+
:geometry => LineString.new(
|
81
|
+
:extrude => true,
|
82
|
+
:tessellate => true,
|
83
|
+
:altitude_mode => 'absolute',
|
84
|
+
:coordinates => '-112.2550785337791,36.07954952145647,2357
|
85
|
+
-112.2549277039738,36.08117083492122,2357
|
86
|
+
-112.2552505069063,36.08260761307279,2357
|
87
|
+
-112.2564540158376,36.08395660588506,2357
|
88
|
+
-112.2580238976449,36.08511401044813,2357
|
89
|
+
-112.2595218489022,36.08584355239394,2357
|
90
|
+
-112.2608216347552,36.08612634548589,2357
|
91
|
+
-112.262073428656,36.08626019085147,2357
|
92
|
+
-112.2633204928495,36.08621519860091,2357
|
93
|
+
-112.2644963846444,36.08627897945274,2357
|
94
|
+
-112.2656969554589,36.08649599090644,2357'
|
95
|
+
)
|
96
|
+
)
|
97
|
+
]
|
98
|
+
)
|
99
|
+
#puts kml.render
|
100
|
+
write_and_show(kml, File.dirname(__FILE__) + '/paths.kml')
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_polygon
|
104
|
+
kml = KMLFile.new
|
105
|
+
kml.objects << Placemark.new(
|
106
|
+
:name => 'The Pentagon',
|
107
|
+
:geometry => Polygon.new(
|
108
|
+
:extrude => true,
|
109
|
+
:altitude_mode => 'relativeToGround',
|
110
|
+
:outer_boundary_is => LinearRing.new(
|
111
|
+
:coordinates => '-77.05788457660967,38.87253259892824,100
|
112
|
+
-77.05465973756702,38.87291016281703,100
|
113
|
+
-77.05315536854791,38.87053267794386,100
|
114
|
+
-77.05552622493516,38.868757801256,100
|
115
|
+
-77.05844056290393,38.86996206506943,100
|
116
|
+
-77.05788457660967,38.87253259892824,100'
|
117
|
+
),
|
118
|
+
:inner_boundary_is => LinearRing.new(
|
119
|
+
:coordinates => '-77.05668055019126,38.87154239798456,100
|
120
|
+
-77.05542625960818,38.87167890344077,100
|
121
|
+
-77.05485125901024,38.87076535397792,100
|
122
|
+
-77.05577677433152,38.87008686581446,100
|
123
|
+
-77.05691162017543,38.87054446963351,100
|
124
|
+
-77.05668055019126,38.87154239798456,100'
|
125
|
+
)
|
126
|
+
)
|
127
|
+
)
|
128
|
+
|
129
|
+
#puts kml.render
|
130
|
+
write_and_show(kml, File.dirname(__FILE__) + '/polygon.kml')
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_geometry_styles
|
134
|
+
kml = KMLFile.new
|
135
|
+
kml.objects << Style.new(
|
136
|
+
:id => "transBluePoly",
|
137
|
+
:line_style => LineStyle.new(
|
138
|
+
:width => 1.5
|
139
|
+
),
|
140
|
+
:poly_style => PolyStyle.new(
|
141
|
+
:color => '7dff0000'
|
142
|
+
)
|
143
|
+
)
|
144
|
+
kml.objects << Placemark.new(
|
145
|
+
:name => 'Building 41',
|
146
|
+
:style_url => '#transBluePoly',
|
147
|
+
:geometry => Polygon.new(
|
148
|
+
:extrude => true,
|
149
|
+
:altitude_mode => 'relativeToGround',
|
150
|
+
:outer_boundary_is => LinearRing.new(
|
151
|
+
:coordinates => '-122.0857412771483,37.42227033155257,17
|
152
|
+
-122.0858169768481,37.42231408832346,17
|
153
|
+
-122.085852582875,37.42230337469744,17
|
154
|
+
-122.0858799945639,37.42225686138789,17
|
155
|
+
-122.0858860101409,37.4222311076138,17
|
156
|
+
-122.0858069157288,37.42220250173855,17
|
157
|
+
-122.0858379542653,37.42214027058678,17
|
158
|
+
-122.0856732640519,37.42208690214408,17
|
159
|
+
-122.0856022926407,37.42214885429042,17
|
160
|
+
-122.0855902778436,37.422128290487,17
|
161
|
+
-122.0855841672237,37.42208171967246,17
|
162
|
+
-122.0854852065741,37.42210455874995,17
|
163
|
+
-122.0855067264352,37.42214267949824,17
|
164
|
+
-122.0854430712915,37.42212783846172,17
|
165
|
+
-122.0850990714904,37.42251282407603,17
|
166
|
+
-122.0856769818632,37.42281815323651,17
|
167
|
+
-122.0860162273783,37.42244918858722,17
|
168
|
+
-122.0857260327004,37.42229239604253,17
|
169
|
+
-122.0857412771483,37.42227033155257,17'
|
170
|
+
)
|
171
|
+
)
|
172
|
+
)
|
173
|
+
|
174
|
+
write_and_show(kml, File.dirname(__FILE__) + '/polygon_style.kml')
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_style_map
|
178
|
+
kml = KMLFile.new
|
179
|
+
kml.objects << Document.new(
|
180
|
+
:name => 'Highlighted Icon',
|
181
|
+
:description => 'Place your mouse over the icon to see it display the new icon',
|
182
|
+
:styles => [
|
183
|
+
Style.new(
|
184
|
+
:id => "highlightPlacemark",
|
185
|
+
:icon_style => IconStyle.new(
|
186
|
+
:icon => Icon.new(
|
187
|
+
:href => "http://maps.google.com/mapfiles/kml/paddle/red-stars.png"
|
188
|
+
)
|
189
|
+
)
|
190
|
+
),
|
191
|
+
Style.new(
|
192
|
+
:id => "normalPlacemark",
|
193
|
+
:icon_style => IconStyle.new(
|
194
|
+
:icon => Icon.new(
|
195
|
+
:href => "http://maps.google.com/mapfiles/kml/paddle/wht-blank.png"
|
196
|
+
)
|
197
|
+
)
|
198
|
+
),
|
199
|
+
StyleMap.new(
|
200
|
+
:id => 'exampleStyleMap',
|
201
|
+
:pairs => {
|
202
|
+
'normal' => '#normalPlacemark',
|
203
|
+
'highlight' => '#highlightPlacemark'
|
204
|
+
}
|
205
|
+
)
|
206
|
+
],
|
207
|
+
:features => [
|
208
|
+
Placemark.new(
|
209
|
+
:name => 'Roll over this icon',
|
210
|
+
:style_url => '#exampleStyleMap',
|
211
|
+
:geometry => Point.new(
|
212
|
+
:coordinates => '-122.0856545755255,37.42243077405461,0'
|
213
|
+
)
|
214
|
+
)
|
215
|
+
]
|
216
|
+
)
|
217
|
+
#puts kml.render
|
218
|
+
write_and_show(kml, File.dirname(__FILE__) + '/style_map.kml')
|
219
|
+
end
|
220
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__) + '/../lib')
|
2
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
3
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
4
|
+
|
5
|
+
require 'pp'
|
6
|
+
require 'test/unit'
|
7
|
+
|
8
|
+
require 'kml'
|
9
|
+
|
10
|
+
class Test::Unit::TestCase
|
11
|
+
def write_and_show(kml, file)
|
12
|
+
#puts kml.render
|
13
|
+
File.open(file, 'w') { |f| f.write kml.render }
|
14
|
+
show_file(file)
|
15
|
+
end
|
16
|
+
|
17
|
+
def show_file(file)
|
18
|
+
#tests should probably not launch visual external applications
|
19
|
+
#cmd = "open -a /Applications/Google\\ Earth.app/ #{File.expand_path(file)}"
|
20
|
+
#puts "executing command: #{cmd}"
|
21
|
+
#`#{cmd}`
|
22
|
+
end
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: schleyfox-ruby_kml
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- aeden, schleyfox, xaviershay
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-06-07 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Generate KML files with ruby
|
17
|
+
email: ""
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- CHANGELOG
|
26
|
+
- LICENSE
|
27
|
+
- Rakefile
|
28
|
+
- README.textile
|
29
|
+
- lib/kml/style.rb
|
30
|
+
- lib/kml/hot_spot.rb
|
31
|
+
- lib/kml/line_style.rb
|
32
|
+
- lib/kml/link.rb
|
33
|
+
- lib/kml/point.rb
|
34
|
+
- lib/kml/polygon.rb
|
35
|
+
- lib/kml/placemark.rb
|
36
|
+
- lib/kml/model.rb
|
37
|
+
- lib/kml/poly_style.rb
|
38
|
+
- lib/kml/line_string.rb
|
39
|
+
- lib/kml/geometry.rb
|
40
|
+
- lib/kml/snippet.rb
|
41
|
+
- lib/kml/color_style.rb
|
42
|
+
- lib/kml/folder.rb
|
43
|
+
- lib/kml/lat_lon_box.rb
|
44
|
+
- lib/kml/linear_ring.rb
|
45
|
+
- lib/kml/style_map.rb
|
46
|
+
- lib/kml/object.rb
|
47
|
+
- lib/kml/document.rb
|
48
|
+
- lib/kml/icon.rb
|
49
|
+
- lib/kml/icon_style.rb
|
50
|
+
- lib/kml/container.rb
|
51
|
+
- lib/kml/multi_geometry.rb
|
52
|
+
- lib/kml/look_at.rb
|
53
|
+
- lib/kml/overlay.rb
|
54
|
+
- lib/kml/style_selector.rb
|
55
|
+
- lib/kml/feature.rb
|
56
|
+
- lib/kml/version.rb
|
57
|
+
- lib/kml/ground_overlay.rb
|
58
|
+
- lib/kml_file.rb
|
59
|
+
- lib/kml.rb
|
60
|
+
- test/kml/point_test.rb
|
61
|
+
- test/kml_file_test.rb
|
62
|
+
- test/test_helper.rb
|
63
|
+
- examples/melbourne-stations.kml
|
64
|
+
has_rdoc: false
|
65
|
+
homepage: http://github.com/schleyfox/ruby_kml
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: "0"
|
76
|
+
version:
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: "0"
|
82
|
+
version:
|
83
|
+
requirements: []
|
84
|
+
|
85
|
+
rubyforge_project:
|
86
|
+
rubygems_version: 1.0.1
|
87
|
+
signing_key:
|
88
|
+
specification_version: 2
|
89
|
+
summary: Generate KML files with ruby
|
90
|
+
test_files:
|
91
|
+
- test/kml/point_test.rb
|
92
|
+
- test/kml_file_test.rb
|
93
|
+
- test/test_helper.rb
|