gyrogpsc/static/scripts/accChart.js

107 lines
2.9 KiB
JavaScript

let allAccSerial = []
let allSerialCoords = []
let allTcpCoords = []
var ctx = document.getElementById('accChart').getContext('2d');
var accChart = new Chart(ctx, {
type: 'line',
data: {
labels: [],
datasets: [{
label: 'Ublox Horizontal acc. (m)',
backgroundColor: 'rgba(255, 255, 255, 1)',
borderColor: 'rgba(255, 255, 255, 1)',
borderWidth: 1,
fill: false,
pointRadius: 0.5,
lineTension: 0.5,
data: []
},
{
label: 'Distance Ublox - Smartphone (m)',
backgroundColor: 'rgba(30, 130, 76, 1)',
borderColor: 'rgba(30, 130, 76, 1)',
borderWidth: 1,
fill: false,
pointRadius: 0.5,
lineTension: 0.5,
data: []
}]
},
options: {
scales: {
yAxes: [{
ticks: {
min: 0,
max: 20,
}
}],
xAxes: [{
type: 'time',
time: {
unit: 'second'
}
}]
},
animation: {
duration: 0
}
}
});
function addDistances(tcpDataList, serialDataList){
let tcpCoords = []
let serialCoords = []
let tcpTimes = []
let serialHAccs = []
let distances = []
indexes.forEach(index => {
serialHAccs.push(allAccSerial[index].toFixed(2))
serialCoords.push(allSerialCoords[index])
})
tcpDataList.forEach(sensordata => {
if(!(sensordata.Speed === 0) && !(sensordata.HAcc === 0)){
if (!(sensordata.Position[0] === 0) && !(sensordata.Position[1] === 0)) {
let tcpCoord = [sensordata.Position[1], sensordata.Position[0]]
tcpCoords.push(tcpCoord)
let time = sensordata.Timestamp
tcpTimes.push(time)
}
}
})
for(let i = 0; i < tcpCoords.length; i++){
let distance = distanceInMetersBetweenEarthCoordinates
(serialCoords[i][1],serialCoords[i][0],tcpCoords[i][1],tcpCoords[i][0])
distances.push(distance)
}
console.log("distances: " + distances)
accChart.data.labels = tcpTimes
accChart.data.datasets[0].data = serialHAccs
accChart.data.datasets[1].data = distances
accChart.update()
}
function degreesToRadians(degrees) {
return degrees * Math.PI / 180;
}
function distanceInMetersBetweenEarthCoordinates(lat1, lon1, lat2, lon2) {
var earthRadiusKm = 6371
var dLat = degreesToRadians(lat2-lat1)
var dLon = degreesToRadians(lon2-lon1)
lat1 = degreesToRadians(lat1)
lat2 = degreesToRadians(lat2)
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2)
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a))
return (earthRadiusKm * c) * 1000
}