gooby 0.9.4 → 0.9.5

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.
Files changed (91) hide show
  1. data/README +48 -67
  2. data/bin/20050305_corporate_cup_hm_to_csv.rb +9 -0
  3. data/bin/20050430_nashville_marathon_to_csv.rb +9 -0
  4. data/bin/20060115_phoenix_marathon_to_csv.rb +9 -0
  5. data/bin/activity_2007_03_10_13_02_32.xml_to_csv.rb +9 -0
  6. data/bin/{tests_gen.rb → code_scan.rb} +6 -4
  7. data/bin/example_usage.rb +2 -3
  8. data/bin/example_usage.sh +52 -0
  9. data/bin/gen_gap_phx.rb +10 -0
  10. data/bin/gen_gmap_cc_2005.rb +10 -0
  11. data/bin/gen_gmap_cc_2007.rb +10 -0
  12. data/bin/gen_gmap_nashville.rb +10 -0
  13. data/bin/gen_gmap_phx.rb +10 -0
  14. data/bin/phx_to_csv.rb +47 -0
  15. data/bin/split_forerunner_logbook_2007.rb +10 -0
  16. data/bin/split_training_center_2007.rb +8 -0
  17. data/data/{2007_03_04.tcx → 2007_03_10.tcx} +11694 -0
  18. data/data/activity_2007_03_10_13_02_32.csv +1168 -0
  19. data/data/activity_2007_03_10_13_02_32.xml +11695 -0
  20. data/data/forerunner_2007.xml +0 -227142
  21. data/img/gicons/readme.txt +3 -0
  22. data/lib/gooby.rb +625 -552
  23. data/samples/20050305_corporate_cup_hm.html +271 -269
  24. data/samples/20050430_nashville_marathon.html +1240 -246
  25. data/samples/20060115_phoenix_marathon.html +1596 -0
  26. data/samples/20070310_corporate_cup_hm.html +1367 -0
  27. data/samples/phoenix_marathon.html +1312 -258
  28. data/tests/ts_gooby.rb +423 -551
  29. data/tests/ts_gooby_min.rb +550 -0
  30. metadata +25 -67
  31. data/bin/tcx_ex.rb +0 -35
  32. data/data/20051124_hyatt_turkey_trot_8K.csv +0 -321
  33. data/data/20051124_hyatt_turkey_trot_8K.xml +0 -2651
  34. data/data/2007_03_03.tcx +0 -6207
  35. data/data/activity_2007_03_04_15_22_36.xml +0 -10545
  36. data/data/run_2007_01_01_16_38_27.xml +0 -2020
  37. data/data/run_2007_02_24_15_01_35.csv +0 -484
  38. data/data/run_2007_02_24_15_01_35.xml +0 -3884
  39. data/lib/gooby/cls_counter_hash.rb +0 -78
  40. data/lib/gooby/cls_delim_line.rb +0 -35
  41. data/lib/gooby/cls_dttm.rb +0 -79
  42. data/lib/gooby/cls_duration.rb +0 -79
  43. data/lib/gooby/cls_forerunner_xml_parser.rb +0 -178
  44. data/lib/gooby/cls_forerunner_xml_splitter.rb +0 -109
  45. data/lib/gooby/cls_geo_data.rb +0 -181
  46. data/lib/gooby/cls_gooby_command.rb +0 -46
  47. data/lib/gooby/cls_gooby_object.rb +0 -18
  48. data/lib/gooby/cls_google_map_generator.rb +0 -363
  49. data/lib/gooby/cls_history.rb +0 -33
  50. data/lib/gooby/cls_lap.rb +0 -22
  51. data/lib/gooby/cls_line.rb +0 -75
  52. data/lib/gooby/cls_options.rb +0 -67
  53. data/lib/gooby/cls_position.rb +0 -44
  54. data/lib/gooby/cls_run.rb +0 -194
  55. data/lib/gooby/cls_simple_xml_parser.rb +0 -41
  56. data/lib/gooby/cls_test_regen.rb +0 -182
  57. data/lib/gooby/cls_track.rb +0 -47
  58. data/lib/gooby/cls_trackpoint.rb +0 -200
  59. data/lib/gooby/cls_training_center_parser.rb +0 -183
  60. data/lib/gooby/cls_training_center_splitter.rb +0 -109
  61. data/lib/gooby/mod_introspect.rb +0 -26
  62. data/lib/gooby/mod_io.rb +0 -58
  63. data/lib/gooby/mod_project_info.rb +0 -80
  64. data/lib/gooby/mod_string.rb +0 -19
  65. data/lib/gooby/mod_test_helper.rb +0 -15
  66. data/samples/20041113_richmond_marathon.html +0 -532
  67. data/samples/run_2007_01_10_22_44_54.html +0 -201
  68. data/samples/run_2007_02_24_15_01_35.html +0 -298
  69. data/tests/tc_cls_counter_hash.rb +0 -107
  70. data/tests/tc_cls_delim_line.rb +0 -74
  71. data/tests/tc_cls_dttm.rb +0 -131
  72. data/tests/tc_cls_duration.rb +0 -51
  73. data/tests/tc_cls_forerunner_xml_parser.rb +0 -70
  74. data/tests/tc_cls_geo_data.xxx +0 -71
  75. data/tests/tc_cls_gooby_object.rb +0 -26
  76. data/tests/tc_cls_google_map_generator.rb +0 -109
  77. data/tests/tc_cls_history.rb +0 -46
  78. data/tests/tc_cls_lap.rb +0 -38
  79. data/tests/tc_cls_line.rb +0 -110
  80. data/tests/tc_cls_options.rb +0 -79
  81. data/tests/tc_cls_position.rb +0 -66
  82. data/tests/tc_cls_run.rb +0 -142
  83. data/tests/tc_cls_simple_xml_parser.rb +0 -50
  84. data/tests/tc_cls_track.rb +0 -70
  85. data/tests/tc_cls_trackpoint.rb +0 -145
  86. data/tests/tc_mod_introspect.rb +0 -32
  87. data/tests/tc_mod_io.rb +0 -53
  88. data/tests/tc_mod_project_info.rb +0 -79
  89. data/tests/tc_mod_string.rb +0 -58
  90. /data/data/{phx.csv → 20060115_phoenix_marathon.csv} +0 -0
  91. /data/data/{phx.xml → 20060115_phoenix_marathon.xml} +0 -0
@@ -1,181 +0,0 @@
1
- module Gooby
2
-
3
- =begin rdoc
4
- Instances of this class represent a the set of Geographic data defined in file geo.txt
5
- =end
6
-
7
- class GeoData < GoobyObject
8
-
9
- attr_reader :filename, :lines, :poi_hash, :poi_array, :track_hash, :track_array, :route_hash, :route_array
10
-
11
- def initialize(filename)
12
- @filename = filename
13
- @filename = 'data/geo_data.txt' if @filename == nil
14
- @lines = read_lines(@filename, true)
15
- @poi_hash = Hash.new
16
- @poi_array = Array.new
17
- @track_hash = Hash.new
18
- @track_array = Array.new
19
- @route_hash = Hash.new
20
- @route_array = Array.new
21
- parse_poi
22
- parse_tracks
23
- parse_routes
24
- end
25
-
26
- private
27
-
28
- def parse_poi
29
- in_poi, poi_number = false, 0
30
- @lines.each { |line|
31
- line_obj = Line.new(line, nil, true)
32
- tok_count = line_obj.token_count
33
- is_point = line_obj.token_idx_equals(0, '.')
34
-
35
- if line_obj.is_populated_non_comment
36
- if line_obj.match('points_of_interest_start')
37
- in_poi = true
38
- elsif line_obj.match('points_of_interest_end')
39
- in_poi = false
40
- elsif in_poi && tok_count > 2 && is_point
41
- poi_number = poi_number + 1
42
- tkpt = Trackpoint.new(
43
- poi_number, line_obj.tokens[1], line_obj.tokens[2],
44
- '0', '', line_obj.concatinate_tokens(3))
45
- add_poi(tkpt)
46
- end
47
- end
48
- }
49
- end
50
-
51
- def parse_tracks
52
- in_track, trk_number, tkpt_number = false, 0, 0
53
- curr_trk, curr_run = nil, nil
54
- @lines.each { |line|
55
- line_obj = Line.new(line, nil, true)
56
- tok_count = line_obj.token_count
57
- is_point = line_obj.token_idx_equals(0, '.')
58
-
59
- if line_obj.is_populated_non_comment
60
- if line_obj.match('track_start')
61
- in_track = true
62
- trk_number = trk_number + 1
63
- tkpt_number = 0
64
- curr_trk = Track.new(0, line_obj.concatinate_tokens(1))
65
- curr_run = Run.new(trk_number, line_obj.concatinate_tokens(1))
66
- curr_run.add_track(curr_trk)
67
- elsif line_obj.match('track_end')
68
- in_track = false
69
- curr_run.finish
70
- add_track(curr_trk)
71
- add_route(curr_run)
72
- elsif in_track && tok_count > 2 && is_point
73
- tkpt_number = tkpt_number + 1
74
- tkpt = Trackpoint.new(
75
- tkpt_number, line_obj.tokens[1], line_obj.tokens[2],
76
- '0', '', line_obj.concatinate_tokens(3))
77
- curr_trk.add_trackpoint(tkpt)
78
- end
79
- end
80
- }
81
- end
82
-
83
- def parse_routes
84
- in_route, route_number, trk_number, tkpt_number = false, 0, 0, 0
85
- curr_trk, curr_run = nil, nil
86
- @lines.each { |line|
87
- line_obj = Line.new(line, nil, true)
88
- tok_count = line_obj.token_count
89
- is_point = line_obj.token_idx_equals(0, '.')
90
-
91
- if line_obj.is_populated_non_comment
92
- if line_obj.match('route_start')
93
- in_route = true
94
- trk_number = trk_number + 1
95
- tkpt_number = 0
96
- curr_trk = Track.new(0, line_obj.concatinate_tokens(1))
97
- curr_run = Run.new(trk_number, line_obj.concatinate_tokens(1))
98
- curr_run.add_track(curr_trk)
99
- elsif line_obj.match('route_end')
100
- in_route = false
101
- curr_run.finish
102
- add_route(curr_run)
103
- elsif in_route && tok_count > 2 && is_point
104
- tkpt_number = tkpt_number + 1
105
- tkpt = Trackpoint.new(
106
- tkpt_number, line_obj.tokens[1], line_obj.tokens[2],
107
- '0', '', line_obj.concatinate_tokens(3))
108
- curr_trk.add_trackpoint(tkpt)
109
- elsif in_route && line_obj.token_idx_equals(0, 'track') && tok_count > 1
110
- trk_desc = line_obj.concatinate_tokens(1)
111
- trk = @track_hash[trk_desc]
112
- if trk
113
- trk.trackpoints.each { |tkpt| curr_trk.add_trackpoint(tkpt) }
114
- end
115
- elsif in_route && line_obj.token_idx_equals(0, 'track_rev') && tok_count > 1
116
- trk_desc = line_obj.concatinate_tokens(1)
117
- trk = @track_hash[trk_desc]
118
- if trk
119
- array = trk.trackpoints
120
- trk.trackpoints.each { |tkpt| curr_trk.add_trackpoint(tkpt) }
121
- end
122
- end
123
- end
124
- }
125
- end
126
-
127
- def add_poi(tkpt)
128
- if tkpt
129
- descr = tkpt.descr
130
- if @poi_hash.has_key? descr
131
- puts "Duplicate POI key ignored - '#{descr}'"
132
- else
133
- #puts "Adding POI: #{tkpt.to_poi_csv}"
134
- @poi_hash[descr] = tkpt
135
- @poi_array << tkpt
136
- end
137
- end
138
- end
139
-
140
- def add_track(trk)
141
- if trk
142
- descr = trk.descr
143
- if @track_hash.has_key? descr
144
- puts "Duplicate Track key ignored - '#{descr}'"
145
- else
146
- @track_hash[descr] = trk
147
- @track_array << trk
148
- end
149
- end
150
- end
151
-
152
- def add_route(run)
153
- if run
154
- descr = run.descr
155
- if @route_hash.has_key? descr
156
- puts "Duplicate Route key ignored - '#{descr}'"
157
- else
158
- @route_hash[descr] = run
159
- @route_array << run
160
- end
161
- end
162
- end
163
-
164
- public
165
-
166
- def to_s
167
- return "GeoData lines: #{lines.size} poi: #{@poi_hash.size} tracks: #{@track_hash.size} routes: #{@route_hash.size} "
168
- end
169
-
170
- def dump
171
- puts "#{self.class} dump:"
172
- @poi_array.each { |tkpt| puts "POI: #{tkpt.to_geo_s}" }
173
- @track_array.each { |trk| trk.dump }
174
- @route_hash.keys.sort.each { |key|
175
- puts "Route: '#{key}'"
176
- }
177
- end
178
-
179
- end
180
-
181
- end # end of module
@@ -1,46 +0,0 @@
1
- module Gooby
2
-
3
- =begin rdoc
4
- This class provides "user friendly DSL" functionality for the use
5
- of Gooby.
6
- =end
7
-
8
- class GoobyCommand < GoobyObject
9
-
10
- def initialize
11
- end
12
-
13
- def options(yaml_filename)
14
- Gooby::Options.new(yaml_filename)
15
- end
16
-
17
- def split_garmin_forerunner_logbook_xml(xml_filename, out_dir)
18
- splitter = Gooby::ForerunnerXmlSplitter.new(xml_filename, out_dir)
19
- splitter.split
20
- end
21
-
22
- def split_garmin_training_center_xml(tcx_filename, out_dir)
23
- splitter = Gooby::TrainingCenterXmlSplitter.new(tcx_filename, out_dir)
24
- splitter.split
25
- end
26
-
27
- def parse_garmin_forerunner_logbook_xml(xml_filename)
28
- handler = Gooby::ForerunnerXmlParser.new
29
- Document.parse_stream((File.new xml_filename), handler)
30
- handler.put_all_run_tkpt_csv(true)
31
- end
32
-
33
- def parse_garmin_training_center_xml(tcx_filename)
34
- handler = Gooby::TrainingCenterXmlParser.new
35
- Document.parse_stream((File.new tcx_filename), handler)
36
- handler.put_all_run_tkpt_csv(true)
37
- end
38
-
39
- def generate_google_map(csv_filename, options_obj)
40
- generator = Gooby::GoogleMapGenerator.new(csv_filename)
41
- generator.generate_page(options_obj)
42
- end
43
-
44
- end
45
-
46
- end # end of module
@@ -1,18 +0,0 @@
1
- module Gooby
2
-
3
- =begin rdoc
4
- This is the abstract superclass of several Gooby classes.
5
- Includes modules GoobyIO, Introspect, and GoobyProjectInfo.
6
- =end
7
-
8
- class GoobyObject
9
-
10
- include Gooby::GoobyIO
11
- include Gooby::GoobyString
12
- include Gooby::Introspect
13
- include Gooby::GoobyProjectInfo
14
- include Gooby::Con
15
-
16
- end
17
-
18
- end # end of module
@@ -1,363 +0,0 @@
1
- module Gooby
2
-
3
- =begin rdoc
4
- Instances of this class represent a <Run> aggregate object from a
5
- Forerunner XML file.
6
-
7
- Additionally, there is distance, pace, and Google Map generation logic
8
- in this class.
9
- =end
10
-
11
- class GoogleMapGenerator < GoobyObject
12
-
13
- attr_reader :csv_file, :csv_lines, :dttm_idx, :num_idx, :lat_idx, :lng_idx, :alt_idx, :cdist_idx
14
- attr_reader :run, :tkpts, :content_hash, :center_longitude, :center_latitude, :gpoint_array, :overlay_points, :notes
15
- attr_reader :center_longitude, :center_latitude
16
-
17
- # The default csv input file format is as follows:
18
- # 1 | 2006-01-15T18:31:10Z | 1279 | 33.42601 | -111.92927 | 347.654 | 26.3514930151813
19
- # 1 | 2004-11-13T13:05:20Z | 2 | 37.54318 | -77.43636 | -58.022 | 0.00297286231747969
20
-
21
- def initialize(csv_file, dttm_idx=1, num_idx=2, lat_idx=3, lng_idx=4, alt_idx=5, cdist_idx=6)
22
- @csv_file = csv_file
23
- @dttm_idx = dttm_idx
24
- @num_idx = num_idx
25
- @lat_idx = lat_idx
26
- @lng_idx = lng_idx
27
- @alt_idx = alt_idx
28
- @cdist_idx = cdist_idx
29
- @options = Gooby::Options.new(nil)
30
- @content_hash = Hash.new('')
31
- @run = Gooby::Run.new(1)
32
- @track = Gooby::Track.new(1)
33
- @run.add_track(@track)
34
- @tkpts = Array.new
35
-
36
- @csv_lines = read_as_ascii_lines(@csv_file, 10, true)
37
- @csv_lines.each { | line |
38
- dline = Gooby::DelimLine.new(line)
39
- if (!dline.is_comment?)
40
- tkpt = dline.as_trackpoint(@num_idx, @lat_idx, @lng_idx, @alt_idx, @dttm_idx)
41
- if tkpt
42
- @track.add_trackpoint(tkpt)
43
- end
44
- end
45
- }
46
- @run.finish
47
- end
48
-
49
- =begin
50
- Returns a Hash with specific generated content at the following keys:
51
- =end
52
- def generate(options)
53
- if (options == nil)
54
- @options = Gooby::Options.new(nil)
55
- else
56
- @options = options
57
- end
58
- @content_hash['when_generated'] = Time.now
59
- @content_hash['title'] = @options.get('gmap_title')
60
- filter_trackpoints
61
- compute_center_point
62
- generate_key_js
63
- generate_map_div
64
- generate_messages_div
65
- generate_main_js_start
66
- generate_main_js_route_overlay
67
- generate_main_js_checkpoint_overlays
68
- generate_main_js_map_clicked_listeners
69
- generate_main_js_end
70
- @content_hash
71
- end
72
-
73
- def filter_trackpoints
74
- count, @tkpts = 0, Array.new
75
- firstTkpt = @options.get('gmap_first_tkpt_number')
76
- lastTkpt = @options.get('gmap_last_tkpt_number')
77
- @run.tracks.each { |trk|
78
- trk.trackpoints.each { |tkpt|
79
- count = count + 1
80
- if ((count >= firstTkpt) && (count <= lastTkpt))
81
- @tkpts.push(tkpt)
82
- end
83
- }
84
- }
85
- end
86
-
87
- =begin
88
- Returns a Hash with specific generated content at the following keys:
89
- =end
90
- def generate_page(options)
91
-
92
- # puts "generate_page #{@csv_file} #{@csv_lines.size}"
93
- content_hash = generate(nil)
94
- s = String.new(@csv_file)
95
- s.gsub("/", " ")
96
- tokens = tokenize(s, nil)
97
- out_file = "#{tokens[-2]}.html"
98
- #content_hash.keys.sort.each { | key | puts key }
99
-
100
- s = <<HERE
101
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
102
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
103
- <html xmlns="http://www.w3.org/1999/xhtml">
104
- <head>
105
- <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
106
- <title> Google Map by Gooby </title>
107
- #{content_hash['key_js']}
108
- #{content_hash['main_js_start']}
109
- #{content_hash['main_js_route_overlay']}
110
- #{content_hash['main_js_checkpoint_overlays']}
111
- #{content_hash['main_js_map_clicked_listeners']}
112
- #{content_hash['main_js_end']}
113
- </head>
114
- <body onload="load()" onunload="GUnload()">
115
- <center>
116
- <h3> #{content_hash['title']} </h3>
117
- <h5> Generated by Gooby #{content_hash['when_generated']} <br> Gooby = Google APIs + Ruby </h5>
118
- #{content_hash['map_div']}
119
- #{content_hash['messages_div']}
120
- </center>
121
- </body>
122
- </html>
123
- HERE
124
-
125
- # html_file = File.new(out_file, "w+")
126
- # html_file.write(s)
127
- # html_file.flush
128
- # html_file.close
129
- puts s # Output is redirected by shell.
130
- end
131
-
132
- private
133
-
134
- def compute_center_point
135
- highLat = -999.0
136
- highLong = -999.0
137
- lowLat = 999.0
138
- lowLong = 999.0
139
- @tkpts.each { |tkpt|
140
- highLat = tkpt.latitude_as_float if tkpt.latitude_as_float > highLat
141
- lowLat = tkpt.latitude_as_float if tkpt.latitude_as_float < lowLat
142
- highLong = tkpt.longitude_as_float if tkpt.longitude_as_float > highLong
143
- lowLong = tkpt.longitude_as_float if tkpt.longitude_as_float < lowLong
144
- }
145
- @center_longitude = (highLong + lowLong) / 2
146
- @center_latitude = (highLat + lowLat) / 2
147
- @content_hash['center_longitude'] = @center_longitude
148
- @content_hash['center_latitude'] = @center_latitude
149
- end
150
-
151
- def generate_key_js
152
- key = @options.get('gmap_key')
153
- key.strip!
154
- s = '<script src="http://maps.google.com/maps?file=api&v=2&key='
155
- s << key
156
- s << '" type="text/javascript"></script>'
157
- @content_hash['key_js'] = s
158
- end
159
-
160
- def generate_map_div
161
- width = @options.get('gmap_width')
162
- height = @options.get('gmap_height')
163
- id = @options.get('gmap_map_element_id')
164
- s = '<div id="'
165
- s << id
166
- s << '" style="width: '
167
- s << width
168
- s << '; height: '
169
- s << height
170
- s << '"></div>'
171
- @content_hash['map_width'] = width
172
- @content_hash['map_height'] = height
173
- @content_hash['map_div'] = s
174
- end
175
-
176
- def generate_messages_div
177
- s = "<div id=\"messages\"></div>"
178
- @content_hash['messages_div'] = s
179
- end
180
-
181
- def generate_main_js_start
182
- id = @options.get('gmap_map_element_id')
183
- size = @options.get('gmap_size_control')
184
- type = @options.get('gmap_type')
185
- zoom = @options.get('gmap_zoom_level')
186
- title = @options.get('gmap_title')
187
- if size
188
- if size == 'smallmap'
189
- size = 'GSmallMapControl'
190
- elsif size == 'smallzoom'
191
- size = 'GSmallMapControl'
192
- else
193
- size = 'GLargeMapControl'
194
- end
195
- end
196
-
197
- if type
198
- if type == 'satellite'
199
- type = 'G_SATELLITE_MAP'
200
- elsif type == 'hybrid'
201
- type = 'G_HYBRID_MAP'
202
- else
203
- type = 'G_NORMAL_MAP'
204
- end
205
- else
206
- type = 'G_NORMAL_MAP'
207
- end
208
-
209
- s = '<script type="text/javascript">'
210
- s << "\n"
211
- s << "//<![CDATA[ \n"
212
- s << " function load() { \n"
213
- s << " if (GBrowserIsCompatible()) { \n"
214
- s << ' var map = new GMap2(document.getElementById("'
215
- s << id
216
- s << '")); '
217
- s << "\n"
218
-
219
- if size
220
- s << ' map.addControl(new '
221
- s << size
222
- s << '());'
223
- s << "\n"
224
- end
225
-
226
- if type
227
- s << ' map.addControl(new GMapTypeControl());'
228
- s << "\n"
229
- # s << ' map.setMapType('
230
- # s << type
231
- # s << ');'
232
- s << "\n"
233
- end
234
- s << " var centerPoint = new GLatLng(#{@center_latitude}, #{@center_longitude}); \n"
235
- s << " map.setCenter(centerPoint, #{zoom}); \n"
236
- s << "\n"
237
- @content_hash['main_js_start'] = s
238
- @content_hash['title'] = title
239
- end
240
-
241
- def generate_main_js_route_overlay
242
- tkpt_count = @tkpts.size.to_f
243
- app_max = @options.get('gmap_approx_max_points').to_f
244
- comments = @options.get('gmap_gen_comments')
245
- ratio = tkpt_count / app_max
246
- @start_dttm = nil
247
- if ratio > 1.0
248
- increment = (tkpt_count / app_max).to_i
249
- else
250
- increment = 1
251
- end
252
- curr_idx, next_idx, gpoint_count, last_idx = -1, 0, 0, @tkpts.size - 1
253
- s = " var points = new Array(); "
254
- @tkpts.each { |tkpt|
255
- curr_idx = curr_idx + 1
256
- if curr_idx == 0
257
- @start_dttm = tkpt.dttm
258
- @start_pos = tkpt.position
259
- time = Time.parse(@start_dttm.dateTime().to_s)
260
- end
261
- if ((curr_idx == next_idx) || (curr_idx == last_idx) || (tkpt.is_split()))
262
- gpoint_count = gpoint_count + 1
263
- s << tkpt.as_glatlng(comments, tkpt_count, curr_idx, gpoint_count, @start_dttm)
264
- next_idx = curr_idx + increment
265
- end
266
- }
267
- s << "\n"
268
- s << "\n var routePolyline = new GPolyline(points); "
269
- s << "\n map.addOverlay(routePolyline); "
270
- @content_hash['main_js_route_overlay'] = s
271
- @content_hash['main_js_route_overlay_increment'] = increment
272
- end
273
-
274
- def generate_main_js_checkpoint_overlays
275
- s = "\n // Create a base icon for all of our markers that specifies the "
276
- s << "\n // shadow, icon dimensions, etc."
277
- s << "\n var baseIcon = new GIcon();"
278
- s << "\n baseIcon.shadow = \"http://www.joakim-systems.com/gicons/shadow50.png\";"
279
- s << "\n baseIcon.iconSize = new GSize(20, 34);"
280
- s << "\n baseIcon.shadowSize = new GSize(37, 34);"
281
- s << "\n baseIcon.iconAnchor = new GPoint(9, 34);"
282
- s << "\n baseIcon.infoWindowAnchor = new GPoint(9, 2);"
283
- s << "\n baseIcon.infoShadowAnchor = new GPoint(18, 25);"
284
- s << "\n"
285
-
286
- curr_idx = -1
287
- last_idx = @tkpts.size - 1
288
- next_checkpoint = 0.0
289
- @start_dttm = nil
290
- @tkpts.each { | tkpt |
291
- curr_idx = curr_idx + 1
292
- if curr_idx == 0
293
- @start_dttm = tkpt.dttm
294
- info_window_html = tkpt.as_info_window_html('Start', @start_dttm)
295
- s << "\n var iconStart = new GIcon(baseIcon); "
296
- s << "\n iconStart.image = \"http://www.joakim-systems.com/gicons/dd-start.png\";"
297
- s << "\n var pStart = new GPoint(#{tkpt.longitude_as_float}, #{tkpt.latitude_as_float});"
298
- s << "\n var mStart = new GMarker(pStart, iconStart);"
299
- s << "\n GEvent.addListener(mStart, \"click\", function() { "
300
- s << "\n mStart.openInfoWindowHtml(#{info_window_html});"
301
- s << "\n }); "
302
- s << "\n map.addOverlay(mStart);"
303
- s << "\n "
304
- next_checkpoint = 1.0
305
- elsif curr_idx == last_idx
306
- info_window_html = tkpt.as_info_window_html('Finish', @start_dttm)
307
- s << "\n var iconFinish = new GIcon(baseIcon); "
308
- s << "\n iconFinish.image = \"http://www.joakim-systems.com/gicons/dd-end.png\";"
309
- s << "\n var pFinish = new GPoint(#{tkpt.longitude_as_float}, #{tkpt.latitude_as_float});"
310
- s << "\n var mFinish = new GMarker(pFinish, iconFinish);"
311
- s << "\n GEvent.addListener(mFinish, \"click\", function() { "
312
- s << "\n mFinish.openInfoWindowHtml(#{info_window_html});"
313
- s << "\n }); "
314
- s << "\n map.addOverlay(mFinish);"
315
- s << "\n "
316
- next_checkpoint = 999999
317
- else
318
- if (tkpt.cumulativeDistance >= next_checkpoint)
319
- integer = next_checkpoint.to_i
320
- info_window_html = tkpt.as_info_window_html("#{integer}", @start_dttm)
321
- s << "\n var icon#{integer} = new GIcon(baseIcon); "
322
- s << "\n icon#{integer}.image = \"http://www.joakim-systems.com/gicons/marker#{integer}.png\";"
323
- s << "\n var p#{integer} = new GPoint(#{tkpt.longitude_as_float}, #{tkpt.latitude_as_float});"
324
- s << "\n var m#{integer} = new GMarker(p#{integer}, icon#{integer});"
325
- s << "\n GEvent.addListener(m#{integer}, \"click\", function() { "
326
- s << "\n m#{integer}.openInfoWindowHtml(#{info_window_html});"
327
- s << "\n }); "
328
- s << "\n map.addOverlay(m#{integer});"
329
- s << "\n "
330
- next_checkpoint = next_checkpoint + 1.0
331
- end
332
- end
333
- }
334
- s << "\n"
335
- @content_hash['main_js_checkpoint_overlays'] = s
336
-
337
- end
338
-
339
- def generate_main_js_map_clicked_listeners
340
- s = "\n"
341
- s << "\n GEvent.addListener(map, \"click\", function() { "
342
- s << "\n var center = map.getCenter(); \n"
343
- s << "\n document.getElementById(\"messages\").innerHTML = 'click: ' + center.toString(); "
344
- s << "\n });"
345
- s << "\n GEvent.addListener(map, \"moveend\", function() { "
346
- s << "\n var center = map.getCenter(); \n"
347
- s << "\n document.getElementById(\"messages\").innerHTML = 'moveend: ' + center.toString(); "
348
- s << "\n });"
349
- @content_hash['main_js_map_clicked_listeners'] = s
350
- end
351
-
352
- def generate_main_js_end
353
- s = "\n } "
354
- s << "\n } "
355
- s << "\n//]]> \n"
356
- s << "\n</script>"
357
-
358
- @content_hash['main_js_end'] = s
359
- end
360
-
361
- end
362
-
363
- end # end of module
@@ -1,33 +0,0 @@
1
- module Gooby
2
-
3
- =begin rdoc
4
- Instances of this class represent a <History> aggregate object from a
5
- Forerunner XML file.
6
- =end
7
-
8
- class History < GoobyObject
9
-
10
- attr_reader :runs
11
-
12
- def initialize
13
- @runs = Array.new
14
- end
15
-
16
- # Adds a Run during XML parsing.
17
- def add_run(run)
18
- @runs.push(run)
19
- end
20
-
21
- def to_s
22
- return "Hist: runs: #{@runs.size}"
23
- end
24
-
25
- def print_string
26
- s = "History: run count=#{@runs.size} \n"
27
- runs.each { | run | s << run.print_string }
28
- s
29
- end
30
-
31
- end
32
-
33
- end # end of module
data/lib/gooby/cls_lap.rb DELETED
@@ -1,22 +0,0 @@
1
- module Gooby
2
-
3
- =begin rdoc
4
- Instances of this class represent a <Lap> aggregate object from a
5
- Forerunner XML file.
6
- =end
7
-
8
- class Lap < GoobyObject
9
-
10
- attr_accessor :number, :startTime, :duration, :length, :beginPosition, :endPosition
11
-
12
- def initialize(num)
13
- @number = num
14
- end
15
-
16
- def to_s
17
- return "Lap: num: #{@number} start: #{@startTime} dur: #{@duration} len: #{@length} begin: #{@beginPosition.to_s} end: #{@endPosition.to_s}"
18
- end
19
-
20
- end
21
-
22
- end # end of module