gooby 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (257) hide show
  1. data/README +133 -341
  2. data/config/ballantyne.yaml +11 -0
  3. data/config/big_sur_marathon.yaml +11 -0
  4. data/config/crowders_mtn_hike.yaml +11 -0
  5. data/config/davidson1.yaml +16 -0
  6. data/config/gooby_config.yaml +28 -135
  7. data/cucumber.yml +1 -0
  8. data/features/build_gem.feature +88 -0
  9. data/features/gooby.feature +300 -0
  10. data/features/install.feature +78 -0
  11. data/features/steps/gooby_steps.rb +245 -0
  12. data/features/support/env.rb +4 -0
  13. data/lib/gooby.rb +24 -30
  14. data/lib/gooby_activity.rb +63 -0
  15. data/lib/gooby_base_object.rb +46 -0
  16. data/lib/gooby_base_sax_parser.rb +95 -0
  17. data/lib/gooby_configuration.rb +33 -115
  18. data/lib/gooby_counter_hash.rb +28 -87
  19. data/lib/gooby_dttm.rb +88 -66
  20. data/lib/gooby_environment.rb +48 -0
  21. data/lib/gooby_garmin_tcx_parser.rb +92 -0
  22. data/lib/gooby_google_kml_generator.rb +168 -0
  23. data/lib/gooby_google_map_generator.rb +284 -349
  24. data/lib/gooby_gpx_parser.rb +97 -0
  25. data/lib/gooby_help_producer.rb +40 -0
  26. data/lib/gooby_introspection.rb +25 -0
  27. data/lib/gooby_io.rb +30 -0
  28. data/lib/gooby_lap.rb +27 -18
  29. data/lib/gooby_process.rb +281 -0
  30. data/lib/gooby_sax_path_parser.rb +43 -0
  31. data/lib/gooby_tcx_extractor.rb +71 -0
  32. data/lib/gooby_track_log_parser.rb +114 -0
  33. data/lib/gooby_trackpoint.rb +276 -0
  34. data/lib/gooby_xml_object.rb +40 -0
  35. data/{img/gicons → out/images}/blank.png +0 -0
  36. data/{img/gicons → out/images}/dd-end.png +0 -0
  37. data/{img/gicons → out/images}/dd-start.png +0 -0
  38. data/{img/gicons → out/images}/marker.png +0 -0
  39. data/{img/gicons → out/images}/marker0.png +0 -0
  40. data/{img/gicons → out/images}/marker00.png +0 -0
  41. data/{img/gicons → out/images}/marker01.png +0 -0
  42. data/{img/gicons → out/images}/marker02.png +0 -0
  43. data/{img/gicons → out/images}/marker03.png +0 -0
  44. data/{img/gicons → out/images}/marker04.png +0 -0
  45. data/{img/gicons → out/images}/marker05.png +0 -0
  46. data/{img/gicons → out/images}/marker06.png +0 -0
  47. data/{img/gicons → out/images}/marker07.png +0 -0
  48. data/{img/gicons → out/images}/marker08.png +0 -0
  49. data/{img/gicons → out/images}/marker09.png +0 -0
  50. data/{img/gicons → out/images}/marker1.png +0 -0
  51. data/{img/gicons → out/images}/marker10.png +0 -0
  52. data/{img/gicons → out/images}/marker11.png +0 -0
  53. data/{img/gicons → out/images}/marker12.png +0 -0
  54. data/{img/gicons → out/images}/marker13.png +0 -0
  55. data/{img/gicons → out/images}/marker14.png +0 -0
  56. data/{img/gicons → out/images}/marker15.png +0 -0
  57. data/{img/gicons → out/images}/marker16.png +0 -0
  58. data/{img/gicons → out/images}/marker17.png +0 -0
  59. data/{img/gicons → out/images}/marker18.png +0 -0
  60. data/{img/gicons → out/images}/marker19.png +0 -0
  61. data/{img/gicons → out/images}/marker2.png +0 -0
  62. data/{img/gicons → out/images}/marker20.png +0 -0
  63. data/{img/gicons → out/images}/marker21.png +0 -0
  64. data/{img/gicons → out/images}/marker22.png +0 -0
  65. data/{img/gicons → out/images}/marker23.png +0 -0
  66. data/{img/gicons → out/images}/marker24.png +0 -0
  67. data/{img/gicons → out/images}/marker25.png +0 -0
  68. data/{img/gicons → out/images}/marker26.png +0 -0
  69. data/{img/gicons → out/images}/marker27.png +0 -0
  70. data/{img/gicons → out/images}/marker28.png +0 -0
  71. data/{img/gicons → out/images}/marker29.png +0 -0
  72. data/{img/gicons → out/images}/marker3.png +0 -0
  73. data/{img/gicons → out/images}/marker30.png +0 -0
  74. data/{img/gicons → out/images}/marker31.png +0 -0
  75. data/{img/gicons → out/images}/marker32.png +0 -0
  76. data/{img/gicons → out/images}/marker33.png +0 -0
  77. data/{img/gicons → out/images}/marker34.png +0 -0
  78. data/{img/gicons → out/images}/marker35.png +0 -0
  79. data/{img/gicons → out/images}/marker36.png +0 -0
  80. data/{img/gicons → out/images}/marker37.png +0 -0
  81. data/{img/gicons → out/images}/marker38.png +0 -0
  82. data/{img/gicons → out/images}/marker39.png +0 -0
  83. data/{img/gicons → out/images}/marker4.png +0 -0
  84. data/{img/gicons → out/images}/marker40.png +0 -0
  85. data/{img/gicons → out/images}/marker41.png +0 -0
  86. data/{img/gicons → out/images}/marker42.png +0 -0
  87. data/{img/gicons → out/images}/marker43.png +0 -0
  88. data/{img/gicons → out/images}/marker44.png +0 -0
  89. data/{img/gicons → out/images}/marker45.png +0 -0
  90. data/{img/gicons → out/images}/marker46.png +0 -0
  91. data/{img/gicons → out/images}/marker47.png +0 -0
  92. data/{img/gicons → out/images}/marker48.png +0 -0
  93. data/{img/gicons → out/images}/marker49.png +0 -0
  94. data/{img/gicons → out/images}/marker5.png +0 -0
  95. data/{img/gicons → out/images}/marker50.png +0 -0
  96. data/{img/gicons → out/images}/marker51.png +0 -0
  97. data/{img/gicons → out/images}/marker52.png +0 -0
  98. data/{img/gicons → out/images}/marker53.png +0 -0
  99. data/{img/gicons → out/images}/marker54.png +0 -0
  100. data/{img/gicons → out/images}/marker55.png +0 -0
  101. data/{img/gicons → out/images}/marker56.png +0 -0
  102. data/{img/gicons → out/images}/marker57.png +0 -0
  103. data/{img/gicons → out/images}/marker58.png +0 -0
  104. data/{img/gicons → out/images}/marker59.png +0 -0
  105. data/{img/gicons → out/images}/marker6.png +0 -0
  106. data/{img/gicons → out/images}/marker60.png +0 -0
  107. data/{img/gicons → out/images}/marker61.png +0 -0
  108. data/{img/gicons → out/images}/marker62.png +0 -0
  109. data/{img/gicons → out/images}/marker63.png +0 -0
  110. data/{img/gicons → out/images}/marker64.png +0 -0
  111. data/{img/gicons → out/images}/marker65.png +0 -0
  112. data/{img/gicons → out/images}/marker66.png +0 -0
  113. data/{img/gicons → out/images}/marker67.png +0 -0
  114. data/{img/gicons → out/images}/marker68.png +0 -0
  115. data/{img/gicons → out/images}/marker69.png +0 -0
  116. data/{img/gicons → out/images}/marker7.png +0 -0
  117. data/{img/gicons → out/images}/marker70.png +0 -0
  118. data/{img/gicons → out/images}/marker71.png +0 -0
  119. data/{img/gicons → out/images}/marker72.png +0 -0
  120. data/{img/gicons → out/images}/marker73.png +0 -0
  121. data/{img/gicons → out/images}/marker74.png +0 -0
  122. data/{img/gicons → out/images}/marker75.png +0 -0
  123. data/{img/gicons → out/images}/marker76.png +0 -0
  124. data/{img/gicons → out/images}/marker77.png +0 -0
  125. data/{img/gicons → out/images}/marker78.png +0 -0
  126. data/{img/gicons → out/images}/marker79.png +0 -0
  127. data/{img/gicons → out/images}/marker8.png +0 -0
  128. data/{img/gicons → out/images}/marker80.png +0 -0
  129. data/{img/gicons → out/images}/marker81.png +0 -0
  130. data/{img/gicons → out/images}/marker82.png +0 -0
  131. data/{img/gicons → out/images}/marker83.png +0 -0
  132. data/{img/gicons → out/images}/marker84.png +0 -0
  133. data/{img/gicons → out/images}/marker85.png +0 -0
  134. data/{img/gicons → out/images}/marker86.png +0 -0
  135. data/{img/gicons → out/images}/marker87.png +0 -0
  136. data/{img/gicons → out/images}/marker88.png +0 -0
  137. data/{img/gicons → out/images}/marker89.png +0 -0
  138. data/{img/gicons → out/images}/marker9.png +0 -0
  139. data/{img/gicons → out/images}/marker90.png +0 -0
  140. data/{img/gicons → out/images}/marker91.png +0 -0
  141. data/{img/gicons → out/images}/marker92.png +0 -0
  142. data/{img/gicons → out/images}/marker93.png +0 -0
  143. data/{img/gicons → out/images}/marker94.png +0 -0
  144. data/{img/gicons → out/images}/marker95.png +0 -0
  145. data/{img/gicons → out/images}/marker96.png +0 -0
  146. data/{img/gicons → out/images}/marker97.png +0 -0
  147. data/{img/gicons → out/images}/marker98.png +0 -0
  148. data/{img/gicons → out/images}/marker99.png +0 -0
  149. data/{img/gicons → out/images}/markerA.png +0 -0
  150. data/{img/gicons → out/images}/markerB.png +0 -0
  151. data/{img/gicons → out/images}/markerC.png +0 -0
  152. data/{img/gicons → out/images}/markerD.png +0 -0
  153. data/{img/gicons → out/images}/markerE.png +0 -0
  154. data/{img/gicons → out/images}/markerF.png +0 -0
  155. data/{img/gicons → out/images}/markerG.png +0 -0
  156. data/{img/gicons → out/images}/markerH.png +0 -0
  157. data/{img/gicons → out/images}/markerI.png +0 -0
  158. data/{img/gicons → out/images}/markerJ.png +0 -0
  159. data/{img/gicons → out/images}/mm_20_red.png +0 -0
  160. data/{img/gicons → out/images}/mm_20_shadow.png +0 -0
  161. data/{img/gicons → out/images}/shadow50.png +0 -0
  162. data/rakefile.rb +79 -0
  163. data/samples.sh +21 -0
  164. data/samples/2008_04_27_13_49_50_tcx.csv +2449 -0
  165. data/samples/2008_04_27_13_49_50_tcx.xml +24560 -0
  166. data/samples/2009_01_01_14_45_00_tcx.xml +10630 -0
  167. data/samples/ballantyne.csv +27 -0
  168. data/samples/ballantyne.gpx +117 -0
  169. data/samples/ballantyne.kml +91 -0
  170. data/samples/big_sur_marathon.html +2766 -0
  171. data/samples/big_sur_marathon.kml +685 -0
  172. data/samples/build_gem_test_results.txt +6 -0
  173. data/samples/crowders_mtn_hike.csv +1065 -0
  174. data/samples/crowders_mtn_hike.html +1283 -0
  175. data/samples/crowders_mtn_hike.log +1 -0
  176. data/samples/cucumber_test_results.txt +302 -0
  177. data/samples/davidson1.csv +1 -0
  178. data/samples/davidson1.html +75 -0
  179. data/samples/davidson_1_point_tcx.csv +0 -0
  180. data/samples/doc.kml +49 -0
  181. data/samples/gps_track_log_asheville_mt_pisgah.txt +1 -0
  182. data/samples/gps_track_logs.txt +1 -0
  183. data/samples/install_test_results.txt +81 -0
  184. data/samples/mt_pisgah.txt +1 -0
  185. data/samples/rspec_test_results.txt +5 -0
  186. data/setup.rb +66 -0
  187. data/spec/gooby_base_object_spec.rb +116 -0
  188. data/spec/gooby_counter_hash_spec.rb +34 -0
  189. data/spec/gooby_dttm_spec.rb +40 -0
  190. data/spec/gooby_spec_helper.rb +9 -0
  191. data/spec/gooby_xml_object_spec.rb +32 -0
  192. metadata +225 -226
  193. data/bin/code_scan.rb +0 -16
  194. data/bin/gooby_been_there.rb +0 -33
  195. data/bin/gooby_config.rb +0 -24
  196. data/bin/gooby_csv_validation.rb +0 -50
  197. data/bin/gooby_first_trackpoints_as_poi.rb +0 -31
  198. data/bin/gooby_gen_gmap.rb +0 -20
  199. data/bin/gooby_parser.rb +0 -21
  200. data/bin/gooby_splitter.rb +0 -21
  201. data/bin/gooby_version.rb +0 -20
  202. data/bin/run_all.sh +0 -33
  203. data/bin/run_been_there.sh +0 -19
  204. data/bin/run_config.sh +0 -12
  205. data/bin/run_csv_validation.sh +0 -15
  206. data/bin/run_db_gen.sh +0 -11
  207. data/bin/run_db_load.sh +0 -11
  208. data/bin/run_first_trackpoints_as_poi.sh +0 -16
  209. data/bin/run_gen_gmaps.sh +0 -21
  210. data/bin/run_parse_full.sh +0 -45
  211. data/bin/run_parse_samples.sh +0 -21
  212. data/bin/run_split.sh +0 -24
  213. data/bin/run_version.sh +0 -12
  214. data/data/20050305_corporate_cup_hm.csv +0 -251
  215. data/data/20050305_corporate_cup_hm.xml +0 -2208
  216. data/data/20050430_nashville_marathon.xml +0 -10043
  217. data/data/20050430_nashville_marathon_km.csv +0 -1208
  218. data/data/20060115_phoenix_marathon.csv +0 -1280
  219. data/data/20060115_phoenix_marathon.xml +0 -10620
  220. data/data/20070101_davidson_11m.csv +0 -251
  221. data/data/20070101_davidson_11m.xml +0 -2020
  222. data/data/20070505_davidson_5k.xml +0 -2875
  223. data/data/20070505_davidson_5k_km.csv +0 -286
  224. data/data/hrm1.csv +0 -5
  225. data/img/gicons/readme.txt +0 -14
  226. data/lib/gooby_code_scanner.rb +0 -288
  227. data/lib/gooby_command.rb +0 -210
  228. data/lib/gooby_course.rb +0 -117
  229. data/lib/gooby_csv_point.rb +0 -71
  230. data/lib/gooby_csv_reader.rb +0 -71
  231. data/lib/gooby_csv_run.rb +0 -28
  232. data/lib/gooby_delim_line.rb +0 -42
  233. data/lib/gooby_duration.rb +0 -86
  234. data/lib/gooby_forerunner_xml_parser.rb +0 -191
  235. data/lib/gooby_forerunner_xml_splitter.rb +0 -115
  236. data/lib/gooby_history.rb +0 -41
  237. data/lib/gooby_kernel.rb +0 -163
  238. data/lib/gooby_line.rb +0 -80
  239. data/lib/gooby_object.rb +0 -22
  240. data/lib/gooby_point.rb +0 -172
  241. data/lib/gooby_run.rb +0 -213
  242. data/lib/gooby_simple_xml_parser.rb +0 -50
  243. data/lib/gooby_test_helper.rb +0 -23
  244. data/lib/gooby_track.rb +0 -47
  245. data/lib/gooby_track_point.rb +0 -229
  246. data/lib/gooby_training_center_xml_parser.rb +0 -224
  247. data/lib/gooby_training_center_xml_splitter.rb +0 -116
  248. data/lib/split_code.sh +0 -29
  249. data/samples/20050305_corporate_cup_hm.html +0 -450
  250. data/samples/20050430_nashville_marathon.html +0 -1668
  251. data/samples/20060115_phoenix_marathon.html +0 -1596
  252. data/samples/20070101_davidson_11m.html +0 -432
  253. data/samples/20070505_davidson_5k.html +0 -413
  254. data/samples/been_there.txt +0 -92
  255. data/samples/hrm1.html +0 -87
  256. data/sql/gooby.ddl +0 -60
  257. data/sql/gooby_load.dml +0 -62
@@ -0,0 +1,11 @@
1
+ ---
2
+ "gpx_file": data/ballantyne.gpx
3
+ "csv_file": csv/ballantyne.csv
4
+ "gmap_info_window_altitude": false
5
+ "gmap_info_window_average_pace": false
6
+ "gmap_zoom_level": 14
7
+ "html_file": out/ballantyne.html
8
+ "kml_file": out/ballantyne.kml
9
+ "kmz_build": false
10
+ "kmz_build_command": zip -r ballantyne.kmz .
11
+ "map_title": Ballantyne Office Park
@@ -0,0 +1,11 @@
1
+ ---
2
+ "approx_max_points": 200
3
+ "activity_xml_file": splits/2008_04_27_13_49_50_tcx.xml
4
+ "csv_file": csv/2008_04_27_13_49_50_tcx.csv
5
+ "gmap_info_window_altitude": false
6
+ "gmap_zoom_level": 11
7
+ "html_file": out/big_sur_marathon.html
8
+ "kml_file": out/big_sur_marathon.kml
9
+ "kmz_build": false
10
+ "kmz_build_command": zip -r gooby_big_sur.kmz out
11
+ "map_title": Big Sur Marathon
@@ -0,0 +1,11 @@
1
+ ---
2
+ "track_log_file": data/crowders_mtn_hike.log
3
+ "csv_file": csv/crowders_mtn_hike.csv
4
+ "gmap_info_window_altitude": false
5
+ "gmap_info_window_average_pace": false
6
+ "gmap_zoom_level": 14
7
+ "html_file": out/crowders_mtn_hike.html
8
+ "kml_file": out/crowders_mtn_hike.kml
9
+ "kmz_build": false
10
+ "kmz_build_command": zip -r gooby_crowders_mtn.kmz .
11
+ "map_title": Crowders Mountain Hike
@@ -0,0 +1,16 @@
1
+ ---
2
+ "activity_xml_file": splits/2009_01_01_14_45_00_tcx.xml
3
+ "csv_file": csv/davidson1.csv
4
+ "gmap_1_point_map_info_window_label": Home
5
+ "gmap_info_window_altitude": false
6
+ "gmap_info_window_average_pace": false
7
+ "gmap_info_window_distance": false
8
+ "gmap_info_window_elapsed_time": false
9
+ "gmap_info_window_latutude": true
10
+ "gmap_info_window_longitude": true
11
+ "gmap_zoom_tab": false
12
+ "html_file": out/davidson1.html
13
+ "kml_file": out/davidson1.kml
14
+ "kmz_build": true
15
+ "kmz_build_command": zip -r gooby_davidson1.kmz .
16
+ "map_title": Davidson, NC
@@ -1,136 +1,29 @@
1
1
  ---
2
- "csv_dttm_idx": 1
3
- "csv_num_idx": 4
4
- "csv_lat_idx": 5
5
- "csv_lng_idx": 6
6
- "csv_alt_idx": 7
7
- "csv_cdist_idx": 8
8
- "gmap_approx_max_points": 200
9
- "gmap_first_tkpt_number": 1
10
- "gmap_gen_comments": true
11
- "gmap_height": 600px
12
- "gmap_icon_url_base": http://www.joakim-systems.com/gicons/
13
- "gmap_key": ABQIAAAAdn5SVzjZKZKs1IRkFdx52xR1l5lLpU9GCFYoS8YrTf8v3gVJ2hRLV1dTSiqDWwWSnMRkM7SVr0EKSA
14
- "gmap_key_joakim_software_gmap": ABQIAAAAdn5SVzjZKZKs1IRkFdx52xQg0TO_bCqGOTsRH2RbuhBZnI0wvRQW0Q92mw1taN1NJCk2cxlQQutfuA
15
- "gmap_key_joakim_systems_gmaps": ABQIAAAAdn5SVzjZKZKs1IRkFdx52xR1l5lLpU9GCFYoS8YrTf8v3gVJ2hRLV1dTSiqDWwWSnMRkM7SVr0EKSA
16
- "gmap_last_tkpt_number": 5000
17
- "gmap_map_element_id": map
18
- "gmap_size_control": large
19
- "gmap_type": normal
20
- "gmap_type_control": true
21
- "gmap_width": 900px
22
- "gmap_zoom_level": 12
23
- "gmap_zoom_tab": true
24
- "/devtools/workspace/RF_Gooby/data/20050305_corporate_cup_hm.csv": 2005/03/05 Charlotte Corporate Cup Half Marathon
25
- "/devtools/workspace/RF_Gooby/data/20050430_nashville_marathon.csv": 2005/04/30 Nashville Marathon
26
- "/devtools/workspace/RF_Gooby/data/20060115_phoenix_marathon.csv": 2006/01/15 Phoenix Marathon
27
- "/devtools/workspace/RF_Gooby/data/20070101_davidson_11m.csv": 2007/01/01 Davidson Training Run 11-miler
28
- "/devtools/workspace/RF_Gooby/data/20070505_davidson_5k.csv": 2007/05/05 Davidson Town Day 5K
29
- "course.1": RW to Parting Oaks,1.3,44,49
30
- "course.2": White Horse Hill,1.3,72,73,74
31
- "course.999": HRM,0,998,999
32
- "poi.1": 35.49923370589701 -80.84842085838318 Downtown Davidson, NC Rt 115 @ Concord Rd
33
- "poi.2": 35.497908220131436 -80.84894120693207 South St at Chairman Blake Ln and Rt 115
34
- "poi.3": 35.49801958798137 -80.84779858589172 Lorimer Rd at Charman Blake Ln
35
- "poi.4": 35.4973557459657 -80.85064172744751 Rt 115 at Jackson St
36
- "poi.5": 35.500491477766474 -80.84937572479248 Jackson St at Depot St (CATS bus stop)
37
- "poi.6": 35.49835150693197 -80.84473013877869 Concord Rd at Faculty Dr
38
- "poi.7": 35.49740815474539 -80.84346413612366 Concord Rd at Baker Dr
39
- "poi.8": 35.496857860854064 -80.84061026573181 Thompson St at Dogwood Ln
40
- "poi.9": 35.49525063171656 -80.83909749984741 Concord Rd at Gray Rd
41
- "poi.10": 35.49370451682351 -80.84910750389099 South St at Spring St
42
- "poi.11": 35.49449941576726 -80.84570646286011 Woodland St at Ridgewood Ave
43
- "poi.12": 35.48767700520774 -80.84839940071106 End of South St at Greenway trail
44
- "poi.13": 35.49166045485576 -80.84610342979431 Greenway St at Eastway St
45
- "poi.14": 35.49607172018464 -80.84450483322144 Lorimer St at Woodland St
46
- "poi.15": 35.494263567450666 -80.8394730091095 Lorimer St at Pine St
47
- "poi.16": 35.492813521846315 -80.83651185035706 Crescent Dr at Virginia St
48
- "poi.17": 35.49227193183581 -80.83874344825745 Pine St at Crescent Dr
49
- "poi.18": 35.4925077859988 -80.83344340324402 Concord Rd at St Albans Ln
50
- "poi.19": 35.49226319648314 -80.83325028419495 Concord Rd at Pat Stough Rd (sidewalk, run start)
51
- "poi.20": 35.48865541464355 -80.83256363868713 Pat Stough Rd End
52
- "poi.21": 35.49333763773541 -80.83255290985107 St Albans Ln at Caldwell Ln
53
- "poi.22": 35.49413254030895 -80.83321809768677 Caldwell Ln at Twain Ave
54
- "poi.23": 35.494848819408126 -80.8353853225708 Dogweed Ln - end at trail
55
- "poi.24": 35.49733827636497 -80.8318018913269 Conroy Ave at Wolfe St
56
- "poi.25": 35.49731643935862 -80.83175897598267 Conroy Ave at Wolfe St
57
- "poi.26": 35.496591447377874 -80.83210229873657 Conroy Ave at Harper Lee St
58
- "poi.27": 35.49592759356077 -80.83266019821167 Conroy Ave at North Faulkner Way
59
- "poi.28": 35.495713586884705 -80.83282113075256 Conroy Ave at South Faulkner Way
60
- "poi.29": 35.49461733966593 -80.83401203155518 Conroy Ave at Caldwell Ln
61
- "poi.30": 35.49767019813067 -80.83367943763733 Gray Rd at Wolfe St
62
- "poi.31": 35.49579220164827 -80.83772420883179 Gray Rd at Dogwood Ln (ivy patch)
63
- "poi.32": 35.499128890685576 -80.83267092704773 Gray Rd at DC College Entrance (approx)
64
- "poi.33": 35.49599310569458 -80.83266019821167 N Faulkner at Conway Ave stopsign
65
- "poi.34": 35.494036453602554 -80.83003163337708 Ashby Dr at Fairview Dr
66
- "poi.35": 35.49255146261966 -80.8312439918518 Fairview Dr at Caldwell Ln
67
- "poi.36": 35.49289213944762 -80.8265769481659 Ashby Dr at Ashby Dr
68
- "poi.37": 35.49289213944762 -80.8265769481659 N Kimberly Rd at McConnell Dr
69
- "poi.38": 35.488812657906074 -80.82754254341125 Concord Rd at N/S Kimberly Rd
70
- "poi.39": 35.48874277204962 -80.82406640052795 End of Morrison Hill Rd
71
- "poi.40": 35.48454950944016 -80.82974195480347 Hudson Pl at Greenway trail (approx)
72
- "poi.41": 35.48421753347076 -80.82023620605469 Concord Rd at Davidson-Concord Rd
73
- "poi.42": 35.481430628498835 -80.82008600234985 Davidson-Concord Rd at Westmoreland Farm Rd
74
- "poi.43": 35.48216449372589 -80.82404494285583 End of Westmoreland Farm Rd
75
- "poi.44": 35.478023309320065 -80.81953883171082 Davidson-Concord Rd at Robert Walker Dr (sidewalk)
76
- "poi.45": 35.47472069290546 -80.80708265304565 Robert Walker Dr at River Crossing Blvd
77
- "poi.46": 35.47085873127506 -80.81012964248657 River Falls Dr at River Crossing Blvd
78
- "poi.47": 35.46853447491682 -80.81413149833679 Top of River Crossing Blvd
79
- "poi.48": 35.46744222598301 -80.80729722976685 River Falls Dr at River Ford Dr
80
- "poi.49": 35.465135347484896 -80.80901384353638 River Ford Dr at Parting Oaks Ln
81
- "poi.50": 35.46476833798671 -80.81045150756836 Parting Oaks Ln at Cannon Crossing Way
82
- "poi.51": 35.46426151259314 -80.81107378005981 Davidson-Concord Rd at Parting Oaks Ln
83
- "poi.52": 35.46207688382905 -80.80345630645752 River Ford Dr at Gazaebo
84
- "poi.53": 35.4669441555446 -80.79147219657898 River Ford Dr at 12 Hole Cutthrough
85
- "poi.54": 35.46509165596578 -80.79842448234558 River Falls Dr at Wildcat Trail
86
- "poi.55": 35.46920729287642 -80.79529166221619 Top of Wildcat Trail
87
- "poi.56": 35.469888842992326 -80.79007744789124 River Ford Dr at Greyton La
88
- "poi.57": 35.46966166026215 -80.78844666481018 Greyton La at River Run Tennis Center
89
- "poi.58": 35.4714965793548 -80.79015254974365 River Ford Dr at Dembridge Dr
90
- "poi.59": 35.47141794082389 -80.78723430633545 Dembridge Dr at Winged Oak Way
91
- "poi.60": 35.472396548176526 -80.78727722167969 E Rock River Rd at Winged Oak Way
92
- "poi.61": 35.46942573905536 -80.78446626663208 Dembridge Dr at Greyton La
93
- "poi.62": 35.468420881718885 -80.78355431556702 Dembridge Dr at Royal Court Dr
94
- "poi.63": 35.466280056828474 -80.78326463699341 Dembridge Dr at Center Court Dr
95
- "poi.64": 35.467328631242275 -80.78491687774658 17240 Royal Court Dr
96
- "poi.65": 35.46345320686592 -80.77925741672516 Dembridge Dr at S Shearer Rd
97
- "poi.66": 35.47347125502918 -80.78517436981201 E Rocky River Rd at Shearer Rd
98
- "poi.67": 35.47901930986441 -80.7865583896637 Shearer Rd at Lecheval La
99
- "poi.68": 35.479473621804 -80.78529238700867 Lecheval La at Callaway Hills Ln
100
- "poi.69": 35.48211207500329 -80.7840371131897 Callaway Hills Ln - base of hill at corner
101
- "poi.70": 35.49492743501789 -80.79602122306824 Shearer Rd at Fisher Rd
102
- "poi.71": 35.507242930407294 -80.79685807228088 Shearer Rd at Meck/Iredel County Line
103
- "poi.72": 35.50739140358269 -80.79728722572327 Shearer Rd at Gray Rd
104
- "poi.73": 35.504657706411194 -80.81006526947021 Gray Rd at White Horse (guard railing)
105
- "poi.74": 35.500150833163154 -80.81524193286896 Gray Rd at Charden Rd
106
- "poi.75": 35.49958745622591 -80.84329515695572 Davidson College Track
107
- "poi.76": 35.499550334350985 -80.8489841222763 Water Fountain at Davidson Post Office
108
- "poi.77": 35.49835587427745 -80.84894925355911 Summit Coffee House, Davidson, NC
109
- "poi.78": 35.501897713273124 -80.84739089012146 Rt 115 at Griffith St
110
- "poi.79": 35.50282354432758 -80.85278749465942 Griffith St at Beaty St and Sloan St
111
- "poi.80": 35.50215974201284 -80.86120963096619 Griffith St at Jetton St
112
- "poi.81": 35.503819237513255 -80.86635947227478 Griffith St at I-77
113
- "poi.82": 35.50537389166296 -80.87023258209229 Pool at Goodrum Rd Condos (approx)
114
- "poi.83": 35.50772328380566 -80.87085485458374 Northwest Dr circle
115
- "poi.84": 35.50778223607025 -80.86805731058121 End of Boardwalk opposite North Harbour
116
- "poi.85": 35.504041956668054 -80.87248027324677 Boardwalk Gazebo at 'LKN Beach'
117
- "poi.86": 35.49920750210696 -80.86040496826172 Jetton St at Davidson Gateway Dr
118
- "poi.87": 35.49723345868036 -80.85290551185608 Jetton St at Potts St
119
- "poi.88": 35.49272616886572 -80.85647821426392 Rt 115 at Potts St
120
- "poi.89": 35.49401898327994 -80.86023330688477 Front Door of Cornelius YMCA
121
- "poi.90": 35.49316730044645 -80.86046397686005 Top of Path from YMCA to Church St
122
- "poi.91": 35.48919702903026 -80.86110234260559 Church St at Washam St and McCall St
123
- "poi.92": 35.482714888249156 -80.86269021034241 Church St at W Catawba Ave
124
- "poi.93": 35.47983182748448 -80.85657477378845 Field St at Zion St
125
- "poi.94": 35.4834836869885 -80.87483525276184 I-77 at Catawba Ave
126
- "poi.95": 35.463780899356 -80.87566137313843 I-77 at Westmoreland Rd
127
- "poi.96": 35.465135347484896 -80.84731578826904 Rt 115 at Bailey Rd
128
- "poi.97": 35.45365239982104 -80.84276676177979 Rt 115 at Mayes Rd
129
- "poi.98": 35.45735788320527 -80.82118034362793 Mayes Rd at Barnhard Rd
130
- "poi.99": 35.45446517375887 -80.80956101417542 Mayes Rd at Rt 73
131
- "poi.100": 35.466612106872 -80.81420660018921 Barnhardt Rd at Davidson-Concord Rd
132
- "poi.230": 35.49404300497254 -80.86026549339294 Cornelius YMCA
133
- "poi.231": 35.494722160763885 -80.86207866668701 Cornelius YMCA "Beach"
134
- "poi.232": 35.49358659158504 -80.860455930233 Cornelius YMCA Path Base
135
- "poi.998": 35.495499 -80.832152 hrm test 1
136
- "poi.999": 35.495465 -80.832151 hrm test 2
2
+ "approx_max_points": 200
3
+ "csv_file": samples/2008_04_27_13_49_50_tcx.csv
4
+ "first_point": 1
5
+ "gen_comments": true
6
+ "gmap_height": 800px
7
+ "gmap_icon_url_base": images/
8
+ #"gmap_icon_url_base": http://your_domain_name/images/
9
+ "gmap_info_window_altitude": true
10
+ "gmap_info_window_average_pace": true
11
+ "gmap_info_window_average_mph": true
12
+ "gmap_info_window_distance": true
13
+ "gmap_info_window_elapsed_time": true
14
+ "gmap_info_window_latutude": true
15
+ "gmap_info_window_longitude": true
16
+ "gmap_key": ABQIAAAAdn5SVzjZKZKs1IRkFdx52xR1l5lLpU9GCFYoS8YrTf8v3gVJ2hRLV1dTSiqDWwWSnMRkM7SVr0EKSA
17
+ "gmap_size_control": large
18
+ "gmap_type": normal
19
+ "gmap_width": 1500px
20
+ "gmap_zoom_level": 12
21
+ "gmap_zoom_tab": true
22
+ "html_file": out/gooby_google_map.html
23
+ "kml_file": out/gooby_google_map.kml
24
+ "kmz_build": false
25
+ "kmz_build_command": zip -r gooby.kmz .
26
+ "last_point": 999999999
27
+ "map_element_id": map
28
+ "map_title": Google Map created with Gooby
29
+ "mile_markers": true
@@ -0,0 +1 @@
1
+ default: --format progress features --tags ~@pending
@@ -0,0 +1,88 @@
1
+ Feature: Building Gooby
2
+ Gem file 'gooby-2.0.0.gem' is created with shell script 'build_gem.sh'
3
+ using specification file 'gooby.gemspec'
4
+ and we test the build process with command 'cucumber features/build_gem.feature'
5
+
6
+ Scenario: Execute the build process
7
+ Given file 'build_gem.sh' exists
8
+ And file 'gooby.gemspec' exists
9
+ And the gem we are building is named 'gooby-2.0.0.gem'
10
+ And directory '/temp' exists
11
+ And file '/temp/gooby-2.0.0.gem' is removed if present
12
+ And directory '/temp/gooby-2.0.0' is removed if present
13
+
14
+ Then we execute the shell script './build_gem.sh'
15
+ And file '/temp/gooby-2.0.0.gem' exists
16
+ And directory '/temp/gooby-2.0.0' exists
17
+ And these unpacked files exist within directory '/temp/gooby-2.0.0':
18
+ | file | type |
19
+ | config | directory |
20
+ | features/steps | directory |
21
+ | features/support | directory |
22
+ | lib | directory |
23
+ | out/images | directory |
24
+ | samples | directory |
25
+ | spec | directory |
26
+ | cucumber.yml | regular |
27
+ | README | regular |
28
+ | rakefile.rb | regular |
29
+ | samples.sh | regular |
30
+ | setup.rb | regular |
31
+ | config/ballantyne.yaml | regular |
32
+ | config/big_sur_marathon.yaml | regular |
33
+ | config/crowders_mtn_hike.yaml | regular |
34
+ | config/davidson1.yaml | regular |
35
+ | config/gooby_config.yaml | regular |
36
+ | features/build_gem.feature | regular |
37
+ | features/gooby.feature | regular |
38
+ | features/install.feature | regular |
39
+ | features/steps/gooby_steps.rb | regular |
40
+ | features/support/env.rb | regular |
41
+ | lib/gooby.rb | regular |
42
+ | lib/gooby_activity.rb | regular |
43
+ | lib/gooby_base_object.rb | regular |
44
+ | lib/gooby_base_sax_parser.rb | regular |
45
+ | lib/gooby_configuration.rb | regular |
46
+ | lib/gooby_counter_hash.rb | regular |
47
+ | lib/gooby_dttm.rb | regular |
48
+ | lib/gooby_environment.rb | regular |
49
+ | lib/gooby_garmin_tcx_parser.rb | regular |
50
+ | lib/gooby_google_kml_generator.rb | regular |
51
+ | lib/gooby_google_map_generator.rb | regular |
52
+ | lib/gooby_gpx_parser.rb | regular |
53
+ | lib/gooby_help_producer.rb | regular |
54
+ | lib/gooby_introspection.rb | regular |
55
+ | lib/gooby_io.rb | regular |
56
+ | lib/gooby_lap.rb | regular |
57
+ | lib/gooby_process.rb | regular |
58
+ | lib/gooby_sax_path_parser.rb | regular |
59
+ | lib/gooby_tcx_extractor.rb | regular |
60
+ | lib/gooby_track_log_parser.rb | regular |
61
+ | lib/gooby_trackpoint.rb | regular |
62
+ | lib/gooby_xml_object.rb | regular |
63
+ | out/images/dd-end.png | regular |
64
+ | out/images/dd-end.png | regular |
65
+ | out/images/marker1.png | regular |
66
+ | out/images/marker26.png | regular |
67
+ | out/images/shadow50.png | regular |
68
+ | samples/2008_04_27_13_49_50_tcx.csv | regular |
69
+ | samples/2008_04_27_13_49_50_tcx.xml | regular |
70
+ | samples/2009_01_01_14_45_00_tcx.xml | regular |
71
+ | samples/ballantyne.csv | regular |
72
+ | samples/ballantyne.gpx | regular |
73
+ | samples/ballantyne.kml | regular |
74
+ | samples/big_sur_marathon.html | regular |
75
+ | samples/big_sur_marathon.kml | regular |
76
+ | samples/build_gem_test_results.txt | regular |
77
+ | samples/crowders_mtn_hike.csv | regular |
78
+ | samples/crowders_mtn_hike.html | regular |
79
+ | samples/crowders_mtn_hike.log | regular |
80
+ | samples/cucumber_test_results.txt | regular |
81
+ | samples/davidson1.csv | regular |
82
+ | samples/davidson1.html | regular |
83
+ | samples/doc.kml | regular |
84
+ | samples/gps_track_log_asheville_mt_pisgah.txt | regular |
85
+ | samples/gps_track_logs.txt | regular |
86
+ | samples/install_test_results.txt | regular |
87
+ | samples/mt_pisgah.txt | regular |
88
+ | samples/rspec_test_results.txt | regular |
@@ -0,0 +1,300 @@
1
+ Feature: Using Gooby
2
+ In order to generate maps with Gooby
3
+ From data recorded on a Garmin GPS device, or the MotionX app on an iPhone
4
+ We get the raw GPS data recorded from the device
5
+ then parse the raw GPS data into a "gooby standard" CSV format
6
+ then generate Google HTML maps from the CSV files
7
+ then generate Google Earth KML maps from the same CSV files
8
+ then enjoy viewing the maps and seeing where we've been.
9
+
10
+ Scenario: Setup the environment and directories for the scenarios that follow
11
+ Given GOOBY_HOME is set to '/Users/cjoakim/projects/github/cjoakim/gooby2'
12
+ And an empty csv directory within GOOBY_HOME
13
+ And an empty out directory within GOOBY_HOME
14
+ And an empty tmp directory within GOOBY_HOME
15
+ And an empty splits directory within GOOBY_HOME
16
+ And file 'gooby_davidson1.kmz' does not exist within GOOBY_HOME
17
+
18
+ Scenario: Generate the Gooby help content
19
+ When rake task 'gooby:help' is executed
20
+ Then the output contains 126 lines, within a tolerance of 2
21
+ And the following lines are expected
22
+ And line: Gooby = Google APIs + Ruby. Copyright 2009 by Chris Joakim.
23
+ And line: Gooby is available under GNU General Public License (GPL) license.
24
+ And line: Version 2.0.0
25
+ And line: Directory Structure:
26
+ And line: {GOOBY_HOME} Your chosen directory on your computer in which to store Gooby files.
27
+ And line: You must set the "GOOBY_HOME" environment variable on your computer to this
28
+ And line: chosen directory name.
29
+ And line: {GOOBY_HOME}/config Contains configuration files in yaml format.
30
+ And line: File /config/gooby_config.yaml is the "base" configuration file, and is read first.
31
+ And line: This file typically remains unchanged after your intial edits to it. Be sure to
32
+ And line: set "gmap_key" to your Google Maps key, and "gmap_icon_url_base" to the URL on
33
+ And line: your site where the map icon images are located.
34
+ And line: You should create one "map-specific" yaml file for each map you wish to create.
35
+ And line: It "inherits" all entries from the base configuration file, gooby_config.yaml.
36
+ And line: So just specify the additions or overrides in your map-specific yaml files.
37
+ And line: This design allows you generate your various maps, without having to frequently
38
+ And line: reset the values the the base configuration file.
39
+ And line: {GOOBY_HOME}/csv Gooby places CSV data files in this directory. All Gooby parsers create a
40
+ And line: standard CSV format that you can use to generate either Google maps or Google Earth
41
+ And line: maps with.
42
+ And line: {GOOBY_HOME}/data You place data files from your desktop GPS software here.
43
+ And line: {GOOBY_HOME}/out Gooby places generated Google Map html files and Google Earth kml files here.
44
+ And line: {GOOBY_HOME}/out/images Standard set of images here which are used in the generated html & kml files.
45
+ And line: Add your own images here, or replace the existing ones, as necessary.
46
+ And line: {GOOBY_HOME}/samples Contains a set of sample files for your reference.
47
+ And line: {GOOBY_HOME}/splits Gooby places individual 'activity xml files' here, split-out from a large tcx file.
48
+ And line: {GOOBY_HOME}/tmp Temporary files.
49
+ And line: List of Gooby commands (in order of typical usage):
50
+ And line: rake # Default task; same as 'rake gooby:help'.
51
+ And line: rake gooby:help # Display Gooby usage instructions.
52
+ And line: rake gooby:extract_activities_from_tcx # Extract individual Activity xml files from a Garmin tcx file
53
+ And line: rake gooby:parse_activity_xml_to_csv # Parse an extracted Activity xml file to a corresponding csv file.
54
+ And line: rake gooby:parse_track_log_to_csv # Parse a GPS Track Log file a corresponding csv file.
55
+ And line: rake gooby:parse_gpx_to_csv # Parse a *.gpx file into a corresponding csv file.
56
+ And line: rake gooby:generate_google_map # Generate a Google Map from a csv file.
57
+ And line: rake gooby:generate_google_earth_map # Generate a Google Earth kml file from a csv file, with optional
58
+ And line: kmz file generation.
59
+ And line: Gooby Command Detail:
60
+ And line: command: rake gooby:help
61
+ And line: description: Displays help information for each Gooby command.
62
+ And line: command: rake gooby:extract_activities_from_tcx
63
+ And line: description: Splits the potentially huge Garmin Training Center tcx file into individual
64
+ And line: Activity xml files, and places these in the /splits directory. Each has a filename
65
+ And line: based on the starting date/time of the activity.
66
+ And line: parameters: tcx_file - The input file, created by exporting from Garmin Training Center.
67
+ And line: Defaults to 'data/current.tcx' in your GOOBY_HOME directory.
68
+ And line: command: rake gooby:parse_activity_xml_to_csv
69
+ And line: description: Parse an extracted Activity xml 'split' file to a corresponding csv file.
70
+ And line: example: rake gooby:parse_activity_xml_to_csv config_file=config/big_sur_marathon.yaml
71
+ And line: command: rake gooby:parse_gpx_to_csv
72
+ And line: description: Parse a *.gpx file into a corresponding csv file.
73
+ And line: example: rake gooby:parse_gpx_to_csv config_file=config/ballantyne.yaml
74
+ And line: command: rake gooby:parse_track_log_to_csv
75
+ And line: description: Parse an extracted 'GPS Tracks Log' file from MacGpsPro into csv format.
76
+ And line: note 2: It is strongly recommended that you manually copy the 'GPS Tracks Log' file
77
+ And line: from your MacGpsPro installation to the GOOBY_HOME/data directory, and rename it to
78
+ And line: 'gps_track_logs.txt', before running this command. Then manually edit out the lines
79
+ And line: not pertinent to the map you want to generate.
80
+ And line: note 3: I use MacGpsPro to read the GPS data from my Garmin eTrex Venture device, since the
81
+ And line: Garmin Training Center software does not support this device.
82
+ And line: example: rake gooby:parse_track_log_to_csv config_file=config/crowders_mtn_hike.yaml
83
+ And line: command: rake gooby:generate_google_map
84
+ And line: description: Generate a Google Map html file from a csv file.
85
+ And line: example: rake gooby:generate_google_map config_file=config/big_sur_marathon.yaml
86
+ And line: command: rake gooby:generate_google_earth_map
87
+ And line: description: Generate a Google Earth kml file from a csv file.
88
+ And line: note 2: Gooby will optionally create a kmz file for you. A kmz file is essentially a
89
+ And line: zip file, which contains your kml file(s), as well as any associated files such
90
+ And line: as images. Two parameters are required in your yaml config file for kmz generation:
91
+ And line: 'kmz_build' must be set to true, and 'kmz_build_command' must be the appropriate
92
+ And line: zip-creating command for your operating system and set of installed software.
93
+ And line: A Mac OS/X example command is: zip -r gooby_big_sur.kmz .
94
+ And line: example: rake gooby:generate_google_earth_map config_file=config/big_sur_marathon.yaml
95
+ And line: Your GOOBY_HOME directory is currently set to
96
+ And the output contains the expected lines
97
+
98
+ Scenario: Split a large TCX file exported from Garmin Training Center
99
+ Given we imported the data from our Garmin GPS device model 305 into Garmin Training Center
100
+ And exported the data from Garmin Training Center to a TCX file
101
+ And the TCX file is named 'data/current.tcx'
102
+
103
+ When rake task 'gooby:extract_activities_from_tcx' is executed
104
+ Then the splits directory contains at least 15 files matching name '2009'
105
+ And the splits directory contains at least 90 files matching name '2008'
106
+ And the splits directory contains at least 100 files matching name '2007'
107
+ And these activity xml files exist:
108
+ | file | lines |
109
+ | splits/2008_04_27_13_49_50_tcx.xml | 24560 |
110
+ | splits/2009_01_01_14_45_00_tcx.xml | 10630 |
111
+
112
+ Scenario: Parse an activity xml file to csv
113
+ Given the config file we use is 'config/big_sur_marathon.yaml'
114
+ When rake task 'gooby:parse_activity_xml_to_csv' is executed
115
+ Then the CSV file 'csv/2008_04_27_13_49_50_tcx.csv' is created
116
+ And the CSV file contains 2449 trackpoints
117
+ And the CSV file contains these trackpoints:
118
+ | seq | time | latitude | longitude | distance | elapsed | mph | pace |
119
+ | 1 | 2008-04-27T13:49:50Z | 36.247196 | -121.781665 | 0.0 | 0:00:00 | 0.00 | 0:00 |
120
+ | 1800 | 2008-04-27T15:50:22Z | 36.460703 | -121.924925 | 20.0004984569685 | 3:03:46 | 6.530 | 9:11.29 |
121
+ | 2449 | 2008-04-27T17:09:28Z | 36.538656 | -121.91085 | 26.3666472682879 | 4:05:34 | 6.442 | 9:18.81 |
122
+
123
+ Scenario: Parse a track log file to csv
124
+ Given the config file we use is 'config/crowders_mtn_hike.yaml'
125
+ When rake task 'gooby:parse_track_log_to_csv' is executed
126
+ Then the CSV file 'csv/crowders_mtn_hike.csv' is created
127
+ And the CSV file contains 1065 trackpoints
128
+ And the CSV file contains these trackpoints:
129
+ | seq | time | latitude | longitude | distance | elapsed | mph | pace |
130
+ | 1 | 2008-11-16T08:43:06Z | 35.21357 | -81.29359 | 0.0 | 0:00:00 | 0.00 | 0:00 |
131
+ | 1065 | 2008-11-16T14:46:11Z | 35.26834 | -81.25154 | 15.0878648193097 | 6:03:05 | 2.493 | 24:03.88 |
132
+
133
+ Scenario: Parse a gpx file to csv
134
+ Given the config file we use is 'config/ballantyne.yaml'
135
+ When rake task 'gooby:parse_gpx_to_csv' is executed
136
+ Then the CSV file 'csv/ballantyne.csv' is created
137
+ And the CSV file contains 27 trackpoints
138
+ And the CSV file contains these trackpoints:
139
+ | seq | time | latitude | longitude | distance | elapsed | mph | pace |
140
+ | 1 | 2009-05-14T22:08:50Z | 35.062748 | -80.85562 | 0.0 | 0:00:00 | 0.00 | 0:00 |
141
+ | 27 | 2009-05-14T22:10:43Z | 35.062613 | -80.855448 | 0.0783970446562321 | 0:01:53 | 2.498 | 24:01.38 |
142
+
143
+ Scenario: Generate a Big Sur Marathon Google map in html format
144
+ Given the config file we use is 'config/big_sur_marathon.yaml'
145
+ When rake task 'gooby:generate_google_map' is executed
146
+ Then the HTML file 'out/big_sur_marathon.html' is created
147
+ And the HTML file contains 2766 lines
148
+ And the following lines are expected
149
+ And line: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
150
+ And line: "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
151
+ And line: <html xmlns="http://www.w3.org/1999/xhtml">
152
+ And line: <head>
153
+ And line: <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
154
+ And line: <meta name="description" content="Google Map generated by Gooby version 2.0.0">
155
+ And line: <meta name="keywords" content="Google Map Generated by Gooby version 2.0.0">
156
+ And line: <title> Big Sur Marathon </title>
157
+ And line: <script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAdn5SVzjZKZKs1IRkFdx52xR1l5lLpU9GCFYoS8YrTf8v3gVJ2hRLV1dTSiqDWwWSnMRkM7SVr0EKSA' type='text/javascript'></script>
158
+ And line: <script type="text/javascript">
159
+ And line: //<![CDATA[
160
+ And line: function load() {
161
+ And line: if (GBrowserIsCompatible()) {
162
+ And line: var map = new GMap2(document.getElementById("map"));
163
+ And line: map.addControl(new GLargeMapControl());
164
+ And line: map.addControl(new GMapTypeControl());
165
+ And line: var centerPoint = new GLatLng(36.392926, -121.8600045);
166
+ And line: map.setCenter(centerPoint, 11);
167
+ And line: var points = new Array();
168
+ And line: points.push(new GLatLng(36.247196,-121.781665));
169
+ And line: // points.push(new GLatLng(36.247208,-121.78167));
170
+ And line: points.push(new GLatLng(36.538656,-121.91085));
171
+ And line: // app_max=200.0 ratio=12.245 increment=12
172
+ And line: var routePolyline = new GPolyline(points);
173
+ And line: map.addOverlay(routePolyline);
174
+ And line: // Create a base icon for all of our markers that specifies the
175
+ And line: // shadow, icon dimensions, etc.
176
+ And line: var baseIcon = new GIcon();
177
+ And line: baseIcon.shadow = "images/shadow50.png";
178
+ And line: baseIcon.iconSize = new GSize(20, 34);
179
+ And line: baseIcon.shadowSize = new GSize(37, 34);
180
+ And line: baseIcon.iconAnchor = new GPoint(9, 34);
181
+ And line: baseIcon.infoWindowAnchor = new GPoint(9, 2);
182
+ And line: baseIcon.infoShadowAnchor = new GPoint(18, 25);
183
+ And line: var iconStart = new GIcon(baseIcon);
184
+ And line: iconStart.image = "images/dd-start.png";
185
+ And line: var pStart = new GPoint(-121.781665, 36.247196);
186
+ And line: var mStart = new GMarker(pStart, iconStart);
187
+ And line: GEvent.addListener(mStart, "click", function() {
188
+ And line: mStart.openInfoWindowHtml("<table align='left'><tr><td colspan='2'><b>Start!</b>
189
+ And line: map.addOverlay(mStart);
190
+ And line: var icon1 = new GIcon(baseIcon);
191
+ And line: icon1.image = "images/marker1.png";
192
+ And line: var p1 = new GPoint(-121.788872, 36.259338);
193
+ And line: var m1 = new GMarker(p1, icon1);
194
+ And line: GEvent.addListener(m1, "click", function() {
195
+ And line: m1.openInfoWindowHtml("<table align='left'><tr><td colspan='2'><b>Mile 1</b>
196
+ And line: map.addOverlay(m1);
197
+ And line: var icon26 = new GIcon(baseIcon);
198
+ And line: icon26.image = "images/marker26.png";
199
+ And line: var p26 = new GPoint(-121.914424, 36.534368);
200
+ And line: var m26 = new GMarker(p26, icon26);
201
+ And line: GEvent.addListener(m26, "click", function() {
202
+ And line: m26.openInfoWindowHtml("<table align='left'><tr><td colspan='2'><b>Mile 26</b>
203
+ And line: map.addOverlay(m26);
204
+ And line: var iconFinish = new GIcon(baseIcon);
205
+ And line: iconFinish.image = "images/dd-end.png";
206
+ And line: var pFinish = new GPoint(-121.91085, 36.538656);
207
+ And line: var mFinish = new GMarker(pFinish, iconFinish);
208
+ And line: GEvent.addListener(mFinish, "click", function() {
209
+ And line: mFinish.openInfoWindowHtml("<table align='left'><tr><td colspan='2'><b>Finish!</b>
210
+ And line: map.addOverlay(mFinish);
211
+ And line: </script>
212
+ And line: </head>
213
+ And line: <body onload="load()" onunload="GUnload()">
214
+ And line: <center>
215
+ And line: <h3> Big Sur Marathon </h3>
216
+ And line: <div id="map" style="width: 1500px; height: 800px"></div>
217
+ And line: <div id="messages"></div>
218
+ And line: </center>
219
+ And line: </body>
220
+ And line: </html>
221
+ And the HTML contains the expected lines
222
+
223
+ Scenario: Generate a Big Sur Marathon Google Earth map in kml format
224
+ Given the config file we use is 'config/big_sur_marathon.yaml'
225
+ When rake task 'gooby:generate_google_earth_map' is executed
226
+ Then the KML file 'out/big_sur_marathon.kml' is created
227
+ And the KML file contains 685 lines
228
+ And the following lines are expected
229
+ And line: <?xml version="1.0" encoding="UTF-8"?>
230
+ And line: <kml xmlns="http://www.opengis.net/kml/2.2">
231
+ And line: <Document>
232
+ And line: <!-- kml file generated by Gooby version 2.0.0 -->
233
+ And line: <name>Big Sur Marathon</name>
234
+ And line: <Style id="goobyStyle">
235
+ And line: <name>Start</name>
236
+ And line: <description><table align='left'><tr><td colspan='2'><b>Start!</b>
237
+ And line: <href>images/dd-start.png</href>
238
+ And line: <coordinates>-121.781665,36.247196,1</coordinates>
239
+ And line: <name>Finish</name>
240
+ And line: <description><table align='left'><tr><td colspan='2'><b>Finish!</b>
241
+ And line: <href>images/dd-end.png</href>
242
+ And line: <coordinates>-121.91085,36.538656,1</coordinates>
243
+ And line: <visibility>1</visibility>
244
+ And line: <description>Route</description>
245
+ And line: <styleUrl>#goobyStyle</styleUrl>
246
+ And line: <LineString>
247
+ And line: <tessellate>1</tessellate>
248
+ And line: <altitudeMode>relativeToGround</altitudeMode>
249
+ And line: <coordinates>
250
+ And line: -121.781665,36.247196,1
251
+ And line: -121.782714,36.248216,1
252
+ And line: -121.784484,36.249009,1
253
+ And line: -121.912713,36.536075,1
254
+ And line: -121.911365,36.537773,1
255
+ And line: -121.91085,36.538656,1
256
+ And line: </coordinates>
257
+ And line: </LineString>
258
+ And line: </Placemark>
259
+ And line: </Document>
260
+ And line: </kml>
261
+ And the KML contains the expected lines
262
+
263
+ Scenario: Parse the Davidson 11-miler activity xml file to csv
264
+ Given the config file we use is 'config/davidson1.yaml'
265
+ When rake task 'gooby:parse_activity_xml_to_csv' is executed
266
+ Then the CSV file 'csv/davidson1.csv' is created
267
+ And the CSV file contains 1060 trackpoints
268
+ And the CSV file contains these trackpoints:
269
+ | seq | time | latitude | longitude | distance | elapsed | mph | pace |
270
+ | 1 | 2009-01-01T14:45:00Z | 35.495525 | -80.83215 | 0.0 | 0:00:00 | 0.00 | 0:00 |
271
+ | 1060 | 2009-01-01T16:25:22Z | 35.495495 | -80.832109 | 11.0685814547597 | 1:40:22 | 6.617 | 9:04.06 |
272
+ And we edit CSV file 'csv/davidson1.csv' to contain only point number 1
273
+
274
+ Scenario: Generate a single-point Google map in html format
275
+ Given the config file we use is 'config/davidson1.yaml'
276
+ When rake task 'gooby:generate_google_map' is executed
277
+ Then the HTML file 'out/davidson1.html' is created
278
+ And the HTML file contains 75 lines
279
+
280
+ Scenario: Generate a single-point Google Earth map in kmz format
281
+ Given the config file we use is 'config/davidson1.yaml'
282
+ When rake task 'gooby:generate_google_earth_map' is executed
283
+ Then the KML file 'out/doc.kml' is created
284
+ And the KML file contains 49 lines
285
+ Then the KMZ file 'gooby_davidson1.kmz' is created
286
+
287
+ Scenario: Generate a Crowders Mt. Hike Google map in html format from Garmin eTrex Venture source data
288
+ Given the config file we use is 'config/crowders_mtn_hike.yaml'
289
+ When rake task 'gooby:generate_google_map' is executed
290
+ Then the HTML file 'out/crowders_mtn_hike.html' is created
291
+ And the HTML file contains 1283 lines
292
+
293
+ Scenario: Generate a Google Earth map in kml format from iPhone & MotionX app source data
294
+ Given the config file we use is 'config/ballantyne.yaml'
295
+ When rake task 'gooby:generate_google_earth_map' is executed
296
+ Then the KML file 'out/ballantyne.kml' is created
297
+ And the KML file contains 91 lines
298
+
299
+ Scenario: Save the generated files for packaging in the gooby gem
300
+ Then copy the generated files to the samples directory