diff --git a/server.js b/server.js index 43c28e6bed57e0332dd71a627636ba7dde0c8258..13a4b4403ca15585797db286100e14d11b1c9321 100644 --- a/server.js +++ b/server.js @@ -1,48 +1,28 @@ - -const fs = require('fs'); const http = require('http'); -const https = require('https'); -const express = require('express'); -const bodyParser = require('body-parser') - -// const request = require('ajax-request'); -// const request = require('request'); -const axios = require('axios'); +const fs = require('fs'); +const express = require('express') const app = express(); +const bodyParser = require('body-parser') +const soap = require('soap'); app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) +const request_ajax = require('ajax-request'); +const request = require('request'); +// const got = require('got'); +const axios = require('axios'); const polycalc = require('./codepoly.js'); -// Certificate -const privateKey = fs.readFileSync('/etc/letsencrypt/live/umfrage.smartvillages.online/privkey.pem', 'utf8'); -const certificate = fs.readFileSync('/etc/letsencrypt/live/umfrage.smartvillages.online/cert.pem', 'utf8'); -const ca = fs.readFileSync('/etc/letsencrypt/live/umfrage.smartvillages.online/chain.pem', 'utf8'); - -const credentials = { - key: privateKey, - cert: certificate, - ca: ca -}; - +const { isEmptyObject } = require('jquery'); +//console.log(polycalc) app.use(express.static('vcm')); +app.listen(process.env.PORT || 8083); +console.log("on 8083"); -// Starting both http & https servers -// const httpServer = http.createServer(app); -const httpsServer = https.createServer(credentials, app); - -// httpServer.listen(8081, () => { -// console.log('HTTP Server running on port 80'); -// }); - -httpsServer.listen(8083, () => { - console.log('HTTPS Server running on port 443'); -}); var minutesDifference var hoursDifference var secondsDifference var daysDifference - function timeDifference(date11,date22) { var date2 = new Date(date11); var date1 = new Date(date22); @@ -101,836 +81,841 @@ function timeDifference1(date11,date22) { } + //=========================================================================================================================== //Final Version //=========================================================================================================================== // ---- Traffic Flow ---- -// - 3Parts - +// - 3Parts - 48.7823,9.1807,919 // - get request from the html page app.get('/TrafficFlow', async (req, res) => { - console.log('command angekommen!') - try{ - let APIout = await flow_getApiResponse('https://traffic.ls.hereapi.com/traffic/6.2/flow.json?prox=48.7823,9.1807,919&responseattributes=sh%2Cfc&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y'); - - let json_tf = await flow_buildTFLOWJson(APIout); - console.log(json_tf) - var json_tfs = { - "name":"flow" + "01", - "type":"FeatureCollection", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": json_tf - - }; - - res.json(json_tfs) - - }catch (error) { - console.log(error) - } - }); - // - request from the here API - function flow_getApiResponse(url) { - return new Promise(function (resolve, reject) { - axios.get(url) - .then(function (response) { - // handle success - console.log(response.data); - resolve(response.data); - }) - .catch(function (error) { - // handle error - console.log(error); - reject(error); - }); - }); - } - // - build geojson from response - function flow_buildTFLOWJson(inputData){ - return new Promise(function (resolve, reject) { - try { - var json_tflow = inputData - var JsonFeature = []; - console.log(json_tflow.RWS[0].RW.length + "---- in flow func") - var length = json_tflow.RWS[0].RW.length; - var fik - // console.log(length); - - for (var i = 0; i<= length -1; i++){ - var FIlength = json_tflow.RWS[0].RW[i].FIS[0].FI.length - console.log("i - " + i) - var mid = json_tflow.RWS[0].RW[i].mid; - var LI = json_tflow.RWS[0].RW[i].LI; - var DE = json_tflow.RWS[0].RW[i].DE; - var PBT = json_tflow.RWS[0].RW[i].PBT; - for (var m = 0; m <= FIlength -1; m++){ - console.log("k - " + m) - var shplength = json_tflow.RWS[0].RW[i].FIS[0].FI[m].SHP.length; - console.log("FI - " + json_tflow.RWS[0].RW[i].FIS[0].FI[m]) - fik = json_tflow.RWS[0].RW[i].FIS[0].FI[m] - // var type = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; - - var TMC = json_tflow.RWS[0].RW[i].FIS[0].FI[m].TMC; - var CF = json_tflow.RWS[0].RW[i].FIS[0].FI[m].CF[0]; - console.log("Shp length - " + json_tflow.RWS[0].RW[i].FIS[0].FI[m].SHP.length) - console.log("Shp length - " + shplength) - var locationshp = []; - for (var j = 0; j <= shplength - 1; j++ ){ - console.log("j - " +j) - console.log("RWS - " + json_tflow.RWS[0]) - console.log("RW - " + json_tflow.RWS[0].RW[i]) - console.log("FIS - " + json_tflow.RWS[0].RW[i].FIS[0]) - console.log("FIk - " + fik) - console.log("FI - " + json_tflow.RWS[0].RW[i].FIS[0].FI[m]) - - console.log("shape j - " + fik.SHP[j]) - var value = fik.SHP[j].value[0]; - // console.log(value[0]) - - - var splitvalue = []; - splitvalue = value.split(" "); - // console.log(splitvalue.length) - var coord = []; - for (var k = 0; k <= splitvalue.length -2; k++){ - var latlon = []; - latlon = splitvalue[k].split(","); - var lat = latlon[0]; - var lon = latlon[1]; - coord.push([parseFloat(lon),parseFloat(lat)]) - } - // var FC = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LONGITUDE; - locationshp.push(coord) - // console.log(value) - } - if (CF.JF){ - // console.log("CF.JF -- " + CF.JF) - } - - - if ((CF.JF >= 3) ){ - - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, - "geometry":{ - "type":"MultiLineString", - "coordinates": locationshp - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 153, - 0, - 0, - 1 - ], - "width": 2, - "lineDash": null - } - } - } - }) - } else if ((CF.JF <3 && CF.JF >= 2) ){ - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, - "geometry":{ - "type":"MultiLineString", - "coordinates": locationshp - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 255, - 153, - 51, - 1 - ], - "width": 2, - "lineDash": null - } - } - } - }) - } else if ((CF.JF <2 && CF.JF >= 1)){ - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, - "geometry":{ - "type":"MultiLineString", - "coordinates": locationshp - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 230, - 230, - 0, - 1 - ], - "width": 2, - "lineDash": null - } - } - } - }) - } else if ((CF.JF < 1)){ - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, - "geometry":{ - "type":"MultiLineString", - "coordinates": locationshp - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 0, - 153, - 0, - 1 - ], - "width": 2, - "lineDash": null - } - } - } - }) - } - };}; - resolve(JsonFeature) - }catch(error){ reject(error)} - - - - }); - + console.log('command angekommen!') +try{ + let APIout = await flow_getApiResponse('https://traffic.ls.hereapi.com/traffic/6.2/flow.json?prox=48.7544,9.1768,8745&responseattributes=sh%2Cfc&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y'); + console.log(APIout) + let json_tf = await flow_buildTFLOWJson(APIout); + console.log(json_tf) + var json_tfs = { + "name":"flow" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": json_tf + }; - - // ---- Accidents ---- - // - 3Parts - - // - get request from the html page - app.get('/CONSTRUCTION', async (req, res) => { - console.log('Construction angekommen!') - try{ - let APIout = await CON_getApiResponse('https://traffic.ls.hereapi.com/traffic/6.3/incidents.json?apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y&bbox=48.790,9.139;48.771,9.239'); - - let json_con = await CON_buildTFLOWJson(APIout,"CONSTRUCTION"); - // console.log(json_con) - var json_cons = { - "name":"incident" + "01", - "type":"FeatureCollection", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": json_con - - }; - res.json(json_cons) - }catch (error) { - console.log(error) - } - + res.json(json_tfs) + +}catch (error) { + console.log(error) +} +}); +// - request from the here API +function flow_getApiResponse(url) { + return new Promise(function (resolve, reject) { + axios.get(url) + .then(function (response) { + // handle success + console.log(response.data); + resolve(response.data); + }) + .catch(function (error) { + // handle error + console.log(error); + reject(error); + }); }); - app.get('/ROAD_CLOSURE', async (req, res) => { - console.log('Construction angekommen!') - try{ - let APIout = await CON_getApiResponse('https://traffic.ls.hereapi.com/traffic/6.3/incidents.json?apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y&bbox=48.790,9.139;48.771,9.239'); - - let json_con = await CON_buildTFLOWJson(APIout,"ROAD_CLOSURE"); - // console.log(json_con) - var json_cons = { - "name":"incident" + "01", - "type":"FeatureCollection", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": json_con - - }; - res.json(json_cons) - }catch (error) { - console.log(error) - } - +} +// - build geojson from response +function flow_buildTFLOWJson(inputData){ + return new Promise(function (resolve, reject) { + try { + var json_tflow = inputData + var JsonFeature = []; + console.log(json_tflow.RWS[0].RW.length + "---- in flow func") + var length = json_tflow.RWS[0].RW.length; + var fik + // console.log(length); + + for (var i = 0; i<= length -1; i++){ + var FIlength = json_tflow.RWS[0].RW[i].FIS[0].FI.length + console.log("i - " + i) + var mid = json_tflow.RWS[0].RW[i].mid; + var LI = json_tflow.RWS[0].RW[i].LI; + var DE = json_tflow.RWS[0].RW[i].DE; + var PBT = json_tflow.RWS[0].RW[i].PBT; + for (var m = 0; m <= FIlength -1; m++){ + console.log("k - " + m) + var shplength = json_tflow.RWS[0].RW[i].FIS[0].FI[m].SHP.length; + console.log("FI - " + json_tflow.RWS[0].RW[i].FIS[0].FI[m]) + fik = json_tflow.RWS[0].RW[i].FIS[0].FI[m] + // var type = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; + + var TMC = json_tflow.RWS[0].RW[i].FIS[0].FI[m].TMC; + var CF = json_tflow.RWS[0].RW[i].FIS[0].FI[m].CF[0]; + console.log("Shp length - " + json_tflow.RWS[0].RW[i].FIS[0].FI[m].SHP.length) + console.log("Shp length - " + shplength) + var locationshp = []; + for (var j = 0; j <= shplength - 1; j++ ){ + console.log("j - " +j) + console.log("RWS - " + json_tflow.RWS[0]) + console.log("RW - " + json_tflow.RWS[0].RW[i]) + console.log("FIS - " + json_tflow.RWS[0].RW[i].FIS[0]) + console.log("FIk - " + fik) + console.log("FI - " + json_tflow.RWS[0].RW[i].FIS[0].FI[m]) + + console.log("shape j - " + fik.SHP[j]) + var value = fik.SHP[j].value[0]; + // console.log(value[0]) + + + var splitvalue = []; + splitvalue = value.split(" "); + // console.log(splitvalue.length) + var coord = []; + for (var k = 0; k <= splitvalue.length -2; k++){ + var latlon = []; + latlon = splitvalue[k].split(","); + var lat = latlon[0]; + var lon = latlon[1]; + coord.push([parseFloat(lon),parseFloat(lat)]) + } + // var FC = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LONGITUDE; + locationshp.push(coord) + // console.log(value) + } + if (CF.JF){ + // console.log("CF.JF -- " + CF.JF) + } + + + if ((CF.JF >= 3) ){ + + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, + "geometry":{ + "type":"MultiLineString", + "coordinates": locationshp + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 153, + 0, + 0, + 1 + ], + "width": 2, + "lineDash": null + } + } + } + }) + } else if ((CF.JF <3 && CF.JF >= 2) ){ + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, + "geometry":{ + "type":"MultiLineString", + "coordinates": locationshp + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 255, + 153, + 51, + 1 + ], + "width": 2, + "lineDash": null + } + } + } + }) + } else if ((CF.JF <2 && CF.JF >= 1)){ + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, + "geometry":{ + "type":"MultiLineString", + "coordinates": locationshp + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 230, + 230, + 0, + 1 + ], + "width": 2, + "lineDash": null + } + } + } + }) + } else if ((CF.JF < 1)){ + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, + "geometry":{ + "type":"MultiLineString", + "coordinates": locationshp + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 0, + 153, + 0, + 1 + ], + "width": 2, + "lineDash": null + } + } + } + }) + } + };}; + resolve(JsonFeature) + }catch(error){ reject(error)} + + + }); - // - request from the here API - function CON_getApiResponse(url) { - return new Promise(function (resolve, reject) { - console.log(url) - axios.get(url) - .then(function (response) { - // handle success - // console.log(response.data); - resolve(response.data); - }) - .catch(function (error) { - // handle error - // console.log(error); - reject(error); - }); - }); - } - // - build geojson from response - function CON_buildTFLOWJson(inputData,type){ - return new Promise(function (resolve, reject) { - try { - var JsonFeature = []; - var json_acc = inputData - var length = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM.length; - // console.log(length) - for (var i = 0; i <= length - 1; i++){ - - //console.log(json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i]) - var lat = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LATITUDE; - var lon = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LONGITUDE; - // var type = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; - var id = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_ID; - var origid = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ORIGINAL_TRAFFIC_ITEM_ID; - var TRAFFIC_ITEM_DESCRIPTION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_DESCRIPTION; - var COMMENTS = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].COMMENTS; - var CRITICALITY = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].CRITICALITY; - var VERIFIED = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].VERIFIED; - var TRAFFIC_ITEM_TYPE_DESC = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; - console.log(TRAFFIC_ITEM_TYPE_DESC) - var TRAFFIC_ITEM_STATUS_SHORT_DESC = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_STATUS_SHORT_DESC; - var TRAFFIC_ITEM_DETAIL = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_DETAIL; - var START_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].START_TIME; - var LOCATION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION; - var ENTRY_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ENTRY_TIME; - var END_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].END_TIME; - var ABBREVIATION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ABBREVIATION; - - if (type == 'CONSTRUCTION'){ - - // console.log(i) - - - if (TRAFFIC_ITEM_TYPE_DESC == "CONSTRUCTION"){ - JsonFeature.push({ - "type":"Feature", - "properties": { "id": id, "name": "datapoint" , "original_traffic_id": origid, "TRAFFIC_ITEM_DESCRIPTION": TRAFFIC_ITEM_DESCRIPTION, "COMMENTS":COMMENTS, "CRITICALITY":CRITICALITY, - "VERIFIED":VERIFIED,"TRAFFIC_ITEM_TYPE_DESC":TRAFFIC_ITEM_TYPE_DESC, "TRAFFIC_ITEM_STATUS_SHORT_DESC":TRAFFIC_ITEM_STATUS_SHORT_DESC, "TRAFFIC_ITEM_DETAIL":TRAFFIC_ITEM_DETAIL, - "START_TIME":START_TIME, "LOCATION":LOCATION, "ENTRY_TIME":ENTRY_TIME, "END_TIME":END_TIME, "ABBREVIATION":ABBREVIATION}, - "geometry":{ - "type":"MultiPoint", - "coordinates": [ [lon, lat]] - } - }) - } - - - } else if (type == "ROAD_CLOSURE"){ - - if (TRAFFIC_ITEM_TYPE_DESC == "ROAD_CLOSURE"){ - JsonFeature.push({ - "type":"Feature", - "properties": { "id": id, "name": "datapoint" , "original_traffic_id": origid, "TRAFFIC_ITEM_DESCRIPTION": TRAFFIC_ITEM_DESCRIPTION, "COMMENTS":COMMENTS, "CRITICALITY":CRITICALITY, - "VERIFIED":VERIFIED,"TRAFFIC_ITEM_TYPE_DESC":TRAFFIC_ITEM_TYPE_DESC, "TRAFFIC_ITEM_STATUS_SHORT_DESC":TRAFFIC_ITEM_STATUS_SHORT_DESC, "TRAFFIC_ITEM_DETAIL":TRAFFIC_ITEM_DETAIL, - "START_TIME":START_TIME, "LOCATION":LOCATION, "ENTRY_TIME":ENTRY_TIME, "END_TIME":END_TIME, "ABBREVIATION":ABBREVIATION}, - "geometry":{ - "type":"MultiPoint", - "coordinates": [ [lon, lat]] - } - }) - } - } - - } - resolve(JsonFeature) - }catch(error){ reject(error)} - - - - }); - + +}; + + +// ---- Accidents ---- +// - 3Parts - +// - get request from the html page +app.get('/CONSTRUCTION', async (req, res) => { + console.log('Construction angekommen!') +try{ + let APIout = await CON_getApiResponse('https://traffic.ls.hereapi.com/traffic/6.3/incidents.json?apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y&bbox=48.790,9.139;48.771,9.239'); + + let json_con = await CON_buildTFLOWJson(APIout,"CONSTRUCTION"); + // console.log(json_con) + var json_cons = { + "name":"incident" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": json_con + }; - - - // ---- Navpoint ---- - // - receive coordinates and return a geojson - app.get('/addPoint', async (req, res) => { - try { - var data = req.query; - var Punktadd = { - "type":"FeatureCollection", - "name":"data_point", - "crs":{ - "type":"name", - "properties":{ - "name":"urn:ogc:def:crs:OGC:1.3:CRS84" - } - }, - "features":[ - { - "type":"Feature", - "properties":{ - "id":null, - "name":"datapoint", - "loc": data.sloc - }, - "geometry":{ - "type":"Point", - "coordinates":[ - parseFloat(parseFloat(data.slon).toFixed(7)), - parseFloat(parseFloat(data.slat).toFixed(7)) - ] - } - } - ] - } - res.json(Punktadd); - - } catch (error) { - console.log(error) - } - + res.json(json_cons) +}catch (error) { + console.log(error) +} + +}); +app.get('/ROAD_CLOSURE', async (req, res) => { + console.log('Construction angekommen!') +try{ + let APIout = await CON_getApiResponse('https://traffic.ls.hereapi.com/traffic/6.3/incidents.json?apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y&bbox=48.790,9.139;48.771,9.239'); + + let json_con = await CON_buildTFLOWJson(APIout,"ROAD_CLOSURE"); + // console.log(json_con) + var json_cons = { + "name":"incident" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": json_con + + }; + res.json(json_cons) +}catch (error) { + console.log(error) +} + +}); +// - request from the here API +function CON_getApiResponse(url) { + return new Promise(function (resolve, reject) { + console.log(url) + axios.get(url) + .then(function (response) { + // handle success + // console.log(response.data); + resolve(response.data); + }) + .catch(function (error) { + // handle error + // console.log(error); + reject(error); + }); }); - - - // http://localhost:8083/Routecalc2?slat=48.68997020356071&slon=9.202611390575258&sloc=Start&elat=48.726559406813294&elon=9.113775973868089&eloc=End - // ---- Route Berechnen Test ---- - app.get('/Routecalc2', async (req, res) => { - console.log('command angekommen ////// Route/////!') - const pointData = req.query; - console.log(pointData); - try { - let APIout = await CON_getApiResponse('https://router.hereapi.com/v8/routes?transportMode=car&origin='+ pointData.slat + ',' + pointData.slon + '&destination=' + pointData.elat + ',' + pointData.elon + '&return=polyline&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y'); - - console.log(APIout) - let json_route = await Route_buildJson(APIout); - console.log(json_route) - var json_routes = { - "name":"navcar" + "01", - "type":"FeatureCollection", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": json_route - }; - - console.log(json_routes); - console.log('.../route calc successful!'); - res.json(json_routes); - } - catch (err) { - console.log('.../loadSetP failed!\n' + err); - } - +} +// - build geojson from response +function CON_buildTFLOWJson(inputData,type){ + return new Promise(function (resolve, reject) { + try { + var JsonFeature = []; + var json_acc = inputData + var length = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM.length; + // console.log(length) + for (var i = 0; i <= length - 1; i++){ + + //console.log(json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i]) + var lat = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LATITUDE; + var lon = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LONGITUDE; + // var type = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; + var id = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_ID; + var origid = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ORIGINAL_TRAFFIC_ITEM_ID; + var TRAFFIC_ITEM_DESCRIPTION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_DESCRIPTION; + var COMMENTS = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].COMMENTS; + var CRITICALITY = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].CRITICALITY; + var VERIFIED = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].VERIFIED; + var TRAFFIC_ITEM_TYPE_DESC = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; + console.log(TRAFFIC_ITEM_TYPE_DESC) + var TRAFFIC_ITEM_STATUS_SHORT_DESC = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_STATUS_SHORT_DESC; + var TRAFFIC_ITEM_DETAIL = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_DETAIL; + var START_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].START_TIME; + var LOCATION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION; + var ENTRY_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ENTRY_TIME; + var END_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].END_TIME; + var ABBREVIATION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ABBREVIATION; + + if (type == 'CONSTRUCTION'){ + + // console.log(i) + + + if (TRAFFIC_ITEM_TYPE_DESC == "CONSTRUCTION"){ + JsonFeature.push({ + "type":"Feature", + "properties": { "id": id, "name": "datapoint" , "original_traffic_id": origid, "TRAFFIC_ITEM_DESCRIPTION": TRAFFIC_ITEM_DESCRIPTION, "COMMENTS":COMMENTS, "CRITICALITY":CRITICALITY, + "VERIFIED":VERIFIED,"TRAFFIC_ITEM_TYPE_DESC":TRAFFIC_ITEM_TYPE_DESC, "TRAFFIC_ITEM_STATUS_SHORT_DESC":TRAFFIC_ITEM_STATUS_SHORT_DESC, "TRAFFIC_ITEM_DETAIL":TRAFFIC_ITEM_DETAIL, + "START_TIME":START_TIME, "LOCATION":LOCATION, "ENTRY_TIME":ENTRY_TIME, "END_TIME":END_TIME, "ABBREVIATION":ABBREVIATION}, + "geometry":{ + "type":"MultiPoint", + "coordinates": [ [lon, lat]] + } + }) + } + + + } else if (type == "ROAD_CLOSURE"){ + + if (TRAFFIC_ITEM_TYPE_DESC == "ROAD_CLOSURE"){ + JsonFeature.push({ + "type":"Feature", + "properties": { "id": id, "name": "datapoint" , "original_traffic_id": origid, "TRAFFIC_ITEM_DESCRIPTION": TRAFFIC_ITEM_DESCRIPTION, "COMMENTS":COMMENTS, "CRITICALITY":CRITICALITY, + "VERIFIED":VERIFIED,"TRAFFIC_ITEM_TYPE_DESC":TRAFFIC_ITEM_TYPE_DESC, "TRAFFIC_ITEM_STATUS_SHORT_DESC":TRAFFIC_ITEM_STATUS_SHORT_DESC, "TRAFFIC_ITEM_DETAIL":TRAFFIC_ITEM_DETAIL, + "START_TIME":START_TIME, "LOCATION":LOCATION, "ENTRY_TIME":ENTRY_TIME, "END_TIME":END_TIME, "ABBREVIATION":ABBREVIATION}, + "geometry":{ + "type":"MultiPoint", + "coordinates": [ [lon, lat]] + } + }) + } + } + + } + resolve(JsonFeature) + }catch(error){ reject(error)} + + + }); - // - build geojson for Car Routing - function Route_buildJson(inputData){ - return new Promise(function (resolve, reject) { - try { - var JsonFeature = []; - var json_route = inputData - var pol = polycalc.decode(json_route.routes[0].sections[0].polyline) - var length = pol.polyline.length; - - // console.log(length); - var id = json_route.routes[0].id; - var mid = json_route.routes[0].sections[0].id; - var transport = json_route.routes[0].sections[0].transport.mode; - var departureTime = json_route.routes[0].sections[0].departure.time; - var departureOriglat = json_route.routes[0].sections[0].departure.place.originalLocation.lat; - // console.log(departureOriglat) - var departureOriglon = json_route.routes[0].sections[0].departure.place.originalLocation.lng; - // console.log(departureOriglon) - var departurelat = json_route.routes[0].sections[0].departure.place.location.lat; - var departurelon = json_route.routes[0].sections[0].departure.place.location.lng; - var arrivalTime = json_route.routes[0].sections[0].arrival.time; - var arrivalOriglat = json_route.routes[0].sections[0].arrival.place.originalLocation.lat; - var arrivalOriglon = json_route.routes[0].sections[0].arrival.place.originalLocation.lng; - var arrivallat = json_route.routes[0].sections[0].arrival.place.location.lat; - var arrivallon = json_route.routes[0].sections[0].arrival.place.location.lng; - - var departure = []; - departure.push([parseFloat(parseFloat(departureOriglon).toFixed(5)),parseFloat(parseFloat(departureOriglat).toFixed(5))]); - departure.push([parseFloat(parseFloat(departurelon).toFixed(5)),parseFloat(parseFloat(departurelat).toFixed(5))]) - - timeDifference(departureTime,arrivalTime); - - - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": id, "name": "linestring" ,"transport": transport,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, - "geometry":{ - "type":"LineString", - "coordinates": departure - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 30,144,255, - 1 - ], - "width": 3, - "lineDash": null - } - } - } - }) - - var arrival = []; - arrival.push([parseFloat(parseFloat(arrivalOriglon).toFixed(5)),parseFloat(parseFloat(arrivalOriglat).toFixed(5))]); - arrival.push([parseFloat(parseFloat(arrivallon).toFixed(5)),parseFloat(parseFloat(arrivallat).toFixed(5))]) - // console.log(arrival) - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": id, "name": "linestring" ,"transport": transport,"arrivalTime": arrivalTime,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, - "geometry":{ - "type":"LineString", - "coordinates": arrival - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 30,144,255, - 1 - ], - "width": 3, - "lineDash": null - } - } - } - }) - - - var pline = []; - var length = pol.polyline.length; - - for (var i = 0; i<= length -1; i++){ - pline.push([parseFloat(parseFloat(pol.polyline[i][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[i][0]).toFixed(5))]) - } - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": id, "name": "linestring" ,"transport": transport,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, - "geometry":{ - "type":"LineString", - "coordinates": pline - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 199,21,133, - 1 - ], - "width": 4, - "lineDash": null - } - } - } - }) - - // console.log(JsonFeature) - - - - - resolve(JsonFeature) - }catch(error){ reject(error)} - + +}; + + +// ---- Navpoint ---- +// - receive coordinates and return a geojson +app.get('/addPoint', async (req, res) => { + try { + + var data = req.query; + console.log(data) + var Punktadd = { + "type":"FeatureCollection", + "name":"data_point", + "crs":{ + "type":"name", + "properties":{ + "name":"urn:ogc:def:crs:OGC:1.3:CRS84" + } + }, + "features":[ + { + "type":"Feature", + "properties":{ + "id":null, + "name":"datapoint", + "loc": data.sloc + }, + "geometry":{ + "type":"Point", + "coordinates":[ + parseFloat(parseFloat(data.slon).toFixed(7)), + parseFloat(parseFloat(data.slat).toFixed(7)) + ] + } + } + ] + } + res.json(Punktadd); + + } catch (error) { + console.log(error) + } + +}); + + +// http://localhost:8083/Routecalc2?slat=48.68997020356071&slon=9.202611390575258&sloc=Start&elat=48.726559406813294&elon=9.113775973868089&eloc=End +// ---- Route Berechnen Test ---- +app.get('/Routecalc2', async (req, res) => { + console.log('command angekommen ////// Route/////!') + const pointData = req.query; + console.log(pointData); + try { + let APIout = await CON_getApiResponse('https://router.hereapi.com/v8/routes?transportMode=car&origin='+ pointData.slat + ',' + pointData.slon + '&destination=' + pointData.elat + ',' + pointData.elon + '&return=polyline&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y'); + + console.log(APIout) + let json_route = await Route_buildJson(APIout); + console.log(json_route) + var json_routes = { + "name":"navcar" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": json_route + }; + + console.log(json_routes); + console.log('.../route calc successful!'); + res.json(json_routes); + } + catch (err) { + console.log('.../loadSetP failed!\n' + err); + } + +}); +// - build geojson for Car Routing +function Route_buildJson(inputData){ + return new Promise(function (resolve, reject) { + try { + var JsonFeature = []; + var json_route = inputData + var pol = polycalc.decode(json_route.routes[0].sections[0].polyline) + var length = pol.polyline.length; + + // console.log(length); + var id = json_route.routes[0].id; + var mid = json_route.routes[0].sections[0].id; + var transport = json_route.routes[0].sections[0].transport.mode; + var departureTime = json_route.routes[0].sections[0].departure.time; + var departureOriglat = json_route.routes[0].sections[0].departure.place.originalLocation.lat; + // console.log(departureOriglat) + var departureOriglon = json_route.routes[0].sections[0].departure.place.originalLocation.lng; + // console.log(departureOriglon) + var departurelat = json_route.routes[0].sections[0].departure.place.location.lat; + var departurelon = json_route.routes[0].sections[0].departure.place.location.lng; + var arrivalTime = json_route.routes[0].sections[0].arrival.time; + var arrivalOriglat = json_route.routes[0].sections[0].arrival.place.originalLocation.lat; + var arrivalOriglon = json_route.routes[0].sections[0].arrival.place.originalLocation.lng; + var arrivallat = json_route.routes[0].sections[0].arrival.place.location.lat; + var arrivallon = json_route.routes[0].sections[0].arrival.place.location.lng; - - }); - - }; - // ---- Route Offis Berechnen Test ---- - app.get('/navPublicT2', async (req, res) => { - console.log('command angekommen ////// Route/////!') - const pointData = req.query; - console.log(pointData); - try { - let APIout = await CON_getApiResponse('https://transit.router.hereapi.com/v8/routes?origin='+ parseFloat(parseFloat(pointData.slat).toFixed(5)) + ',' + parseFloat(parseFloat(pointData.slon).toFixed(5)) + '&destination=' + parseFloat(parseFloat(pointData.elat).toFixed(5)) + ',' + parseFloat(parseFloat(pointData.elon).toFixed(5)) + '&return=polyline&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y'); - - console.log(APIout) - let json_pub = await Route_PublicbuildJson(APIout); - console.log(json_pub) - // navPublicjson = { - // "name":"navPublic" + "01", - // "type":"FeatureCollection", - // "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - // "features": buildNavPublic() - - // }; - var json_public = { - "name":"navPublic" + "01", - "type":"FeatureCollection", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": json_pub - }; - - console.log(json_public); - console.log('.../route calc successful!'); - res.json(json_public); - } - catch (err) { - console.log('.../loadSetP failed!\n' + err); - } - + var departure = []; + departure.push([parseFloat(parseFloat(departureOriglon).toFixed(5)),parseFloat(parseFloat(departureOriglat).toFixed(5))]); + departure.push([parseFloat(parseFloat(departurelon).toFixed(5)),parseFloat(parseFloat(departurelat).toFixed(5))]) + + timeDifference(departureTime,arrivalTime); + + + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": id, "name": "linestring" ,"transport": transport,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, + "geometry":{ + "type":"LineString", + "coordinates": departure + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 30,144,255, + 1 + ], + "width": 3, + "lineDash": null + } + } + } + }) + + var arrival = []; + arrival.push([parseFloat(parseFloat(arrivalOriglon).toFixed(5)),parseFloat(parseFloat(arrivalOriglat).toFixed(5))]); + arrival.push([parseFloat(parseFloat(arrivallon).toFixed(5)),parseFloat(parseFloat(arrivallat).toFixed(5))]) + // console.log(arrival) + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": id, "name": "linestring" ,"transport": transport,"arrivalTime": arrivalTime,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, + "geometry":{ + "type":"LineString", + "coordinates": arrival + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 30,144,255, + 1 + ], + "width": 3, + "lineDash": null + } + } + } + }) + + + var pline = []; + var length = pol.polyline.length; + + for (var i = 0; i<= length -1; i++){ + pline.push([parseFloat(parseFloat(pol.polyline[i][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[i][0]).toFixed(5))]) + } + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": id, "name": "linestring" ,"transport": transport,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, + "geometry":{ + "type":"LineString", + "coordinates": pline + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 199,21,133, + 1 + ], + "width": 4, + "lineDash": null + } + } + } + }) + + // console.log(JsonFeature) + + + + + resolve(JsonFeature) + }catch(error){ reject(error)} + + + }); - - // - build geojson for Public Routing - function Route_PublicbuildJson(inputData){ - return new Promise(function (resolve, reject) { - try { - var JsonFeature = []; - // var pol = polycalc.decode(navcar.body.routes[0].sections[0].polyline) - // var length = pol.polyline.length; - - // console.log(length); - var json_public = inputData - var id = json_public.routes[0].id; - - var length = json_public.routes[0].sections.length; - console.log("length of Sections: " + length) - for (var i = 0; i<= length -1; i++){ - console.log(i) - if (json_public.routes[0].sections[i].type == "pedestrian"){ - console.log("pedestrian") - var section = json_public.routes[0].sections[i] - var agencyid = section.id; - var agencyname = section.name; - var arrivaltime = section.arrival.time; - var arrivalplace = section.arrival.place; - var departuretime = section.departure.time; - var departureplace = section.departure.place; - var transportInfo = section.transport; - - var pol = polycalc.decode(section.polyline) - var pollength = pol.polyline.length; - var timedifference = timeDifference1(departuretime,arrivaltime); - var pline = []; - - for (var j = 0; j<= pollength -1; j++){ - pline.push([parseFloat(parseFloat(pol.polyline[j][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[j][0]).toFixed(5))]) - } - - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": agencyid,"agencyName":agencyname, "name": "linestring" ,"type": "pedestrian","transportInfo":transportInfo,"arrivalTime": arrivaltime,"arrivalPlace": arrivalplace,"departureTime": departuretime,"departurePlace": departureplace, "daysDifference": timedifference.daysDifference, "hoursDifference": timedifference.hoursDifference, "minutesDifference" : timedifference.minutesDifference, "secondsDifference": timedifference.secondsDifference}, - "geometry":{ - "type":"LineString", - "coordinates": pline - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 30,144,255, - 1 - ], - "width": 3, - "lineDash": null - } - } - } - }) - console.log(JsonFeature) - } else if (json_public.routes[0].sections[i].type == "transit"){ - console.log("transit") - var section = json_public.routes[0].sections[i] - var agencyid = section.id; - var agencyname = section.name; - var arrivaltime = section.arrival.time; - var arrivalplace = section.arrival.place; - var departuretime = section.departure.time; - var departureplace = section.departure.place; - var transportInfo = section.transport; - - var pol = polycalc.decode(section.polyline) - var pollength = pol.polyline.length; - var timedifference = timeDifference1(departuretime,arrivaltime); - var pline = []; - - for (var j = 0; j<= pollength -1; j++){ - pline.push([parseFloat(parseFloat(pol.polyline[j][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[j][0]).toFixed(5))]) - } - - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": agencyid,"agencyName":agencyname, "name": "linestring" ,"type": "transit","transportInfo":transportInfo,"arrivalTime": arrivaltime,"arrivalPlace": arrivalplace,"departureTime": departuretime,"departurePlace": departureplace, "daysDifference": timedifference.daysDifference, "hoursDifference": timedifference.hoursDifference, "minutesDifference" : timedifference.minutesDifference, "secondsDifference": timedifference.secondsDifference}, - "geometry":{ - "type":"LineString", - "coordinates": pline - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 255,140,0, - 1 - ], - "width": 4, - "lineDash": null - } - } - } - }) - console.log(JsonFeature) - } - - - } - - - - resolve(JsonFeature) - }catch(error){ reject(error)} - - - - }); - - }; - - // ---- Noise Real Time ---- - // - 3Parts - - // - get request from the html page - app.get('/NoiseRealTime', async (req, res) => { - console.log('command angekommen!') - try{ - let APIout = await flow_getApiResponse('https://data.sensor.community/airrohr/v1/sensor/' + req.query.id + '/'); - - console.log(APIout); - - - res.json((APIout)); - - }catch (error) { - console.log(error) + +}; +// ---- Route Offis Berechnen Test ---- +app.get('/navPublicT2', async (req, res) => { + console.log('command angekommen ////// Route/////!') + const pointData = req.query; + console.log(pointData); + try { + let APIout = await CON_getApiResponse('https://transit.router.hereapi.com/v8/routes?origin='+ parseFloat(parseFloat(pointData.slat).toFixed(5)) + ',' + parseFloat(parseFloat(pointData.slon).toFixed(5)) + '&destination=' + parseFloat(parseFloat(pointData.elat).toFixed(5)) + ',' + parseFloat(parseFloat(pointData.elon).toFixed(5)) + '&return=polyline&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y'); + + console.log(APIout) + let json_pub = await Route_PublicbuildJson(APIout); + console.log(json_pub) + // navPublicjson = { + // "name":"navPublic" + "01", + // "type":"FeatureCollection", + // "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + // "features": buildNavPublic() + + // }; + var json_public = { + "name":"navPublic" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": json_pub + }; + + console.log(json_public); + console.log('.../route calc successful!'); + res.json(json_public); } - }); - - // ---- Historic Noise Data ---- - // ---- Trial Version from PostgreSQL ---- - const pgp = require('pg-promise')({ - // Initialization Options - }); - - const connection = { - - user: 'postgres', // name of the user account - database: 'NoiseSensorData', // name of the database - password: 'ahpk94meteor', // env var: PGPASSWORD - host: '193.196.38.112', // Server hosting the postgres database (host: '35.187.21.114') - port: 5432, // env var: PGPORT - max: 10, // max number of clients in the pool - idleTimeoutMillis: 30000 // how long a client is allowed to remain idle before being closed - + catch (err) { + console.log('.../loadSetP failed!\n' + err); } - - const db = pgp(connection); - console.log('successful connected to DB: NoiseSensorData!') - - app.post('/getNoiseHist', function (req, res) { + +}); + +// - build geojson for Public Routing +function Route_PublicbuildJson(inputData){ + return new Promise(function (resolve, reject) { + try { + var JsonFeature = []; + // var pol = polycalc.decode(navcar.body.routes[0].sections[0].polyline) + // var length = pol.polyline.length; + + // console.log(length); + var json_public = inputData + var id = json_public.routes[0].id; + + var length = json_public.routes[0].sections.length; + console.log("length of Sections: " + length) + for (var i = 0; i<= length -1; i++){ + console.log(i) + if (json_public.routes[0].sections[i].type == "pedestrian"){ + console.log("pedestrian") + var section = json_public.routes[0].sections[i] + var agencyid = section.id; + var agencyname = section.name; + var arrivaltime = section.arrival.time; + var arrivalplace = section.arrival.place; + var departuretime = section.departure.time; + var departureplace = section.departure.place; + var transportInfo = section.transport; + + var pol = polycalc.decode(section.polyline) + var pollength = pol.polyline.length; + var timedifference = timeDifference1(departuretime,arrivaltime); + var pline = []; + + for (var j = 0; j<= pollength -1; j++){ + pline.push([parseFloat(parseFloat(pol.polyline[j][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[j][0]).toFixed(5))]) + } + + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": agencyid,"agencyName":agencyname, "name": "linestring" ,"type": "pedestrian","transportInfo":transportInfo,"arrivalTime": arrivaltime,"arrivalPlace": arrivalplace,"departureTime": departuretime,"departurePlace": departureplace, "daysDifference": timedifference.daysDifference, "hoursDifference": timedifference.hoursDifference, "minutesDifference" : timedifference.minutesDifference, "secondsDifference": timedifference.secondsDifference}, + "geometry":{ + "type":"LineString", + "coordinates": pline + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 30,144,255, + 1 + ], + "width": 3, + "lineDash": null + } + } + } + }) + console.log(JsonFeature) + } else if (json_public.routes[0].sections[i].type == "transit"){ + console.log("transit") + var section = json_public.routes[0].sections[i] + var agencyid = section.id; + var agencyname = section.name; + var arrivaltime = section.arrival.time; + var arrivalplace = section.arrival.place; + var departuretime = section.departure.time; + var departureplace = section.departure.place; + var transportInfo = section.transport; + + var pol = polycalc.decode(section.polyline) + var pollength = pol.polyline.length; + var timedifference = timeDifference1(departuretime,arrivaltime); + var pline = []; + + for (var j = 0; j<= pollength -1; j++){ + pline.push([parseFloat(parseFloat(pol.polyline[j][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[j][0]).toFixed(5))]) + } + + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": agencyid,"agencyName":agencyname, "name": "linestring" ,"type": "transit","transportInfo":transportInfo,"arrivalTime": arrivaltime,"arrivalPlace": arrivalplace,"departureTime": departuretime,"departurePlace": departureplace, "daysDifference": timedifference.daysDifference, "hoursDifference": timedifference.hoursDifference, "minutesDifference" : timedifference.minutesDifference, "secondsDifference": timedifference.secondsDifference}, + "geometry":{ + "type":"LineString", + "coordinates": pline + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 255,140,0, + 1 + ], + "width": 4, + "lineDash": null + } + } + } + }) + console.log(JsonFeature) + } + - try { - - const data = req.body; - // = "select sensor_id from public.noisesensor;" + } - let query_string = " SELECT * FROM noisesensorstest ORDER BY timestamp ASC;" - // query_string += "from noisesensor;"; - console.log(query_string) - // request the data rsr - db.result(query_string) - .then(result => { - res.json(result.rows); - }) - .catch(error => { - console.log('ERROR:', error); - }); - console.log('.../getNoiseHist successful!'); - } - catch (err) { - console.log('.../getNoiseHist failed!\n' + err); - } - }); + resolve(JsonFeature) + }catch(error){ reject(error)} - app.post('/getSTANoiseHist', async (req, res) => { - console.log('command angekommen ////// STANoise/////!') - const pointData = req.query; - // console.log(pointData); - try { - - let origURL = 'http://193.196.138.56/frost-noise-api/v1.1/Datastreams(1)/Observations?$orderby=phenomenonTime%20asc' - let STALAeq = await STA_getApiResponse(origURL); - let STALAeqColl = []; - - // let origURLmin = 'http://193.196.138.56/frost-noise-api/v1.1/Datastreams(2)/Observations?$orderby=phenomenonTime%20asc' - // let STALAeqmin = await STA_getApiResponse(origURLmin); - - // let origURLmax = 'http://193.196.138.56/frost-noise-api/v1.1/Datastreams(3)/Observations?$orderby=phenomenonTime%20asc' - // let STALAeqmax = await STA_getApiResponse(origURLmax); - //eq - for (var i = 0; i<= STALAeq.value.length -1; i++){ - var newNum = "noise"; - var newVal = "LAeq"; - - STALAeq.value[i][newNum] = newVal; - STALAeqColl.push(STALAeq.value[i]); - - } - do { - STALAeq = await STA_getApiResponse(STALAeq["@iot.nextLink"]); - for (var j = 0; j<= STALAeq.value.length -1; j++){ - STALAeqColl.push(STALAeq.value[j]); - - } - } while ("@iot.nextLink" in STALAeq); - - - console.log(STALAeqColl.length) - res.json(STALAeqColl); - } - catch (err) { - console.log('.../loadSetP failed!\n' + err); - } + }); + +}; + +// ---- Noise Real Time ---- +// - 3Parts - +// - get request from the html page +app.get('/NoiseRealTime', async (req, res) => { + console.log('command angekommen!') +try{ + console.log('https://data.sensor.community/airrohr/v1/sensor/' + req.query.id + '/') + let APIout = await flow_getApiResponse('https://data.sensor.community/airrohr/v1/sensor/' + req.query.id + '/'); + + console.log(APIout); + + res.json((APIout)); + +}catch (error) { + console.log(error) +} +}); + +// ---- Historic Noise Data ---- +// ---- Trial Version from PostgreSQL ---- +const pgp = require('pg-promise')({ + // Initialization Options +}); + +const connection = { + + user: 'postgres', // name of the user account + database: 'NoiseSensorData', // name of the database -- NoiseSensorData + password: 'postgres', // env var: PGPASSWORD -- ahpk94meteor + host: 'localhost', // Server hosting the postgres database (host: '35.187.21.114') -- 193.196.38.112 + port: 5432, // env var: PGPORT + max: 10, // max number of clients in the pool + idleTimeoutMillis: 30000 // how long a client is allowed to remain idle before being closed + +} + +const db = pgp(connection); +console.log('successful connected to DB: NoiseSensorData!') + +app.post('/getNoiseHist', function (req, res) { + + try { - function STA_getApiResponse(url) { - return new Promise(function (resolve, reject) { - // console.log(url) - axios.get(url) - .then(function (response) { - // handle success - // console.log(response.data); - resolve(response.data); - }) - .catch(function (error) { - // handle error - // console.log(error); - reject(error); - }); - }); + const data = req.body; + // = "select sensor_id from public.noisesensor;" + + let query_string = " SELECT * FROM noisesensorstest ORDER BY timestamp ASC;" + // query_string += "from noisesensor;"; + + console.log(query_string) + // request the data rsr + db.result(query_string) + .then(result => { + res.json(result.rows); + }) + .catch(error => { + console.log('ERROR:', error); + }); + console.log('.../getNoiseHist successful!'); } - const connectionFav = { + catch (err) { + console.log('.../getNoiseHist failed!\n' + err); + } +}); + +app.post('/getSTANoiseHist', async (req, res) => { + + console.log('command angekommen ////// STANoise/////!') + const pointData = req.query; + // console.log(pointData); + try { + + let origURL = 'http://193.196.138.56/frost-noise-api/v1.1/Datastreams(1)/Observations?$orderby=phenomenonTime%20asc' + let STALAeq = await STA_getApiResponse(origURL); + let STALAeqColl = []; + + // let origURLmin = 'http://193.196.138.56/frost-noise-api/v1.1/Datastreams(2)/Observations?$orderby=phenomenonTime%20asc' + // let STALAeqmin = await STA_getApiResponse(origURLmin); + + // let origURLmax = 'http://193.196.138.56/frost-noise-api/v1.1/Datastreams(3)/Observations?$orderby=phenomenonTime%20asc' + // let STALAeqmax = await STA_getApiResponse(origURLmax); + //eq + for (var i = 0; i<= STALAeq.value.length -1; i++){ + var newNum = "noise"; + var newVal = "LAeq"; + + STALAeq.value[i][newNum] = newVal; + STALAeqColl.push(STALAeq.value[i]); + + } + do { + STALAeq = await STA_getApiResponse(STALAeq["@iot.nextLink"]); + for (var j = 0; j<= STALAeq.value.length -1; j++){ + STALAeqColl.push(STALAeq.value[j]); + + } + } while ("@iot.nextLink" in STALAeq); + + + console.log(STALAeqColl.length) + res.json(STALAeqColl); + } + catch (err) { + console.log('.../loadSetP failed!\n' + err); + } +}); + + +function STA_getApiResponse(url) { + return new Promise(function (resolve, reject) { + // console.log(url) + axios.get(url) + .then(function (response) { + // handle success + // console.log(response.data); + resolve(response.data); + }) + .catch(function (error) { + // handle error + // console.log(error); + reject(error); + }); + }); +} + + +const connectionFav = { user: 'postgres', // name of the user account database: 'FavoritPlaces', // name of the database @@ -945,120 +930,122 @@ app.get('/TrafficFlow', async (req, res) => { const dbFav = pgp(connectionFav); console.log('successful connected to DB: FavoritPlaces!') - // ---- FavPlaces ---- + + + // ---- FavPlaces ---- // - 3Parts - // - get request from the html page app.get('/FavPlacesDB', async (req, res) => { - console.log('FavPlacesDB angekommen!') - try{ - let APIout = await getDBResult(''); - console.log(APIout) - let json_con = await buildFavJson(APIout,"CONSTRUCTION"); - // console.log(json_con) - var json_cons = { - "name":"FavouritePlaces" + "01", - "type":"FeatureCollection", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": json_con - - }; - res.json(json_cons) - }catch (error) { - console.log(error) - } - - }); - // - request from the here API - function getDBResult(url) { - return new Promise(function (resolve, reject) { - - let query_string = " SELECT id, lat, lon, contenttext, approved, timestamp FROM public.places WHERE approved = true;" - // query_string += "from noisesensor;"; - - console.log(query_string) - // request the data rsr - dbFav.result(query_string) - .then(result => { - // res.json(result.rows); - console.log((result.rows)); - resolve((result.rows)); - }) - .catch(function (error) { - // handle error - // console.log(error); - reject(error); - }); - }); - } - // - build geojson from response - function buildFavJson(inputData,type){ - return new Promise(function (resolve, reject) { - try { - var JsonFeature = []; - var json_acc = inputData - var length = json_acc.length; - // console.log(length) - for (var i = 0; i <= length - 1; i++){ - - //console.log(json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i]) - var lat = json_acc[i].lat; - var lon = json_acc[i].lon; - // var type = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; - var id = json_acc[i].id; - var contenttext = json_acc[i].contenttext; - var timestamp = json_acc[i].timestamp; - - - // console.log(i) - - - - JsonFeature.push({ - "type":"Feature", - "properties": { "id": id, "name": "datapoint" , "contenttext": contenttext, "timestamp": timestamp, "date": timestamp.getUTCDate(), "month": timestamp.getMonth(), "year": timestamp.getUTCFullYear(), "lat":lat, "lon":lon}, - "geometry":{ - "type":"MultiPoint", - "coordinates": [ [parseFloat(lon), parseFloat(lat)]] - } - }) - - - - - - } - resolve(JsonFeature) - }catch(error){ reject(error)} - - - - }); - + console.log('FavPlacesDB angekommen!') +try{ + let APIout = await getDBResult(''); + console.log(APIout) + let json_con = await buildFavJson(APIout,"CONSTRUCTION"); + // console.log(json_con) + var json_cons = { + "name":"FavouritePlaces" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": json_con + }; + res.json(json_cons) +}catch (error) { + console.log(error) +} + +}); +// - request from the here API +function getDBResult(url) { + return new Promise(function (resolve, reject) { + + let query_string = " SELECT id, lat, lon, contenttext, approved, timestamp FROM public.places WHERE approved = true;" + // query_string += "from noisesensor;"; + + console.log(query_string) + // request the data rsr + dbFav.result(query_string) + .then(result => { + // res.json(result.rows); + console.log((result.rows)); + resolve((result.rows)); + }) + .catch(function (error) { + // handle error + // console.log(error); + reject(error); + }); + }); +} +// - build geojson from response +function buildFavJson(inputData,type){ + return new Promise(function (resolve, reject) { + try { + var JsonFeature = []; + var json_acc = inputData + var length = json_acc.length; + // console.log(length) + for (var i = 0; i <= length - 1; i++){ + + //console.log(json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i]) + var lat = json_acc[i].lat; + var lon = json_acc[i].lon; + // var type = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; + var id = json_acc[i].id; + var contenttext = json_acc[i].contenttext; + var timestamp = json_acc[i].timestamp; + + + // console.log(i) - app.post('/saveFavPoint', function (req, res) { - - try { - - const data = req.body; - // = "select sensor_id from public.noisesensor;" + + + JsonFeature.push({ + "type":"Feature", + "properties": { "id": id, "name": "datapoint" , "contenttext": contenttext, "timestamp": timestamp, "date": timestamp.getUTCDate(), "month": timestamp.getMonth(), "year": timestamp.getUTCFullYear(), "lat":lat, "lon":lon}, + "geometry":{ + "type":"MultiPoint", + "coordinates": [ [parseFloat(lon), parseFloat(lat)]] + } + }) + + - let query_string = " INSERT INTO public.places( lat, lon, contenttext, approved, timestamp) VALUES (" + data.lat + ", " + data.lon + ", '" + data.contentext + "', 'false' , NOW()); " - // query_string += "from noisesensor;"; + - console.log(query_string) - // request the data rsr - dbFav.result(query_string) - .then(result => { - res.json(result.rows); - }) - .catch(error => { - console.log('ERROR:', error); - }); - console.log('.../saveFavPoint successful!'); - } + } + resolve(JsonFeature) + }catch(error){ reject(error)} + + + + }); + +}; + +app.post('/saveFavPoint', function (req, res) { + + try { - catch (err) { - console.log('.../saveFavPoint failed!\n' + err); - } - }); \ No newline at end of file + const data = req.body; + // = "select sensor_id from public.noisesensor;" + + let query_string = " INSERT INTO public.places( lat, lon, contenttext, approved, timestamp) VALUES (" + data.lat + ", " + data.lon + ", '" + data.contentext + "', 'false' , NOW()); " + // query_string += "from noisesensor;"; + + console.log(query_string) + // request the data rsr + dbFav.result(query_string) + .then(result => { + res.json(result.rows); + }) + .catch(error => { + console.log('ERROR:', error); + }); + console.log('.../saveFavPoint successful!'); + } + + catch (err) { + console.log('.../saveFavPoint failed!\n' + err); + } +}); \ No newline at end of file diff --git a/server_mitCert.js b/server_mitCert.js new file mode 100644 index 0000000000000000000000000000000000000000..43c28e6bed57e0332dd71a627636ba7dde0c8258 --- /dev/null +++ b/server_mitCert.js @@ -0,0 +1,1064 @@ + +const fs = require('fs'); +const http = require('http'); +const https = require('https'); +const express = require('express'); +const bodyParser = require('body-parser') + +// const request = require('ajax-request'); +// const request = require('request'); +const axios = require('axios'); +const app = express(); +app.use(bodyParser.urlencoded({ extended: false })) +app.use(bodyParser.json()) +const polycalc = require('./codepoly.js'); +// Certificate +const privateKey = fs.readFileSync('/etc/letsencrypt/live/umfrage.smartvillages.online/privkey.pem', 'utf8'); +const certificate = fs.readFileSync('/etc/letsencrypt/live/umfrage.smartvillages.online/cert.pem', 'utf8'); +const ca = fs.readFileSync('/etc/letsencrypt/live/umfrage.smartvillages.online/chain.pem', 'utf8'); + +const credentials = { + key: privateKey, + cert: certificate, + ca: ca +}; + +app.use(express.static('vcm')); + +// Starting both http & https servers +// const httpServer = http.createServer(app); +const httpsServer = https.createServer(credentials, app); + +// httpServer.listen(8081, () => { +// console.log('HTTP Server running on port 80'); +// }); + +httpsServer.listen(8083, () => { + console.log('HTTPS Server running on port 443'); +}); + +var minutesDifference +var hoursDifference +var secondsDifference +var daysDifference + + +function timeDifference(date11,date22) { + var date2 = new Date(date11); + var date1 = new Date(date22); + var difference = date1 - date2 + + daysDifference = Math.floor(difference/1000/60/60/24); + difference -= daysDifference*1000*60*60*24 + + hoursDifference = Math.floor(difference/1000/60/60); + difference -= hoursDifference*1000*60*60 + + minutesDifference = Math.floor(difference/1000/60); + difference -= minutesDifference*1000*60 + + secondsDifference = Math.floor(difference/1000); + + console.log('difference = ' + + daysDifference + ' day/s ' + + hoursDifference + ' hour/s ' + + minutesDifference + ' minute/s ' + + secondsDifference + ' second/s '); +} + + +function timeDifference1(date11,date22) { + var date2 = new Date(date11); + var date1 = new Date(date22); + var difference = date1 - date2 + + var minutesDifference1 + var hoursDifference1 + var secondsDifference1 + var daysDifference1 + + daysDifference1 = Math.floor(difference/1000/60/60/24); + difference -= daysDifference1*1000*60*60*24 + + hoursDifference1 = Math.floor(difference/1000/60/60); + difference -= hoursDifference1*1000*60*60 + + minutesDifference1 = Math.floor(difference/1000/60); + difference -= minutesDifference1*1000*60 + + secondsDifference1 = Math.floor(difference/1000); + + console.log('difference = ' + + daysDifference1 + ' day/s ' + + hoursDifference1 + ' hour/s ' + + minutesDifference1 + ' minute/s ' + + secondsDifference1 + ' second/s '); + var result = {"daysDifference":daysDifference1, + "hoursDifference":hoursDifference1, + "minutesDifference":minutesDifference1, + "secondsDifference":secondsDifference1} + return(result); +} + + +//=========================================================================================================================== +//Final Version +//=========================================================================================================================== +// ---- Traffic Flow ---- +// - 3Parts - +// - get request from the html page +app.get('/TrafficFlow', async (req, res) => { + console.log('command angekommen!') + try{ + let APIout = await flow_getApiResponse('https://traffic.ls.hereapi.com/traffic/6.2/flow.json?prox=48.7823,9.1807,919&responseattributes=sh%2Cfc&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y'); + + let json_tf = await flow_buildTFLOWJson(APIout); + console.log(json_tf) + var json_tfs = { + "name":"flow" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": json_tf + + }; + + res.json(json_tfs) + + }catch (error) { + console.log(error) + } + }); + // - request from the here API + function flow_getApiResponse(url) { + return new Promise(function (resolve, reject) { + axios.get(url) + .then(function (response) { + // handle success + console.log(response.data); + resolve(response.data); + }) + .catch(function (error) { + // handle error + console.log(error); + reject(error); + }); + }); + } + // - build geojson from response + function flow_buildTFLOWJson(inputData){ + return new Promise(function (resolve, reject) { + try { + var json_tflow = inputData + var JsonFeature = []; + console.log(json_tflow.RWS[0].RW.length + "---- in flow func") + var length = json_tflow.RWS[0].RW.length; + var fik + // console.log(length); + + for (var i = 0; i<= length -1; i++){ + var FIlength = json_tflow.RWS[0].RW[i].FIS[0].FI.length + console.log("i - " + i) + var mid = json_tflow.RWS[0].RW[i].mid; + var LI = json_tflow.RWS[0].RW[i].LI; + var DE = json_tflow.RWS[0].RW[i].DE; + var PBT = json_tflow.RWS[0].RW[i].PBT; + for (var m = 0; m <= FIlength -1; m++){ + console.log("k - " + m) + var shplength = json_tflow.RWS[0].RW[i].FIS[0].FI[m].SHP.length; + console.log("FI - " + json_tflow.RWS[0].RW[i].FIS[0].FI[m]) + fik = json_tflow.RWS[0].RW[i].FIS[0].FI[m] + // var type = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; + + var TMC = json_tflow.RWS[0].RW[i].FIS[0].FI[m].TMC; + var CF = json_tflow.RWS[0].RW[i].FIS[0].FI[m].CF[0]; + console.log("Shp length - " + json_tflow.RWS[0].RW[i].FIS[0].FI[m].SHP.length) + console.log("Shp length - " + shplength) + var locationshp = []; + for (var j = 0; j <= shplength - 1; j++ ){ + console.log("j - " +j) + console.log("RWS - " + json_tflow.RWS[0]) + console.log("RW - " + json_tflow.RWS[0].RW[i]) + console.log("FIS - " + json_tflow.RWS[0].RW[i].FIS[0]) + console.log("FIk - " + fik) + console.log("FI - " + json_tflow.RWS[0].RW[i].FIS[0].FI[m]) + + console.log("shape j - " + fik.SHP[j]) + var value = fik.SHP[j].value[0]; + // console.log(value[0]) + + + var splitvalue = []; + splitvalue = value.split(" "); + // console.log(splitvalue.length) + var coord = []; + for (var k = 0; k <= splitvalue.length -2; k++){ + var latlon = []; + latlon = splitvalue[k].split(","); + var lat = latlon[0]; + var lon = latlon[1]; + coord.push([parseFloat(lon),parseFloat(lat)]) + } + // var FC = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LONGITUDE; + locationshp.push(coord) + // console.log(value) + } + if (CF.JF){ + // console.log("CF.JF -- " + CF.JF) + } + + + if ((CF.JF >= 3) ){ + + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, + "geometry":{ + "type":"MultiLineString", + "coordinates": locationshp + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 153, + 0, + 0, + 1 + ], + "width": 2, + "lineDash": null + } + } + } + }) + } else if ((CF.JF <3 && CF.JF >= 2) ){ + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, + "geometry":{ + "type":"MultiLineString", + "coordinates": locationshp + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 255, + 153, + 51, + 1 + ], + "width": 2, + "lineDash": null + } + } + } + }) + } else if ((CF.JF <2 && CF.JF >= 1)){ + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, + "geometry":{ + "type":"MultiLineString", + "coordinates": locationshp + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 230, + 230, + 0, + 1 + ], + "width": 2, + "lineDash": null + } + } + } + }) + } else if ((CF.JF < 1)){ + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, + "geometry":{ + "type":"MultiLineString", + "coordinates": locationshp + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 0, + 153, + 0, + 1 + ], + "width": 2, + "lineDash": null + } + } + } + }) + } + };}; + resolve(JsonFeature) + }catch(error){ reject(error)} + + + + }); + + }; + + + // ---- Accidents ---- + // - 3Parts - + // - get request from the html page + app.get('/CONSTRUCTION', async (req, res) => { + console.log('Construction angekommen!') + try{ + let APIout = await CON_getApiResponse('https://traffic.ls.hereapi.com/traffic/6.3/incidents.json?apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y&bbox=48.790,9.139;48.771,9.239'); + + let json_con = await CON_buildTFLOWJson(APIout,"CONSTRUCTION"); + // console.log(json_con) + var json_cons = { + "name":"incident" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": json_con + + }; + res.json(json_cons) + }catch (error) { + console.log(error) + } + + }); + app.get('/ROAD_CLOSURE', async (req, res) => { + console.log('Construction angekommen!') + try{ + let APIout = await CON_getApiResponse('https://traffic.ls.hereapi.com/traffic/6.3/incidents.json?apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y&bbox=48.790,9.139;48.771,9.239'); + + let json_con = await CON_buildTFLOWJson(APIout,"ROAD_CLOSURE"); + // console.log(json_con) + var json_cons = { + "name":"incident" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": json_con + + }; + res.json(json_cons) + }catch (error) { + console.log(error) + } + + }); + // - request from the here API + function CON_getApiResponse(url) { + return new Promise(function (resolve, reject) { + console.log(url) + axios.get(url) + .then(function (response) { + // handle success + // console.log(response.data); + resolve(response.data); + }) + .catch(function (error) { + // handle error + // console.log(error); + reject(error); + }); + }); + } + // - build geojson from response + function CON_buildTFLOWJson(inputData,type){ + return new Promise(function (resolve, reject) { + try { + var JsonFeature = []; + var json_acc = inputData + var length = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM.length; + // console.log(length) + for (var i = 0; i <= length - 1; i++){ + + //console.log(json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i]) + var lat = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LATITUDE; + var lon = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LONGITUDE; + // var type = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; + var id = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_ID; + var origid = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ORIGINAL_TRAFFIC_ITEM_ID; + var TRAFFIC_ITEM_DESCRIPTION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_DESCRIPTION; + var COMMENTS = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].COMMENTS; + var CRITICALITY = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].CRITICALITY; + var VERIFIED = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].VERIFIED; + var TRAFFIC_ITEM_TYPE_DESC = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; + console.log(TRAFFIC_ITEM_TYPE_DESC) + var TRAFFIC_ITEM_STATUS_SHORT_DESC = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_STATUS_SHORT_DESC; + var TRAFFIC_ITEM_DETAIL = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_DETAIL; + var START_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].START_TIME; + var LOCATION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION; + var ENTRY_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ENTRY_TIME; + var END_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].END_TIME; + var ABBREVIATION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ABBREVIATION; + + if (type == 'CONSTRUCTION'){ + + // console.log(i) + + + if (TRAFFIC_ITEM_TYPE_DESC == "CONSTRUCTION"){ + JsonFeature.push({ + "type":"Feature", + "properties": { "id": id, "name": "datapoint" , "original_traffic_id": origid, "TRAFFIC_ITEM_DESCRIPTION": TRAFFIC_ITEM_DESCRIPTION, "COMMENTS":COMMENTS, "CRITICALITY":CRITICALITY, + "VERIFIED":VERIFIED,"TRAFFIC_ITEM_TYPE_DESC":TRAFFIC_ITEM_TYPE_DESC, "TRAFFIC_ITEM_STATUS_SHORT_DESC":TRAFFIC_ITEM_STATUS_SHORT_DESC, "TRAFFIC_ITEM_DETAIL":TRAFFIC_ITEM_DETAIL, + "START_TIME":START_TIME, "LOCATION":LOCATION, "ENTRY_TIME":ENTRY_TIME, "END_TIME":END_TIME, "ABBREVIATION":ABBREVIATION}, + "geometry":{ + "type":"MultiPoint", + "coordinates": [ [lon, lat]] + } + }) + } + + + } else if (type == "ROAD_CLOSURE"){ + + if (TRAFFIC_ITEM_TYPE_DESC == "ROAD_CLOSURE"){ + JsonFeature.push({ + "type":"Feature", + "properties": { "id": id, "name": "datapoint" , "original_traffic_id": origid, "TRAFFIC_ITEM_DESCRIPTION": TRAFFIC_ITEM_DESCRIPTION, "COMMENTS":COMMENTS, "CRITICALITY":CRITICALITY, + "VERIFIED":VERIFIED,"TRAFFIC_ITEM_TYPE_DESC":TRAFFIC_ITEM_TYPE_DESC, "TRAFFIC_ITEM_STATUS_SHORT_DESC":TRAFFIC_ITEM_STATUS_SHORT_DESC, "TRAFFIC_ITEM_DETAIL":TRAFFIC_ITEM_DETAIL, + "START_TIME":START_TIME, "LOCATION":LOCATION, "ENTRY_TIME":ENTRY_TIME, "END_TIME":END_TIME, "ABBREVIATION":ABBREVIATION}, + "geometry":{ + "type":"MultiPoint", + "coordinates": [ [lon, lat]] + } + }) + } + } + + } + resolve(JsonFeature) + }catch(error){ reject(error)} + + + + }); + + }; + + + // ---- Navpoint ---- + // - receive coordinates and return a geojson + app.get('/addPoint', async (req, res) => { + try { + var data = req.query; + var Punktadd = { + "type":"FeatureCollection", + "name":"data_point", + "crs":{ + "type":"name", + "properties":{ + "name":"urn:ogc:def:crs:OGC:1.3:CRS84" + } + }, + "features":[ + { + "type":"Feature", + "properties":{ + "id":null, + "name":"datapoint", + "loc": data.sloc + }, + "geometry":{ + "type":"Point", + "coordinates":[ + parseFloat(parseFloat(data.slon).toFixed(7)), + parseFloat(parseFloat(data.slat).toFixed(7)) + ] + } + } + ] + } + res.json(Punktadd); + + } catch (error) { + console.log(error) + } + + }); + + + // http://localhost:8083/Routecalc2?slat=48.68997020356071&slon=9.202611390575258&sloc=Start&elat=48.726559406813294&elon=9.113775973868089&eloc=End + // ---- Route Berechnen Test ---- + app.get('/Routecalc2', async (req, res) => { + console.log('command angekommen ////// Route/////!') + const pointData = req.query; + console.log(pointData); + try { + let APIout = await CON_getApiResponse('https://router.hereapi.com/v8/routes?transportMode=car&origin='+ pointData.slat + ',' + pointData.slon + '&destination=' + pointData.elat + ',' + pointData.elon + '&return=polyline&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y'); + + console.log(APIout) + let json_route = await Route_buildJson(APIout); + console.log(json_route) + var json_routes = { + "name":"navcar" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": json_route + }; + + console.log(json_routes); + console.log('.../route calc successful!'); + res.json(json_routes); + } + catch (err) { + console.log('.../loadSetP failed!\n' + err); + } + + }); + // - build geojson for Car Routing + function Route_buildJson(inputData){ + return new Promise(function (resolve, reject) { + try { + var JsonFeature = []; + var json_route = inputData + var pol = polycalc.decode(json_route.routes[0].sections[0].polyline) + var length = pol.polyline.length; + + // console.log(length); + var id = json_route.routes[0].id; + var mid = json_route.routes[0].sections[0].id; + var transport = json_route.routes[0].sections[0].transport.mode; + var departureTime = json_route.routes[0].sections[0].departure.time; + var departureOriglat = json_route.routes[0].sections[0].departure.place.originalLocation.lat; + // console.log(departureOriglat) + var departureOriglon = json_route.routes[0].sections[0].departure.place.originalLocation.lng; + // console.log(departureOriglon) + var departurelat = json_route.routes[0].sections[0].departure.place.location.lat; + var departurelon = json_route.routes[0].sections[0].departure.place.location.lng; + var arrivalTime = json_route.routes[0].sections[0].arrival.time; + var arrivalOriglat = json_route.routes[0].sections[0].arrival.place.originalLocation.lat; + var arrivalOriglon = json_route.routes[0].sections[0].arrival.place.originalLocation.lng; + var arrivallat = json_route.routes[0].sections[0].arrival.place.location.lat; + var arrivallon = json_route.routes[0].sections[0].arrival.place.location.lng; + + var departure = []; + departure.push([parseFloat(parseFloat(departureOriglon).toFixed(5)),parseFloat(parseFloat(departureOriglat).toFixed(5))]); + departure.push([parseFloat(parseFloat(departurelon).toFixed(5)),parseFloat(parseFloat(departurelat).toFixed(5))]) + + timeDifference(departureTime,arrivalTime); + + + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": id, "name": "linestring" ,"transport": transport,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, + "geometry":{ + "type":"LineString", + "coordinates": departure + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 30,144,255, + 1 + ], + "width": 3, + "lineDash": null + } + } + } + }) + + var arrival = []; + arrival.push([parseFloat(parseFloat(arrivalOriglon).toFixed(5)),parseFloat(parseFloat(arrivalOriglat).toFixed(5))]); + arrival.push([parseFloat(parseFloat(arrivallon).toFixed(5)),parseFloat(parseFloat(arrivallat).toFixed(5))]) + // console.log(arrival) + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": id, "name": "linestring" ,"transport": transport,"arrivalTime": arrivalTime,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, + "geometry":{ + "type":"LineString", + "coordinates": arrival + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 30,144,255, + 1 + ], + "width": 3, + "lineDash": null + } + } + } + }) + + + var pline = []; + var length = pol.polyline.length; + + for (var i = 0; i<= length -1; i++){ + pline.push([parseFloat(parseFloat(pol.polyline[i][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[i][0]).toFixed(5))]) + } + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": id, "name": "linestring" ,"transport": transport,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, + "geometry":{ + "type":"LineString", + "coordinates": pline + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 199,21,133, + 1 + ], + "width": 4, + "lineDash": null + } + } + } + }) + + // console.log(JsonFeature) + + + + + resolve(JsonFeature) + }catch(error){ reject(error)} + + + + }); + + }; + // ---- Route Offis Berechnen Test ---- + app.get('/navPublicT2', async (req, res) => { + console.log('command angekommen ////// Route/////!') + const pointData = req.query; + console.log(pointData); + try { + let APIout = await CON_getApiResponse('https://transit.router.hereapi.com/v8/routes?origin='+ parseFloat(parseFloat(pointData.slat).toFixed(5)) + ',' + parseFloat(parseFloat(pointData.slon).toFixed(5)) + '&destination=' + parseFloat(parseFloat(pointData.elat).toFixed(5)) + ',' + parseFloat(parseFloat(pointData.elon).toFixed(5)) + '&return=polyline&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y'); + + console.log(APIout) + let json_pub = await Route_PublicbuildJson(APIout); + console.log(json_pub) + // navPublicjson = { + // "name":"navPublic" + "01", + // "type":"FeatureCollection", + // "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + // "features": buildNavPublic() + + // }; + var json_public = { + "name":"navPublic" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": json_pub + }; + + console.log(json_public); + console.log('.../route calc successful!'); + res.json(json_public); + } + catch (err) { + console.log('.../loadSetP failed!\n' + err); + } + + }); + + // - build geojson for Public Routing + function Route_PublicbuildJson(inputData){ + return new Promise(function (resolve, reject) { + try { + var JsonFeature = []; + // var pol = polycalc.decode(navcar.body.routes[0].sections[0].polyline) + // var length = pol.polyline.length; + + // console.log(length); + var json_public = inputData + var id = json_public.routes[0].id; + + var length = json_public.routes[0].sections.length; + console.log("length of Sections: " + length) + for (var i = 0; i<= length -1; i++){ + console.log(i) + if (json_public.routes[0].sections[i].type == "pedestrian"){ + console.log("pedestrian") + var section = json_public.routes[0].sections[i] + var agencyid = section.id; + var agencyname = section.name; + var arrivaltime = section.arrival.time; + var arrivalplace = section.arrival.place; + var departuretime = section.departure.time; + var departureplace = section.departure.place; + var transportInfo = section.transport; + + var pol = polycalc.decode(section.polyline) + var pollength = pol.polyline.length; + var timedifference = timeDifference1(departuretime,arrivaltime); + var pline = []; + + for (var j = 0; j<= pollength -1; j++){ + pline.push([parseFloat(parseFloat(pol.polyline[j][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[j][0]).toFixed(5))]) + } + + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": agencyid,"agencyName":agencyname, "name": "linestring" ,"type": "pedestrian","transportInfo":transportInfo,"arrivalTime": arrivaltime,"arrivalPlace": arrivalplace,"departureTime": departuretime,"departurePlace": departureplace, "daysDifference": timedifference.daysDifference, "hoursDifference": timedifference.hoursDifference, "minutesDifference" : timedifference.minutesDifference, "secondsDifference": timedifference.secondsDifference}, + "geometry":{ + "type":"LineString", + "coordinates": pline + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 30,144,255, + 1 + ], + "width": 3, + "lineDash": null + } + } + } + }) + console.log(JsonFeature) + } else if (json_public.routes[0].sections[i].type == "transit"){ + console.log("transit") + var section = json_public.routes[0].sections[i] + var agencyid = section.id; + var agencyname = section.name; + var arrivaltime = section.arrival.time; + var arrivalplace = section.arrival.place; + var departuretime = section.departure.time; + var departureplace = section.departure.place; + var transportInfo = section.transport; + + var pol = polycalc.decode(section.polyline) + var pollength = pol.polyline.length; + var timedifference = timeDifference1(departuretime,arrivaltime); + var pline = []; + + for (var j = 0; j<= pollength -1; j++){ + pline.push([parseFloat(parseFloat(pol.polyline[j][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[j][0]).toFixed(5))]) + } + + JsonFeature.push({ + + "type":"Feature", + "properties": { "id": agencyid,"agencyName":agencyname, "name": "linestring" ,"type": "transit","transportInfo":transportInfo,"arrivalTime": arrivaltime,"arrivalPlace": arrivalplace,"departureTime": departuretime,"departurePlace": departureplace, "daysDifference": timedifference.daysDifference, "hoursDifference": timedifference.hoursDifference, "minutesDifference" : timedifference.minutesDifference, "secondsDifference": timedifference.secondsDifference}, + "geometry":{ + "type":"LineString", + "coordinates": pline + }, + "vcsMeta": { + "style": { + "type": "vector", + "stroke": { + "color": [ + 255,140,0, + 1 + ], + "width": 4, + "lineDash": null + } + } + } + }) + console.log(JsonFeature) + } + + + } + + + + resolve(JsonFeature) + }catch(error){ reject(error)} + + + + }); + + }; + + // ---- Noise Real Time ---- + // - 3Parts - + // - get request from the html page + app.get('/NoiseRealTime', async (req, res) => { + console.log('command angekommen!') + try{ + let APIout = await flow_getApiResponse('https://data.sensor.community/airrohr/v1/sensor/' + req.query.id + '/'); + + console.log(APIout); + + + res.json((APIout)); + + }catch (error) { + console.log(error) + } + }); + + // ---- Historic Noise Data ---- + // ---- Trial Version from PostgreSQL ---- + const pgp = require('pg-promise')({ + // Initialization Options + }); + + const connection = { + + user: 'postgres', // name of the user account + database: 'NoiseSensorData', // name of the database + password: 'ahpk94meteor', // env var: PGPASSWORD + host: '193.196.38.112', // Server hosting the postgres database (host: '35.187.21.114') + port: 5432, // env var: PGPORT + max: 10, // max number of clients in the pool + idleTimeoutMillis: 30000 // how long a client is allowed to remain idle before being closed + + } + + const db = pgp(connection); + console.log('successful connected to DB: NoiseSensorData!') + + app.post('/getNoiseHist', function (req, res) { + + try { + + const data = req.body; + // = "select sensor_id from public.noisesensor;" + + let query_string = " SELECT * FROM noisesensorstest ORDER BY timestamp ASC;" + // query_string += "from noisesensor;"; + + console.log(query_string) + // request the data rsr + db.result(query_string) + .then(result => { + res.json(result.rows); + }) + .catch(error => { + console.log('ERROR:', error); + }); + console.log('.../getNoiseHist successful!'); + } + + catch (err) { + console.log('.../getNoiseHist failed!\n' + err); + } + }); + + app.post('/getSTANoiseHist', async (req, res) => { + + console.log('command angekommen ////// STANoise/////!') + const pointData = req.query; + // console.log(pointData); + try { + + let origURL = 'http://193.196.138.56/frost-noise-api/v1.1/Datastreams(1)/Observations?$orderby=phenomenonTime%20asc' + let STALAeq = await STA_getApiResponse(origURL); + let STALAeqColl = []; + + // let origURLmin = 'http://193.196.138.56/frost-noise-api/v1.1/Datastreams(2)/Observations?$orderby=phenomenonTime%20asc' + // let STALAeqmin = await STA_getApiResponse(origURLmin); + + // let origURLmax = 'http://193.196.138.56/frost-noise-api/v1.1/Datastreams(3)/Observations?$orderby=phenomenonTime%20asc' + // let STALAeqmax = await STA_getApiResponse(origURLmax); + //eq + for (var i = 0; i<= STALAeq.value.length -1; i++){ + var newNum = "noise"; + var newVal = "LAeq"; + + STALAeq.value[i][newNum] = newVal; + STALAeqColl.push(STALAeq.value[i]); + + } + do { + STALAeq = await STA_getApiResponse(STALAeq["@iot.nextLink"]); + for (var j = 0; j<= STALAeq.value.length -1; j++){ + STALAeqColl.push(STALAeq.value[j]); + + } + } while ("@iot.nextLink" in STALAeq); + + + console.log(STALAeqColl.length) + res.json(STALAeqColl); + } + catch (err) { + console.log('.../loadSetP failed!\n' + err); + } + }); + + + function STA_getApiResponse(url) { + return new Promise(function (resolve, reject) { + // console.log(url) + axios.get(url) + .then(function (response) { + // handle success + // console.log(response.data); + resolve(response.data); + }) + .catch(function (error) { + // handle error + // console.log(error); + reject(error); + }); + }); + } + + const connectionFav = { + + user: 'postgres', // name of the user account + database: 'FavoritPlaces', // name of the database + password: 'ahpk94meteor', // env var: PGPASSWORD + host: '193.196.38.112', // Server hosting the postgres database (host: '35.187.21.114') + port: 5432, // env var: PGPORT + max: 10, // max number of clients in the pool + idleTimeoutMillis: 30000 // how long a client is allowed to remain idle before being closed + + } + + const dbFav = pgp(connectionFav); + console.log('successful connected to DB: FavoritPlaces!') + + // ---- FavPlaces ---- +// - 3Parts - +// - get request from the html page +app.get('/FavPlacesDB', async (req, res) => { + console.log('FavPlacesDB angekommen!') + try{ + let APIout = await getDBResult(''); + console.log(APIout) + let json_con = await buildFavJson(APIout,"CONSTRUCTION"); + // console.log(json_con) + var json_cons = { + "name":"FavouritePlaces" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": json_con + + }; + res.json(json_cons) + }catch (error) { + console.log(error) + } + + }); + // - request from the here API + function getDBResult(url) { + return new Promise(function (resolve, reject) { + + let query_string = " SELECT id, lat, lon, contenttext, approved, timestamp FROM public.places WHERE approved = true;" + // query_string += "from noisesensor;"; + + console.log(query_string) + // request the data rsr + dbFav.result(query_string) + .then(result => { + // res.json(result.rows); + console.log((result.rows)); + resolve((result.rows)); + }) + .catch(function (error) { + // handle error + // console.log(error); + reject(error); + }); + }); + } + // - build geojson from response + function buildFavJson(inputData,type){ + return new Promise(function (resolve, reject) { + try { + var JsonFeature = []; + var json_acc = inputData + var length = json_acc.length; + // console.log(length) + for (var i = 0; i <= length - 1; i++){ + + //console.log(json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i]) + var lat = json_acc[i].lat; + var lon = json_acc[i].lon; + // var type = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; + var id = json_acc[i].id; + var contenttext = json_acc[i].contenttext; + var timestamp = json_acc[i].timestamp; + + + // console.log(i) + + + + JsonFeature.push({ + "type":"Feature", + "properties": { "id": id, "name": "datapoint" , "contenttext": contenttext, "timestamp": timestamp, "date": timestamp.getUTCDate(), "month": timestamp.getMonth(), "year": timestamp.getUTCFullYear(), "lat":lat, "lon":lon}, + "geometry":{ + "type":"MultiPoint", + "coordinates": [ [parseFloat(lon), parseFloat(lat)]] + } + }) + + + + + + } + resolve(JsonFeature) + }catch(error){ reject(error)} + + + + }); + + }; + + app.post('/saveFavPoint', function (req, res) { + + try { + + const data = req.body; + // = "select sensor_id from public.noisesensor;" + + let query_string = " INSERT INTO public.places( lat, lon, contenttext, approved, timestamp) VALUES (" + data.lat + ", " + data.lon + ", '" + data.contentext + "', 'false' , NOW()); " + // query_string += "from noisesensor;"; + + console.log(query_string) + // request the data rsr + dbFav.result(query_string) + .then(result => { + res.json(result.rows); + }) + .catch(error => { + console.log('ERROR:', error); + }); + console.log('.../saveFavPoint successful!'); + } + + catch (err) { + console.log('.../saveFavPoint failed!\n' + err); + } + }); \ No newline at end of file diff --git a/serveralternative.js b/serveralternative.js deleted file mode 100644 index 13a4b4403ca15585797db286100e14d11b1c9321..0000000000000000000000000000000000000000 --- a/serveralternative.js +++ /dev/null @@ -1,1051 +0,0 @@ -const http = require('http'); -const fs = require('fs'); -const express = require('express') -const app = express(); -const bodyParser = require('body-parser') -const soap = require('soap'); -app.use(bodyParser.urlencoded({ extended: false })) -app.use(bodyParser.json()) -const request_ajax = require('ajax-request'); -const request = require('request'); -// const got = require('got'); -const axios = require('axios'); -const polycalc = require('./codepoly.js'); -const { isEmptyObject } = require('jquery'); -//console.log(polycalc) -app.use(express.static('vcm')); -app.listen(process.env.PORT || 8083); -console.log("on 8083"); - - -var minutesDifference -var hoursDifference -var secondsDifference -var daysDifference - -function timeDifference(date11,date22) { - var date2 = new Date(date11); - var date1 = new Date(date22); - var difference = date1 - date2 - - daysDifference = Math.floor(difference/1000/60/60/24); - difference -= daysDifference*1000*60*60*24 - - hoursDifference = Math.floor(difference/1000/60/60); - difference -= hoursDifference*1000*60*60 - - minutesDifference = Math.floor(difference/1000/60); - difference -= minutesDifference*1000*60 - - secondsDifference = Math.floor(difference/1000); - - console.log('difference = ' + - daysDifference + ' day/s ' + - hoursDifference + ' hour/s ' + - minutesDifference + ' minute/s ' + - secondsDifference + ' second/s '); -} - - -function timeDifference1(date11,date22) { - var date2 = new Date(date11); - var date1 = new Date(date22); - var difference = date1 - date2 - - var minutesDifference1 - var hoursDifference1 - var secondsDifference1 - var daysDifference1 - - daysDifference1 = Math.floor(difference/1000/60/60/24); - difference -= daysDifference1*1000*60*60*24 - - hoursDifference1 = Math.floor(difference/1000/60/60); - difference -= hoursDifference1*1000*60*60 - - minutesDifference1 = Math.floor(difference/1000/60); - difference -= minutesDifference1*1000*60 - - secondsDifference1 = Math.floor(difference/1000); - - console.log('difference = ' + - daysDifference1 + ' day/s ' + - hoursDifference1 + ' hour/s ' + - minutesDifference1 + ' minute/s ' + - secondsDifference1 + ' second/s '); - var result = {"daysDifference":daysDifference1, - "hoursDifference":hoursDifference1, - "minutesDifference":minutesDifference1, - "secondsDifference":secondsDifference1} - return(result); -} - - - -//=========================================================================================================================== -//Final Version -//=========================================================================================================================== -// ---- Traffic Flow ---- -// - 3Parts - 48.7823,9.1807,919 -// - get request from the html page -app.get('/TrafficFlow', async (req, res) => { - console.log('command angekommen!') -try{ - let APIout = await flow_getApiResponse('https://traffic.ls.hereapi.com/traffic/6.2/flow.json?prox=48.7544,9.1768,8745&responseattributes=sh%2Cfc&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y'); - console.log(APIout) - let json_tf = await flow_buildTFLOWJson(APIout); - console.log(json_tf) - var json_tfs = { - "name":"flow" + "01", - "type":"FeatureCollection", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": json_tf - - }; - - res.json(json_tfs) - -}catch (error) { - console.log(error) -} -}); -// - request from the here API -function flow_getApiResponse(url) { - return new Promise(function (resolve, reject) { - axios.get(url) - .then(function (response) { - // handle success - console.log(response.data); - resolve(response.data); - }) - .catch(function (error) { - // handle error - console.log(error); - reject(error); - }); - }); -} -// - build geojson from response -function flow_buildTFLOWJson(inputData){ - return new Promise(function (resolve, reject) { - try { - var json_tflow = inputData - var JsonFeature = []; - console.log(json_tflow.RWS[0].RW.length + "---- in flow func") - var length = json_tflow.RWS[0].RW.length; - var fik - // console.log(length); - - for (var i = 0; i<= length -1; i++){ - var FIlength = json_tflow.RWS[0].RW[i].FIS[0].FI.length - console.log("i - " + i) - var mid = json_tflow.RWS[0].RW[i].mid; - var LI = json_tflow.RWS[0].RW[i].LI; - var DE = json_tflow.RWS[0].RW[i].DE; - var PBT = json_tflow.RWS[0].RW[i].PBT; - for (var m = 0; m <= FIlength -1; m++){ - console.log("k - " + m) - var shplength = json_tflow.RWS[0].RW[i].FIS[0].FI[m].SHP.length; - console.log("FI - " + json_tflow.RWS[0].RW[i].FIS[0].FI[m]) - fik = json_tflow.RWS[0].RW[i].FIS[0].FI[m] - // var type = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; - - var TMC = json_tflow.RWS[0].RW[i].FIS[0].FI[m].TMC; - var CF = json_tflow.RWS[0].RW[i].FIS[0].FI[m].CF[0]; - console.log("Shp length - " + json_tflow.RWS[0].RW[i].FIS[0].FI[m].SHP.length) - console.log("Shp length - " + shplength) - var locationshp = []; - for (var j = 0; j <= shplength - 1; j++ ){ - console.log("j - " +j) - console.log("RWS - " + json_tflow.RWS[0]) - console.log("RW - " + json_tflow.RWS[0].RW[i]) - console.log("FIS - " + json_tflow.RWS[0].RW[i].FIS[0]) - console.log("FIk - " + fik) - console.log("FI - " + json_tflow.RWS[0].RW[i].FIS[0].FI[m]) - - console.log("shape j - " + fik.SHP[j]) - var value = fik.SHP[j].value[0]; - // console.log(value[0]) - - - var splitvalue = []; - splitvalue = value.split(" "); - // console.log(splitvalue.length) - var coord = []; - for (var k = 0; k <= splitvalue.length -2; k++){ - var latlon = []; - latlon = splitvalue[k].split(","); - var lat = latlon[0]; - var lon = latlon[1]; - coord.push([parseFloat(lon),parseFloat(lat)]) - } - // var FC = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LONGITUDE; - locationshp.push(coord) - // console.log(value) - } - if (CF.JF){ - // console.log("CF.JF -- " + CF.JF) - } - - - if ((CF.JF >= 3) ){ - - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, - "geometry":{ - "type":"MultiLineString", - "coordinates": locationshp - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 153, - 0, - 0, - 1 - ], - "width": 2, - "lineDash": null - } - } - } - }) - } else if ((CF.JF <3 && CF.JF >= 2) ){ - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, - "geometry":{ - "type":"MultiLineString", - "coordinates": locationshp - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 255, - 153, - 51, - 1 - ], - "width": 2, - "lineDash": null - } - } - } - }) - } else if ((CF.JF <2 && CF.JF >= 1)){ - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, - "geometry":{ - "type":"MultiLineString", - "coordinates": locationshp - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 230, - 230, - 0, - 1 - ], - "width": 2, - "lineDash": null - } - } - } - }) - } else if ((CF.JF < 1)){ - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, - "geometry":{ - "type":"MultiLineString", - "coordinates": locationshp - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 0, - 153, - 0, - 1 - ], - "width": 2, - "lineDash": null - } - } - } - }) - } - };}; - resolve(JsonFeature) - }catch(error){ reject(error)} - - - - }); - -}; - - -// ---- Accidents ---- -// - 3Parts - -// - get request from the html page -app.get('/CONSTRUCTION', async (req, res) => { - console.log('Construction angekommen!') -try{ - let APIout = await CON_getApiResponse('https://traffic.ls.hereapi.com/traffic/6.3/incidents.json?apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y&bbox=48.790,9.139;48.771,9.239'); - - let json_con = await CON_buildTFLOWJson(APIout,"CONSTRUCTION"); - // console.log(json_con) - var json_cons = { - "name":"incident" + "01", - "type":"FeatureCollection", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": json_con - - }; - res.json(json_cons) -}catch (error) { - console.log(error) -} - -}); -app.get('/ROAD_CLOSURE', async (req, res) => { - console.log('Construction angekommen!') -try{ - let APIout = await CON_getApiResponse('https://traffic.ls.hereapi.com/traffic/6.3/incidents.json?apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y&bbox=48.790,9.139;48.771,9.239'); - - let json_con = await CON_buildTFLOWJson(APIout,"ROAD_CLOSURE"); - // console.log(json_con) - var json_cons = { - "name":"incident" + "01", - "type":"FeatureCollection", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": json_con - - }; - res.json(json_cons) -}catch (error) { - console.log(error) -} - -}); -// - request from the here API -function CON_getApiResponse(url) { - return new Promise(function (resolve, reject) { - console.log(url) - axios.get(url) - .then(function (response) { - // handle success - // console.log(response.data); - resolve(response.data); - }) - .catch(function (error) { - // handle error - // console.log(error); - reject(error); - }); - }); -} -// - build geojson from response -function CON_buildTFLOWJson(inputData,type){ - return new Promise(function (resolve, reject) { - try { - var JsonFeature = []; - var json_acc = inputData - var length = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM.length; - // console.log(length) - for (var i = 0; i <= length - 1; i++){ - - //console.log(json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i]) - var lat = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LATITUDE; - var lon = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LONGITUDE; - // var type = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; - var id = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_ID; - var origid = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ORIGINAL_TRAFFIC_ITEM_ID; - var TRAFFIC_ITEM_DESCRIPTION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_DESCRIPTION; - var COMMENTS = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].COMMENTS; - var CRITICALITY = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].CRITICALITY; - var VERIFIED = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].VERIFIED; - var TRAFFIC_ITEM_TYPE_DESC = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; - console.log(TRAFFIC_ITEM_TYPE_DESC) - var TRAFFIC_ITEM_STATUS_SHORT_DESC = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_STATUS_SHORT_DESC; - var TRAFFIC_ITEM_DETAIL = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_DETAIL; - var START_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].START_TIME; - var LOCATION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION; - var ENTRY_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ENTRY_TIME; - var END_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].END_TIME; - var ABBREVIATION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ABBREVIATION; - - if (type == 'CONSTRUCTION'){ - - // console.log(i) - - - if (TRAFFIC_ITEM_TYPE_DESC == "CONSTRUCTION"){ - JsonFeature.push({ - "type":"Feature", - "properties": { "id": id, "name": "datapoint" , "original_traffic_id": origid, "TRAFFIC_ITEM_DESCRIPTION": TRAFFIC_ITEM_DESCRIPTION, "COMMENTS":COMMENTS, "CRITICALITY":CRITICALITY, - "VERIFIED":VERIFIED,"TRAFFIC_ITEM_TYPE_DESC":TRAFFIC_ITEM_TYPE_DESC, "TRAFFIC_ITEM_STATUS_SHORT_DESC":TRAFFIC_ITEM_STATUS_SHORT_DESC, "TRAFFIC_ITEM_DETAIL":TRAFFIC_ITEM_DETAIL, - "START_TIME":START_TIME, "LOCATION":LOCATION, "ENTRY_TIME":ENTRY_TIME, "END_TIME":END_TIME, "ABBREVIATION":ABBREVIATION}, - "geometry":{ - "type":"MultiPoint", - "coordinates": [ [lon, lat]] - } - }) - } - - - } else if (type == "ROAD_CLOSURE"){ - - if (TRAFFIC_ITEM_TYPE_DESC == "ROAD_CLOSURE"){ - JsonFeature.push({ - "type":"Feature", - "properties": { "id": id, "name": "datapoint" , "original_traffic_id": origid, "TRAFFIC_ITEM_DESCRIPTION": TRAFFIC_ITEM_DESCRIPTION, "COMMENTS":COMMENTS, "CRITICALITY":CRITICALITY, - "VERIFIED":VERIFIED,"TRAFFIC_ITEM_TYPE_DESC":TRAFFIC_ITEM_TYPE_DESC, "TRAFFIC_ITEM_STATUS_SHORT_DESC":TRAFFIC_ITEM_STATUS_SHORT_DESC, "TRAFFIC_ITEM_DETAIL":TRAFFIC_ITEM_DETAIL, - "START_TIME":START_TIME, "LOCATION":LOCATION, "ENTRY_TIME":ENTRY_TIME, "END_TIME":END_TIME, "ABBREVIATION":ABBREVIATION}, - "geometry":{ - "type":"MultiPoint", - "coordinates": [ [lon, lat]] - } - }) - } - } - - } - resolve(JsonFeature) - }catch(error){ reject(error)} - - - - }); - -}; - - -// ---- Navpoint ---- -// - receive coordinates and return a geojson -app.get('/addPoint', async (req, res) => { - try { - - var data = req.query; - console.log(data) - var Punktadd = { - "type":"FeatureCollection", - "name":"data_point", - "crs":{ - "type":"name", - "properties":{ - "name":"urn:ogc:def:crs:OGC:1.3:CRS84" - } - }, - "features":[ - { - "type":"Feature", - "properties":{ - "id":null, - "name":"datapoint", - "loc": data.sloc - }, - "geometry":{ - "type":"Point", - "coordinates":[ - parseFloat(parseFloat(data.slon).toFixed(7)), - parseFloat(parseFloat(data.slat).toFixed(7)) - ] - } - } - ] - } - res.json(Punktadd); - - } catch (error) { - console.log(error) - } - -}); - - -// http://localhost:8083/Routecalc2?slat=48.68997020356071&slon=9.202611390575258&sloc=Start&elat=48.726559406813294&elon=9.113775973868089&eloc=End -// ---- Route Berechnen Test ---- -app.get('/Routecalc2', async (req, res) => { - console.log('command angekommen ////// Route/////!') - const pointData = req.query; - console.log(pointData); - try { - let APIout = await CON_getApiResponse('https://router.hereapi.com/v8/routes?transportMode=car&origin='+ pointData.slat + ',' + pointData.slon + '&destination=' + pointData.elat + ',' + pointData.elon + '&return=polyline&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y'); - - console.log(APIout) - let json_route = await Route_buildJson(APIout); - console.log(json_route) - var json_routes = { - "name":"navcar" + "01", - "type":"FeatureCollection", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": json_route - }; - - console.log(json_routes); - console.log('.../route calc successful!'); - res.json(json_routes); - } - catch (err) { - console.log('.../loadSetP failed!\n' + err); - } - -}); -// - build geojson for Car Routing -function Route_buildJson(inputData){ - return new Promise(function (resolve, reject) { - try { - var JsonFeature = []; - var json_route = inputData - var pol = polycalc.decode(json_route.routes[0].sections[0].polyline) - var length = pol.polyline.length; - - // console.log(length); - var id = json_route.routes[0].id; - var mid = json_route.routes[0].sections[0].id; - var transport = json_route.routes[0].sections[0].transport.mode; - var departureTime = json_route.routes[0].sections[0].departure.time; - var departureOriglat = json_route.routes[0].sections[0].departure.place.originalLocation.lat; - // console.log(departureOriglat) - var departureOriglon = json_route.routes[0].sections[0].departure.place.originalLocation.lng; - // console.log(departureOriglon) - var departurelat = json_route.routes[0].sections[0].departure.place.location.lat; - var departurelon = json_route.routes[0].sections[0].departure.place.location.lng; - var arrivalTime = json_route.routes[0].sections[0].arrival.time; - var arrivalOriglat = json_route.routes[0].sections[0].arrival.place.originalLocation.lat; - var arrivalOriglon = json_route.routes[0].sections[0].arrival.place.originalLocation.lng; - var arrivallat = json_route.routes[0].sections[0].arrival.place.location.lat; - var arrivallon = json_route.routes[0].sections[0].arrival.place.location.lng; - - var departure = []; - departure.push([parseFloat(parseFloat(departureOriglon).toFixed(5)),parseFloat(parseFloat(departureOriglat).toFixed(5))]); - departure.push([parseFloat(parseFloat(departurelon).toFixed(5)),parseFloat(parseFloat(departurelat).toFixed(5))]) - - timeDifference(departureTime,arrivalTime); - - - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": id, "name": "linestring" ,"transport": transport,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, - "geometry":{ - "type":"LineString", - "coordinates": departure - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 30,144,255, - 1 - ], - "width": 3, - "lineDash": null - } - } - } - }) - - var arrival = []; - arrival.push([parseFloat(parseFloat(arrivalOriglon).toFixed(5)),parseFloat(parseFloat(arrivalOriglat).toFixed(5))]); - arrival.push([parseFloat(parseFloat(arrivallon).toFixed(5)),parseFloat(parseFloat(arrivallat).toFixed(5))]) - // console.log(arrival) - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": id, "name": "linestring" ,"transport": transport,"arrivalTime": arrivalTime,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, - "geometry":{ - "type":"LineString", - "coordinates": arrival - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 30,144,255, - 1 - ], - "width": 3, - "lineDash": null - } - } - } - }) - - - var pline = []; - var length = pol.polyline.length; - - for (var i = 0; i<= length -1; i++){ - pline.push([parseFloat(parseFloat(pol.polyline[i][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[i][0]).toFixed(5))]) - } - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": id, "name": "linestring" ,"transport": transport,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, - "geometry":{ - "type":"LineString", - "coordinates": pline - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 199,21,133, - 1 - ], - "width": 4, - "lineDash": null - } - } - } - }) - - // console.log(JsonFeature) - - - - - resolve(JsonFeature) - }catch(error){ reject(error)} - - - - }); - -}; -// ---- Route Offis Berechnen Test ---- -app.get('/navPublicT2', async (req, res) => { - console.log('command angekommen ////// Route/////!') - const pointData = req.query; - console.log(pointData); - try { - let APIout = await CON_getApiResponse('https://transit.router.hereapi.com/v8/routes?origin='+ parseFloat(parseFloat(pointData.slat).toFixed(5)) + ',' + parseFloat(parseFloat(pointData.slon).toFixed(5)) + '&destination=' + parseFloat(parseFloat(pointData.elat).toFixed(5)) + ',' + parseFloat(parseFloat(pointData.elon).toFixed(5)) + '&return=polyline&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y'); - - console.log(APIout) - let json_pub = await Route_PublicbuildJson(APIout); - console.log(json_pub) - // navPublicjson = { - // "name":"navPublic" + "01", - // "type":"FeatureCollection", - // "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - // "features": buildNavPublic() - - // }; - var json_public = { - "name":"navPublic" + "01", - "type":"FeatureCollection", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": json_pub - }; - - console.log(json_public); - console.log('.../route calc successful!'); - res.json(json_public); - } - catch (err) { - console.log('.../loadSetP failed!\n' + err); - } - -}); - -// - build geojson for Public Routing -function Route_PublicbuildJson(inputData){ - return new Promise(function (resolve, reject) { - try { - var JsonFeature = []; - // var pol = polycalc.decode(navcar.body.routes[0].sections[0].polyline) - // var length = pol.polyline.length; - - // console.log(length); - var json_public = inputData - var id = json_public.routes[0].id; - - var length = json_public.routes[0].sections.length; - console.log("length of Sections: " + length) - for (var i = 0; i<= length -1; i++){ - console.log(i) - if (json_public.routes[0].sections[i].type == "pedestrian"){ - console.log("pedestrian") - var section = json_public.routes[0].sections[i] - var agencyid = section.id; - var agencyname = section.name; - var arrivaltime = section.arrival.time; - var arrivalplace = section.arrival.place; - var departuretime = section.departure.time; - var departureplace = section.departure.place; - var transportInfo = section.transport; - - var pol = polycalc.decode(section.polyline) - var pollength = pol.polyline.length; - var timedifference = timeDifference1(departuretime,arrivaltime); - var pline = []; - - for (var j = 0; j<= pollength -1; j++){ - pline.push([parseFloat(parseFloat(pol.polyline[j][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[j][0]).toFixed(5))]) - } - - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": agencyid,"agencyName":agencyname, "name": "linestring" ,"type": "pedestrian","transportInfo":transportInfo,"arrivalTime": arrivaltime,"arrivalPlace": arrivalplace,"departureTime": departuretime,"departurePlace": departureplace, "daysDifference": timedifference.daysDifference, "hoursDifference": timedifference.hoursDifference, "minutesDifference" : timedifference.minutesDifference, "secondsDifference": timedifference.secondsDifference}, - "geometry":{ - "type":"LineString", - "coordinates": pline - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 30,144,255, - 1 - ], - "width": 3, - "lineDash": null - } - } - } - }) - console.log(JsonFeature) - } else if (json_public.routes[0].sections[i].type == "transit"){ - console.log("transit") - var section = json_public.routes[0].sections[i] - var agencyid = section.id; - var agencyname = section.name; - var arrivaltime = section.arrival.time; - var arrivalplace = section.arrival.place; - var departuretime = section.departure.time; - var departureplace = section.departure.place; - var transportInfo = section.transport; - - var pol = polycalc.decode(section.polyline) - var pollength = pol.polyline.length; - var timedifference = timeDifference1(departuretime,arrivaltime); - var pline = []; - - for (var j = 0; j<= pollength -1; j++){ - pline.push([parseFloat(parseFloat(pol.polyline[j][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[j][0]).toFixed(5))]) - } - - JsonFeature.push({ - - "type":"Feature", - "properties": { "id": agencyid,"agencyName":agencyname, "name": "linestring" ,"type": "transit","transportInfo":transportInfo,"arrivalTime": arrivaltime,"arrivalPlace": arrivalplace,"departureTime": departuretime,"departurePlace": departureplace, "daysDifference": timedifference.daysDifference, "hoursDifference": timedifference.hoursDifference, "minutesDifference" : timedifference.minutesDifference, "secondsDifference": timedifference.secondsDifference}, - "geometry":{ - "type":"LineString", - "coordinates": pline - }, - "vcsMeta": { - "style": { - "type": "vector", - "stroke": { - "color": [ - 255,140,0, - 1 - ], - "width": 4, - "lineDash": null - } - } - } - }) - console.log(JsonFeature) - } - - - } - - - - resolve(JsonFeature) - }catch(error){ reject(error)} - - - - }); - -}; - -// ---- Noise Real Time ---- -// - 3Parts - -// - get request from the html page -app.get('/NoiseRealTime', async (req, res) => { - console.log('command angekommen!') -try{ - console.log('https://data.sensor.community/airrohr/v1/sensor/' + req.query.id + '/') - let APIout = await flow_getApiResponse('https://data.sensor.community/airrohr/v1/sensor/' + req.query.id + '/'); - - console.log(APIout); - - - res.json((APIout)); - -}catch (error) { - console.log(error) -} -}); - -// ---- Historic Noise Data ---- -// ---- Trial Version from PostgreSQL ---- -const pgp = require('pg-promise')({ - // Initialization Options -}); - -const connection = { - - user: 'postgres', // name of the user account - database: 'NoiseSensorData', // name of the database -- NoiseSensorData - password: 'postgres', // env var: PGPASSWORD -- ahpk94meteor - host: 'localhost', // Server hosting the postgres database (host: '35.187.21.114') -- 193.196.38.112 - port: 5432, // env var: PGPORT - max: 10, // max number of clients in the pool - idleTimeoutMillis: 30000 // how long a client is allowed to remain idle before being closed - -} - -const db = pgp(connection); -console.log('successful connected to DB: NoiseSensorData!') - -app.post('/getNoiseHist', function (req, res) { - - try { - - const data = req.body; - // = "select sensor_id from public.noisesensor;" - - let query_string = " SELECT * FROM noisesensorstest ORDER BY timestamp ASC;" - // query_string += "from noisesensor;"; - - console.log(query_string) - // request the data rsr - db.result(query_string) - .then(result => { - res.json(result.rows); - }) - .catch(error => { - console.log('ERROR:', error); - }); - console.log('.../getNoiseHist successful!'); - } - - catch (err) { - console.log('.../getNoiseHist failed!\n' + err); - } -}); - -app.post('/getSTANoiseHist', async (req, res) => { - - console.log('command angekommen ////// STANoise/////!') - const pointData = req.query; - // console.log(pointData); - try { - - let origURL = 'http://193.196.138.56/frost-noise-api/v1.1/Datastreams(1)/Observations?$orderby=phenomenonTime%20asc' - let STALAeq = await STA_getApiResponse(origURL); - let STALAeqColl = []; - - // let origURLmin = 'http://193.196.138.56/frost-noise-api/v1.1/Datastreams(2)/Observations?$orderby=phenomenonTime%20asc' - // let STALAeqmin = await STA_getApiResponse(origURLmin); - - // let origURLmax = 'http://193.196.138.56/frost-noise-api/v1.1/Datastreams(3)/Observations?$orderby=phenomenonTime%20asc' - // let STALAeqmax = await STA_getApiResponse(origURLmax); - //eq - for (var i = 0; i<= STALAeq.value.length -1; i++){ - var newNum = "noise"; - var newVal = "LAeq"; - - STALAeq.value[i][newNum] = newVal; - STALAeqColl.push(STALAeq.value[i]); - - } - do { - STALAeq = await STA_getApiResponse(STALAeq["@iot.nextLink"]); - for (var j = 0; j<= STALAeq.value.length -1; j++){ - STALAeqColl.push(STALAeq.value[j]); - - } - } while ("@iot.nextLink" in STALAeq); - - - console.log(STALAeqColl.length) - res.json(STALAeqColl); - } - catch (err) { - console.log('.../loadSetP failed!\n' + err); - } -}); - - -function STA_getApiResponse(url) { - return new Promise(function (resolve, reject) { - // console.log(url) - axios.get(url) - .then(function (response) { - // handle success - // console.log(response.data); - resolve(response.data); - }) - .catch(function (error) { - // handle error - // console.log(error); - reject(error); - }); - }); -} - - -const connectionFav = { - - user: 'postgres', // name of the user account - database: 'FavoritPlaces', // name of the database - password: 'ahpk94meteor', // env var: PGPASSWORD - host: '193.196.38.112', // Server hosting the postgres database (host: '35.187.21.114') - port: 5432, // env var: PGPORT - max: 10, // max number of clients in the pool - idleTimeoutMillis: 30000 // how long a client is allowed to remain idle before being closed - - } - - const dbFav = pgp(connectionFav); - console.log('successful connected to DB: FavoritPlaces!') - - - - // ---- FavPlaces ---- -// - 3Parts - -// - get request from the html page -app.get('/FavPlacesDB', async (req, res) => { - console.log('FavPlacesDB angekommen!') -try{ - let APIout = await getDBResult(''); - console.log(APIout) - let json_con = await buildFavJson(APIout,"CONSTRUCTION"); - // console.log(json_con) - var json_cons = { - "name":"FavouritePlaces" + "01", - "type":"FeatureCollection", - "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, - "features": json_con - - }; - res.json(json_cons) -}catch (error) { - console.log(error) -} - -}); -// - request from the here API -function getDBResult(url) { - return new Promise(function (resolve, reject) { - - let query_string = " SELECT id, lat, lon, contenttext, approved, timestamp FROM public.places WHERE approved = true;" - // query_string += "from noisesensor;"; - - console.log(query_string) - // request the data rsr - dbFav.result(query_string) - .then(result => { - // res.json(result.rows); - console.log((result.rows)); - resolve((result.rows)); - }) - .catch(function (error) { - // handle error - // console.log(error); - reject(error); - }); - }); -} -// - build geojson from response -function buildFavJson(inputData,type){ - return new Promise(function (resolve, reject) { - try { - var JsonFeature = []; - var json_acc = inputData - var length = json_acc.length; - // console.log(length) - for (var i = 0; i <= length - 1; i++){ - - //console.log(json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i]) - var lat = json_acc[i].lat; - var lon = json_acc[i].lon; - // var type = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; - var id = json_acc[i].id; - var contenttext = json_acc[i].contenttext; - var timestamp = json_acc[i].timestamp; - - - // console.log(i) - - - - JsonFeature.push({ - "type":"Feature", - "properties": { "id": id, "name": "datapoint" , "contenttext": contenttext, "timestamp": timestamp, "date": timestamp.getUTCDate(), "month": timestamp.getMonth(), "year": timestamp.getUTCFullYear(), "lat":lat, "lon":lon}, - "geometry":{ - "type":"MultiPoint", - "coordinates": [ [parseFloat(lon), parseFloat(lat)]] - } - }) - - - - - - } - resolve(JsonFeature) - }catch(error){ reject(error)} - - - - }); - -}; - -app.post('/saveFavPoint', function (req, res) { - - try { - - const data = req.body; - // = "select sensor_id from public.noisesensor;" - - let query_string = " INSERT INTO public.places( lat, lon, contenttext, approved, timestamp) VALUES (" + data.lat + ", " + data.lon + ", '" + data.contentext + "', 'false' , NOW()); " - // query_string += "from noisesensor;"; - - console.log(query_string) - // request the data rsr - dbFav.result(query_string) - .then(result => { - res.json(result.rows); - }) - .catch(error => { - console.log('ERROR:', error); - }); - console.log('.../saveFavPoint successful!'); - } - - catch (err) { - console.log('.../saveFavPoint failed!\n' + err); - } -}); \ No newline at end of file