106 lines
3.0 KiB
JavaScript
106 lines
3.0 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][0],serialCoords[i][1],tcpCoords[i][0],tcpCoords[i][1])
|
|
distances.push(distance)
|
|
}
|
|
|
|
console.log("tcp coords: " + tcpCoords)
|
|
console.log("distances: " + distances)
|
|
|
|
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
|
|
} |