Commit c511de8e authored by Cholgrrr's avatar Cholgrrr
Browse files

Merge branch 'New_Structure' of https://gitlab.com/Cholgrrr/m4labplatform into New_Structure

test commit
parents 75a50d2b d2264460
const fs = require('fs');
const http = require('http'); const http = require('http');
const https = require('https'); const fs = require('fs');
const express = require('express'); 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(); const app = express();
const bodyParser = require('body-parser')
const soap = require('soap');
app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json()) 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 polycalc = require('./codepoly.js');
// Certificate const { isEmptyObject } = require('jquery');
const privateKey = fs.readFileSync('/etc/letsencrypt/live/umfrage.smartvillages.online/privkey.pem', 'utf8'); //console.log(polycalc)
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')); 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 minutesDifference
var hoursDifference var hoursDifference
var secondsDifference var secondsDifference
var daysDifference var daysDifference
function timeDifference(date11,date22) { function timeDifference(date11,date22) {
var date2 = new Date(date11); var date2 = new Date(date11);
var date1 = new Date(date22); var date1 = new Date(date22);
...@@ -101,836 +81,841 @@ function timeDifference1(date11,date22) { ...@@ -101,836 +81,841 @@ function timeDifference1(date11,date22) {
} }
//=========================================================================================================================== //===========================================================================================================================
//Final Version //Final Version
//=========================================================================================================================== //===========================================================================================================================
// ---- Traffic Flow ---- // ---- Traffic Flow ----
// - 3Parts - // - 3Parts - 48.7823,9.1807,919
// - get request from the html page // - get request from the html page
app.get('/TrafficFlow', async (req, res) => { app.get('/TrafficFlow', async (req, res) => {
console.log('command angekommen!') console.log('command angekommen!')
try{ 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 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); let json_tf = await flow_buildTFLOWJson(APIout);
console.log(json_tf) console.log(json_tf)
var json_tfs = { var json_tfs = {
"name":"flow" + "01", "name":"flow" + "01",
"type":"FeatureCollection", "type":"FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": json_tf "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)}
});
}; };
res.json(json_tfs)
// ---- Accidents ----
// - 3Parts - }catch (error) {
// - get request from the html page console.log(error)
app.get('/CONSTRUCTION', async (req, res) => { }
console.log('Construction angekommen!') });
try{ // - request from the here API
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'); function flow_getApiResponse(url) {
return new Promise(function (resolve, reject) {
let json_con = await CON_buildTFLOWJson(APIout,"CONSTRUCTION"); axios.get(url)
// console.log(json_con) .then(function (response) {
var json_cons = { // handle success
"name":"incident" + "01", console.log(response.data);
"type":"FeatureCollection", resolve(response.data);
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, })
"features": json_con .catch(function (error) {
// handle error
}; console.log(error);
res.json(json_cons) reject(error);
}catch (error) { });
console.log(error)
}
}); });
app.get('/ROAD_CLOSURE', async (req, res) => { }
console.log('Construction angekommen!') // - build geojson from response
try{ function flow_buildTFLOWJson(inputData){
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'); return new Promise(function (resolve, reject) {
try {
let json_con = await CON_buildTFLOWJson(APIout,"ROAD_CLOSURE"); var json_tflow = inputData
// console.log(json_con) var JsonFeature = [];
var json_cons = { console.log(json_tflow.RWS[0].RW.length + "---- in flow func")
"name":"incident" + "01", var length = json_tflow.RWS[0].RW.length;
"type":"FeatureCollection", var fik
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, // console.log(length);
"features": json_con
for (var i = 0; i<= length -1; i++){
}; var FIlength = json_tflow.RWS[0].RW[i].FIS[0].FI.length
res.json(json_cons) console.log("i - " + i)
}catch (error) { var mid = json_tflow.RWS[0].RW[i].mid;
console.log(error) 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) // ---- Accidents ----
.then(function (response) { // - 3Parts -
// handle success // - get request from the html page
// console.log(response.data); app.get('/CONSTRUCTION', async (req, res) => {
resolve(response.data); console.log('Construction angekommen!')
}) try{
.catch(function (error) { 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');
// handle error
// console.log(error); let json_con = await CON_buildTFLOWJson(APIout,"CONSTRUCTION");
reject(error); // console.log(json_con)
}); var json_cons = {
}); "name":"incident" + "01",
} "type":"FeatureCollection",
// - build geojson from response "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
function CON_buildTFLOWJson(inputData,type){ "features": json_con
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)}
});
}; };
res.json(json_cons)
}catch (error) {
// ---- Navpoint ---- console.log(error)
// - receive coordinates and return a geojson }
app.get('/addPoint', async (req, res) => {
try { });
var data = req.query; app.get('/ROAD_CLOSURE', async (req, res) => {
var Punktadd = { console.log('Construction angekommen!')
"type":"FeatureCollection", try{
"name":"data_point", 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');
"crs":{
"type":"name", let json_con = await CON_buildTFLOWJson(APIout,"ROAD_CLOSURE");
"properties":{ // console.log(json_con)
"name":"urn:ogc:def:crs:OGC:1.3:CRS84" var json_cons = {
} "name":"incident" + "01",
}, "type":"FeatureCollection",
"features":[ "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
{ "features": json_con
"type":"Feature",
"properties":{ };
"id":null, res.json(json_cons)
"name":"datapoint", }catch (error) {
"loc": data.sloc console.log(error)
}, }
"geometry":{
"type":"Point", });
"coordinates":[ // - request from the here API
parseFloat(parseFloat(data.slon).toFixed(7)), function CON_getApiResponse(url) {
parseFloat(parseFloat(data.slat).toFixed(7)) return new Promise(function (resolve, reject) {
] console.log(url)
} axios.get(url)
} .then(function (response) {
] // handle success
} // console.log(response.data);
res.json(Punktadd); resolve(response.data);
})
} catch (error) { .catch(function (error) {
console.log(error) // handle error
} // console.log(error);
reject(error);
});
}); });
}
// - build geojson from response
// http://localhost:8083/Routecalc2?slat=48.68997020356071&slon=9.202611390575258&sloc=Start&elat=48.726559406813294&elon=9.113775973868089&eloc=End function CON_buildTFLOWJson(inputData,type){
// ---- Route Berechnen Test ---- return new Promise(function (resolve, reject) {
app.get('/Routecalc2', async (req, res) => { try {
console.log('command angekommen ////// Route/////!') var JsonFeature = [];
const pointData = req.query; var json_acc = inputData
console.log(pointData); var length = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM.length;
try { // console.log(length)
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'); for (var i = 0; i <= length - 1; i++){
console.log(APIout) //console.log(json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i])
let json_route = await Route_buildJson(APIout); var lat = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LATITUDE;
console.log(json_route) var lon = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LONGITUDE;
var json_routes = { // var type = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC;
"name":"navcar" + "01", var id = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_ID;
"type":"FeatureCollection", var origid = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ORIGINAL_TRAFFIC_ITEM_ID;
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, var TRAFFIC_ITEM_DESCRIPTION = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_DESCRIPTION;
"features": json_route 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;
console.log(json_routes); var TRAFFIC_ITEM_TYPE_DESC = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC;
console.log('.../route calc successful!'); console.log(TRAFFIC_ITEM_TYPE_DESC)
res.json(json_routes); 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;
catch (err) { var START_TIME = json_acc.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].START_TIME;
console.log('.../loadSetP failed!\n' + err); 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 = []; // ---- Navpoint ----
var json_route = inputData // - receive coordinates and return a geojson
var pol = polycalc.decode(json_route.routes[0].sections[0].polyline) app.get('/addPoint', async (req, res) => {
var length = pol.polyline.length; try {
// console.log(length); var data = req.query;
var id = json_route.routes[0].id; console.log(data)
var mid = json_route.routes[0].sections[0].id; var Punktadd = {
var transport = json_route.routes[0].sections[0].transport.mode; "type":"FeatureCollection",
var departureTime = json_route.routes[0].sections[0].departure.time; "name":"data_point",
var departureOriglat = json_route.routes[0].sections[0].departure.place.originalLocation.lat; "crs":{
// console.log(departureOriglat) "type":"name",
var departureOriglon = json_route.routes[0].sections[0].departure.place.originalLocation.lng; "properties":{
// console.log(departureOriglon) "name":"urn:ogc:def:crs:OGC:1.3:CRS84"
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; "features":[
var arrivalOriglat = json_route.routes[0].sections[0].arrival.place.originalLocation.lat; {
var arrivalOriglon = json_route.routes[0].sections[0].arrival.place.originalLocation.lng; "type":"Feature",
var arrivallat = json_route.routes[0].sections[0].arrival.place.location.lat; "properties":{
var arrivallon = json_route.routes[0].sections[0].arrival.place.location.lng; "id":null,
"name":"datapoint",
var departure = []; "loc": data.sloc
departure.push([parseFloat(parseFloat(departureOriglon).toFixed(5)),parseFloat(parseFloat(departureOriglat).toFixed(5))]); },
departure.push([parseFloat(parseFloat(departurelon).toFixed(5)),parseFloat(parseFloat(departurelat).toFixed(5))]) "geometry":{
"type":"Point",
timeDifference(departureTime,arrivalTime); "coordinates":[
parseFloat(parseFloat(data.slon).toFixed(7)),
parseFloat(parseFloat(data.slat).toFixed(7))
JsonFeature.push({ ]
}
"type":"Feature", }
"properties": { "id": id, "name": "linestring" ,"transport": transport,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, ]
"geometry":{ }
"type":"LineString", res.json(Punktadd);
"coordinates": departure
}, } catch (error) {
"vcsMeta": { console.log(error)
"style": { }
"type": "vector",
"stroke": { });
"color": [
30,144,255,
1 // http://localhost:8083/Routecalc2?slat=48.68997020356071&slon=9.202611390575258&sloc=Start&elat=48.726559406813294&elon=9.113775973868089&eloc=End
], // ---- Route Berechnen Test ----
"width": 3, app.get('/Routecalc2', async (req, res) => {
"lineDash": null 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');
var arrival = []; console.log(APIout)
arrival.push([parseFloat(parseFloat(arrivalOriglon).toFixed(5)),parseFloat(parseFloat(arrivalOriglat).toFixed(5))]); let json_route = await Route_buildJson(APIout);
arrival.push([parseFloat(parseFloat(arrivallon).toFixed(5)),parseFloat(parseFloat(arrivallat).toFixed(5))]) console.log(json_route)
// console.log(arrival) var json_routes = {
JsonFeature.push({ "name":"navcar" + "01",
"type":"FeatureCollection",
"type":"Feature", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"properties": { "id": id, "name": "linestring" ,"transport": transport,"arrivalTime": arrivalTime,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, "features": json_route
"geometry":{ };
"type":"LineString",
"coordinates": arrival console.log(json_routes);
}, console.log('.../route calc successful!');
"vcsMeta": { res.json(json_routes);
"style": { }
"type": "vector", catch (err) {
"stroke": { console.log('.../loadSetP failed!\n' + err);
"color": [ }
30,144,255,
1 });
], // - build geojson for Car Routing
"width": 3, function Route_buildJson(inputData){
"lineDash": null 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;
var pline = []; // console.log(length);
var length = pol.polyline.length; var id = json_route.routes[0].id;
var mid = json_route.routes[0].sections[0].id;
for (var i = 0; i<= length -1; i++){ var transport = json_route.routes[0].sections[0].transport.mode;
pline.push([parseFloat(parseFloat(pol.polyline[i][1]).toFixed(5)),parseFloat(parseFloat(pol.polyline[i][0]).toFixed(5))]) var departureTime = json_route.routes[0].sections[0].departure.time;
} var departureOriglat = json_route.routes[0].sections[0].departure.place.originalLocation.lat;
JsonFeature.push({ // console.log(departureOriglat)
var departureOriglon = json_route.routes[0].sections[0].departure.place.originalLocation.lng;
"type":"Feature", // console.log(departureOriglon)
"properties": { "id": id, "name": "linestring" ,"transport": transport,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference}, var departurelat = json_route.routes[0].sections[0].departure.place.location.lat;
"geometry":{ var departurelon = json_route.routes[0].sections[0].departure.place.location.lng;
"type":"LineString", var arrivalTime = json_route.routes[0].sections[0].arrival.time;
"coordinates": pline var arrivalOriglat = json_route.routes[0].sections[0].arrival.place.originalLocation.lat;
}, var arrivalOriglon = json_route.routes[0].sections[0].arrival.place.originalLocation.lng;
"vcsMeta": { var arrivallat = json_route.routes[0].sections[0].arrival.place.location.lat;
"style": { var arrivallon = json_route.routes[0].sections[0].arrival.place.location.lng;
"type": "vector",
"stroke": {
"color": [
199,21,133,
1
],
"width": 4,
"lineDash": null
}
}
}
})
// console.log(JsonFeature)
resolve(JsonFeature)
}catch(error){ reject(error)}
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))])
};
// ---- Route Offis Berechnen Test ---- timeDifference(departureTime,arrivalTime);
app.get('/navPublicT2', async (req, res) => {
console.log('command angekommen ////// Route/////!')
const pointData = req.query; JsonFeature.push({
console.log(pointData);
try { "type":"Feature",
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'); "properties": { "id": id, "name": "linestring" ,"transport": transport,"departureTime": departureTime, "daysDifference": daysDifference, "hoursDifference": hoursDifference, "minutesDifference" : minutesDifference, "secondsDifference": secondsDifference},
"geometry":{
console.log(APIout) "type":"LineString",
let json_pub = await Route_PublicbuildJson(APIout); "coordinates": departure
console.log(json_pub) },
// navPublicjson = { "vcsMeta": {
// "name":"navPublic" + "01", "style": {
// "type":"FeatureCollection", "type": "vector",
// "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "stroke": {
// "features": buildNavPublic() "color": [
30,144,255,
// }; 1
var json_public = { ],
"name":"navPublic" + "01", "width": 3,
"type":"FeatureCollection", "lineDash": null
"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!'); var arrival = [];
res.json(json_public); arrival.push([parseFloat(parseFloat(arrivalOriglon).toFixed(5)),parseFloat(parseFloat(arrivalOriglat).toFixed(5))]);
} arrival.push([parseFloat(parseFloat(arrivallon).toFixed(5)),parseFloat(parseFloat(arrivallat).toFixed(5))])
catch (err) { // console.log(arrival)
console.log('.../loadSetP failed!\n' + err); 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){ // ---- Route Offis Berechnen Test ----
return new Promise(function (resolve, reject) { app.get('/navPublicT2', async (req, res) => {
try { console.log('command angekommen ////// Route/////!')
var JsonFeature = []; const pointData = req.query;
// var pol = polycalc.decode(navcar.body.routes[0].sections[0].polyline) console.log(pointData);
// var length = pol.polyline.length; 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(length);
var json_public = inputData console.log(APIout)
var id = json_public.routes[0].id; let json_pub = await Route_PublicbuildJson(APIout);
console.log(json_pub)
var length = json_public.routes[0].sections.length; // navPublicjson = {
console.log("length of Sections: " + length) // "name":"navPublic" + "01",
for (var i = 0; i<= length -1; i++){ // "type":"FeatureCollection",
console.log(i) // "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
if (json_public.routes[0].sections[i].type == "pedestrian"){ // "features": buildNavPublic()
console.log("pedestrian")
var section = json_public.routes[0].sections[i] // };
var agencyid = section.id; var json_public = {
var agencyname = section.name; "name":"navPublic" + "01",
var arrivaltime = section.arrival.time; "type":"FeatureCollection",
var arrivalplace = section.arrival.place; "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
var departuretime = section.departure.time; "features": json_pub
var departureplace = section.departure.place; };
var transportInfo = section.transport;
console.log(json_public);
var pol = polycalc.decode(section.polyline) console.log('.../route calc successful!');
var pollength = pol.polyline.length; res.json(json_public);
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)
} }
}); catch (err) {
console.log('.../loadSetP failed!\n' + err);
// ---- 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!')
// - build geojson for Public Routing
app.post('/getNoiseHist', function (req, res) { 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) { resolve(JsonFeature)
console.log('.../getNoiseHist failed!\n' + err); }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) { const data = req.body;
return new Promise(function (resolve, reject) { // = "select sensor_id from public.noisesensor;"
// console.log(url)
axios.get(url) let query_string = " SELECT * FROM noisesensorstest ORDER BY timestamp ASC;"
.then(function (response) { // query_string += "from noisesensor;";
// handle success
// console.log(response.data); console.log(query_string)
resolve(response.data); // request the data rsr
}) db.result(query_string)
.catch(function (error) { .then(result => {
// handle error res.json(result.rows);
// console.log(error); })
reject(error); .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 user: 'postgres', // name of the user account
database: 'FavoritPlaces', // name of the database database: 'FavoritPlaces', // name of the database
...@@ -945,120 +930,122 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -945,120 +930,122 @@ app.get('/TrafficFlow', async (req, res) => {
const dbFav = pgp(connectionFav); const dbFav = pgp(connectionFav);
console.log('successful connected to DB: FavoritPlaces!') console.log('successful connected to DB: FavoritPlaces!')
// ---- FavPlaces ----
// ---- FavPlaces ----
// - 3Parts - // - 3Parts -
// - get request from the html page // - get request from the html page
app.get('/FavPlacesDB', async (req, res) => { app.get('/FavPlacesDB', async (req, res) => {
console.log('FavPlacesDB angekommen!') console.log('FavPlacesDB angekommen!')
try{ try{
let APIout = await getDBResult(''); let APIout = await getDBResult('');
console.log(APIout) console.log(APIout)
let json_con = await buildFavJson(APIout,"CONSTRUCTION"); let json_con = await buildFavJson(APIout,"CONSTRUCTION");
// console.log(json_con) // console.log(json_con)
var json_cons = { var json_cons = {
"name":"FavouritePlaces" + "01", "name":"FavouritePlaces" + "01",
"type":"FeatureCollection", "type":"FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
"features": json_con "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)}
});
}; };
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 { JsonFeature.push({
"type":"Feature",
const data = req.body; "properties": { "id": id, "name": "datapoint" , "contenttext": contenttext, "timestamp": timestamp, "date": timestamp.getUTCDate(), "month": timestamp.getMonth(), "year": timestamp.getUTCFullYear(), "lat":lat, "lon":lon},
// = "select sensor_id from public.noisesensor;" "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 resolve(JsonFeature)
dbFav.result(query_string) }catch(error){ reject(error)}
.then(result => {
res.json(result.rows);
})
.catch(error => { });
console.log('ERROR:', error);
}); };
console.log('.../saveFavPoint successful!');
} app.post('/saveFavPoint', function (req, res) {
try {
catch (err) { const data = req.body;
console.log('.../saveFavPoint failed!\n' + err); // = "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()); "
\ No newline at end of file // 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
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
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
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment