gooby 1.2.0 → 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.
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