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'); app.use(express.static('vcm')); app.listen(process.env.PORT || 8083); console.log("on 8083"); //https://traffic.ls.hereapi.com/traffic/6.1/flow.json?bbox=48.8575,8.9757;48.6747,9.3712&responseattributes=sh%2Cfc&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y var flow request('https://traffic.ls.hereapi.com/traffic/6.2/flow.json?prox=48.7823,9.1807,919&responseattributes=sh%2Cfc&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y', {json:true},(err, res, body) => { if (err) {return console.log(err); } console.log(body.url); console.log(body.explanation); flow = res }) var accident request('https://traffic.ls.hereapi.com/traffic/6.3/incidents.json?apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y&bbox=48.790,9.139;48.771,9.239', { json: true }, (err, res, body) => { if (err) { return console.log(err); } console.log(body.url); console.log(body.explanation); accident = res console.log(accident[1]); }); var testjsonsflow = { "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": {}, "geometry": { "type": "LineString", "coordinates": [ [ 9.211758404732821, 48.79928779052079, -0.003812428450083977 ], [ 9.21372550369925, 48.79757037042029, -0.004464600820639255 ], [ 9.217416766673484, 48.79386716715126, -0.0037284616307613283 ], [ 9.217370353016513, 48.79390319685058, -0.0038132023499026415 ] ] }, "vcsMeta": { "style": { "type": "vector", "stroke": { "color": [ 51, 153, 204, 1 ], "width": 39, "lineDash": null } } } } ], "vcsMeta": { "version": "1.0", "altitudeMode": "clampToGround", "embeddedIcons": [] } } var flowjson; app.get('/FLOW', function (req, res) { console.log('command angekommen!') try { // res.json(testjsonsflow); res.json(flowjson); console.log('.../loadSetP successful!'); } catch (err) { console.log('.../loadSetP failed!\n' + err); } }); app.get('/CONSTRUCTION', function (req, res) { console.log('command angekommen!') try { var testjson = { "name":"incident" + "01", "type":"FeatureCollection", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "features": buildJSON('CONSTRUCTION') }; res.json(testjson); console.log('.../loadSetP successful!'); } catch (err) { console.log('.../loadSetP failed!\n' + err); } }); app.get('/ROAD_CLOSURE', function (req, res) { console.log('command angekommen!') try { var testjson = { "name":"incident" + "01", "type":"FeatureCollection", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "features": buildJSON('ROAD_CLOSURE') }; res.json(testjson); console.log('.../loadSetP successful!'); } catch (err) { console.log('.../loadSetP failed!\n' + err); } }); function buildFLOW(){ var JsonFeature = []; var length = flow.body.RWS[0].RW.length; console.log(length); for (var i = 0; i<= length -1; i++){ var shplength = flow.body.RWS[0].RW[i].FIS[0].FI[0].SHP.length; // var type = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; var mid = flow.body.RWS[0].RW[i].mid; var LI = flow.body.RWS[0].RW[i].LI; var DE = flow.body.RWS[0].RW[i].DE; var PBT = flow.body.RWS[0].RW[i].PBT; var TMC = flow.body.RWS[0].RW[i].FIS[0].FI[0].TMC; var CF = flow.body.RWS[0].RW[i].FIS[0].FI[0].CF[0]; var locationshp = []; for (var j = 0; j <= shplength - 1; j++ ){ var value = flow.body.RWS[0].RW[i].FIS[0].FI[0].SHP[j].value[0]; // console.log(value[0]) var splitvalue = []; splitvalue = value.split(" "); // console.log(splitvalue.length) var coord = []; for (var k = 0; k <= splitvalue.length -2; k++){ var latlon = []; latlon = splitvalue[k].split(","); var lat = latlon[0]; var lon = latlon[1]; coord.push([parseFloat(lon),parseFloat(lat)]) } // var FC = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LONGITUDE; locationshp.push(coord) // console.log(value) } if (CF.JF){ // console.log("CF.JF -- " + CF.JF) } if ((CF.JF >= 3) ){ JsonFeature.push({ "type":"Feature", "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, "geometry":{ "type":"MultiLineString", "coordinates": locationshp }, "vcsMeta": { "style": { "type": "vector", "stroke": { "color": [ 153, 0, 0, 1 ], "width": 2, "lineDash": null } } } }) } else if ((CF.JF <3 && CF.JF >= 2) ){ JsonFeature.push({ "type":"Feature", "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, "geometry":{ "type":"MultiLineString", "coordinates": locationshp }, "vcsMeta": { "style": { "type": "vector", "stroke": { "color": [ 255, 153, 51, 1 ], "width": 2, "lineDash": null } } } }) } else if ((CF.JF <2 && CF.JF >= 1)){ JsonFeature.push({ "type":"Feature", "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, "geometry":{ "type":"MultiLineString", "coordinates": locationshp }, "vcsMeta": { "style": { "type": "vector", "stroke": { "color": [ 230, 230, 0, 1 ], "width": 2, "lineDash": null } } } }) } else if ((CF.JF < 1)){ JsonFeature.push({ "type":"Feature", "properties": { "id": mid, "name": "linestring" , "LI": LI, "DE": DE, "PBT":PBT, "TMC":TMC, "CF":CF}, "geometry":{ "type":"MultiLineString", "coordinates": locationshp }, "vcsMeta": { "style": { "type": "vector", "stroke": { "color": [ 0, 153, 0, 1 ], "width": 2, "lineDash": null } } } }) } // 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": [ // 51, // 153, // 204, // 1 // ], // "width": 39, // "lineDash": null // } // } // } // }) // console.log(JsonFeature) } return JsonFeature } function buildJSON(type){ var JsonFeature = []; var length = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM.length; console.log(length) for (var i = 0; i <= length - 1; i++){ // console.log(accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i]) var lat = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LATITUDE; var lon = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION.GEOLOC.ORIGIN.LONGITUDE; // var type = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; var id = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_ID; var origid = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ORIGINAL_TRAFFIC_ITEM_ID; var TRAFFIC_ITEM_DESCRIPTION = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_DESCRIPTION; var COMMENTS = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].COMMENTS; var CRITICALITY = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].CRITICALITY; var VERIFIED = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].VERIFIED; var TRAFFIC_ITEM_TYPE_DESC = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_TYPE_DESC; var TRAFFIC_ITEM_STATUS_SHORT_DESC = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_STATUS_SHORT_DESC; var TRAFFIC_ITEM_DETAIL = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].TRAFFIC_ITEM_DETAIL; var START_TIME = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].START_TIME; var LOCATION = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].LOCATION; var ENTRY_TIME = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].ENTRY_TIME; var END_TIME = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i].END_TIME; var ABBREVIATION = accident.body.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]] } }) } } } return JsonFeature; } app.post('/getTrafficIncidents', function (req, res) { console.log('command angekommen!') try { res.json(accident); console.log('.../loadSetP successful!'); } catch (err) { console.log('.../loadSetP failed!\n' + err); } }); app.post('/FLOWdata', function (req, res) { console.log('command angekommen!') try { flowjson = { "name":"flow" + "01", "type":"FeatureCollection", "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, "features": buildFLOW() }; res.json(flowjson); console.log('.../loadSetP successful!'); } catch (err) { console.log('.../loadSetP failed!\n' + err); } }); app.post('/FLOWtest', function (req, res) { console.log('command angekommen!') try { res.json(testjsonsflow); console.log('.../loadSetP successful!'); } catch (err) { console.log('.../loadSetP failed!\n' + err); } }); var IDGeojson = 100000 var ballonContent = { header: "Test", Content: "This is a test", lat: "", lon: "", categorie: "locationSM.png" } app.post('/newBallon', function(req,res){ try { const data = req.body; console.log("data ==============") console.log(data.header); console.log(data.Content); console.log(data.lat); console.log(data.lon); console.log(data.categorie); ballonContent.header = data.header; ballonContent.Content = data.Content; ballonContent.lat = data.lat; ballonContent.lon = data.lon; ballonContent.categorie = data.categorie; console.log("args ==============") // console.log(args); //asdf // const returnedTarget = Object.assign(args.ui,data); // args.ui = data; // args.gmlid = data.id; // console.log("returned ==============") // console.log(returnedTarget) // console.log("args ==============") // console.log(args); getCurrentFilenames(); writeGeojsonFile(); writeConfigFile(); res.end('It worked!'); } catch (err) { console.log('.../getSimS failed!\n' + err); } }); // List all the filenames before renaming function getCurrentFilenames() { console.log("Current filenames:"); fs.readdirSync(__dirname + '/vcm/templates').forEach(file => { if (file.includes('.geojson')){ var tempid = file.replace('.geojson','') // console.log(tempid) if (isNaN(tempid) == false){ var tempid = parseInt(tempid, 10); if (tempid >= IDGeojson){ IDGeojson = tempid console.log("this one - " + IDGeojson) } } else { console.log("not this one - " + tempid) } } // console.log(file); }); IDGeojson += 1 } function writeGeojsonFile() { var geojsontemplate = ' {' + ' "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" }, "geometry": { "type": "Point", "coordinates": [ ' + ballonContent.lon + ', ' + ballonContent.lat + ' ] } }' + ' ]' + ' }' console.log(geojsontemplate); try { console.log(geojsontemplate); fs.writeFile(__dirname + "/vcm/templates/" + IDGeojson + '.geojson', geojsontemplate, function (err) { if (err) throw err; console.log('Saved!'); }); } catch (err) { console.error(err); } } function writeConfigFile(){ // name of the file var filename = 'vcm/config.json'; var contentSync = fs.readFileSync(filename); console.log('Content of the file : ' + contentSync); console.log(contentSync.includes('"balloonTypes":')); var newtext = contentSync.toString().replace('"layers": [','"layers": [' + '{' + '"name": "'+ IDGeojson +'",' + '"url": "./templates/'+IDGeojson+'.geojson",' + '"type": "vcs.vcm.layer.GeoJSON",' + '"datasourceId": "...",'+ '"activeOnStartup": true,'+ '"exclusive": false,' + '"projection": {' + ' "epsg": "4326",' + ' "proj4": ""' + '},' + '"altitudeMode": "relativeToGround",' + '"style": {' + ' "image": {' + ' "icon": {' + ' "src": "./templates/' + ballonContent.categorie + '",' + ' "scale": 0.5' + ' }' + ' }' + '},' + '"heightAboveGround": 0' + '},') var ballonText = "\"balloonTypes\": [" + "{" + "\"template\": [" + "\"
\"," + "\"

" + ballonContent.header + "

\"," + "\"
\"," + "\"

" + ballonContent.Content + "

\"," + // "\"Simply Easy Learning\"," + "\"
\"," + "\"<% %>\"" + // "\"<% openquestionaire() %>\"" + "]," + "\"minTop\": \"balloonHeight + 10\"," + "\"minLeft\": \"70\"," + "\"layerTypes\": [" + "\"\""+ "],"+ "\"layerNames\": [" + "\""+ IDGeojson +"\"" + "]" + "}," var newtext = newtext.toString().replace("\"balloonTypes\": [", ballonText) console.log(newtext); fs.writeFile(filename, newtext, 'utf8', function (err) { if (err) return console.log(err); }); } function writeBallon() { var ballonText = "{" + "\"template\": [" + "\"
\"," + "\"

Station 3

\"," + "\"
\"," + "\"

hier wurde eine Outdoorkiosk errichtet.

\"," + "\"Simply Easy Learning\"," + "\"
\"," + "\"<% %>\"," + "\"<% openquestionaire() %>\"" + "]," + "\"minTop\": \"balloonHeight + 10\"," + "\"minLeft\": \"70\"," + "\"layerTypes\": [" + "\"\""+ "],"+ "\"layerNames\": [" + "\"LocationThree\"" + "]" + "}," }