implements chart for ublox accuracy and distance between ublox and smartphone pos. in fullreplay

This commit is contained in:
unknown 2021-01-08 07:17:27 +01:00
parent e74f0fd895
commit ec11f2541d
3 changed files with 109 additions and 86 deletions

View File

@ -1,30 +1,30 @@
var arrayTCP = [];
var arraySERIAL = [];
let allAccSerial = []
let allSerialCoords = []
var ctx = document.getElementById('accChart').getContext('2d');
var accChart = new Chart(ctx, {
type: 'line',
data: {
labels: new Array(),
labels: [],
datasets: [{
label: 'Ublox VAcc',
backgroundColor: 'rgba(214, 69, 65, 1)',
borderColor: 'rgba(214, 69, 65, 1)',
label: 'Ublox Horizontal acc. (m)',
backgroundColor: 'rgba(255, 255, 255, 1)',
borderColor: 'rgba(255, 255, 255, 1)',
borderWidth: 1,
fill: false,
pointRadius: 1,
pointRadius: 0.5,
lineTension: 0.5,
data: arraySERIAL
data: []
},
{
label: 'Smartphone VAcc',
backgroundColor: 'rgba(30, 139, 195, 1)',
borderColor: 'rgba(30, 139, 195, 1)',
label: 'Distance Ublox - Smartphone (m)',
backgroundColor: 'rgba(30, 130, 76, 1)',
borderColor: 'rgba(30, 130, 76, 1)',
borderWidth: 1,
fill: false,
pointRadius: 1,
pointRadius: 0.5,
lineTension: 0.5,
data: arrayTCP
data: []
}]
},
options: {
@ -32,7 +32,7 @@ var accChart = new Chart(ctx, {
yAxes: [{
ticks: {
min: 0,
max: 10,
max: 20,
}
}],
xAxes: [{
@ -48,56 +48,62 @@ var accChart = new Chart(ctx, {
}
});
/*function addSerialSpeedData() {
let speeds = []
function addSerialHAccData(){
indexes.forEach(index => {
speeds.push((allSpeedsSerial[index] * 3.6).toFixed(2))
})
accChart.data.datasets[0].data = speeds;
accChart.update();
}*/
/*
function addTCPSpeedData(sensordataList) {
let speedsTCP = []
let times = []
sensordataList.forEach(sensordata => {
if (sensordata.Speed === 0) {
return;
}
let speed = sensordata.Speed
speedsTCP.push((speed * 3.6).toFixed(2));
let time = sensordata.Servertime
times.push(time)
})
accChart.data.labels = times;
accChart.data.datasets[1].data = speedsTCP;
accChart.update();
}
function findSerialDataIndex(tcpdataList, serialdataList) {
let allSerialTimes = []
function addDistances(tcpDataList, serialDataList){
let tcpCoords = []
let serialCoords = []
serialdataList.forEach(sensordata => {
if (!(sensordata.Speed === 0)) {
let serialTimestamp;
allSpeedsSerial.push(sensordata.Speed)
serialTimestamp = composeServertime(sensordata.Servertime)
allSerialTimes.push(serialTimestamp)
let tcpTimes = []
let serialHAccs = []
let distances = []
indexes.forEach(index => {
serialHAccs.push(allAccSerial[index].toFixed(2))
serialCoords.push(allSerialCoords[index])
})
tcpDataList.forEach(sensordata => {
if (!(sensordata.Position[0] === 0) && !(sensordata.Position[1] === 0)) {
let tcpCoord = [sensordata.Position[1], sensordata.Position[0]]
tcpCoords.push(tcpCoord)
let time = sensordata.Servertime
tcpTimes.push(time)
}
})
tcpdataList.forEach(sensordata => {
if (!(sensordata.Speed === 0)) {
let tcpTimestamp = composeServertime(sensordata.Servertime)
let index = findBestTimeMatch(tcpTimestamp, allSerialTimes)[1]
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)
}
indexes.push(index)
}
})
console.log("indexes: " + indexes)
}*/
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
}

View File

@ -1,5 +1,4 @@
let allSpeedsSerial = []
let indexes = []
var ctx = document.getElementById('speedChart').getContext('2d');
var speedChart = new Chart(ctx, {
@ -14,7 +13,7 @@ var speedChart = new Chart(ctx, {
fill: false,
pointRadius: 1,
lineTension: 0.5,
data: arraySERIAL
data: []
},
{
label: 'Smartphone speed',
@ -24,7 +23,7 @@ var speedChart = new Chart(ctx, {
fill: false,
pointRadius: 1,
lineTension: 0.5,
data: arrayTCP
data: []
}]
},
options: {
@ -78,26 +77,3 @@ function addTCPSpeedData(sensordataList) {
speedChart.update();
}
function findSerialDataIndex(tcpdataList, serialdataList) {
let allSerialTimes = []
serialdataList.forEach(sensordata => {
if (!(sensordata.Speed === 0)) {
let serialTimestamp;
allSpeedsSerial.push(sensordata.Speed)
serialTimestamp = composeServertime(sensordata.Servertime)
allSerialTimes.push(serialTimestamp)
}
})
tcpdataList.forEach(sensordata => {
if (!(sensordata.Speed === 0)) {
let tcpTimestamp = composeServertime(sensordata.Servertime)
let index = findBestTimeMatch(tcpTimestamp, allSerialTimes)[1]
indexes.push(index)
}
})
console.log("indexes: " + indexes)
}

View File

@ -1,4 +1,5 @@
var trackingdata = null;
let indexes
function composeServertime(servertime){
var composed;
@ -6,6 +7,13 @@ function composeServertime(servertime){
return composed;
}
function calculateDistSerialTCP(coordsSerial, coordsTCP) {
let long = Math.abs(coordsSerial[0] - coordsTCP[0])
let lat = Math.abs(coordsSerial[1] - coordsTCP[1])
let squareDist = Math.pow(long, 2) + Math.pow(lat, 2)
return (Math.sqrt(squareDist))
}
function findBestTimeMatch(num, arr) {
var mid;
var lo = 0;
@ -24,6 +32,30 @@ function findBestTimeMatch(num, arr) {
return [arr[hi], hi];
}
function findSerialDataIndex(tcpdataList, serialdataList) {
let allSerialTimes = []
serialdataList.forEach(sensordata => {
if (!(sensordata.Speed === 0) && !(sensordata.HAcc === 0)) {
let serialTimestamp;
allSpeedsSerial.push(sensordata.Speed)
allAccSerial.push(sensordata.HAcc)
allSerialCoords.push([sensordata.Position[1], sensordata.Position[0]])
serialTimestamp = composeServertime(sensordata.Servertime)
allSerialTimes.push(serialTimestamp)
}
})
tcpdataList.forEach(sensordata => {
if (!(sensordata.Speed === 0)) {
let tcpTimestamp = composeServertime(sensordata.Servertime)
let index = findBestTimeMatch(tcpTimestamp, allSerialTimes)[1]
indexes.push(index)
}
})
}
window.addEventListener("load", function(evt) {
//------------------------Buttons------------------------------
@ -52,6 +84,11 @@ window.addEventListener("load", function(evt) {
};
document.getElementById("replaystarten").onclick = function(evt) {
indexes = []
allSpeedsSerial = []
allAccSerial = []
allSerialCoords = []
let sel = document.getElementById("meas")
console.log(trackings[sel.selectedIndex].UUID)
fetch(`http://localhost:3011/trackings/${trackings[sel.selectedIndex].UUID}`, { method: 'GET'}).then(results => {
@ -59,7 +96,10 @@ window.addEventListener("load", function(evt) {
}).then(r => {
console.log(r.data.Data)
console.log(r.data)
findSerialDataIndex(r.data.Data.SOURCE_TCP, r.data.Data.SOURCE_SERIAL)
if('SOURCE_TCP' in r.data.Data && r.data.Data.SOURCE_TCP.length > 0 && 'SOURCE_SERIAL' in r.data.Data && r.data.Data.SOURCE_SERIAL.length > 0){
findSerialDataIndex(r.data.Data.SOURCE_TCP, r.data.Data.SOURCE_SERIAL)
addDistances(r.data.Data.SOURCE_TCP, r.data.Data.SOURCE_SERIAL)
}
if ('SOURCE_TCP' in r.data.Data && r.data.Data.SOURCE_TCP.length > 0) {
updateMapTCPbulk(r.data.Data.SOURCE_TCP)
addTCPSpeedData(r.data.Data.SOURCE_TCP)
@ -67,6 +107,7 @@ window.addEventListener("load", function(evt) {
if ('SOURCE_SERIAL' in r.data.Data && r.data.Data.SOURCE_SERIAL.length > 0) {
updateMapSERIALbulk(r.data.Data.SOURCE_SERIAL)
addSerialSpeedData()
addSerialHAccData()
}
})