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 }