Skip to content

Commit 103b2f3

Browse files
committed
Added the ability to display gear shift data.
1 parent 8db3cef commit 103b2f3

4 files changed

Lines changed: 59 additions & 10 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ An example implementation is available at https://activity-analyzer.app.
1717

1818
# Version History
1919

20+
* 1.3 - Fixed issues with FIT files that have developer defined fields. Added ability to show gear shift data.
2021
* 1.2 - Initial support for file comparison.
2122
* 1.1 - Added export and split capabilities.
2223
* 1.0 - Fixed FIT file altitude readings and added first cut at power interval analysis.

activity-analyzer/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "activity-analyzer"
3-
version = "1.2.0"
3+
version = "1.3.0"
44
authors = ["Mike Simms <msimms01@gmail.com>"]
55
edition = "2018"
66

activity-analyzer/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,14 +367,14 @@ fn callback(timestamp: u32, global_message_num: u16, _local_msg_type: u8, _messa
367367
Some(lat_semicircles) => {
368368

369369
// Make sure we have a valid reading.
370-
if lat_semicircles != 0x7FFFFFFF && lat_semicircles != 0 {
370+
if lat_semicircles != 0x7FFFFFFF {
371371
latitude = fit_file::fit_file::semicircles_to_degrees(lat_semicircles);
372372

373373
match msg.position_long {
374374
Some(lon_semicircles) => {
375375

376376
// Make sure we have a valid reading.
377-
if lon_semicircles != 0x7FFFFFFF && lon_semicircles != 0 {
377+
if lon_semicircles != 0x7FFFFFFF {
378378
longitude = fit_file::fit_file::semicircles_to_degrees(lon_semicircles);
379379
valid_location = true;
380380
}

docs/html/index.html

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,22 @@
483483
});
484484
altitude_graph = draw_graph(start_time_ms, end_time_ms, time_altitude_data, "Altitude", "meters", "ForestGreen", fill, altitude_graph);
485485
}
486+
if (events.length > 0 && times.length > 0)
487+
{
488+
let new_events = events.map(function(event, i) {
489+
let timestamp = event["timestamp_ms"];
490+
let time_index = times.findIndex(function(val) { return val == timestamp; }, timestamp);
486491

487-
draw_map(latitudes, longitudes, map_color, distance_meters);
492+
if (time_index != -1)
493+
{
494+
return [ latitudes[time_index], longitudes[time_index], event["event_type"] ];
495+
}
496+
return [ latitudes[0], longitudes[0], event["event_type"] ];
497+
});
498+
events = new_events;
499+
}
500+
501+
draw_map(latitudes, longitudes, map_color, distance_meters, events);
488502

489503
// Show the export section
490504
let section = document.getElementById('export');
@@ -628,23 +642,57 @@ <h4>Analyze, compare, and split fitness files.<br>Only GPX, TCX, and FIT files a
628642
}
629643

630644
/// @function draw_map
631-
function draw_map(latitudes, longitudes, color, extent_meters)
645+
function draw_map(latitudes, longitudes, line_color, extent_meters, events)
632646
{
633647
let map_div = document.getElementById('map_canvas');
634648
map_div.style = "display: block;";
635649

636-
let projection = new OpenLayers.Projection("EPSG:4326");
637-
638650
let osm_layer = new OpenLayers.Layer.OSM("OSM");
639651
map.addLayer(osm_layer);
640652

653+
let projection = new OpenLayers.Projection("EPSG:4326");
654+
let project_to = map.getProjectionObject(); // The map projection (Spherical Mercator)
655+
656+
if (events.length > 0)
657+
{
658+
let marker_color_list = ["red", "black"];
659+
let marker_layer_name = [events[0][2]];
660+
let marker_style_array = [new OpenLayers.StyleMap({ pointRadius: 6, fillColor: marker_color_list[0], fillOpacity: 0.5 })];
661+
let marker_vector_layer = [new OpenLayers.Layer.Vector(marker_layer_name[0], { styleMap: marker_style_array[0] })];
662+
663+
let j = 0;
664+
for (var i = 1; i < events.length; i++)
665+
{
666+
if (!marker_layer_name.includes(events[i][2]))
667+
{
668+
j++;
669+
marker_layer_name.push(events[i][2]); // If new layer name found it is created
670+
marker_style_array.push(new OpenLayers.StyleMap({ pointRadius: 6, fillColor: marker_color_list[j % marker_color_list.length], fillOpacity: 0.5 }));
671+
marker_vector_layer.push(new OpenLayers.Layer.Vector(marker_layer_name[j], { styleMap: marker_style_array[j] }));
672+
}
673+
}
674+
675+
for (var i = 0; i < events.length; i++)
676+
{
677+
let marker_lat = events[i][0];
678+
let marker_lon = events[i][1];
679+
let feature = new OpenLayers.Feature.Vector(
680+
new OpenLayers.Geometry.Point(marker_lon, marker_lat).transform(projection, project_to), { description: "marker number " + i });
681+
marker_vector_layer[marker_layer_name.indexOf(events[i][2])].addFeatures(feature);
682+
}
683+
684+
for (var i = 0; i < marker_layer_name.length; i++) {
685+
map.addLayer(marker_vector_layer[i]);
686+
}
687+
}
688+
641689
let points = new Array();
642690
latitudes.map(function(e, i) {
643691
points.push(new OpenLayers.Geometry.Point(longitudes[i], e));
644692
});
645693

646694
let my_line = new OpenLayers.Geometry.LineString(points).transform(projection, map.getProjectionObject());
647-
let my_line_style = { strokeColor: color, strokeWidth: 3, strokeOpacity: 0.75 };
695+
let my_line_style = { strokeColor: line_color, strokeWidth: 3, strokeOpacity: 0.75 };
648696
let my_feature = new OpenLayers.Feature.Vector(my_line, {}, my_line_style);
649697
let my_vector = new OpenLayers.Layer.Vector("line test");
650698

@@ -653,11 +701,11 @@ <h4>Analyze, compare, and split fitness files.<br>Only GPX, TCX, and FIT files a
653701

654702
let lon = longitudes[0];
655703
let lat = latitudes[0];
704+
let lon_lat = new OpenLayers.LonLat(lon, lat).transform(projection, map.getProjectionObject());
656705
let zoom = 17.0 - (extent_meters / 10000.0);
706+
657707
if (zoom < 10.0)
658708
zoom = 10.0;
659-
let lon_lat = new OpenLayers.LonLat(lon, lat).transform(projection, map.getProjectionObject());
660-
661709
map.setCenter(lon_lat, zoom);
662710
map.render(map_div);
663711
}

0 commit comments

Comments
 (0)