diff --git a/.gitignore b/.gitignore index 3c3629e647f5ddf82548912e337bea9826b434af..4e637713e0e9afa2b3ccb8d2b70f74e5465e4258 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules +node_modules diff --git a/codepoly.js b/codepoly.js new file mode 100644 index 0000000000000000000000000000000000000000..d0fcca9547e1e74d05fd040c0a513f624787e5e9 --- /dev/null +++ b/codepoly.js @@ -0,0 +1,203 @@ +/* + * Copyright (C) 2019 HERE Europe B.V. + * Licensed under MIT, see full license in LICENSE + * SPDX-License-Identifier: MIT + * License-Filename: LICENSE + */ +const DEFAULT_PRECISION = 5; + +const ENCODING_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + +const DECODING_TABLE = [ + 62, -1, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, -1, -1, -1, -1, 63, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51 +]; + +const FORMAT_VERSION = 1; + +const ABSENT = 0; +const LEVEL = 1; +const ALTITUDE = 2; +const ELEVATION = 3; +// Reserved values 4 and 5 should not be selectable +const CUSTOM1 = 6; +const CUSTOM2 = 7; + +const Num = typeof BigInt !== "undefined" ? BigInt : Number; + +function decode(encoded) { + const decoder = decodeUnsignedValues(encoded); + const header = decodeHeader(decoder[0], decoder[1]); + + const factorDegree = 10 ** header.precision; + const factorZ = 10 ** header.thirdDimPrecision; + const { thirdDim } = header; + + let lastLat = 0; + let lastLng = 0; + let lastZ = 0; + const res = []; + + let i = 2; + for (;i < decoder.length;) { + const deltaLat = toSigned(decoder[i]) / factorDegree; + const deltaLng = toSigned(decoder[i + 1]) / factorDegree; + lastLat += deltaLat; + lastLng += deltaLng; + + if (thirdDim) { + const deltaZ = toSigned(decoder[i + 2]) / factorZ; + lastZ += deltaZ; + res.push([lastLat, lastLng, lastZ]); + i += 3; + } else { + res.push([lastLat, lastLng]); + i += 2; + } + } + + if (i !== decoder.length) { + throw new Error('Invalid encoding. Premature ending reached'); + } + + return { + ...header, + polyline: res, + }; +} + +function decodeChar(char) { + const charCode = char.charCodeAt(0); + return DECODING_TABLE[charCode - 45]; +} + +function decodeUnsignedValues(encoded) { + let result = Num(0); + let shift = Num(0); + const resList = []; + + encoded.split('').forEach((char) => { + const value = Num(decodeChar(char)); + result |= (value & Num(0x1F)) << shift; + if ((value & Num(0x20)) === Num(0)) { + resList.push(result); + result = Num(0); + shift = Num(0); + } else { + shift += Num(5); + } + }); + + if (shift > 0) { + throw new Error('Invalid encoding'); + } + + return resList; +} + +function decodeHeader(version, encodedHeader) { + if (+version.toString() !== FORMAT_VERSION) { + throw new Error('Invalid format version'); + } + const headerNumber = +encodedHeader.toString(); + const precision = headerNumber & 15; + const thirdDim = (headerNumber >> 4) & 7; + const thirdDimPrecision = (headerNumber >> 7) & 15; + return { precision, thirdDim, thirdDimPrecision }; +} + +function toSigned(val) { + // Decode the sign from an unsigned value + let res = val; + if (res & Num(1)) { + res = ~res; + } + res >>= Num(1); + return +res.toString(); +} + +function encode({ precision = DEFAULT_PRECISION, thirdDim = ABSENT, thirdDimPrecision = 0, polyline }) { + // Encode a sequence of lat,lng or lat,lng(,{third_dim}). Note that values should be of type BigNumber + // `precision`: how many decimal digits of precision to store the latitude and longitude. + // `third_dim`: type of the third dimension if present in the input. + // `third_dim_precision`: how many decimal digits of precision to store the third dimension. + + const multiplierDegree = 10 ** precision; + const multiplierZ = 10 ** thirdDimPrecision; + const encodedHeaderList = encodeHeader(precision, thirdDim, thirdDimPrecision); + const encodedCoords = []; + + let lastLat = Num(0); + let lastLng = Num(0); + let lastZ = Num(0); + polyline.forEach((location) => { + const lat = Num(Math.round(location[0] * multiplierDegree)); + encodedCoords.push(encodeScaledValue(lat - lastLat)); + lastLat = lat; + + const lng = Num(Math.round(location[1] * multiplierDegree)); + encodedCoords.push(encodeScaledValue(lng - lastLng)); + lastLng = lng; + + if (thirdDim) { + const z = Num(Math.round(location[2] * multiplierZ)); + encodedCoords.push(encodeScaledValue(z - lastZ)); + lastZ = z; + } + }); + + return [...encodedHeaderList, ...encodedCoords].join(''); +} + +function encodeHeader(precision, thirdDim, thirdDimPrecision) { + // Encode the `precision`, `third_dim` and `third_dim_precision` into one encoded char + if (precision < 0 || precision > 15) { + throw new Error('precision out of range. Should be between 0 and 15'); + } + if (thirdDimPrecision < 0 || thirdDimPrecision > 15) { + throw new Error('thirdDimPrecision out of range. Should be between 0 and 15'); + } + if (thirdDim < 0 || thirdDim > 7 || thirdDim === 4 || thirdDim === 5) { + throw new Error('thirdDim should be between 0, 1, 2, 3, 6 or 7'); + } + + const res = (thirdDimPrecision << 7) | (thirdDim << 4) | precision; + return encodeUnsignedNumber(FORMAT_VERSION) + encodeUnsignedNumber(res); +} + +function encodeUnsignedNumber(val) { + // Uses variable integer encoding to encode an unsigned integer. Returns the encoded string. + let res = ''; + let numVal = Num(val); + while (numVal > 0x1F) { + const pos = (numVal & Num(0x1F)) | Num(0x20); + res += ENCODING_TABLE[pos]; + numVal >>= Num(5); + } + return res + ENCODING_TABLE[numVal]; +} + +function encodeScaledValue(value) { + // Transform a integer `value` into a variable length sequence of characters. + // `appender` is a callable where the produced chars will land to + let numVal = Num(value); + const negative = numVal < 0; + numVal <<= Num(1); + if (negative) { + numVal = ~numVal; + } + + return encodeUnsignedNumber(numVal); +} + +module.exports = { + encode, + decode, + + ABSENT, + LEVEL, + ALTITUDE, + ELEVATION, +}; diff --git a/serveralternative.js b/serveralternative.js index 12158203a67e44989e62252336ad191c6a3c09e5..afdfb28c10f261fd726608109fb40a123f7fbd7d 100644 --- a/serveralternative.js +++ b/serveralternative.js @@ -9,11 +9,14 @@ app.use(bodyParser.json()) const request_ajax = require('ajax-request'); const request = require('request'); +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"); - +//Public Transport https://transit.router.hereapi.com/v8/routes?origin=48.803175,9.226140&destination=48.780264,9.172469&return=polyline&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y //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) => { @@ -30,6 +33,13 @@ request('https://traffic.ls.hereapi.com/traffic/6.3/incidents.json?apiKey=9Grm-6 accident = res console.log(accident[1]); }); +var navcar +// request('https://router.hereapi.com/v8/routes?transportMode=car&origin=48.803175,9.226140&destination=48.780264,9.172469&return=polyline&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y', {json:true},(err, res, body) => { +// if (err) {return console.log(err); } +// console.log(body.url); +// console.log(body.explanation); +// navcar = res +// }) var testjsonsflow = { "type": "FeatureCollection", @@ -103,7 +113,27 @@ app.get('/FLOW', function (req, res) { } }); +// var navcartest; +var navcarjson; +app.get('/NAVCAR', function (req, res) { + console.log('command angekommen!') + try { + // console.log(navcar.body.routes[0].sections[0].polyline) + // var pol = polycalc.decode(navcar.body.routes[0].sections[0].polyline) + // console.log(pol) + + // res.json(testjsonsflow); + res.json(navcarjson); + // console.log(navcarjson) + + console.log('.../loadSetP successful!'); + } + catch (err) { + console.log('.../loadSetP failed!\n' + err); + } + +}); app.get('/CONSTRUCTION', function (req, res) { console.log('command angekommen!') @@ -153,7 +183,7 @@ function buildFLOW(){ var JsonFeature = []; var length = flow.body.RWS[0].RW.length; - console.log(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; @@ -326,12 +356,131 @@ function buildFLOW(){ } return JsonFeature } +function buildNavCar(){ + var JsonFeature = []; + var pol = polycalc.decode(navcar.body.routes[0].sections[0].polyline) + var length = pol.polyline.length; + + // console.log(length); + var id = navcar.body.routes[0].id; + var mid = navcar.body.routes[0].sections[0].id; + var transport = navcar.body.routes[0].sections[0].transport.mode; + var departureTime = navcar.body.routes[0].sections[0].departure.time; + var departureOriglat = navcar.body.routes[0].sections[0].departure.place.originalLocation.lat; + // console.log(departureOriglat) + var departureOriglon = navcar.body.routes[0].sections[0].departure.place.originalLocation.lng; + // console.log(departureOriglon) + var departurelat = navcar.body.routes[0].sections[0].departure.place.location.lat; + var departurelon = navcar.body.routes[0].sections[0].departure.place.location.lng; + var arrivalTime = navcar.body.routes[0].sections[0].arrival.time; + var arrivalOriglat = navcar.body.routes[0].sections[0].arrival.place.originalLocation.lat; + var arrivalOriglon = navcar.body.routes[0].sections[0].arrival.place.originalLocation.lng; + var arrivallat = navcar.body.routes[0].sections[0].arrival.place.location.lat; + var arrivallon = navcar.body.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": [ + 128, + 128, + 128, + 1 + ], + "width": 2, + "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": [ + 128, + 128, + 128, + 1 + ], + "width": 2, + "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": 2, + "lineDash": null + } + } + } + }) + + // console.log(JsonFeature) + + + + + return JsonFeature +} + function buildJSON(type){ var JsonFeature = []; var length = accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM.length; - console.log(length) + // console.log(length) for (var i = 0; i <= length - 1; i++){ // console.log(accident.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[i]) @@ -355,7 +504,7 @@ function buildJSON(type){ if (type == 'CONSTRUCTION'){ - console.log(i) + // console.log(i) if (TRAFFIC_ITEM_TYPE_DESC == "CONSTRUCTION"){ @@ -451,7 +600,28 @@ app.post('/FLOWtest', function (req, res) { } }); +app.post('/NavCARdata', function (req, res) { + console.log('command angekommen!') + try { + + navcarjson = { + "name":"navcar" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": buildNavCar() + + }; + res.json(navcarjson); + + console.log('.../loadSetP successful!'); + + } + catch (err) { + console.log('.../loadSetP failed!\n' + err); + } + +}); var IDGeojson = 100000 var ballonContent = { header: "Test", @@ -461,17 +631,17 @@ var ballonContent = { categorie: "locationSM.png" } -app.post('/newBallon', function(req,res){ +app.post('/', 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); + // 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; @@ -499,8 +669,135 @@ app.post('/newBallon', function(req,res){ } }); +var Startpoint; +var Startpointlat; +var Startpointlon; +var Endpoint; +var Endpointlat; +var Endpointlon; // List all the filenames before renaming +app.post('/navPoint', function(req,res){ + + try { + console.log("navPoint arrived ////////") + const data = req.body; + console.log("data ==============") + console.log(data.lat); + + console.log(data.lon); + console.log(data.loc); + if (data.loc == "Start"){ + Startpointlat = parseFloat(parseFloat(data.lat).toFixed(7)) + Startpointlon = parseFloat(parseFloat(data.lon).toFixed(7)) + Startpoint = { + "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":[ + parseFloat(parseFloat(data.lon).toFixed(7)), + parseFloat(parseFloat(data.lat).toFixed(7)) + ] + } + } + ] + } + // Startpoint.push({ + // "type":"Feature", + // "properties": { "id": data.loc, "name": "datapoint"}, + // "geometry":{ + // "type":"MultiPoint", + // "coordinates": [ [data.lon, data.lat]] + // } + // }) + console.log(Startpoint) + res.json(Startpoint); + } else if (data.loc == "End"){ + Endpointlat = parseFloat(parseFloat(data.lat).toFixed(7)) + Endpointlon = parseFloat(parseFloat(data.lon).toFixed(7)) + Endpoint = { + "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":[ + parseFloat(parseFloat(data.lon).toFixed(7)), + parseFloat(parseFloat(data.lat).toFixed(7)) + ] + } + } + ] + } + res.json(Endpoint); + } + + + } + catch (err) { + console.log('.../getSimS failed!\n' + err); + } + +}); +app.get('/Startpoint', function (req, res) { + console.log('command angekommen ////// Startpoint!') + try { + + + + // res.json(testjsonsflow); + res.json(Startpoint); + + console.log('.../loadSetP successful!'); + + } + catch (err) { + console.log('.../loadSetP failed!\n' + err); + } + +}); +app.get('/Endpoint', function (req, res) { + console.log('command angekommen!') + try { + + + + // res.json(testjsonsflow); + res.json(Endpoint); + + console.log('.../loadSetP successful!'); + } + catch (err) { + console.log('.../loadSetP failed!\n' + err); + } + +}); function getCurrentFilenames() { @@ -629,4 +926,230 @@ function writeBallon() { "\"LocationThree\"" + "]" + "}," +} +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 '); +} + + +app.post('/Routecalc', function (req, res) { + console.log('command angekommen ////// Route/////!') + const pointData = req.body; + try { + console.log('https://router.hereapi.com/v8/routes?transportMode=car&origin='+ pointData.slat + ',' + pointData.slon + '&destination=' + pointData.elat + ',' + pointData.elon + '&return=polyline&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y') + request('https://router.hereapi.com/v8/routes?transportMode=car&origin='+ pointData.slat + ',' + pointData.slon + '&destination=' + pointData.elat + ',' + pointData.elon + '&return=polyline&apiKey=9Grm-6B7VRvxAnbf2eKw29gR-9uuJP8VaXXYR8LK93Y', {json:true},(err, res, body) => { + if (err) {return console.log(err); } + console.log(body.url); + console.log(body.explanation); + navcar = res + }) + navcarjson = { + "name":"navcar" + "01", + "type":"FeatureCollection", + "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + "features": buildNavCar() + + }; + // res.json(testjsonsflow); + + console.log(navcarjson); + console.log('.../route calc successful!'); + res.json(navcarjson); + } + catch (err) { + console.log('.../loadSetP failed!\n' + err); + } + +}); + +var responseStuff +var navPublicjson + +app.post('/navPublicT', function (req, res) { + console.log('command angekommen ////// Route/////!') + const pointData = req.body; + console.log(pointData.slat); + + try { + + console.log('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') + request('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', {json:true},(err, res, body) => { + if (err) {return console.log(err); } + // console.log(body.url); + // console.log(body.explanation); + responseStuff = res + // console.log(responseStuff); + console.log('.../route calc successful!'); + + }) + for (i = 1; i<= 1000; ++i){ + if (responseStuff){ + console.log("responseStuff"); + + // navPublicjson = { + // "name":"navPublic" + "01", + // "type":"FeatureCollection", + // "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, + // "features": buildNavPublic() + + // }; + + res.json(responseStuff); + break; + } + + } + + + + } + catch (err) { + console.log('.../loadSetP failed!\n' + err); + } + +}); + +function buildNavPublic(){ + var JsonFeature = []; + var pol = polycalc.decode(navcar.body.routes[0].sections[0].polyline) + var length = pol.polyline.length; + + // console.log(length); + var id = navcar.body.routes[0].id; + var mid = navcar.body.routes[0].sections[0].id; + var transport = navcar.body.routes[0].sections[0].transport.mode; + var departureTime = navcar.body.routes[0].sections[0].departure.time; + var departureOriglat = navcar.body.routes[0].sections[0].departure.place.originalLocation.lat; + // console.log(departureOriglat) + var departureOriglon = navcar.body.routes[0].sections[0].departure.place.originalLocation.lng; + // console.log(departureOriglon) + var departurelat = navcar.body.routes[0].sections[0].departure.place.location.lat; + var departurelon = navcar.body.routes[0].sections[0].departure.place.location.lng; + var arrivalTime = navcar.body.routes[0].sections[0].arrival.time; + var arrivalOriglat = navcar.body.routes[0].sections[0].arrival.place.originalLocation.lat; + var arrivalOriglon = navcar.body.routes[0].sections[0].arrival.place.originalLocation.lng; + var arrivallat = navcar.body.routes[0].sections[0].arrival.place.location.lat; + var arrivallon = navcar.body.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": [ + 128, + 128, + 128, + 1 + ], + "width": 2, + "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": [ + 128, + 128, + 128, + 1 + ], + "width": 2, + "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": 2, + "lineDash": null + } + } + } + }) + + // console.log(JsonFeature) + + + + + return JsonFeature } \ No newline at end of file diff --git a/vcm/index.html b/vcm/index.html index 453beba1bc53995fcfc73649bf3414052efa0fbc..97930e6f72d74a4f100693cc629b50f609c7e925 100644 --- a/vcm/index.html +++ b/vcm/index.html @@ -232,6 +232,20 @@ </div> <a href="#" onclick="drawFlow();" >Verkehrsflow</a> </div> + <button class="accordion">Navigation</button> + <div class="sub-menu"> + <a href="#" onclick="Navigationshow();getPosition();" >Car</a> + <div class="switch-toggle switch-3 switch-candy"> + + <input id="acc-on" name="state-d" type="radio" checked="" /> + <label for="on" onclick="drawnavcar()">ON</label> + + <input id="acc-off" name="state-d" type="radio" checked="true"/> + <label for="na" onclick="">OFF</label><br><br> + + </div><br> + + </div> </div> </div> <!-- Drop down menu ends here --> @@ -248,6 +262,7 @@ </h1> <button id="tourstart-btn" onclick="stopStory(); removebuildings();getTraffic();getFlow();getFlowtest();" class="buttonset one"><span class="i18n_balloon_startscreen_btn">Start</span> </button> + <!-- getNAVcar(); --> </div> <div class="dialog-image-balloon"></div> <div class="balloon-left-edge"></div> @@ -609,7 +624,21 @@ <div style='width:100%;margin-top:200px;' id="chartNordB"></div> <!-- <div id="slider-color"></div> --> </div> - + <div id="Navigation" class="SideInfo" style="display:none;"> + <h1 class="sticky" id="headNordB">Navigationsberechner</h1> + <p class="contentOne">Bitte wählen Sie einen Start und Endpunkt für ihre Route aus.</p> + <button onclick="getStart('Start');">Startpunkt</button> + <input type="text" id="Spunktlat" name="Spunktlat"> + <input type="text" id="Spunktlon" name="Spunktlon"><br><br> + + <button onclick="getStart('End');">Endpunkt</button> + <input type="text" id="Epunktlat" name="Epunktlat"> + <input type="text" id="Epunktlon" name="Epunktlon"><br><br> + + <button onclick="showRoute();">Route berechnen</button> + <button onclick="drawnavcar();">Route anzeigen</button> + <input type="text" id="Routeduration" name="Duration"> + </div> </div> <div id="tour-button" title="Karte/Story umschalten"> <i class="fa"></i> @@ -631,6 +660,8 @@ <script src="sources/nouislider.js"></script> <script src="https://cdn.jsdelivr.net/npm/apexcharts"></script> <script src="templates/slider.js"></script> + <script src="templates/UserBalloon.js"></script> + <script src="js/navigation.js"></script> <link href="templates/sliders.css" rel="stylesheet"> <script> @@ -651,6 +682,7 @@ <script src='lib/vcm_ui.js'></script> <script src="js/here.js"></script> + <script src="js/codepoly.js"></script> <script src="templates/custom.js"></script> <script src="templates/newDevBahn.js"></script> <script src="templates/cus_Menu.js"></script> diff --git a/vcm/js/codepoly.js b/vcm/js/codepoly.js new file mode 100644 index 0000000000000000000000000000000000000000..d5fb24f9e1e2098cb577f26bd717337096290749 --- /dev/null +++ b/vcm/js/codepoly.js @@ -0,0 +1,203 @@ +/* + * Copyright (C) 2019 HERE Europe B.V. + * Licensed under MIT, see full license in LICENSE + * SPDX-License-Identifier: MIT + * License-Filename: LICENSE + */ +const DEFAULT_PRECISION = 5; + +const ENCODING_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + +const DECODING_TABLE = [ + 62, -1, -1, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, -1, -1, -1, -1, 63, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51 +]; + +const FORMAT_VERSION = 1; + +const ABSENT = 0; +const LEVEL = 1; +const ALTITUDE = 2; +const ELEVATION = 3; +// Reserved values 4 and 5 should not be selectable +const CUSTOM1 = 6; +const CUSTOM2 = 7; + +const Num = typeof BigInt !== "undefined" ? BigInt : Number; + +function decode(encoded) { + const decoder = decodeUnsignedValues(encoded); + const header = decodeHeader(decoder[0], decoder[1]); + + const factorDegree = 10 ** header.precision; + const factorZ = 10 ** header.thirdDimPrecision; + const { thirdDim } = header; + + let lastLat = 0; + let lastLng = 0; + let lastZ = 0; + const res = []; + + let i = 2; + for (;i < decoder.length;) { + const deltaLat = toSigned(decoder[i]) / factorDegree; + const deltaLng = toSigned(decoder[i + 1]) / factorDegree; + lastLat += deltaLat; + lastLng += deltaLng; + + if (thirdDim) { + const deltaZ = toSigned(decoder[i + 2]) / factorZ; + lastZ += deltaZ; + res.push([lastLat, lastLng, lastZ]); + i += 3; + } else { + res.push([lastLat, lastLng]); + i += 2; + } + } + + if (i !== decoder.length) { + throw new Error('Invalid encoding. Premature ending reached'); + } + + return { + ...header, + polyline: res, + }; +} + +function decodeChar(char) { + const charCode = char.charCodeAt(0); + return DECODING_TABLE[charCode - 45]; +} + +function decodeUnsignedValues(encoded) { + let result = Num(0); + let shift = Num(0); + const resList = []; + + encoded.split('').forEach((char) => { + const value = Num(decodeChar(char)); + result |= (value & Num(0x1F)) << shift; + if ((value & Num(0x20)) === Num(0)) { + resList.push(result); + result = Num(0); + shift = Num(0); + } else { + shift += Num(5); + } + }); + + if (shift > 0) { + throw new Error('Invalid encoding'); + } + + return resList; +} + +function decodeHeader(version, encodedHeader) { + if (+version.toString() !== FORMAT_VERSION) { + throw new Error('Invalid format version'); + } + const headerNumber = +encodedHeader.toString(); + const precision = headerNumber & 15; + const thirdDim = (headerNumber >> 4) & 7; + const thirdDimPrecision = (headerNumber >> 7) & 15; + return { precision, thirdDim, thirdDimPrecision }; +} + +function toSigned(val) { + // Decode the sign from an unsigned value + let res = val; + if (res & Num(1)) { + res = ~res; + } + res >>= Num(1); + return +res.toString(); +} + +function encode({ precision = DEFAULT_PRECISION, thirdDim = ABSENT, thirdDimPrecision = 0, polyline }) { + // Encode a sequence of lat,lng or lat,lng(,{third_dim}). Note that values should be of type BigNumber + // `precision`: how many decimal digits of precision to store the latitude and longitude. + // `third_dim`: type of the third dimension if present in the input. + // `third_dim_precision`: how many decimal digits of precision to store the third dimension. + + const multiplierDegree = 10 ** precision; + const multiplierZ = 10 ** thirdDimPrecision; + const encodedHeaderList = encodeHeader(precision, thirdDim, thirdDimPrecision); + const encodedCoords = []; + + let lastLat = Num(0); + let lastLng = Num(0); + let lastZ = Num(0); + polyline.forEach((location) => { + const lat = Num(Math.round(location[0] * multiplierDegree)); + encodedCoords.push(encodeScaledValue(lat - lastLat)); + lastLat = lat; + + const lng = Num(Math.round(location[1] * multiplierDegree)); + encodedCoords.push(encodeScaledValue(lng - lastLng)); + lastLng = lng; + + if (thirdDim) { + const z = Num(Math.round(location[2] * multiplierZ)); + encodedCoords.push(encodeScaledValue(z - lastZ)); + lastZ = z; + } + }); + + return [...encodedHeaderList, ...encodedCoords].join(''); +} + +function encodeHeader(precision, thirdDim, thirdDimPrecision) { + // Encode the `precision`, `third_dim` and `third_dim_precision` into one encoded char + if (precision < 0 || precision > 15) { + throw new Error('precision out of range. Should be between 0 and 15'); + } + if (thirdDimPrecision < 0 || thirdDimPrecision > 15) { + throw new Error('thirdDimPrecision out of range. Should be between 0 and 15'); + } + if (thirdDim < 0 || thirdDim > 7 || thirdDim === 4 || thirdDim === 5) { + throw new Error('thirdDim should be between 0, 1, 2, 3, 6 or 7'); + } + + const res = (thirdDimPrecision << 7) | (thirdDim << 4) | precision; + return encodeUnsignedNumber(FORMAT_VERSION) + encodeUnsignedNumber(res); +} + +function encodeUnsignedNumber(val) { + // Uses variable integer encoding to encode an unsigned integer. Returns the encoded string. + let res = ''; + let numVal = Num(val); + while (numVal > 0x1F) { + const pos = (numVal & Num(0x1F)) | Num(0x20); + res += ENCODING_TABLE[pos]; + numVal >>= Num(5); + } + return res + ENCODING_TABLE[numVal]; +} + +function encodeScaledValue(value) { + // Transform a integer `value` into a variable length sequence of characters. + // `appender` is a callable where the produced chars will land to + let numVal = Num(value); + const negative = numVal < 0; + numVal <<= Num(1); + if (negative) { + numVal = ~numVal; + } + + return encodeUnsignedNumber(numVal); +} + +// module.exports = { +// encode, +// decode, + +// ABSENT, +// LEVEL, +// ALTITUDE, +// ELEVATION, +// }; diff --git a/vcm/js/here.js b/vcm/js/here.js index 0bece50e17c46f23e35ef1135ff5fd17c5056092..0188fa93f9ebb1d825b99c28b7bd23518c80a462 100644 --- a/vcm/js/here.js +++ b/vcm/js/here.js @@ -1,9 +1,58 @@ var traffic; var flow; +var navcar; +var navcardata; var geojson; var geolat; var geolong; var originalJson; +var pol; + +function getNAVcar(){ + // var incidents = getTraffic() + try { + $.ajax({ + type: "POST", + url: '/NavCARdata', + }).done(function (newdata) { + convertdata(newdata); + }); + function convertdata(data) { + navcardata = data; + console.log(navcardata) + } + return navcardata +} +catch (err) { + console.log('loading Gas Values from DB failed!'); +} + // pol = decode(navcar.body.routes[0].sections[0].polyline) + // geolat = traffic.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[0].LOCATION.GEOLOC.ORIGIN.LATITUDE; + // geolong = traffic.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[0].LOCATION.GEOLOC.ORIGIN.LONGITUDE; + // var type = traffic.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[0].TRAFFIC_ITEM_DESCRIPTION[0].value; + // roadclose = new vcs.vcm.layer.GeoJSON({ + // name: "ROAD_CLOSURE", + // url: "http://localhost:8083/CONSTRUCTION", + // data: geojson, + // projection: { + // epsg: 4326 + // }, + // altitudeMode : "relativeToGround", + // style: { + // image: { + // icon: { + // src: "./img/traffic/icons8-straßensperre-64.png", + // scale: 1 + // } + // } + // }, + // heightAboveGround: 0 + // }) + // framework.addLayer(roadclose) + // roadclose.activate(true); + + +}; function getAccidents(type){ // var incidents = getTraffic() console.log(traffic); @@ -106,6 +155,30 @@ catch (err) { console.log('loading Gas Values from DB failed!'); } +}; +function getNAV(){ + // var incidents = getTraffic() + + // geolat = traffic.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[0].LOCATION.GEOLOC.ORIGIN.LATITUDE; + // geolong = traffic.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[0].LOCATION.GEOLOC.ORIGIN.LONGITUDE; + // var type = traffic.body.TRAFFIC_ITEMS.TRAFFIC_ITEM[0].TRAFFIC_ITEM_DESCRIPTION[0].value; + try { + $.ajax({ + type: "POST", + url: '/NavCARdata', + }).done(function (newdata) { + convertdata(newdata); + }); + function convertdata(data) { + navcar = data; + console.log(navcar) + } + return navcar +} +catch (err) { + console.log('loading Gas Values from DB failed!'); +} + }; function getFlowtest(){ // var incidents = getTraffic() @@ -145,7 +218,30 @@ function drawFlow(){ framework.addLayer(flowlayer) flowlayer.activate(true); } +function drawnavcar(){ + var layern = ["NAVCAR"] + var layers = framework.getLayers(); + for (var i = 0; i< layers.length; i++) { + var layer = layers[i]; + if(layern.indexOf(layer.name) >= 0){ + layer.activate(false); + } + } + framework.removeLayerByName("NAVCAR") + navcarlayer = new vcs.vcm.layer.GeoJSON({ + name: "NAVCAR", + url: "http://localhost:8083/NAVCAR", + data: geojson, + projection: { + epsg: 4326 + }, + altitudeMode : "relativeToGround", + heightAboveGround: 0 +}) +framework.addLayer(navcarlayer) +navcarlayer.activate(true); +} function getTraffic() { try { $.ajax({ diff --git a/vcm/js/navigation.js b/vcm/js/navigation.js new file mode 100644 index 0000000000000000000000000000000000000000..017b398cd798ab691360e6535a3677e3142e6396 --- /dev/null +++ b/vcm/js/navigation.js @@ -0,0 +1,243 @@ +function getStart(point){ + +pointsoe = point; + + + + + +} +var pointsoe =""; + + +function PostNavPoint(testing){ + + try { + + $.ajax({ + async: true, + type: "POST", + url: '/navPoint', + data: point + }).done(function (SimSMid) { + console.log(SimSMid) + convertdata(); + return(SimSMid) + + }); + + function convertdata() { + console.log("angekommen......") + if (testing == "Start"){ + showStartPoint(); + } else if (testing == "End"){ + showEndPoint(); + } + + } + + // // console.log(currentwind); + // return SimSOutput; + } + catch (err) { + console.log('-> function PostUserInput() failed!\n' + err); + } +} + + +function showStartPoint(){ + var layern = ["Startpoint"] + var layers = framework.getLayers(); + + for (var i = 0; i< layers.length; i++) { + var layer = layers[i]; + if(layern.indexOf(layer.name) >= 0){ + layer.activate(false); + + } + } + framework.removeLayerByName("Startpoint") + console.log("testStartpointvis") + Startpointlayer = new vcs.vcm.layer.GeoJSON({ + name: "Startpoint", + url: "http://localhost:8083/Startpoint", + data: geojson, + projection: { + epsg: 4326 + }, + altitudeMode : "relativeToGround", + style: { + image: { + icon: { + src: "./templates/locationSM.png", + scale: 0.5 + } + } + }, + heightAboveGround: 0 + }) + framework.addLayer(Startpointlayer) + Startpointlayer.activate(true); +} +function showEndPoint(){ + var layern = ["EndpointNav"] + var layers = framework.getLayers(); + + for (var i = 0; i< layers.length; i++) { + var layer = layers[i]; + if(layern.indexOf(layer.name) >= 0){ + layer.activate(false); + + } + }framework.removeLayerByName("EndpointNav") + // console.log("testStartpointvis") + Endpointlayer = new vcs.vcm.layer.GeoJSON({ + name: "EndpointNav", + url: "http://localhost:8083/Endpoint", + data: geojson, + projection: { + epsg: 4326 + }, + altitudeMode : "relativeToGround", + style: { + image: { + icon: { + src: "./templates/locationSM.png", + scale: 0.5 + } + } + }, + heightAboveGround: 0 + }) + framework.addLayer(Endpointlayer) + Endpointlayer.activate(true); +} + +function showRoute(){ + var datapointSend = { + slat:"", + slon:"", + sloc:"", + elat: "", + elon: "", + eloc: "" + + } + datapointSend.slat = document.getElementById("Spunktlat").value; + datapointSend.slon = document.getElementById("Spunktlon").value; + datapointSend.elat = document.getElementById("Epunktlat").value; + datapointSend.elon = document.getElementById("Epunktlon").value; + + try { + + $.ajax({ + async: true, + type: "POST", + url: '/Routecalc', + data: datapointSend + }).done(function (SimSMid) { + console.log(SimSMid) + convertdata(SimSMid); + return(SimSMid) + + }); + + function convertdata(data) { + console.log("angekommen......") + document.getElementById("Routeduration").value = data.features[0].properties.minutesDifference + " min " + data.features[0].properties.secondsDifference + " sek"; + if (testing == "Start"){ + // showStartPoint(); + } else if (testing == "End"){ + // showEndPoint(); + } + // drawnavcar(); + } + + // // console.log(currentwind); + // return SimSOutput; + } + catch (err) { + console.log('-> function PostUserInput() failed!\n' + err); + } + + try { + + $.ajax({ + async: true, + type: "POST", + url: '/navPublicT', + data: datapointSend + }).done(function (SimSMid) { + console.log(SimSMid) + // convertdata(); + return(SimSMid) + + }); + + function convertdata() { + console.log("angekommen......") + if (testing == "Start"){ + showStartPoint(); + } else if (testing == "End"){ + showEndPoint(); + } + + } + + // // console.log(currentwind); + // return SimSOutput; + } + catch (err) { + console.log('-> function PostUserInput() failed!\n' + err); + } + +} + +function publictransport(){ + var datapointSend = { + slat:"", + slon:"", + sloc:"", + elat: "", + elon: "", + eloc: "" + + } + datapointSend.slat = document.getElementById("Spunktlat").value; + datapointSend.slon = document.getElementById("Spunktlon").value; + datapointSend.elat = document.getElementById("Epunktlat").value; + datapointSend.elon = document.getElementById("Epunktlon").value; + console.log(datapointSend); + try { + + $.ajax({ + async: true, + type: "get", + url: '/navPublicT', + data: datapointSend + }).done(function (SimSMid) { + console.log(SimSMid) + // convertdata(); + return(SimSMid) + + }); + + function convertdata() { + console.log("angekommen......") + if (testing == "Start"){ + showStartPoint(); + } else if (testing == "End"){ + showEndPoint(); + } + + } + + // // console.log(currentwind); + // return SimSOutput; + } + catch (err) { + console.log('-> function PostUserInput() failed!\n' + err); + } + + +}; \ No newline at end of file diff --git a/vcm/templates/UserBalloon.js b/vcm/templates/UserBalloon.js index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..54a04d3fc2f5355b84e5e2426acf7e15b1216d6d 100644 --- a/vcm/templates/UserBalloon.js +++ b/vcm/templates/UserBalloon.js @@ -0,0 +1,89 @@ +var ballonContent = { + header: "Test", + Content: "This is a test", + lat: "", + lon: "", + categorie: "" + } + var point = { + lat:"", + lon:"", + loc:"" + } + +// var Startlat +// var Startlon +// var Endlat +// var Endlon +// var pointsoe + +function getPosition() { + var map = vcs.vcm.Framework.getInstance().getActiveMap(); + var CViewer = map.viewer + var CScene = map.viewer.scene + if (document.getElementById("Navigation").style.display == "block"){ + // Mouse over the globe to see the cartographic position + handler = new Cesium.ScreenSpaceEventHandler(CScene.canvas); + handler.setInputAction(function (movement) { + var cartesian = CViewer.camera.pickEllipsoid( + movement.position, + CScene.globe.ellipsoid + ); + if (cartesian) { + console.log(cartesian) + var cartographic = Cesium.Cartographic.fromCartesian(cartesian); + // var geographic = Cesium.geographic.fromCartesion(cartesian); + console.log(cartographic) + var longitudeString = Cesium.Math.toDegrees( + cartographic.longitude + ); + ballonContent.lon = longitudeString; + var latitudeString = Cesium.Math.toDegrees( + cartographic.latitude + ); + ballonContent.lat = latitudeString; + // alert( "Lon: " + longitudeString + + // "\u00B0" + + // "\nLat: " + + // (" " + latitudeString).slice(-7) + + // "\u00B0"); + + // PostUserInput(); + if (pointsoe == "Start"){ + point.lat = ballonContent.lat + point.lon = ballonContent.lon + point.loc = "Start" + var text = document.getElementById('Spunktlat'); + text.value = ballonContent.lat; + var text = document.getElementById('Spunktlon'); + text.value = ballonContent.lon; + + PostNavPoint("Start"); + + + } else if (pointsoe == "End"){ + point.lat = ballonContent.lat + point.lon = ballonContent.lon + point.loc = "End" + + var text = document.getElementById('Epunktlat'); + text.value = ballonContent.lat; + var text = document.getElementById('Epunktlon'); + text.value = ballonContent.lon; + PostNavPoint("End"); + + } + + + } else { + + } + }, Cesium.ScreenSpaceEventType.LEFT_CLICK) + + + } + + + + +} \ No newline at end of file diff --git a/vcm/templates/custom.js b/vcm/templates/custom.js index 317359a7fea8d9b124e16eb3c6d186367cb9a38d..77a9b47b3e9fbcbbfeb2762d8c02deff75e994f4 100644 --- a/vcm/templates/custom.js +++ b/vcm/templates/custom.js @@ -56,6 +56,7 @@ function showtourSpecific(specify) { document.getElementById("UmfrageOne").style.display = "none"; document.getElementById("NordbahnhofInfo").style.display = "none"; document.getElementById("Energiekonzept").style.display = "none"; + document.getElementById("Navigation").style.display = "none"; document.getElementById("projektOne").style.display = "block"; showTour(); @@ -104,6 +105,7 @@ function EnergiekonzeptFunction(content){ document.getElementById("UmfrageOne").style.display = "none"; document.getElementById("NordbahnhofInfo").style.display = "none"; + document.getElementById("Navigation").style.display = "none"; document.getElementById("projektOne").style.display = "none"; document.getElementById("Energiekonzept").style.display = "block"; showTour(); @@ -224,11 +226,21 @@ function goHome(){ vcs.vcm.Framework.getInstance().getActiveMap().gotoViewPoint(viewp) } +function Navigationshow() { + document.getElementById("projektOne").style.display = "none"; + document.getElementById("Energiekonzept").style.display = "none"; + document.getElementById("UmfrageOne").style.display = "none"; + document.getElementById("Navigation").style.display = "block"; + document.getElementById("NordbahnhofInfo").style.display = "none"; + + showTour(); +} //--------------------------------------------------------------------------------------- function NordbahnhofText() { document.getElementById("projektOne").style.display = "none"; document.getElementById("Energiekonzept").style.display = "none"; document.getElementById("UmfrageOne").style.display = "none"; + document.getElementById("Navigation").style.display = "none"; document.getElementById("NordbahnhofInfo").style.display = "block"; showTour();