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; // console.log(length); for (var i = 0; i<= length -1; i++){ var shplength = json_tflow.RWS[0].RW[i].FIS[0].FI[0].SHP.length; // var type = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; 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; var TMC = json_tflow.RWS[0].RW[i].FIS[0].FI[0].TMC; var CF = json_tflow.RWS[0].RW[i].FIS[0].FI[0].CF[0]; var locationshp = []; for (var j = 0; j <= shplength - 1; j++ ){ var value = json_tflow.RWS[0].RW[i].FIS[0].FI[0].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/49368/'); 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 noisesensors 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); } });