recorder: show both barometer and GPS altitude in elevation chart
parent
2185655f7b
commit
1ed5594c0f
|
|
@ -201,23 +201,14 @@ const chartTypes = {
|
||||||
scales: { y: { min: 0, max: 100, title: 'Battery %' }, y1: { position: 'right', min: 3.0, max: 4.2, title: 'Voltage (V)', grid: false } }
|
scales: { y: { min: 0, max: 100, title: 'Battery %' }, y1: { position: 'right', min: 3.0, max: 4.2, title: 'Voltage (V)', grid: false } }
|
||||||
},
|
},
|
||||||
steps: { filter: d => d.Steps !== undefined && d.Steps !== "", data: d => parseInt(d.Steps) || 0, label: 'Steps per Interval', color: '#36a2eb', title: 'Step Count Over Time', type: 'bar', cumulative: true },
|
steps: { filter: d => d.Steps !== undefined && d.Steps !== "", data: d => parseInt(d.Steps) || 0, label: 'Steps per Interval', color: '#36a2eb', title: 'Step Count Over Time', type: 'bar', cumulative: true },
|
||||||
elevation: {
|
elevation: {
|
||||||
filter: d => (d['Barometer Altitude'] && d['Barometer Altitude'] !== "" && !isNaN(parseFloat(d['Barometer Altitude']))) || (d.Altitude && d.Altitude !== "" && !isNaN(parseFloat(d.Altitude))),
|
filter: d => (d['Barometer Altitude'] !== undefined && d['Barometer Altitude'] !== "") || (d.Altitude !== undefined && d.Altitude !== ""),
|
||||||
data: d => {
|
|
||||||
if (d['Barometer Altitude'] && d['Barometer Altitude'] !== "" && !isNaN(parseFloat(d['Barometer Altitude']))) {
|
|
||||||
return convertElevation(parseFloat(d['Barometer Altitude'])).value;
|
|
||||||
} else {
|
|
||||||
return convertElevation(parseFloat(d.Altitude)).value;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
label: () => convertElevation(1).label,
|
|
||||||
color: '#8b5cf6',
|
|
||||||
title: 'Elevation Profile',
|
title: 'Elevation Profile',
|
||||||
getTitle: data => {
|
datasets: [
|
||||||
// Check if we have any barometer altitude data
|
{ key: 'Barometer Altitude', label: () => 'Barometer (' + convertElevation(1).unit + ')', color: '#8b5cf6', yAxis: 'y', convert: convertElevation },
|
||||||
const hasBarometerAlt = data.some(d => d['Barometer Altitude'] && d['Barometer Altitude'] !== "" && !isNaN(parseFloat(d['Barometer Altitude'])));
|
{ key: 'Altitude', label: () => 'GPS (' + convertElevation(1).unit + ')', color: '#a855f7', yAxis: 'y', convert: convertElevation }
|
||||||
return hasBarometerAlt ? 'Elevation Profile (Barometer)' : 'Elevation Profile (GPS)';
|
],
|
||||||
}
|
scales: { y: { title: () => convertElevation(1).label } }
|
||||||
},
|
},
|
||||||
speed: { filter: d => d.Latitude && d.Longitude && d.Latitude !== "" && d.Longitude !== "", calculate: true, label: () => convertSpeed(1).label, color: '#f59e0b', title: 'Speed Over Time' },
|
speed: { filter: d => d.Latitude && d.Longitude && d.Latitude !== "" && d.Longitude !== "", calculate: true, label: () => convertSpeed(1).label, color: '#f59e0b', title: 'Speed Over Time' },
|
||||||
barometer: {
|
barometer: {
|
||||||
|
|
@ -252,7 +243,7 @@ const createChart = (type, canvasId, trackData) => {
|
||||||
.filter(ds => data.some(pt => pt[ds.key] !== undefined && pt[ds.key] !== ""))
|
.filter(ds => data.some(pt => pt[ds.key] !== undefined && pt[ds.key] !== ""))
|
||||||
.map(ds => makeDataset(ds.label, data.map(pt => {
|
.map(ds => makeDataset(ds.label, data.map(pt => {
|
||||||
const val = parseFloat(pt[ds.key]);
|
const val = parseFloat(pt[ds.key]);
|
||||||
return val ? (ds.convert ? ds.convert(val).value : val) : null;
|
return val ? (ds.convert ? parseFloat(ds.convert(val).value.toFixed(1)) : val) : null;
|
||||||
}), ds.color, { fill: false, yAxisID: ds.yAxis }));
|
}), ds.color, { fill: false, yAxisID: ds.yAxis }));
|
||||||
} else if (type === 'speed') {
|
} else if (type === 'speed') {
|
||||||
// Calculate speed from GPS coordinates
|
// Calculate speed from GPS coordinates
|
||||||
|
|
@ -292,7 +283,7 @@ const createChart = (type, canvasId, trackData) => {
|
||||||
interaction: { intersect: false, mode: 'point' },
|
interaction: { intersect: false, mode: 'point' },
|
||||||
plugins: {
|
plugins: {
|
||||||
title: { display: true, text: config.getTitle ? config.getTitle(data) : config.title },
|
title: { display: true, text: config.getTitle ? config.getTitle(data) : config.title },
|
||||||
legend: { display: datasets.length > 1 },
|
legend: { display: true },
|
||||||
tooltip: { mode: 'nearest', intersect: false }
|
tooltip: { mode: 'nearest', intersect: false }
|
||||||
},
|
},
|
||||||
scales: {
|
scales: {
|
||||||
|
|
@ -520,7 +511,10 @@ function createLeafletMap(containerId, coordinates, fullTrack) {
|
||||||
const items = [];
|
const items = [];
|
||||||
if (pointData.Time) items.push(`<strong>🕐 ${pointData.Time.toLocaleTimeString()}</strong>`);
|
if (pointData.Time) items.push(`<strong>🕐 ${pointData.Time.toLocaleTimeString()}</strong>`);
|
||||||
if (pointData.Heartrate) items.push(`❤️ ${pointData.Heartrate} BPM`);
|
if (pointData.Heartrate) items.push(`❤️ ${pointData.Heartrate} BPM`);
|
||||||
if (pointData.Altitude) {
|
if (pointData['Barometer Altitude'] && pointData['Barometer Altitude'] !== "" && !isNaN(parseFloat(pointData['Barometer Altitude']))) {
|
||||||
|
const e = convertElevation(parseFloat(pointData['Barometer Altitude']));
|
||||||
|
items.push(`⛰️ ${e.value.toFixed(0)} ${e.unit}`);
|
||||||
|
} else if (pointData.Altitude) {
|
||||||
const e = convertElevation(parseFloat(pointData.Altitude));
|
const e = convertElevation(parseFloat(pointData.Altitude));
|
||||||
items.push(`⛰️ ${e.value.toFixed(0)} ${e.unit}`);
|
items.push(`⛰️ ${e.value.toFixed(0)} ${e.unit}`);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue