gyrogpsc/static/scripts/accChart.js
2021-01-08 21:30:33 +01:00

102 lines
2.9 KiB
JavaScript

let allAccSerial = []
let allSerialCoords = []
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][0],serialCoords[i][1],tcpCoords[i][0],tcpCoords[i][1])
distances.push(distance)
}
accChart.data.labels = tcpTimes
accChart.data.datasets[0].data = serialHAccs
accChart.data.datasets[1].data = distances
accChart.update()
}
//https://www.movable-type.co.uk/scripts/latlong.html
function distanceInMetersBetweenEarthCoordinates(long1, lat1, long2, lat2) {
var earthRadiusM = 6371000
var phi1 = lat1 * Math.PI / 180
var phi2 = lat2 * Math.PI / 180
var dlat = (lat2-lat1) * Math.PI / 180
var dlong = (long2 - long1) * Math.PI / 180
var a = Math.sin(dlat/2) * Math.sin(dlat/2) +
Math.cos(phi1) * Math.cos(phi2) *
Math.sin(dlong/2) * Math.sin(dlong/2)
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a))
return earthRadiusM * c
}