gooby 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README +96 -43
- data/bin/example_usage.rb +15 -6
- data/bin/tcx_ex.rb +35 -0
- data/data/2007_03_04.tcx +16751 -0
- data/data/activity_2007_03_04_15_22_36.xml +10545 -0
- data/lib/gooby/cls_gooby_command.rb +14 -3
- data/lib/gooby/cls_training_center_parser.rb +183 -0
- data/lib/gooby/cls_training_center_splitter.rb +109 -0
- data/lib/gooby/mod_project_info.rb +1 -1
- data/lib/gooby.rb +303 -5
- data/pkg/pkg.rb +2 -0
- data/tests/tc_mod_project_info.rb +1 -1
- data/tests/ts_gooby.rb +2 -2
- metadata +7 -21
- data/data/20051119_dowd_ymca_hm.csv +0 -251
- data/data/20051119_dowd_ymca_hm.xml +0 -2210
- data/data/run_2007_01_06_15_27_31.xml +0 -2020
- data/data/run_2007_01_10_12_25_47.xml +0 -820
- data/data/run_2007_01_10_22_44_54.csv +0 -112
- data/data/run_2007_01_10_22_44_54.xml +0 -908
- data/data/run_2007_01_11_10_48_45.xml +0 -1292
- data/data/run_2007_01_13_15_37_06.xml +0 -1964
- data/data/run_2007_01_14_15_46_02.xml +0 -1368
- data/data/run_2007_01_15_14_01_48.xml +0 -1868
- data/data/run_2007_01_20_16_22_05.xml +0 -1702
- data/data/run_2007_01_27_17_32_13.xml +0 -3626
- data/data/run_2007_01_28_19_14_52.xml +0 -2538
- data/data/run_2007_02_03_14_30_20.xml +0 -2016
- data/data/run_2007_02_04_18_02_30.xml +0 -1476
- data/data/run_2007_02_17_16_29_35.xml +0 -1236
- data/data/run_2007_02_19_14_44_33.xml +0 -1816
- data/data/run_2007_02_23_15_53_55.xml +0 -36
- data/data/run_2007_02_23_15_55_20.xml +0 -1296
data/README
CHANGED
@@ -1,19 +1,29 @@
|
|
1
1
|
= Gooby -- Google APIs + Ruby
|
2
2
|
|
3
|
-
Version: 0.9.
|
3
|
+
Version: 0.9.4
|
4
|
+
|
5
|
+
RubyForge Release Notes:
|
6
|
+
|
7
|
+
Gooby = Google APIs + Ruby.
|
8
|
+
This release adds support for Garmin TrainingCenter TCX XML files, created by
|
9
|
+
the newer Garmin devices such as models 205 and 305. For an example of a Google Map
|
10
|
+
created with Gooby, see http://www.joakimsoftware.com/gmap/phoenix_marathon.html
|
11
|
+
|
12
|
+
---
|
4
13
|
|
5
14
|
This package contains 'Gooby', a set of Ruby code to assist you with using and
|
6
|
-
producing content for the various Google APIs. The initial focus of
|
7
|
-
|
15
|
+
producing content for the various Google APIs. The initial focus of Gooby is
|
16
|
+
on the Google Maps API, version 2.0.
|
8
17
|
|
9
|
-
Google Maps can be produced using Gooby from
|
10
|
-
|
11
|
-
|
18
|
+
Google Maps can be produced using Gooby from your data in CSV format,
|
19
|
+
as created in one of the following three ways.
|
20
|
+
1) From exported and parsed Garmin ForerunnerLogbook XML files.
|
21
|
+
2) From exported and parsed Garmin TrainingCenter TCX(XML) files.
|
22
|
+
3) From your own manually edited Global Positioning System (GPS) data.
|
23
|
+
See any of the 'data/*.csv' files in the distribution for an example
|
24
|
+
of the CSV format.
|
12
25
|
|
13
|
-
Support for Garmin TrainingCenter *.tcx files
|
14
|
-
The exported XML file formats from Garmin ForerunnerLogbook and Garmin
|
15
|
-
TrainingCenter are different, yet altering the Gooby parsing code shouldn't
|
16
|
-
require a major effort.
|
26
|
+
Support for Garmin TrainingCenter *.tcx files was added in the 0.9.4 release.
|
17
27
|
|
18
28
|
Google maps are applicable really to any outdoor activity for which GPS data
|
19
29
|
can be obtained. The focus of Gooby is on running, because the author is a
|
@@ -23,11 +33,11 @@ methods are running oriented (ex. - Run, Track, Trackpoint, pace, distance,
|
|
23
33
|
etc).
|
24
34
|
|
25
35
|
Other activities, such as cycling, hiking, walking, driving, and even golfing
|
26
|
-
are also well suited for Gooby. Given a waterproof GPS receiver, sailing and
|
36
|
+
are also well suited for Gooby. Given a waterproof GPS receiver, sailing, and
|
27
37
|
swimming Google Maps can also be created with Gooby. Please let me know how
|
28
38
|
you use Gooby!
|
29
39
|
|
30
|
-
All Gooby 0.9.
|
40
|
+
All Gooby 0.9.4 functionality is intended to be invoked from a command line.
|
31
41
|
Web and Rails integration may be done in a later release.
|
32
42
|
|
33
43
|
See the Goals/Requirements and Usage sections below for the complete list of
|
@@ -124,6 +134,12 @@ See file 'bin/example_usage.rb' in the gem distribution. Most of this file
|
|
124
134
|
is shown below. You will probably have to change the input filenames (yaml,
|
125
135
|
xml, csv) to your own filenames on your computer.
|
126
136
|
|
137
|
+
Of course, you'll also have to obtain a Google Maps key for your web site.
|
138
|
+
It's free, and has to be included in every page which displays a map. See
|
139
|
+
the 'gmap_key' entry in 'gooby_options.yaml', which embeds your key value
|
140
|
+
into the generated html page. Also see the Google Maps API site -
|
141
|
+
http://www.google.com/apis/maps/
|
142
|
+
|
127
143
|
require 'gooby'
|
128
144
|
|
129
145
|
include REXML
|
@@ -141,66 +157,103 @@ xml, csv) to your own filenames on your computer.
|
|
141
157
|
v = options.get(n)
|
142
158
|
puts "option '#{n}' = #{v}"
|
143
159
|
|
144
|
-
# Split a large ForerunnerLogbook XML file into individual
|
160
|
+
# Split a large Garmin ForerunnerLogbook XML file into individual 'run' files.
|
145
161
|
# In this example, '/temp' is the output directory.
|
146
|
-
gooby.
|
162
|
+
gooby.split_garmin_forerunner_logbook_xml('data/forerunner_2007.xml', '/temp')
|
163
|
+
|
164
|
+
# Split a large Garmin TrainingCenter TCX(XML) file into individual 'activity' files.
|
165
|
+
gooby.split_garmin_training_center_xml('data/2007_03_04.tcx', '/temp')
|
147
166
|
|
148
|
-
# Parse a ForerunnerLogbook XML file, or 'split' subset, into CSV.
|
167
|
+
# Parse a Garmin ForerunnerLogbook XML file, or previously 'split' subset, into CSV.
|
149
168
|
# You may want to redirect this output to a file.
|
150
|
-
gooby.
|
169
|
+
gooby.parse_garmin_forerunner_logbook_xml 'data/run_2007_01_01_16_38_27.xml'
|
170
|
+
|
171
|
+
# Parse a TrainingCenter TCX(XML) file, or previously 'split' subset, into CSV.
|
172
|
+
gooby.parse_garmin_training_center_xml 'data/activity_2007_03_04_15_22_36.xml'
|
151
173
|
|
152
174
|
# Generate a Google Map from your CSV file data, and the Options per
|
153
|
-
# your yaml file.
|
154
|
-
gooby.generate_google_map('data/phx.csv', options)
|
175
|
+
# your yaml file. You may also wish to redirect this output to a file.
|
176
|
+
gooby.generate_google_map('data/phx.csv', options)
|
155
177
|
|
156
178
|
|
157
179
|
== Goals / Requirements
|
158
180
|
|
159
181
|
=== Functional Requirements
|
160
182
|
|
161
|
-
f1. Provide the ability to parse exported XML data from
|
162
|
-
|
163
|
-
|
164
|
-
more
|
183
|
+
f1. Provide the ability to parse exported XML GPS data files from the Garmin
|
184
|
+
ForerunnerLogbook software. ForerunnerLogbook is used in conjunction
|
185
|
+
with the Garmin Forerunner 201 GPS receiver. Parse the XML into less-
|
186
|
+
verbose and more readable and editable CSV format.
|
187
|
+
|
188
|
+
status = complete
|
189
|
+
|
190
|
+
f2. Provide the ability to parse exported XML GPS data files from the Garmin
|
191
|
+
TrainingCenter software. TrainingCenter is used in conjunction with
|
192
|
+
newer Garmin GPS receivers, such as model 205 and 305. Parse the TCX
|
193
|
+
file (XML format) into less-verbose and more readable and editable CSV
|
194
|
+
format.
|
195
|
+
|
196
|
+
status = complete
|
197
|
+
|
198
|
+
f3. Provide the ability to "split" a large Garmin ForerunnerLogbook XML file
|
199
|
+
containing many "runs" into individual "run_" files. The individual
|
200
|
+
files can then be processed separately, and can optionally be stored in
|
201
|
+
your personal records directory or source control system.
|
165
202
|
|
166
|
-
|
167
|
-
containing many "runs" into individual run files. The individual files
|
168
|
-
can then be processed separately, and can optionally be stored in your
|
169
|
-
personal records directory or source control system.
|
203
|
+
status = complete
|
170
204
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
205
|
+
f4. Provide the ability to "split" a large Garmin TrainingCenter TCX/XML file
|
206
|
+
containing many "activities" into individual "activity_" files. The
|
207
|
+
individual files can then be processed separately, and can optionally be
|
208
|
+
stored in your personal records directory or source control system.
|
175
209
|
|
176
|
-
|
210
|
+
status = complete
|
211
|
+
|
212
|
+
f5. Provide the ability to generate Google Map HTML content from your GPS
|
213
|
+
data in CSV text format, using the Google Map API v2.0. The generated
|
214
|
+
content should be viewable in most current web browsers, including Apple
|
215
|
+
Safari 2, Firefox 1.5, and Windows Internet Explorer 6.
|
216
|
+
|
217
|
+
status = complete
|
218
|
+
|
219
|
+
f6. Provide the ability to define your own points-of-interest (POI), route
|
177
220
|
segments, and routes as a collection of GPS data in a simple text file.
|
178
221
|
Allow "routes" to be composed from "reusable route segments", and
|
179
222
|
annotated with your own POI.
|
180
223
|
|
181
|
-
|
182
|
-
|
224
|
+
status = in-progress
|
225
|
+
|
226
|
+
f7. Provide the ability to generate Google Maps (requirement f5) from your
|
227
|
+
collection of GPS data (requirement f6).
|
183
228
|
|
184
|
-
|
229
|
+
status = in-progress
|
230
|
+
|
231
|
+
f8. Provide the ability (i.e. - an Internet web page) for a user to easily
|
185
232
|
obtain GPS coordinates for their particular POI, segments, and routes.
|
186
233
|
|
187
|
-
|
234
|
+
status = complete.
|
235
|
+
|
236
|
+
f9. Provide the ability to alter appropriate Gooby behavior via a simple
|
188
237
|
configuration file (i.e. - gooby_options.yaml) rather than modifying
|
189
238
|
the source code. Specific configuration requirements are:
|
190
239
|
a. Allow the user to specify roughly how many points appear on a map.
|
191
240
|
b. Allow the user to specify a distance unit-of-measure in either
|
192
241
|
miles, kilometers, or yards.
|
193
242
|
|
194
|
-
|
243
|
+
status = in-progress
|
244
|
+
|
245
|
+
f10 Provide adequate user documentation and scripts, so that someone other
|
195
246
|
than the author can actually use Gooby.
|
196
247
|
|
197
|
-
|
248
|
+
status = in-progress
|
249
|
+
|
250
|
+
f11. Provide sample files - xml, csv, images.
|
251
|
+
|
252
|
+
status = complete
|
198
253
|
|
199
254
|
Currently out-of-scope but intended for a future release:
|
200
255
|
---------------------------------------------------------
|
201
256
|
|
202
|
-
f50. Parsing of other XML GPS formats other than Garmin Forerunner.
|
203
|
-
|
204
257
|
f51. Other Google APIs, such as Google Earth.
|
205
258
|
|
206
259
|
f52. Rails framework integration.
|
@@ -213,7 +266,7 @@ t2. Strive to implement the code in the "standard Ruby way", and to try to
|
|
213
266
|
discover exactly what that is during the development of Gooby.
|
214
267
|
|
215
268
|
t3. Implement a reasonably complete set of regression tests using the
|
216
|
-
'test/unit' framework.
|
269
|
+
'test/unit' framework. 80/20 rule.
|
217
270
|
|
218
271
|
t4. Implement a way to generate/regenerate regression tests so that as the
|
219
272
|
tested classes/modules evolve, the corresponding test class will
|
@@ -229,11 +282,11 @@ t5. Enable adequate runtime diagnostics; including:
|
|
229
282
|
t6. Use the RubyForge CVS repository as the SCM after initial development;
|
230
283
|
use local SCM during the initial development.
|
231
284
|
|
232
|
-
t7. Implement a Ruby-standard directory structure -
|
233
|
-
|
285
|
+
t7. Implement a Ruby-standard directory structure - bin, data, lib, tests,
|
286
|
+
etc.
|
234
287
|
|
235
288
|
t8. Implement a Ruby-standard packaging mechanism, so that users can easily
|
236
|
-
download and install Gooby.
|
289
|
+
download and install Gooby (i.e. - package Gooby as a gem).
|
237
290
|
|
238
291
|
== Warranty
|
239
292
|
|
data/bin/example_usage.rb
CHANGED
@@ -7,6 +7,9 @@ to your own filenames on your computer.
|
|
7
7
|
|
8
8
|
=end
|
9
9
|
|
10
|
+
# The following prefixes ../lib to the active ruby load path
|
11
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
12
|
+
|
10
13
|
require 'gooby'
|
11
14
|
|
12
15
|
include REXML
|
@@ -24,15 +27,21 @@ n = 'gmap_approx_max_points'
|
|
24
27
|
v = options.get(n)
|
25
28
|
puts "option '#{n}' = #{v}"
|
26
29
|
|
27
|
-
# Split a large ForerunnerLogbook XML file into individual
|
30
|
+
# Split a large Garmin ForerunnerLogbook XML file into individual 'run' files.
|
28
31
|
# In this example, '/temp' is the output directory.
|
29
|
-
gooby.
|
32
|
+
gooby.split_garmin_forerunner_logbook_xml('data/forerunner_2007.xml', '/temp') if true
|
33
|
+
|
34
|
+
# Split a large Garmin TrainingCenter TCX(XML) file into individual 'activity' files.
|
35
|
+
gooby.split_garmin_training_center_xml('data/2007_03_04.tcx', '/temp') if true
|
30
36
|
|
31
|
-
# Parse a ForerunnerLogbook XML file, or 'split' subset, into CSV.
|
37
|
+
# Parse a Garmin ForerunnerLogbook XML file, or previously 'split' subset, into CSV.
|
32
38
|
# You may want to redirect this output to a file.
|
33
|
-
gooby.
|
39
|
+
gooby.parse_garmin_forerunner_logbook_xml 'data/run_2007_01_01_16_38_27.xml' if true
|
40
|
+
|
41
|
+
# Parse a TrainingCenter TCX(XML) file, or previously 'split' subset, into CSV.
|
42
|
+
gooby.parse_garmin_training_center_xml 'data/activity_2007_03_04_15_22_36.xml' if true
|
34
43
|
|
35
44
|
# Generate a Google Map from your CSV file data, and the Options per
|
36
|
-
# your yaml file.
|
37
|
-
gooby.generate_google_map('data/phx.csv', options)
|
45
|
+
# your yaml file. You may also wish to redirect this output to a file.
|
46
|
+
gooby.generate_google_map('data/phx.csv', options) if false
|
38
47
|
|
data/bin/tcx_ex.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
=begin rdoc
|
2
|
+
|
3
|
+
This file contains examples of how to use Gooby.
|
4
|
+
|
5
|
+
You will probably have to change the input filenames (yaml, xml, csv)
|
6
|
+
to your own filenames on your computer.
|
7
|
+
|
8
|
+
=end
|
9
|
+
|
10
|
+
# The following prefixes ../lib to the active ruby load path
|
11
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
12
|
+
puts '$LOAD_PATH is now:'
|
13
|
+
puts $LOAD_PATH
|
14
|
+
|
15
|
+
require 'gooby'
|
16
|
+
|
17
|
+
include REXML
|
18
|
+
|
19
|
+
# First, create a GoobyCommand object.
|
20
|
+
gooby = Gooby::GoobyCommand.new
|
21
|
+
|
22
|
+
# Next, create an Options object from the given yaml file - see the sample
|
23
|
+
# 'gooby_options.yaml' file in the distribution.
|
24
|
+
options_file = 'gooby_options.yaml'
|
25
|
+
options = gooby.options(options_file)
|
26
|
+
|
27
|
+
# Optionally display some of its values.
|
28
|
+
n = 'gmap_approx_max_points'
|
29
|
+
v = options.get(n)
|
30
|
+
puts "option '#{n}' = #{v}"
|
31
|
+
|
32
|
+
# Split a large ForerunnerLogbook XML file into individual 'run' files.
|
33
|
+
# In this example, '/temp' is the output directory.
|
34
|
+
gooby.split_garmin_training_center_xml('data/2007_03_04.tcx', '/temp')
|
35
|
+
|