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