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
Showing with 1994 additions and 1994 deletions
+1994 -1994
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,17 +81,18 @@ function timeDifference1(date11,date22) { ...@@ -101,17 +81,18 @@ 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 = {
...@@ -124,12 +105,12 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -124,12 +105,12 @@ app.get('/TrafficFlow', async (req, res) => {
res.json(json_tfs) res.json(json_tfs)
}catch (error) { }catch (error) {
console.log(error) console.log(error)
} }
}); });
// - request from the here API // - request from the here API
function flow_getApiResponse(url) { function flow_getApiResponse(url) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
axios.get(url) axios.get(url)
.then(function (response) { .then(function (response) {
...@@ -143,9 +124,9 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -143,9 +124,9 @@ app.get('/TrafficFlow', async (req, res) => {
reject(error); reject(error);
}); });
}); });
} }
// - build geojson from response // - build geojson from response
function flow_buildTFLOWJson(inputData){ function flow_buildTFLOWJson(inputData){
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
try { try {
var json_tflow = inputData var json_tflow = inputData
...@@ -317,15 +298,15 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -317,15 +298,15 @@ app.get('/TrafficFlow', async (req, res) => {
}); });
}; };
// ---- Accidents ---- // ---- Accidents ----
// - 3Parts - // - 3Parts -
// - get request from the html page // - get request from the html page
app.get('/CONSTRUCTION', async (req, res) => { app.get('/CONSTRUCTION', async (req, res) => {
console.log('Construction angekommen!') console.log('Construction angekommen!')
try{ 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 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"); let json_con = await CON_buildTFLOWJson(APIout,"CONSTRUCTION");
...@@ -338,14 +319,14 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -338,14 +319,14 @@ app.get('/TrafficFlow', async (req, res) => {
}; };
res.json(json_cons) res.json(json_cons)
}catch (error) { }catch (error) {
console.log(error) console.log(error)
} }
}); });
app.get('/ROAD_CLOSURE', async (req, res) => { app.get('/ROAD_CLOSURE', async (req, res) => {
console.log('Construction angekommen!') console.log('Construction angekommen!')
try{ 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 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"); let json_con = await CON_buildTFLOWJson(APIout,"ROAD_CLOSURE");
...@@ -358,13 +339,13 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -358,13 +339,13 @@ app.get('/TrafficFlow', async (req, res) => {
}; };
res.json(json_cons) res.json(json_cons)
}catch (error) { }catch (error) {
console.log(error) console.log(error)
} }
}); });
// - request from the here API // - request from the here API
function CON_getApiResponse(url) { function CON_getApiResponse(url) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
console.log(url) console.log(url)
axios.get(url) axios.get(url)
...@@ -379,9 +360,9 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -379,9 +360,9 @@ app.get('/TrafficFlow', async (req, res) => {
reject(error); reject(error);
}); });
}); });
} }
// - build geojson from response // - build geojson from response
function CON_buildTFLOWJson(inputData,type){ function CON_buildTFLOWJson(inputData,type){
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
try { try {
var JsonFeature = []; var JsonFeature = [];
...@@ -453,14 +434,16 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -453,14 +434,16 @@ app.get('/TrafficFlow', async (req, res) => {
}); });
}; };
// ---- Navpoint ---- // ---- Navpoint ----
// - receive coordinates and return a geojson // - receive coordinates and return a geojson
app.get('/addPoint', async (req, res) => { app.get('/addPoint', async (req, res) => {
try { try {
var data = req.query; var data = req.query;
console.log(data)
var Punktadd = { var Punktadd = {
"type":"FeatureCollection", "type":"FeatureCollection",
"name":"data_point", "name":"data_point",
...@@ -494,12 +477,12 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -494,12 +477,12 @@ app.get('/TrafficFlow', async (req, res) => {
console.log(error) console.log(error)
} }
}); });
// http://localhost:8083/Routecalc2?slat=48.68997020356071&slon=9.202611390575258&sloc=Start&elat=48.726559406813294&elon=9.113775973868089&eloc=End // http://localhost:8083/Routecalc2?slat=48.68997020356071&slon=9.202611390575258&sloc=Start&elat=48.726559406813294&elon=9.113775973868089&eloc=End
// ---- Route Berechnen Test ---- // ---- Route Berechnen Test ----
app.get('/Routecalc2', async (req, res) => { app.get('/Routecalc2', async (req, res) => {
console.log('command angekommen ////// Route/////!') console.log('command angekommen ////// Route/////!')
const pointData = req.query; const pointData = req.query;
console.log(pointData); console.log(pointData);
...@@ -524,9 +507,9 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -524,9 +507,9 @@ app.get('/TrafficFlow', async (req, res) => {
console.log('.../loadSetP failed!\n' + err); console.log('.../loadSetP failed!\n' + err);
} }
}); });
// - build geojson for Car Routing // - build geojson for Car Routing
function Route_buildJson(inputData){ function Route_buildJson(inputData){
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
try { try {
var JsonFeature = []; var JsonFeature = [];
...@@ -650,9 +633,9 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -650,9 +633,9 @@ app.get('/TrafficFlow', async (req, res) => {
}); });
}; };
// ---- Route Offis Berechnen Test ---- // ---- Route Offis Berechnen Test ----
app.get('/navPublicT2', async (req, res) => { app.get('/navPublicT2', async (req, res) => {
console.log('command angekommen ////// Route/////!') console.log('command angekommen ////// Route/////!')
const pointData = req.query; const pointData = req.query;
console.log(pointData); console.log(pointData);
...@@ -684,10 +667,10 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -684,10 +667,10 @@ app.get('/TrafficFlow', async (req, res) => {
console.log('.../loadSetP failed!\n' + err); console.log('.../loadSetP failed!\n' + err);
} }
}); });
// - build geojson for Public Routing // - build geojson for Public Routing
function Route_PublicbuildJson(inputData){ function Route_PublicbuildJson(inputData){
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
try { try {
var JsonFeature = []; var JsonFeature = [];
...@@ -802,14 +785,15 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -802,14 +785,15 @@ app.get('/TrafficFlow', async (req, res) => {
}); });
}; };
// ---- Noise Real Time ---- // ---- Noise Real Time ----
// - 3Parts - // - 3Parts -
// - get request from the html page // - get request from the html page
app.get('/NoiseRealTime', async (req, res) => { app.get('/NoiseRealTime', async (req, res) => {
console.log('command angekommen!') console.log('command angekommen!')
try{ 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 + '/'); let APIout = await flow_getApiResponse('https://data.sensor.community/airrohr/v1/sensor/' + req.query.id + '/');
console.log(APIout); console.log(APIout);
...@@ -817,33 +801,33 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -817,33 +801,33 @@ app.get('/TrafficFlow', async (req, res) => {
res.json((APIout)); res.json((APIout));
}catch (error) { }catch (error) {
console.log(error) console.log(error)
} }
}); });
// ---- Historic Noise Data ---- // ---- Historic Noise Data ----
// ---- Trial Version from PostgreSQL ---- // ---- Trial Version from PostgreSQL ----
const pgp = require('pg-promise')({ const pgp = require('pg-promise')({
// Initialization Options // Initialization Options
}); });
const connection = { const connection = {
user: 'postgres', // name of the user account user: 'postgres', // name of the user account
database: 'NoiseSensorData', // name of the database database: 'NoiseSensorData', // name of the database -- NoiseSensorData
password: 'ahpk94meteor', // env var: PGPASSWORD password: 'postgres', // env var: PGPASSWORD -- ahpk94meteor
host: '193.196.38.112', // Server hosting the postgres database (host: '35.187.21.114') host: 'localhost', // Server hosting the postgres database (host: '35.187.21.114') -- 193.196.38.112
port: 5432, // env var: PGPORT port: 5432, // env var: PGPORT
max: 10, // max number of clients in the pool max: 10, // max number of clients in the pool
idleTimeoutMillis: 30000 // how long a client is allowed to remain idle before being closed idleTimeoutMillis: 30000 // how long a client is allowed to remain idle before being closed
} }
const db = pgp(connection); const db = pgp(connection);
console.log('successful connected to DB: NoiseSensorData!') console.log('successful connected to DB: NoiseSensorData!')
app.post('/getNoiseHist', function (req, res) { app.post('/getNoiseHist', function (req, res) {
try { try {
...@@ -868,9 +852,9 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -868,9 +852,9 @@ app.get('/TrafficFlow', async (req, res) => {
catch (err) { catch (err) {
console.log('.../getNoiseHist failed!\n' + err); console.log('.../getNoiseHist failed!\n' + err);
} }
}); });
app.post('/getSTANoiseHist', async (req, res) => { app.post('/getSTANoiseHist', async (req, res) => {
console.log('command angekommen ////// STANoise/////!') console.log('command angekommen ////// STANoise/////!')
const pointData = req.query; const pointData = req.query;
...@@ -910,10 +894,10 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -910,10 +894,10 @@ app.get('/TrafficFlow', async (req, res) => {
catch (err) { catch (err) {
console.log('.../loadSetP failed!\n' + err); console.log('.../loadSetP failed!\n' + err);
} }
}); });
function STA_getApiResponse(url) { function STA_getApiResponse(url) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
// console.log(url) // console.log(url)
axios.get(url) axios.get(url)
...@@ -928,9 +912,10 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -928,9 +912,10 @@ app.get('/TrafficFlow', async (req, res) => {
reject(error); reject(error);
}); });
}); });
} }
const connectionFav = { 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,12 +930,14 @@ app.get('/TrafficFlow', async (req, res) => { ...@@ -945,12 +930,14 @@ 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");
...@@ -963,13 +950,13 @@ app.get('/FavPlacesDB', async (req, res) => { ...@@ -963,13 +950,13 @@ app.get('/FavPlacesDB', async (req, res) => {
}; };
res.json(json_cons) res.json(json_cons)
}catch (error) { }catch (error) {
console.log(error) console.log(error)
} }
}); });
// - request from the here API // - request from the here API
function getDBResult(url) { function getDBResult(url) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
let query_string = " SELECT id, lat, lon, contenttext, approved, timestamp FROM public.places WHERE approved = true;" let query_string = " SELECT id, lat, lon, contenttext, approved, timestamp FROM public.places WHERE approved = true;"
...@@ -989,9 +976,9 @@ app.get('/FavPlacesDB', async (req, res) => { ...@@ -989,9 +976,9 @@ app.get('/FavPlacesDB', async (req, res) => {
reject(error); reject(error);
}); });
}); });
} }
// - build geojson from response // - build geojson from response
function buildFavJson(inputData,type){ function buildFavJson(inputData,type){
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
try { try {
var JsonFeature = []; var JsonFeature = [];
...@@ -1034,9 +1021,9 @@ app.get('/FavPlacesDB', async (req, res) => { ...@@ -1034,9 +1021,9 @@ app.get('/FavPlacesDB', async (req, res) => {
}); });
}; };
app.post('/saveFavPoint', function (req, res) { app.post('/saveFavPoint', function (req, res) {
try { try {
...@@ -1061,4 +1048,4 @@ app.get('/FavPlacesDB', async (req, res) => { ...@@ -1061,4 +1048,4 @@ app.get('/FavPlacesDB', async (req, res) => {
catch (err) { catch (err) {
console.log('.../saveFavPoint failed!\n' + err); console.log('.../saveFavPoint failed!\n' + err);
} }
}); });
\ No newline at end of file \ 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
Supports Markdown
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