diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..06d0771 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/static/scripts/accChart.js b/static/scripts/accChart.js index 47b49bf..75e2941 100644 --- a/static/scripts/accChart.js +++ b/static/scripts/accChart.js @@ -1,9 +1,8 @@ - let allAccSerial = [] let allSerialCoords = [] -var ctx = document.getElementById('accChart').getContext('2d'); -var accChart = new Chart(ctx, { +let ctx = document.getElementById('accChart').getContext('2d'); +let accChart = new Chart(ctx, { type: 'line', data: { labels: [], @@ -59,42 +58,7 @@ var accChart = new Chart(ctx, { } }); -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],tcpCoords[i]) - distances.push(distance) - } - - accChart.data.labels = tcpTimes - accChart.data.datasets[0].data = serialHAccs - accChart.data.datasets[1].data = distances - accChart.update() -} - -function addDistancesNew(data){ +function addDistances(data){ let serialHAccs = data.map(el => { return el.ser.HAcc }) @@ -122,25 +86,24 @@ function addDistancesNew(data){ accChart.update() } -//https://www.movable-type.co.uk/scripts/latlong.html function distanceInMetersBetweenEarthCoordinates(coord1, coord2) { - var long1 = coord1[0] - var lat1 = coord1[1] - var long2 = coord2[0] - var lat2 = coord2[1] + let long1 = coord1[0] + let lat1 = coord1[1] + let long2 = coord2[0] + let lat2 = coord2[1] - var earthRadiusM = 6371000 + let earthRadiusM = 6371000 - var phi1 = lat1 * Math.PI / 180 - var phi2 = lat2 * Math.PI / 180 + let phi1 = lat1 * Math.PI / 180 + let phi2 = lat2 * Math.PI / 180 - var dlat = (lat2-lat1) * Math.PI / 180 - var dlong = (long2 - long1) * Math.PI / 180 + let dlat = (lat2-lat1) * Math.PI / 180 + let dlong = (long2 - long1) * Math.PI / 180 - var a = Math.sin(dlat/2) * Math.sin(dlat/2) + + let 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)) + let c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)) return earthRadiusM * c } @@ -152,26 +115,26 @@ function distVincenty(coord1, coord2) { const lat1 = coord1[1] const lon2 = coord2[0] const lat2 = coord2[1] - var a = 6378137, b = 6356752.314245, f = 1/298.257223563; // WGS-84 ellipsoid params - var L = (lon2-lon1).toRad() - var U1 = Math.atan((1-f) * Math.tan(lat1.toRad())); - var U2 = Math.atan((1-f) * Math.tan(lat2.toRad())); - var sinU1 = Math.sin(U1), cosU1 = Math.cos(U1); - var sinU2 = Math.sin(U2), cosU2 = Math.cos(U2); + const a = 6378137, b = 6356752.314245, f = 1/298.257223563; // WGS-84 ellipsoid params + let L = (lon2-lon1).toRad() + let U1 = Math.atan((1-f) * Math.tan(lat1.toRad())); + let U2 = Math.atan((1-f) * Math.tan(lat2.toRad())); + let sinU1 = Math.sin(U1), cosU1 = Math.cos(U1); + let sinU2 = Math.sin(U2), cosU2 = Math.cos(U2); - var lambda = L, lambdaP, iterLimit = 100; + let lambda = L, lambdaP, iterLimit = 100; do { - var sinLambda = Math.sin(lambda), cosLambda = Math.cos(lambda); - var sinSigma = Math.sqrt((cosU2*sinLambda) * (cosU2*sinLambda) + + let sinLambda = Math.sin(lambda), cosLambda = Math.cos(lambda); + let sinSigma = Math.sqrt((cosU2*sinLambda) * (cosU2*sinLambda) + (cosU1*sinU2-sinU1*cosU2*cosLambda) * (cosU1*sinU2-sinU1*cosU2*cosLambda)); if (sinSigma===0) return 0; // co-incident points - var cosSigma = sinU1*sinU2 + cosU1*cosU2*cosLambda; - var sigma = Math.atan2(sinSigma, cosSigma); - var sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma; - var cosSqAlpha = 1 - sinAlpha*sinAlpha; - var cos2SigmaM = cosSigma - 2*sinU1*sinU2/cosSqAlpha; + let cosSigma = sinU1*sinU2 + cosU1*cosU2*cosLambda; + let sigma = Math.atan2(sinSigma, cosSigma); + let sinAlpha = cosU1 * cosU2 * sinLambda / sinSigma; + let cosSqAlpha = 1 - sinAlpha*sinAlpha; + let cos2SigmaM = cosSigma - 2*sinU1*sinU2/cosSqAlpha; if (isNaN(cos2SigmaM)) cos2SigmaM = 0; // equatorial line: cosSqAlpha=0 (§6) - var C = f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha)); + let C = f/16*cosSqAlpha*(4+f*(4-3*cosSqAlpha)); lambdaP = lambda; lambda = L + (1-C) * f * sinAlpha * (sigma + C*sinSigma*(cos2SigmaM+C*cosSigma*(-1+2*cos2SigmaM*cos2SigmaM))); @@ -179,13 +142,13 @@ function distVincenty(coord1, coord2) { if (iterLimit===0) return NaN // formula failed to converge - var uSq = cosSqAlpha * (a*a - b*b) / (b*b); - var A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq))); - var B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq))); - var deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)- + let uSq = cosSqAlpha * (a*a - b*b) / (b*b); + let A = 1 + uSq/16384*(4096+uSq*(-768+uSq*(320-175*uSq))); + let B = uSq/1024 * (256+uSq*(-128+uSq*(74-47*uSq))); + let deltaSigma = B*sinSigma*(cos2SigmaM+B/4*(cosSigma*(-1+2*cos2SigmaM*cos2SigmaM)- B/6*cos2SigmaM*(-3+4*sinSigma*sinSigma)*(-3+4*cos2SigmaM*cos2SigmaM))); - var s = b*A*(sigma-deltaSigma); + let s = b*A*(sigma-deltaSigma); s = s.toFixed(3); // round to 1mm precision return s; -} +} \ No newline at end of file diff --git a/static/scripts/accuracy.js b/static/scripts/accuracy.js index 6d43df7..c0092fc 100644 --- a/static/scripts/accuracy.js +++ b/static/scripts/accuracy.js @@ -50,9 +50,4 @@ function addTCPAccuracy(hacc, vacc){ function addDistanceToBarChart(dist){ barChart.data.datasets[2].data = [dist]; barChart.update(); -} -//Farbe der Lampen ändern -// AN: document.getElementById("greenlamp").style.backgroundColor = 'rgba(0, 230, 64, 1)' -// AUS: document.getElementById("greenlamp").style.backgroundColor = 'rgba(0, 100, 0, 1)' -// AN: document.getElementById("redlamp").style.backgroundColor = 'rgba(242, 38, 19, 1)' -// AUS: document.getElementById("redlamp").style.backgroundColor = 'rgba(139, 0, 0, 1)' +} \ No newline at end of file diff --git a/static/scripts/cubes.js b/static/scripts/cubes.js index 4f18b4f..77596e4 100644 --- a/static/scripts/cubes.js +++ b/static/scripts/cubes.js @@ -1,44 +1,42 @@ -var width = document.getElementById("viewport").offsetWidth -var height = 300; +let width = document.getElementById("viewport").offsetWidth +let height = 300; -var renderer = new THREE.WebGLRenderer({ antialias: true }); +let renderer = new THREE.WebGLRenderer({ antialias: true }); renderer.setSize(width, height); document.getElementById("viewport").appendChild(renderer.domElement); -var scene = new THREE.Scene(); +let scene = new THREE.Scene(); + +let cubeGeometry = new THREE.CubeGeometry(100, 100/2, 100*1.5); +let cubeGeometry2 = new THREE.CubeGeometry(120, 120/2, 120*1.5); -var cubeGeometry = new THREE.CubeGeometry(100, 100/2, 100*1.5); -var cubeGeometry2 = new THREE.CubeGeometry(120, 120/2, 120*1.5); -// var cubeMaterial = new THREE.MeshLambertMaterial({ color: 0xffffff }); const color = new THREE.Color("rgb(255, 0, 0)"); -var cubeMaterial = new THREE.MeshPhongMaterial({ +let cubeMaterial = new THREE.MeshPhongMaterial({ color: color, opacity: 1, transparent: true, }); const color2 = new THREE.Color("rgb(48,117,255)"); -var cubeMaterial2 = new THREE.MeshPhongMaterial({ +let cubeMaterial2 = new THREE.MeshPhongMaterial({ color: color2, opacity: 0.5, transparent: true, }); -var cube = new THREE.Mesh(cubeGeometry, cubeMaterial); -var cube2 = new THREE.Mesh(cubeGeometry2, cubeMaterial2); -// cube.rotation.y = Math.PI * 45 / 180; -// cube2.rotation.y = Math.PI * 45 / 180; +let cube = new THREE.Mesh(cubeGeometry, cubeMaterial); +let cube2 = new THREE.Mesh(cubeGeometry2, cubeMaterial2); scene.add(cube); scene.add(cube2); -var camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 6000); +let camera = new THREE.PerspectiveCamera(45, width / height, 0.1, 6000); camera.position.y = 100; camera.position.z = 240; camera.lookAt(cube.position); scene.add(camera); -var skyboxGeometry = new THREE.CubeGeometry(5000, 5000, 5000); -var skyboxMaterial = new THREE.MeshBasicMaterial({ color: 0x232323, side: THREE.BackSide }); -var skybox = new THREE.Mesh(skyboxGeometry, skyboxMaterial); +let skyboxGeometry = new THREE.CubeGeometry(5000, 5000, 5000); +let skyboxMaterial = new THREE.MeshBasicMaterial({ color: 0x232323, side: THREE.BackSide }); +let skybox = new THREE.Mesh(skyboxGeometry, skyboxMaterial); scene.add(skybox); @@ -46,7 +44,7 @@ const colorl = 0xFFFFFF; const intensity = 1; const light = new THREE.DirectionalLight(colorl, intensity); -var pointLight = new THREE.PointLight(0xffffff); +let pointLight = new THREE.PointLight(0xffffff); pointLight.position.set(0, 300, 200); light.position.set(0, 300, 200); @@ -66,10 +64,8 @@ let quaternionOffset = document.getElementById("quaternionOffset") function renderTCP(x, y, z) { let calibration = new THREE.Quaternion().setFromEuler(manCalibration) - // let calibration = new THREE.Quaternion().setFromEuler(new THREE.Euler( radFromAngle, 0, 0, 'YXZ' )) let eul = new THREE.Euler( x, y, z, 'YXZ' ); - // let eul = new THREE.Euler( x, z, y, 'ZXY' ); // XYZ XZY YZX YXZ ZXY ZYX cube2.quaternion.setFromEuler(eul).multiply(calibrationRot).multiply(calibration) quaternionOffset.innerHTML = `Lage Abweichung: ${(cube2.quaternion.angleTo(cube.quaternion) * 180 / Math.PI).toFixed(2) }°` @@ -78,8 +74,6 @@ function renderTCP(x, y, z) { } function renderSerial(x, y, z) { - // requestAnimationFrame(renderSerial); - let eul = new THREE.Euler( x, y, z, 'YXZ' ); // XYZ XZY YZX YXZ ZXY ZYX cube.quaternion.setFromEuler(eul) @@ -90,14 +84,12 @@ function renderSerial(x, y, z) { renderTCP(0, 0, 0); renderSerial(0, 0, 0); -var pitchRange = document.getElementById("pitchRange"); -var yawRange = document.getElementById("yawRange"); -var rollRange = document.getElementById("rollRange"); +let pitchRange = document.getElementById("pitchRange"); +let yawRange = document.getElementById("yawRange"); +let rollRange = document.getElementById("rollRange"); pitchRange.oninput = () => { manCalibration.x = pitchRange.value * Math.PI / 180 - // let rot = new THREE.Euler().setFromQuaternion( cube2.quaternion, 'YXZ' ); - // renderTCP(rot.x, rot.y, rot.z) } yawRange.oninput = () => { manCalibration.y = yawRange.value * Math.PI / 180 @@ -116,7 +108,7 @@ function delCalibration(evt) { calPitch = 0 } -var calState = false; +let calState = false; function manualCalibration(evt) { let con = document.getElementById("manCalContainer") console.log("mancal", con.style.display) @@ -134,7 +126,6 @@ function manualCalibration(evt) { pitchRange.value = 0 yawRange.value = 0 rollRange.value = 0 - } } function calibrate(evt) { @@ -150,7 +141,7 @@ function calibrate(evt) { calYaw = dif.y // * 180/Math.PI calRoll = dif.z // * 180/Math.PI calibrationRot = diff -}; +} document.getElementById("deleteCalibration").onclick = delCalibration document.getElementById("manualCalibration").onclick = manualCalibration document.getElementById("calibrate").onclick = calibrate @@ -158,7 +149,7 @@ document.getElementById("calibrate").onclick = calibrate // indicators // -var options = { +let options = { size : 200, // Sets the size in pixels of the indicator (square) roll : 0, // Roll angle in degrees for an attitude indicator pitch : 0, // Pitch angle in degrees for an attitude indicator @@ -171,34 +162,23 @@ var options = { img_directory : 'static/indicators/img/' // The directory where the images are saved to } -var headingSer = $.flightIndicator('#headingSer', 'heading', options); -var headingTcp = $.flightIndicator('#headingTcp', 'heading', options); -var attitudeSer = $.flightIndicator('#attitudeSer', 'attitude', options); -var attitudeTcp = $.flightIndicator('#attitudeTcp', 'attitude', options); -// var variometer = $.flightIndicator('#variometer', 'variometer', options); -var airspeed = $.flightIndicator('#airspeed', 'airspeed', options); -var altimeter = $.flightIndicator('#altimeter', 'altimeter', options); +let headingSer = $.flightIndicator('#headingSer', 'heading', options); +let headingTcp = $.flightIndicator('#headingTcp', 'heading', options); +let attitudeSer = $.flightIndicator('#attitudeSer', 'attitude', options); +let attitudeTcp = $.flightIndicator('#attitudeTcp', 'attitude', options); +let airspeed = $.flightIndicator('#airspeed', 'airspeed', options); +let altimeter = $.flightIndicator('#altimeter', 'altimeter', options); -var airspeedLabel = document.getElementById("airspeedLabel") -var altitudeLabel = document.getElementById("altitudeLabel") +let airspeedLabel = document.getElementById("airspeedLabel") +let altitudeLabel = document.getElementById("altitudeLabel") function setIndicatorsTcp(sensordata) { - // let q = new THREE.Euler().setFromQuaternion( quaternionRawTcp, 'YXZ' ) // XYZ XZY YZX YXZ ZXY ZYX let q = new THREE.Euler().setFromQuaternion( cube2.quaternion, 'YXZ' ) // XYZ XZY YZX YXZ ZXY ZYX if (sensordata.Orientation[0] !== 0 && sensordata.Orientation[1] !== 0) { - //attitudeTcp.setPitch(sensordata.Orientation[0]) attitudeTcp.setPitch(q.x * 180 / Math.PI) - //attitudeTcp.setRoll(sensordata.Orientation[1]) attitudeTcp.setRoll(q.z * 180 / Math.PI) } - - // Heading from quaternion - // if (sensordata.Orientation[2] !== 0) { - // // headingTcp.setHeading((-sensordata.Orientation[2]-90)%360) - // let h = q.y * 180 / Math.PI * -1 - // headingTcp.setHeading(h) - // } let heading = sensordata.HeadDevice if (heading !== 0) { headingTcp.setHeading(heading) @@ -206,19 +186,10 @@ function setIndicatorsTcp(sensordata) { } function setIndicatorsSer(sensordata) { - let q = new THREE.Euler().setFromQuaternion( cube.quaternion, 'YXZ' ) - if (sensordata.Orientation[0] !== 0 && sensordata.Orientation[1] !== 0) { attitudeSer.setPitch(sensordata.Orientation[0]) attitudeSer.setRoll(sensordata.Orientation[1]) } - - // Heading from quaternion - // if (sensordata.Orientation[2] !== 0) { - // // headingTcp.setHeading((-sensordata.Orientation[2]-90)%360) - // let h = q.y * 180 / Math.PI * -1 - // headingSer.setHeading(h) - // } let heading = sensordata.HeadMotion if (heading !== 0) { headingSer.setHeading(heading) @@ -231,5 +202,4 @@ function setIndicatorsSer(sensordata) { altimeter.setAltitude((sensordata.Position[2] * 10).toFixed()) altitudeLabel.innerHTML = `HMSL: ${(sensordata.Position[2]).toFixed(2)} m` } -} - +} \ No newline at end of file diff --git a/static/scripts/map.js b/static/scripts/map.js index e3b0d2c..8f75f95 100644 --- a/static/scripts/map.js +++ b/static/scripts/map.js @@ -1,10 +1,10 @@ mapboxgl.accessToken = 'pk.eyJ1IjoiZmhlcmtvbW0iLCJhIjoiY2tobm81bXppMGVuNzMyazY3eDU0M2dyaSJ9.qWJrwtv7KitW60pzs6h3Gg'; -var map = new mapboxgl.Map({ +let map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/satellite-v9', zoom: 0 }); -var emptyTCP = { +let emptyTCP = { type: "FeatureCollection", features: [ { @@ -16,7 +16,7 @@ var emptyTCP = { }] } -var emptySERIAL = { +let emptySERIAL = { type: "FeatureCollection", features: [ { @@ -65,33 +65,16 @@ map.on('load', function () { map.jumpTo({ 'center': [9.19640999, 49.12283027], 'zoom': 16 }); map.setPitch(30); - var stateLegendEl = document.getElementById('state-legend'); + let stateLegendEl = document.getElementById('state-legend'); stateLegendEl.style.display = 'block'; }) -/*function updateMap (TCPlong, TCPlat, SERIALlong, SERIALlat) { - if(!(TCPlong === 0) && !(TCPlat === 0)){ - emptyTCP.features[0].geometry.coordinates.push([TCPlong, TCPlat]); - map.getSource('routeTCP').setData(emptyTCP); - } - if(!(SERIALlong === 0) && !(SERIALlat === 0)){ - emptySERIAL.features[0].geometry.coordinates.push([SERIALlong, SERIALlat]); - map.getSource('routeSERIAL').setData(emptySERIAL); - } - // else if (!([TCPlong, TCPlat] = [0,0])) { - // map.panTo([TCPlong, TCPlat]); - // } - map.panTo([TCPlong, TCPlat]); -}*/ - function updateMapTCP (TCPlong, TCPlat) { emptyTCP.features[0].geometry.coordinates.push([TCPlong, TCPlat]); map.getSource('routeTCP').setData(emptyTCP); - //map.panTo([TCPlong, TCPlat]); } function updateMapSERIAL (SERIALlong, SERIALlat) { emptySERIAL.features[0].geometry.coordinates.push([SERIALlong, SERIALlat]); map.getSource('routeSERIAL').setData(emptySERIAL); - //map.panTo([SERIALlong, SERIALlat]); } diff --git a/static/scripts/mapfull.js b/static/scripts/mapfull.js index f661248..e833929 100644 --- a/static/scripts/mapfull.js +++ b/static/scripts/mapfull.js @@ -1,5 +1,5 @@ mapboxgl.accessToken = 'pk.eyJ1IjoiZmhlcmtvbW0iLCJhIjoiY2tobm81bXppMGVuNzMyazY3eDU0M2dyaSJ9.qWJrwtv7KitW60pzs6h3Gg'; -var map = new mapboxgl.Map({ +let map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/satellite-v9', zoom: 0 @@ -42,7 +42,7 @@ map.on('load', function () { map.jumpTo({ 'center': [9.19640999, 49.12283027], 'zoom': 16 }); map.setPitch(30); - var stateLegendEl = document.getElementById('state-legend'); + let stateLegendEl = document.getElementById('state-legend'); stateLegendEl.style.display = 'block'; }) diff --git a/static/scripts/refull.js b/static/scripts/refull.js index 222ecb2..952623c 100644 --- a/static/scripts/refull.js +++ b/static/scripts/refull.js @@ -1,16 +1,15 @@ -var trackingdata = null; let indexes function composeTimestamp(servertime){ - var composed; + let composed; composed = servertime.slice(11,25).split(':').join("").split('.').join(""); return composed; } function findBestTimeMatch(num, arr) { - var mid; - var lo = 0; - var hi = arr.length - 1; + let mid; + let lo = 0; + let hi = arr.length - 1; while (hi - lo > 1) { mid = Math.floor ((lo + hi) / 2); if (arr[mid] < num) { @@ -29,10 +28,10 @@ function findSerialDataIndex(tcpdataList, serialdataList) { let allSerialTimes = [] serialdataList.forEach(sensordata => { - if (!(sensordata.Speed === 0) && !(sensordata.HAcc === 0)) { + if (sensordata.Speed !== 0 && sensordata.HAcc !== 0) { allSpeedsSerial.push(sensordata.Speed) allAccSerial.push(sensordata.HAcc) - if(!(sensordata.Position[1] === 0) && !(sensordata.Position[0] === 0)){ + if(sensordata.Position[1] !== 0 && sensordata.Position[0] !== 0){ allSerialCoords.push([sensordata.Position[1], sensordata.Position[0]]) } let serialTimestamp = composeTimestamp(sensordata.Timestamp) @@ -41,7 +40,7 @@ function findSerialDataIndex(tcpdataList, serialdataList) { }) tcpdataList.forEach(sensordata => { - if (!(sensordata.Speed === 0) && !(sensordata.HAcc === 0)) { + if (sensordata.Speed !== 0 && sensordata.HAcc !== 0) { let tcpTimestamp = composeTimestamp(sensordata.Timestamp) let index = findBestTimeMatch(tcpTimestamp, allSerialTimes)[1] @@ -51,9 +50,10 @@ function findSerialDataIndex(tcpdataList, serialdataList) { } window.addEventListener("load", function(evt) { + //------------------------Buttons------------------------------ - var trackings = null; + let trackings = null; document.getElementById("messungladen").onclick = function(evt) { fetch('http://localhost:3011/trackings/', { method: 'GET'}).then(results => { return results.json() @@ -68,7 +68,7 @@ window.addEventListener("load", function(evt) { r.data.sort((a,b) => new Date(b.TimeCreated).getTime() - new Date(a.TimeCreated).getTime()); r.data.forEach(tracking => { console.log(tracking) - var option = document.createElement("option"); + let option = document.createElement("option"); option.text = tracking.TimeCreated + " Size: " + tracking.Size sel.add(option) }) @@ -89,12 +89,10 @@ window.addEventListener("load", function(evt) { fetch(`http://localhost:3011/trackings/${trackings[sel.selectedIndex].UUID}`, { method: 'GET'}).then(results => { return results.json() }).then(r => { - console.log(r.data.Data) - console.log(r.data) - // 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){ + // console.log(r.data.Data) + // console.log(r.data) 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) @@ -103,10 +101,8 @@ window.addEventListener("load", function(evt) { updateMapSERIALbulk(r.data.Data.SOURCE_SERIAL) addSerialSpeedData() } - addDistancesNew(prepareForDistanceCalc(r.data.Data)) - + addDistances(prepareForDistanceCalc(r.data.Data)) }) - } }); @@ -114,7 +110,6 @@ function prepareForDistanceCalc(data) { if('SOURCE_TCP' in data && data.SOURCE_TCP.length > 0 && 'SOURCE_SERIAL' in data && data.SOURCE_SERIAL.length > 0) { let sensorPoints = []; data.SOURCE_TCP.forEach(element => { - // let ts = Date.parse(element.Timestamp) if (element.Position[0] !== 0 && element.Position[1] !== 0) { sensorPoints.push({ differenceMs: Number.MAX_VALUE, @@ -142,4 +137,4 @@ function prepareForDistanceCalc(data) { return newSensorPoints } return null -} +} \ No newline at end of file diff --git a/static/scripts/speedChart.js b/static/scripts/speedChart.js index ab04059..b809040 100644 --- a/static/scripts/speedChart.js +++ b/static/scripts/speedChart.js @@ -1,7 +1,7 @@ let allSpeedsSerial = [] -var ctx = document.getElementById('speedChart').getContext('2d'); -var speedChart = new Chart(ctx, { +let ctx = document.getElementById('speedChart').getContext('2d'); +let speedChart = new Chart(ctx, { type: 'line', data: { labels: new Array(), @@ -56,7 +56,6 @@ function addSerialSpeedData() { }) speedChart.data.datasets[0].data = speeds; speedChart.update(); - console.log("speeds serial " + speeds.length) } function addTCPSpeedData(sensordataList) { @@ -73,10 +72,7 @@ function addTCPSpeedData(sensordataList) { times.push(time) }) - console.log("speeds tcp " + speedsTCP.length) - speedChart.data.labels = times; speedChart.data.datasets[1].data = speedsTCP; - speedChart.update(); } \ No newline at end of file diff --git a/static/scripts/speedometer.js b/static/scripts/speedometer.js index 315e209..f9e6cc9 100644 --- a/static/scripts/speedometer.js +++ b/static/scripts/speedometer.js @@ -1,4 +1,4 @@ -var options1 = { +let options1 = { type: 'doughnut', data: { datasets: [ @@ -31,8 +31,8 @@ var options1 = { ] }, options: { - rotation: 1 * Math.PI, - circumference: 1 * Math.PI, + rotation: Math.PI, + circumference: Math.PI, legend: { display: false, enabled: false @@ -44,7 +44,7 @@ var options1 = { cutoutPercentage: 40 } } -var options2 = { +let options2 = { type: 'doughnut', data: { datasets: [ @@ -129,8 +129,8 @@ var options2 = { ] }, options: { - rotation: 1 * Math.PI, - circumference: 1 * Math.PI, + rotation: Math.PI, + circumference: Math.PI, legend: { display: false, enabled: false @@ -143,23 +143,23 @@ var options2 = { } } -var ctx1 = document.getElementById('speedometer').getContext('2d'); -var mySpeedometer = new Chart(ctx1, options1); -var ctx2 = document.getElementById('speedometerSpeeds').getContext('2d'); -var mySpeedometer2 = new Chart(ctx2, options2); +let ctx1 = document.getElementById('speedometer').getContext('2d'); +let mySpeedometer = new Chart(ctx1, options1); +let ctx2 = document.getElementById('speedometerSpeeds').getContext('2d'); +let mySpeedometer2 = new Chart(ctx2, options2); function addSpeedSerial(speedSERIAL){ - var speedSERIALkmh = (speedSERIAL * 3.6) - var speedSERIALpercent = (speedSERIALkmh/250)*100 + let speedSERIALkmh = (speedSERIAL * 3.6) + let speedSERIALpercent = (speedSERIALkmh/250)*100 mySpeedometer.data.datasets[1].data = [speedSERIALpercent, 100-speedSERIALpercent]; document.getElementById("speedSERIAL").innerHTML = `Ublox: ${speedSERIALkmh.toFixed(1)} km/h` mySpeedometer.update(); } function addSpeedTcp(speedTCP){ - var speedTCPkmh = (speedTCP * 3.6) - var speedTCPpercent = (speedTCPkmh/250)*100; + let speedTCPkmh = (speedTCP * 3.6) + let speedTCPpercent = (speedTCPkmh/250)*100; mySpeedometer.data.datasets[0].data = [speedTCPpercent, 100-speedTCPpercent]; document.getElementById("speedTCP").innerHTML = `Phone: ${speedTCPkmh.toFixed(1)} km/h` mySpeedometer.update(); -} +} \ No newline at end of file diff --git a/static/scripts/websocket.js b/static/scripts/websocket.js index 5636cae..03020fe 100644 --- a/static/scripts/websocket.js +++ b/static/scripts/websocket.js @@ -1,19 +1,17 @@ -const GRAPH_RES = 100; -var dataSmartphone = []; -var tempTCPCoords = null; -var tempSERIALCoords = null; -var tempDist = 0; +let tempTCPCoords = null; +let tempSERIALCoords = null; +let tempDist = 0; window.addEventListener("load", function(evt) { - var output = document.getElementById("output"); - var checkBoxSmartphone = document.getElementById("checkbox1"); - var checkBoxUblox = document.getElementById("checkbox2"); - var ws; + let output = document.getElementById("output"); + let checkBoxSmartphone = document.getElementById("checkbox1"); + let checkBoxUblox = document.getElementById("checkbox2"); + let ws; const wsOnCloseF = function (evt) { ws = null; print2("CLOSED"); - var intervalId; + let intervalId; intervalId = setInterval(() => { console.log("reconnect websocket...") if (ws !== null && ws.CONNECTING) { @@ -31,79 +29,66 @@ window.addEventListener("load", function(evt) { }, 1000) } const wsOnMessageF = function (evt) { - let dat = JSON.parse(evt.data) - // console.log(dat) if ('SOURCE_TCP' in dat) { setIndicatorsTcp(dat.SOURCE_TCP) - } - try{ - if(!(dat.SOURCE_TCP.Orientation[0] === 0) && !(dat.SOURCE_TCP.Orientation[1] === 0) && !(dat.SOURCE_TCP.Orientation[2] === 0)){ - let heading = (dat.SOURCE_TCP.Orientation[2]+90)%360 // dat.SOURCE_TCP.Orientation[2] // - // if (dat.SOURCE_TCP.HeadDevice !== 0) { heading = dat.SOURCE_TCP.HeadDevice; } - // if (dat.SOURCE_TCP.HeadMotion !== 0) { heading = dat.SOURCE_TCP.HeadMotion; console.log("head motion") } - + if(dat.SOURCE_TCP.Orientation[0] !== 0 && dat.SOURCE_TCP.Orientation[1] !== 0 && dat.SOURCE_TCP.Orientation[2] !== 0){ + let heading = (dat.SOURCE_TCP.Orientation[2]+90)%360 renderTCP((dat.SOURCE_TCP.Orientation[0]*Math.PI/180),heading*Math.PI/180,-(dat.SOURCE_TCP.Orientation[1]*Math.PI/180)) } - if(!(dat.SOURCE_TCP.Position[1] === 0) && !(dat.SOURCE_TCP.Position[0] === 0)){ + if(dat.SOURCE_TCP.Position[1] !== 0 && dat.SOURCE_TCP.Position[0] !== 0){ document.getElementById("TCPlong").innerHTML = "Smartphone long: " + dat.SOURCE_TCP.Position[1] document.getElementById("TCPlat").innerHTML = "Smartphone lat: " + dat.SOURCE_TCP.Position[0] updateMapTCP(dat.SOURCE_TCP.Position[1], dat.SOURCE_TCP.Position[0]) map.panTo([dat.SOURCE_TCP.Position[1], dat.SOURCE_TCP.Position[0]]) tempTCPCoords = [dat.SOURCE_TCP.Position[1], dat.SOURCE_TCP.Position[0]] } - if(!(dat.SOURCE_TCP.Speed === 0)){ + if(dat.SOURCE_TCP.Speed !== 0){ addSpeedTcp(dat.SOURCE_TCP.Speed); } - if(!(dat.SOURCE_TCP.HeadDevice === 0)){ + if(dat.SOURCE_TCP.HeadDevice !== 0){ document.getElementById("compassTCP").innerHTML = " Heading Device: " + dat.SOURCE_TCP.HeadDevice.toFixed(2) + "°" - // document.getElementById("needleTCP").style.transform = `rotate(${dat.SOURCE_TCP.HeadDevice}deg)` } - if(!(dat.SOURCE_TCP.HeadMotion === 0)) { + if(dat.SOURCE_TCP.HeadMotion !== 0) { document.getElementById("compassTCPMot").innerHTML = "Heading Motion: " + dat.SOURCE_TCP.HeadMotion.toFixed(2) + "°" } + if(dat.SOURCE_TCP.HAcc !== 0 && dat.SOURCE_TCP.VAcc !== 0){ + addTCPAccuracy(dat.SOURCE_TCP.HAcc, dat.SOURCE_TCP.VAcc) + document.getElementById("tcpHAcc").innerHTML = "Phone HAcc: " + dat.SOURCE_TCP.HAcc.toFixed(2) + " m" + document.getElementById("tcpVAcc").innerHTML = "Phone VAcc: " + dat.SOURCE_TCP.VAcc.toFixed(2) + " m" + } + } - } - catch{ - // console.log("no TCP data") - } if ('SOURCE_SERIAL' in dat) { setIndicatorsSer(dat.SOURCE_SERIAL) - } - try{ - if(!(dat.SOURCE_SERIAL.Orientation[0] === 0) && /*!(dat.SOURCE_SERIAL.Orientation[1] === 0) &&*/ !(dat.SOURCE_SERIAL.Orientation[2] === 0)){ - // document.getElementById("gyroscopeSERIAL").style.transform = `rotateX(${dat.SOURCE_SERIAL.Orientation[0]}deg) rotateY(${dat.SOURCE_SERIAL.Orientation[1]}deg) rotateZ(0deg)` - // document.getElementById("gyroscopeSERIAL").style.transform = `rotateX(${dat.SOURCE_SERIAL.Orientation[0]}deg) rotateY(${dat.SOURCE_SERIAL.Orientation[1]}deg) rotateZ(${dat.SOURCE_SERIAL.Orientation[2]}deg)` + if(dat.SOURCE_SERIAL.Orientation[0] !== 0 && dat.SOURCE_SERIAL.Orientation[2] !== 0){ renderSerial(dat.SOURCE_SERIAL.Orientation[0]*Math.PI/180,-dat.SOURCE_SERIAL.Orientation[2]*Math.PI/180,dat.SOURCE_SERIAL.Orientation[1]*Math.PI/180) } - if(!(dat.SOURCE_SERIAL.Position[1] === 0) && !(dat.SOURCE_SERIAL.Position[0] === 0)){ + if(dat.SOURCE_SERIAL.Position[1] !== 0 && dat.SOURCE_SERIAL.Position[0] !== 0){ document.getElementById("SERIALlong").innerHTML = "Ublox long: " + dat.SOURCE_SERIAL.Position[1] document.getElementById("SERIALlat").innerHTML = "Ublox lat: " + dat.SOURCE_SERIAL.Position[0] updateMapSERIAL(dat.SOURCE_SERIAL.Position[1], dat.SOURCE_SERIAL.Position[0]) map.panTo([dat.SOURCE_SERIAL.Position[1], dat.SOURCE_SERIAL.Position[0]]) tempSERIALCoords = [dat.SOURCE_SERIAL.Position[1], dat.SOURCE_SERIAL.Position[0]] - if (!(tempTCPCoords == null)) { - console.log("tcp: " + tempTCPCoords) - console.log("serial: " + tempSERIALCoords) + if (tempTCPCoords !== null) { + let long1 = tempTCPCoords[0] + let lat1 = tempTCPCoords[1] + let long2 = tempSERIALCoords[0] + let lat2 = tempSERIALCoords[1] - var long1 = tempTCPCoords[0] - var lat1 = tempTCPCoords[1] - var long2 = tempSERIALCoords[0] - var lat2 = tempSERIALCoords[1] + let earthRadiusM = 6371000 - var earthRadiusM = 6371000 + let phi1 = lat1 * Math.PI / 180 + let phi2 = lat2 * Math.PI / 180 - var phi1 = lat1 * Math.PI / 180 - var phi2 = lat2 * Math.PI / 180 + let dlat = (lat2-lat1) * Math.PI / 180 + let dlong = (long2 - long1) * 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) + + let 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)) + let c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)) tempDist = (earthRadiusM * c).toFixed(3) - console.log("Dist: " + tempDist) + addDistanceToBarChart(tempDist) document.getElementById("distance").innerHTML = "Distance: " + tempDist @@ -118,46 +103,22 @@ window.addEventListener("load", function(evt) { } tempTCPCoords = null - } - if(!(dat.SOURCE_SERIAL.Speed === 0)){ + if(dat.SOURCE_SERIAL.Speed !== 0){ addSpeedSerial(dat.SOURCE_SERIAL.Speed); } - if(!(dat.SOURCE_SERIAL.HeadDevice === 0)){ + if(dat.SOURCE_SERIAL.HeadDevice !== 0){ document.getElementById("compassSERIAL").innerHTML = "Heading Device: " + dat.SOURCE_SERIAL.HeadDevice.toFixed(2) + "°" - // document.getElementById("needle").style.transform = `rotate(${dat.SOURCE_SERIAL.HeadDevice}deg)` } - if(!(dat.SOURCE_SERIAL.HeadMotion === 0)) { + if(dat.SOURCE_SERIAL.HeadMotion !== 0) { document.getElementById("compassSERIALMot").innerHTML = "Heading Motion: " + dat.SOURCE_SERIAL.HeadMotion.toFixed(2) + "°" } - }catch{ - // console.log("no serial data") - } - - try{ - if(!(dat.SOURCE_SERIAL.HAcc === 0) && !(dat.SOURCE_SERIAL.VAcc === 0)){ + if(dat.SOURCE_SERIAL.HAcc !== 0 && dat.SOURCE_SERIAL.VAcc !== 0){ addSerialAccuracy(dat.SOURCE_SERIAL.HAcc, dat.SOURCE_SERIAL.VAcc) document.getElementById("serialHAcc").innerHTML = "Ublox HAcc: " + dat.SOURCE_SERIAL.HAcc.toFixed(3) + " m" document.getElementById("serialVAcc").innerHTML = "Ublox VAcc: " + dat.SOURCE_SERIAL.VAcc.toFixed(2) + " m" - //console.log("acc: " + dat.SOURCE_SERIAL.HAcc, dat.SOURCE_SERIAL.VAcc) } } - catch{ - // console.log("no Serial acc") - } - - try{ - if(!(dat.SOURCE_TCP.HAcc === 0) && !(dat.SOURCE_TCP.VAcc === 0)){ - addTCPAccuracy(dat.SOURCE_TCP.HAcc, dat.SOURCE_TCP.VAcc) - document.getElementById("tcpHAcc").innerHTML = "Phone HAcc: " + dat.SOURCE_TCP.HAcc.toFixed(2) + " m" - document.getElementById("tcpVAcc").innerHTML = "Phone VAcc: " + dat.SOURCE_TCP.VAcc.toFixed(2) + " m" - console.log("acc: " + dat.SOURCE_TCP.HAcc, dat.SOURCE_TCP.VAcc) - } - } - catch{ - console.log("no TCP acc") - } - } const wsOnOpenF = function (evt) { print2("OPEN"); @@ -167,48 +128,35 @@ window.addEventListener("load", function(evt) { print2("ERROR: " + evt); } - ws = new WebSocket("ws://localhost:3011/ws"); ws.onopen = wsOnOpenF ws.onclose = wsOnCloseF ws.onmessage = wsOnMessageF ws.onerror = wsOnErrorF - - - var print = function(message) { - var d = document.createElement("div"); - d.textContent = message; - output.appendChild(d); - }; - var print2 = function(message) { - var d = document.createElement("p"); + const print2 = function(message) { + let d = document.createElement("p"); d.innerText = message; oldNode = output.firstChild output.replaceChild(d, oldNode) }; document.getElementById("open").onclick = function(evt) { - // if (ws && ws.OPEN) { - // print2("Websocket already open") - // return false; - // } - if(checkBoxSmartphone.checked && checkBoxUblox.checked){ fetch('http://localhost:3011/trackings?serial=true&tcp=true', { method: 'POST', body: 'some test data'}) .then(results => results.json()) .then(console.log); } - else if(!(checkBoxSmartphone.checked) && checkBoxUblox.checked){ + else if(!checkBoxSmartphone.checked && checkBoxUblox.checked){ fetch('http://localhost:3011/trackings?serial=true&tcp=false', { method: 'POST', body: 'some test data'}) .then(results => results.json()) .then(console.log); } - else if(checkBoxSmartphone.checked && !(checkBoxUblox.checked)){ + else if(checkBoxSmartphone.checked && !checkBoxUblox.checked){ fetch('http://localhost:3011/trackings?serial=false&tcp=true', { method: 'POST', body: 'some test data'}) .then(results => results.json()) .then(console.log); } - else if(!(checkBoxSmartphone.checked) && !(checkBoxUblox.checked)){ + else if(!checkBoxSmartphone.checked && !checkBoxUblox.checked){ fetch('http://localhost:3011/trackings?serial=false&tcp=false', { method: 'POST', body: 'some test data'}) .then(results => results.json()) .then(console.log); @@ -259,10 +207,10 @@ window.addEventListener("load", function(evt) { checkBoxSmartphone.disabled = false; checkBoxUblox.disabled = false; document.getElementById("tracking state").innerHTML = "Tracking state: CLOSED" - //ws.close(); } return false; }; + var trackings = null; document.getElementById("messungladen").onclick = function(evt) { fetch('http://localhost:3011/trackings/', { method: 'GET'}).then(results => { @@ -277,7 +225,7 @@ window.addEventListener("load", function(evt) { r.data.sort((a,b) => new Date(b.TimeCreated).getTime() - new Date(a.TimeCreated).getTime()); r.data.forEach(tracking => { console.log(tracking) - var option = document.createElement("option"); + let option = document.createElement("option"); option.text = tracking.TimeCreated + " Size: " + tracking.Size sel.add(option) }) diff --git a/templates/index.html b/templates/index.html index f9ccd9e..fd87af9 100644 --- a/templates/index.html +++ b/templates/index.html @@ -124,32 +124,6 @@
- - - - - - - - - - - - - - - - - - - - - - - - - -