From 968f07865e373fc914b6ca9ba848709bf890200f Mon Sep 17 00:00:00 2001 From: Rushikesh Padsala <rushikesh.padsala@hft-stuttgart.de> Date: Tue, 7 Sep 2021 09:34:43 +0000 Subject: [PATCH] Upload New File --- public/App.js | 959 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 959 insertions(+) create mode 100644 public/App.js diff --git a/public/App.js b/public/App.js new file mode 100644 index 0000000..863a0f3 --- /dev/null +++ b/public/App.js @@ -0,0 +1,959 @@ + Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkNjcyOWZhYi0xZmQ0LTQyYmMtYjQ0MS1hY2YxYzcxYWFmMWEiLCJpZCI6MTEwNzEsImlhdCI6MTYzMDk5MzEyNX0.fcsH4S5hE0ye9s-2cOFMyObiHlhu9vqjWdlYfGkv5gU'; + var flatterrain = new Cesium.EllipsoidTerrainProvider(); + var terrainProviderViewModels = []; + terrainProviderViewModels.push(new Cesium.ProviderViewModel({ + name : 'Flat', + iconUrl : Cesium.buildModuleUrl('https://w2.iaf.hft-stuttgart.de/CesiumData/Images/TerrainProviders/Ellipsoid.png'), + creationFunction : function() { + return flatterrain; + } + })); + ////////////////////////////////////////////////////////////////////////// + // Creating the Viewer + ////////////////////////////////////////////////////////////////////////// + + var viewer = new Cesium.Viewer('cesiumContainer', { + scene3DOnly: true, + selectionIndicator: false, + timeline: false, + animation: false, + shadow: false, + // // Set default basemap + imageryProvider : new Cesium.ArcGisMapServerImageryProvider({ + url : 'https://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer', + enablePickFeatures: false +}), + + baseLayerPicker: true, + terrainProviderViewModels : terrainProviderViewModels + + }); + + viewer.clock.shouldAnimate = false; + viewer.scene.globe.enableLighting = false; + viewer.clock.startTime = Cesium.JulianDate.fromIso8601("2019-08-20T12:00:00Z"); + viewer.clock.stopTime = Cesium.JulianDate.fromIso8601("2019-08-20T12:20:00Z"); + viewer.clock.currentTime = Cesium.JulianDate.fromIso8601("2019-08-20T12:00:00Z"); + document.getElementById("legend").style.display = "none"; //defining legends hidden by default + document.getElementById("biolegend").style.display = "none"; + document.getElementById("foodlegend").style.display = "none"; + ////////////////////////////////////////////////////////////////////////// + // Configuring the camera + ////////////////////////////////////////////////////////////////////////// +var initialPosition = Cesium.Cartesian3.fromDegrees(9.306042, 48.919172, 350); + var initialOrientation = new Cesium.HeadingPitchRoll.fromDegrees(78, -25, 0); + var homeCameraView = { + destination : initialPosition, + orientation : { + heading : initialOrientation.heading, + pitch : initialOrientation.pitch, + roll : initialOrientation.roll + } + }; + // // Set the initial view + viewer.scene.camera.setView(homeCameraView); + // set home button to initial view + + viewer.homeButton.viewModel.command.beforeExecute.addEventListener(function (e) { + e.cancel = true; + viewer.scene.camera.flyTo(homeCameraView); + document.getElementById("selectscenario").selectedIndex = 0; + }); + viewer.camera.changed.addEventListener(function() { + + var deg = Math.round( Cesium.Math.toDegrees(viewer.camera.heading)) + console.log('Heading:', deg) + + var deg = Math.round( Cesium.Math.toDegrees(viewer.camera.pitch)) + console.log('Pitch:', deg) + + var deg = Math.round( Cesium.Math.toDegrees(viewer.camera.roll)) + console.log('Roll:', deg) + + +}); +var geocoder = viewer.geocoder.viewModel; +var selectscenario = document.getElementById('selectscenario'); + function setscenario() { + var selectedscenario = selectscenario.options[selectscenario.selectedIndex].value; + if (selectedscenario === 'Affalterbach') { +geocoder.searchText = "9.322672, 48.920187, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Aldingen') { +geocoder.searchText = "9.252892, 48.865336, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Asperg') { +geocoder.searchText = "9.141226, 48.905069, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Aurich') { +geocoder.searchText = "8.946047, 48.913813, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Benningen') { +geocoder.searchText = "9.240017, 48.942798, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Besigheim') { +geocoder.searchText = "9.144831, 48.998353, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Bietigheim') { +geocoder.searchText = "9.124918, 48.957679, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Bissingen') { +geocoder.searchText = "9.099340, 48.943362, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Bönnigheim') { +geocoder.searchText = "9.094191, 49.039106, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Ditzingen') { +geocoder.searchText = "9.070072, 48.826701, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Eberdingen') { +geocoder.searchText = "8.966603, 48.878687, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Ensingen') { +geocoder.searchText = "8.949866, 48.968301, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Enzweihingen') { +geocoder.searchText = "8.983641, 48.917085, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Erdmannshausen') { +geocoder.searchText = "9.297180, 48.942601, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Erligheim') { +geocoder.searchText = "9.099255, 49.019982, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Freudental') { +geocoder.searchText = "9.060030, 49.007897, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Gemmrigheim') { +geocoder.searchText = "9.157791, 49.025488, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Gerlingen') { +geocoder.searchText = "9.066982, 48.799599, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Gronau') { +geocoder.searchText = "9.339477, 49.033306, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Großbottwar') { +geocoder.searchText = "9.297867, 49.001647, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Großingersheim') { +geocoder.searchText = "9.181308, 48.961557, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Großsachsenheim') { +geocoder.searchText = "9.069214, 48.959454, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Gündelbach') { +geocoder.searchText = "8.942785, 48.993594, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Häfnerhaslach') { +geocoder.searchText = "8.919954, 49.025206, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Heimerdingen') { +geocoder.searchText = "8.981667, 48.852009, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Hemmingen') { +geocoder.searchText = "9.035182, 48.864743, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Hessigheim') { +geocoder.searchText = "9.186587, 48.995087, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Hirschlanden') { +geocoder.searchText = "9.041362, 48.836701, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Hochberg') { +geocoder.searchText = "9.282289, 48.886279, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Hochdorf(Eberdingen)') { +geocoder.searchText = "9.000077, 48.886364, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Hochdorf(Remseck)') { +geocoder.searchText = "9.296408, 48.897932, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'HofundLembach') { +geocoder.searchText = "9.313488, 49.009558, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Hofen') { +geocoder.searchText = "9.120818, 49.024661, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Hohenhaslach') { +geocoder.searchText = "9.018874, 48.999817, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Hohenstein') { +geocoder.searchText = "9.121184, 49.039500, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Höpfigheim') { +geocoder.searchText = "9.243751, 48.980555, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Horrheim') { +geocoder.searchText = "8.988061, 48.977964, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Kirchheim') { +geocoder.searchText = "9.147062, 49.039922, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Kleinbottwar') { +geocoder.searchText = "9.288812, 48.979625, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Kleinglattbach') { +geocoder.searchText = "8.969779, 48.951254, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Kleiningersheim') { +geocoder.searchText = "9.200536, 48.974995, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Kleinsachsenheim') { +geocoder.searchText = "9.071403, 48.969794, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Löchgau') { +geocoder.searchText = "9.109511, 49.001534, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Marbach') { +geocoder.searchText = "9.261646, 48.938119, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Markgrönningen') { +geocoder.searchText = "9.084578, 48.903659, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Möglingen') { +geocoder.searchText = "9.130197, 48.888762, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Mundelsheim') { +geocoder.searchText = "9.209633, 48.996945, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Murr') { +geocoder.searchText = "9.255123, 48.960609, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Neckargröningen') { +geocoder.searchText = "9.273362, 48.877361, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Neckarrems') { +geocoder.searchText = "9.279370, 48.869994, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Nussdorf') { +geocoder.searchText = "8.940296, 48.894688, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Oberriexingen') { +geocoder.searchText = "9.024110, 48.927716, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Oberstenfeld') { +geocoder.searchText = "9.322629, 49.023433, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Ochsenbach') { +geocoder.searchText = "8.983254, 49.020450, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Ottmarsheim') { +geocoder.searchText = "9.204526, 49.016510, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Pleidelsheim') { +geocoder.searchText = "9.202638, 48.958017, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Rielingshausen') { +geocoder.searchText = "9.329710, 48.960638, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Riet') { +geocoder.searchText = "8.971796, 48.893531, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Roßwag') { +geocoder.searchText = "8.914676, 48.935272, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Schöckingen') { +geocoder.searchText = "9.028401, 48.846163, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Schwieberdingen') { +geocoder.searchText = "9.076896, 48.875046, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Sersheim') { +geocoder.searchText = "9.012909, 48.957735, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Spielberg') { +geocoder.searchText = "8.999734, 49.016876, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Steinheim') { +geocoder.searchText = "9.276237, 48.967372, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Vaihingen') { +geocoder.searchText = "8.962269, 48.932932, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Walheim') { +geocoder.searchText = "9.151869, 49.011246, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + else if (selectedscenario === 'Winzerhausen') { +geocoder.searchText = "9.265199, 49.023704, 700"; +geocoder.flightDuration = 5; +geocoder.search();} + } + selectscenario.addEventListener('change', setscenario); + ////////////////////////////////////////////////////////////////////////// + // Load 3D Tileset + ////////////////////////////////////////////////////////////////////////// + + + var building = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url: + 'https://w2.iaf.hft-stuttgart.de/CesiumData/3DTiles/Buildings/BuildingSolid/LKRLudwigsburg/tileset.json'})); + + var roofsurface = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url: + 'https://w2.iaf.hft-stuttgart.de/CesiumData/3DTiles/Buildings/RoofSurface/LKRLudwigsburg/tileset.json'})); + var roofdefaultstyle = new Cesium.Cesium3DTileStyle({color : "color('#990000')"}); + roofsurface.style = roofdefaultstyle; + // set roof height and load roof tile + roofsurface.readyPromise.then(function(tileset) { + height = 0.02; + viewer.scene.primitives.add(tileset); + var cartographic = Cesium.Cartographic.fromCartesian(tileset.boundingSphere.center); + var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, 0.0); + var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, height); + var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3()); + tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation); + console.log(error); + }); + roofsurface.show =true; + var landuse = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url: 'https://w2.iaf.hft-stuttgart.de/CesiumData/3DTiles/Landuse/LKRLudwigsburg/tileset.json'})); + + + + landuse.show = false; + + + function showbuildings() { + if (document.getElementById('buildings').checked) {building.show = true; + roofsurface.show = true; + } + else {building.show = false; + roofsurface.show = false;} + } + + // Style landuse Tileset + + var landusestyle = new Cesium.Cesium3DTileStyle({ + color : { + conditions : [ + ["${LU_Class} === 'Settlement Area'", "color('#FFFF008C')"], + ["${LU_Class} === 'Open Plot'", "color('#FFC3008C')"], + ["${LU_Class} === 'Traffic Area'", "color('#8888888C')"], + ["${LU_Class} === 'Vegetation'", "color('#44EE0D8C')"], + ["${LU_Class} === 'Water Body'", "color('#0DC2EE8C')"], + ] + }, + show: true + }); + + + var bioenergystyle = new Cesium.Cesium3DTileStyle({ + color : { + conditions : [ + ["(${t_bionrg_p} === 0)", "color('#8000008C')"], + ["(${t_bionrg_p} > 0) && (${t_bionrg_p} < 50)", "color('#FF00008C')"], + ["(${t_bionrg_p} >= 50) && (${t_bionrg_p} < 150)", "color('#FFA5008C')"], + ["(${t_bionrg_p} >= 150) && (${t_bionrg_p} < 350)", "color('#FFFF008C')"], + ["(${t_bionrg_p} >= 350) && (${t_bionrg_p} < 650)", "color('#00FF008C')"], + ["(${t_bionrg_p} >= 650)", "color('#00A3008C')"] + ] + }, + show: true + }); + + var foodpotentialstyle = new Cesium.Cesium3DTileStyle({ + color : { + conditions : [ + ["(${t_food_p} === 0)", "color('#A110598C')"], + ["(${t_food_p} > 0) && (${t_food_p} < 50000)", "color('#FF00808C')"], + ["(${t_food_p} >= 50000) && (${t_food_p} < 100000)", "color('#916D808C')"], + ["(${t_food_p} >= 100000) && (${t_food_p} < 200000)", "color('#00FF808C')"], + ["(${t_food_p} >= 200000) && (${t_food_p} < 300000)", "color('#0089BA8C')"], + ["(${t_food_p} >= 300000)", "color('#0000FF8C')"] + ] + }, + show: true + }); + + + + + function showlanduse() { + if (document.getElementById('landuse').checked) { + landuse.show = true; + landuse.style = landusestyle; + document.getElementById("legend").style.display = "block"; + document.getElementById("biolegend").style.display = "none"; + document.getElementById("foodlegend").style.display = "none"; + } + else { + landuse.show = false; + document.getElementById("legend").style.display = "none"; + document.getElementById("biolegend").style.display = "none"; + document.getElementById("foodlegend").style.display = "none"; + } + } + + + function showbioenergypotential(){ + if (document.getElementById('foodpotential').checked) { + alert("At a time either food potential analysis or bioenergy potential analysis is possible. Please uncheck one of the two analysis selection first and then re-select this option."); + return false; +} +else { + if (document.getElementById('landuse').checked) { + if (document.getElementById('bioenergypotential').checked) { + + landuse.show = true; + landuse.style = bioenergystyle; + document.getElementById("biolegend").style.display = "block"; + document.getElementById("foodlegend").style.display = "none"; + document.getElementById("legend").style.display = "none"; + } + else { + landuse.show = true; + landuse.style = landusestyle; + document.getElementById("biolegend").style.display = "none"; + document.getElementById("foodlegend").style.display = "none"; + document.getElementById("legend").style.display = "block"; + } + } + else { + alert("Please select the landuse layer under 3D city model first, and then re-select this option."); + return false; +} + } + } + + + function showfoodpotential(){ + if (document.getElementById('bioenergypotential').checked) { + alert("At a time either food potential analysis or bioenergy potential analysis is possible. Please uncheck one of the two analysis selection first and then re-select this option."); + return false; +} +else { + if (document.getElementById('landuse').checked) { + if (document.getElementById('foodpotential').checked) { + + landuse.show = true; + landuse.style = foodpotentialstyle; + document.getElementById("biolegend").style.display = "none"; + document.getElementById("foodlegend").style.display = "block"; + document.getElementById("legend").style.display = "none"; + } + else { + landuse.show = true; + landuse.style = landusestyle; + document.getElementById("biolegend").style.display = "none"; + document.getElementById("foodlegend").style.display = "none"; + document.getElementById("legend").style.display = "block"; + } + } + else { + alert("Please select the landuse layer under 3D city model first, and then re-select this option."); + return false; +} + } + } + + + + ////////////////////////////////////////////////////////////////////////// + // Style 3D Tileset + ////////////////////////////////////////////////////////////////////////// + + var buildingdefaultstyle = new Cesium.Cesium3DTileStyle({ + color : "color('WHITE')", + show: true + }); + + var heatenergydemandstyle = new Cesium.Cesium3DTileStyle({ + color : { + conditions : [ + [' Number(${Sp_Ht_Dmnd}) >= 225', "color('red')"], + [' Number(${Sp_Ht_Dmnd}) >= 125', "mix(color('yellow'), color('red'), (Number(${Sp_Ht_Dmnd}) -125) / 125)"], + [' Number(${Sp_Ht_Dmnd}) >= 1', "mix(color('green'), color('yellow'), (Number(${Sp_Ht_Dmnd}) ) / 125)"], + [' Number(${Sp_Ht_Dmnd}) < 1', "color('#ffffff1A')"], + ['true', "color('#ffffff1A')"] + ] + + }, + show: true + }); + + var heatdemandstyle = document.getElementById('heatdemand'); + function showheatdemand() { + if (document.getElementById('pvpotential').checked) { + alert("At a time either of food demand, water demand, heating energy demand or rooftop photovoltaic potential demand analysis is possible. Please uncheck the current analysis selection first and then re-select this option."); + return false; +} + else if (document.getElementById('fooddemand').checked) { + alert("At a time either of food demand, water demand, heating energy demand or rooftop photovoltaic potential demand analysis is possible. Please uncheck the current analysis selection first and then re-select this option."); + return false; +} + +else if (document.getElementById('waterdemand').checked) { + alert("At a time either of food demand, water demand, heating energy demand or rooftop photovoltaic potential demand analysis is possible. Please uncheck the current analysis selection first and then re-select this option."); + return false; +} + +else + + { + if (document.getElementById('buildings').checked) { + if (heatdemandstyle.checked) { + + roofsurface.show = false; + building.style = heatenergydemandstyle; + document.getElementById("heat-demand-legend").style.display = "block"; + } + else { + + roofsurface.show = true; + building.style = buildingdefaultstyle; + roofsurface.style = roofdefaultstyle; + document.getElementById("heat-demand-legend").style.display = "none"; + } + } + else { + alert("Please select the buildings layer under 3D city model first, and then re-select this option."); + return false; +} + } + } + + + + + + + + + + + + var totalfooddemandstyle = new Cesium.Cesium3DTileStyle({ + color : { + conditions : [ + ["(${T_Fd_Dmnd} === 0)", "color('#ffffff1A')"], + ["(${T_Fd_Dmnd} > 0) && (${T_Fd_Dmnd} < 5000)", "color('#00FF80')"], + ["(${T_Fd_Dmnd} >= 5000) && (${T_Fd_Dmnd} < 10000)", "color('#00C49D')"], + ["(${T_Fd_Dmnd} >= 10000) && (${T_Fd_Dmnd} < 15000)", "color('#0089BA')"], + ["(${T_Fd_Dmnd} >= 15000) && (${T_Fd_Dmnd} < 20000)", "color('#0062CE')"], + ["(${T_Fd_Dmnd} >= 20000)", "color('#0000FF')"] + ] + + }, + show: true + }); + + var fooddemandstyle = document.getElementById('fooddemand'); + function showfooddemand() { + if (document.getElementById('pvpotential').checked) { + alert("At a time either of food demand, water demand, heating energy demand or rooftop photovoltaic potential demand analysis is possible. Please uncheck the current analysis selection first and then re-select this option."); + return false; +} + else if (document.getElementById('heatdemand').checked) { + alert("At a time either of food demand, water demand, heating energy demand or rooftop photovoltaic potential demand analysis is possible. Please uncheck the current analysis selection first and then re-select this option."); + return false; +} + +else if (document.getElementById('waterdemand').checked) { + alert("At a time either of food demand, water demand, heating energy demand or rooftop photovoltaic potential demand analysis is possible. Please uncheck the current analysis selection first and then re-select this option."); + return false; +} + +else + + { + if (document.getElementById('buildings').checked) { + if (fooddemandstyle.checked) { + + roofsurface.show = false; + building.style = totalfooddemandstyle; + document.getElementById("food-demand-legend").style.display = "block"; + } + else { + + roofsurface.show = true; + building.style = buildingdefaultstyle; + roofsurface.style = roofdefaultstyle; + document.getElementById("food-demand-legend").style.display = "none"; + } + } + else { + alert("Please select the buildings layer under 3D city model first, and then re-select this option."); + return false; +} + } + } + + + + + + + + + + + + + + + + + var totalwaterdemandstyle = new Cesium.Cesium3DTileStyle({ + color : { + conditions : [ + ["(${Wtr_Dmnd} === 0)", "color('#ffffff1A')"], + ["(${Wtr_Dmnd} > 0) && (${Wtr_Dmnd} < 500)", "color('#33ACFF')"], + ["(${Wtr_Dmnd} >= 500) && (${Wtr_Dmnd} < 1000)", "color('#2AFF00')"], + ["(${Wtr_Dmnd} >= 1000) && (${Wtr_Dmnd} < 5000)", "color('#FFFF00')"], + ["(${Wtr_Dmnd} >= 5000) && (${Wtr_Dmnd} < 10000)", "color('#FFA200')"], + ["(${Wtr_Dmnd} >= 10000)", "color('#FF0000')"] + ] + + + + }, + show: true + }); + + var waterdemandstyle = document.getElementById('waterdemand'); + function showwaterdemand() { + if (document.getElementById('pvpotential').checked) { + alert("At a time either of food demand, water demand, heating energy demand or rooftop photovoltaic potential demand analysis is possible. Please uncheck the current analysis selection first and then re-select this option."); + return false; +} + else if (document.getElementById('fooddemand').checked) { + alert("At a time either of food demand, water demand, heating energy demand or rooftop photovoltaic potential demand analysis is possible. Please uncheck the current analysis selection first and then re-select this option."); + return false; +} + +else if (document.getElementById('heatdemand').checked) { + alert("At a time either of food demand, water demand, heating energy demand or rooftop photovoltaic potential demand analysis is possible. Please uncheck the current analysis selection first and then re-select this option."); + return false; +} + +else + + { + if (document.getElementById('buildings').checked) { + if (waterdemandstyle.checked) { + + roofsurface.show = false; + building.style = totalwaterdemandstyle; + document.getElementById("water-demand-legend").style.display = "block"; + } + else { + + roofsurface.show = true; + building.style = buildingdefaultstyle; + roofsurface.style = roofdefaultstyle; + document.getElementById("water-demand-legend").style.display = "none"; + } + } + else { + alert("Please select the buildings layer under 3D city model first, and then re-select this option."); + return false; +} + } + } + + + var roofPVstyle = new Cesium.Cesium3DTileStyle({ + color : { + conditions : [ + [' Number(${PV_potential_yield}) >= 10', "color('green')"], + [' Number(${PV_potential_yield}) >= 5', "mix(color('yellow'), color('green'), (Number(${PV_potential_yield}) -5) /5)"], + [' Number(${PV_potential_yield}) >= 1', "mix(color('red'), color('yellow'), (Number(${PV_potential_yield}) ) /5)"], + [' Number(${PV_potential_yield}) < 1', "color('red')"], + ['true', 'rgb(0, 0, 0)'] + ] + + }, + show: true + }); + + var pvpotentialstyle = document.getElementById('pvpotential'); + function showpvpotential(){ + if (document.getElementById('heatdemand').checked) { + alert("At a time either of food demand, water demand, heat energy demand or PV potential demand can be selected. Please uncheck the current analysis selection first and then re-select this option."); + return false; +} + + +else if (document.getElementById('fooddemand').checked) { + alert("At a time either of food demand, water demand, heat energy demand or PV potential demand can be selected. Please uncheck the current analysis selection first and then re-select this option."); + return false; +} + +else if (document.getElementById('waterdemand').checked) { + alert("At a time either of food demand, water demand, heat energy demand or PV potential demand can be selected. Please uncheck the current analysis selection first and then re-select this option."); + return false; +} + +else { + if (document.getElementById('buildings').checked) { + if (pvpotentialstyle.checked) { + + roofsurface.show = true; + roofsurface.style = roofPVstyle; + document.getElementById("pv-potential-legend").style.display = "block"; + } + else { + + roofsurface.show = true; + roofsurface.style = roofdefaultstyle; + document.getElementById("pv-potential-legend").style.display = "none"; + } + } + else { + alert("Please select the buildings layer under 3D city model first, and then re-select this option."); + return false; +} + } + } + + + ////////////////////////////////////////////////////////////////////////// + // Custom mouse interaction for highlighting and selecting + ////////////////////////////////////////////////////////////////////////// + + +//Selecting a Building +var Pickers_3DTile_Activated = true; +// Information about the currently highlighted feature +function active3DTilePicker() { + var highlighted = { + feature: undefined, + originalColor: new Cesium.Color() + }; + // Information about the currently selected feature + var selected = { + feature: undefined, + originalColor: new Cesium.Color() + }; + + // An entity object which will hold info about the currently selected feature for infobox display + var selectedEntity = new Cesium.Entity(); + + // Get default left click handler for when a feature is not picked on left click + var clickHandler = viewer.screenSpaceEventHandler.getInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK); + // Color a feature yellow on hover. + viewer.screenSpaceEventHandler.setInputAction(function onMouseMove(movement) { + if (Pickers_3DTile_Activated) { + // If a feature was previously highlighted, undo the highlight + if (Cesium.defined(highlighted.feature)) { + highlighted.feature.color = highlighted.originalColor; + highlighted.feature = undefined; + } + // Pick a new feature + var picked3DtileFeature = viewer.scene.pick(movement.endPosition); + if (!Cesium.defined(picked3DtileFeature)) { + return; + } + + // Highlight the feature if it's not already selected. + if (picked3DtileFeature !== selected.feature) { + highlighted.feature = picked3DtileFeature; + Cesium.Color.clone(picked3DtileFeature.color, highlighted.originalColor); + picked3DtileFeature.color = Cesium.Color.BLANCHEDALMOND; + } + } + }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); + + // Color a feature on selection and show metadata in the InfoBox. + viewer.screenSpaceEventHandler.setInputAction(function onLeftClick(movement) { + + if (Pickers_3DTile_Activated) { + // If a feature was previously selected, undo the highlight + if (Cesium.defined(selected.feature)) { + selected.feature.color = selected.originalColor; + selected.feature = undefined; + var options = null; + } + // Pick a new feature + var picked3DtileFeature = viewer.scene.pick(movement.position); + if (!Cesium.defined(picked3DtileFeature)) { + clickHandler(movement); + return; + } + // Select the feature if it's not already selected + if (selected.feature === picked3DtileFeature) { + return; + } + selected.feature = picked3DtileFeature; + // Save the selected feature's original color + if (picked3DtileFeature === highlighted.feature) { + Cesium.Color.clone(highlighted.originalColor, selected.originalColor); + highlighted.feature = undefined; + } else { + Cesium.Color.clone(picked3DtileFeature.color, selected.originalColor); + } + // Highlight newly selected feature + picked3DtileFeature.color = Cesium.Color.BLANCHEDALMOND; + // Set feature infobox description - if condition is for different info box for different entities such as building solids, roofs, landuse etc + + if (picked3DtileFeature.getProperty('Semantic') === "Building") { + + + var featureName = "Information Box"; + selectedEntity.name = featureName; + selectedEntity.description = 'Loading <div class="cesium-infoBox-loading"></div>'; + + viewer.selectedEntity = selectedEntity; + selectedEntity.description = + '<table class="cesium-infoBox-defaultTable"><tbody>' + + '<tr><th>Building ID</th><td>' + picked3DtileFeature.getProperty('gml_id') + '</td></tr>' + + '<tr><th>Building Type</th><td>' + picked3DtileFeature.getProperty('Bldg_Type') + '</td></tr>' + + '<tr><th>Building Height</th><td>' + picked3DtileFeature.getProperty('citygml_measured_height') + ' ' + 'm' + '</td></tr>' + + '<tr><th>Year of Construction</th><td>' + picked3DtileFeature.getProperty('citygml_ye') + '</td></tr>' + + '<tr><th>Building Storeys Above Ground</th><td>' + picked3DtileFeature.getProperty('Stry_Nmbr') + '</td></tr>' + + '<tr><th>Average Storey Height</th><td>' + picked3DtileFeature.getProperty('AvgStry_Ht') + ' ' + 'm' + '</td></tr>' + + '<tr><th>Estimated Total Housing Units</th><td>' + picked3DtileFeature.getProperty('Nmbr_House') + '</td></tr>' + + '<tr><th>Estimated Total Residents</th><td>' + picked3DtileFeature.getProperty('Nmbr_Occ') + '</td></tr>' + + '<tr><th>Location</th><td>' + picked3DtileFeature.getProperty('FWE_Area') + '</td></tr>' + + '<tr><th>Region</th><td>' + 'Landkreis Ludwigsburg' + '</td></tr>' + + '<tr><th>Vegetal Food Demand</th><td>' + picked3DtileFeature.getProperty('Fd_Dmnd_V') + ' ' + '10^3 kcal/yr' + '</td></tr>' + + '<tr><th>Animal Food Demand</th><td>' + picked3DtileFeature.getProperty('Fd_Dmnd_A') + ' ' + '10^3 kcal/yr' + '</td></tr>' + + '<tr><th>Total Food Demand</th><td>' + picked3DtileFeature.getProperty('T_Fd_Dmnd') + ' ' + '10^3 kcal/yr' + '</td></tr>' + + '<tr><th>Water Demand</th><td>' + picked3DtileFeature.getProperty('Wtr_Dmnd') + ' ' + 'cu.m/yr' + '</td></tr>' + + '<tr><th>Specific Space Heating Demand</th><td>' + picked3DtileFeature.getProperty('Sp_Ht_Dmnd') + ' ' + 'kWh/m²*yr' + '</td></tr>' + + '</tbody></table>'; + + console.log(picked3DtileFeature.getProperty('Semantic'));} + + + else if (picked3DtileFeature.getProperty('Semantic') === "RoofSurface") { + + + var featureName = "Information Box"; + selectedEntity.name = featureName; + selectedEntity.description = 'Loading <div class="cesium-infoBox-loading"></div>'; + + viewer.selectedEntity = selectedEntity; + selectedEntity.description = + '<table class="cesium-infoBox-defaultTable"><tbody>' + + '<tr><th>Building ID</th><td>' + picked3DtileFeature.getProperty('gml_id') + '</td></tr>' + + '<tr><th>Building Parent ID</th><td>' + picked3DtileFeature.getProperty('gml_parent_id') + '</td></tr>' + + '<tr><th>Roof Area </th><td>' + picked3DtileFeature.getProperty('roof_area') + ' ' + 'm²' + '</td></tr>' + + '<tr><th>Photovoltaic Potential</th><td>' + picked3DtileFeature.getProperty('PV_potential_yield') + ' ' + 'MWh/yr' + '</td></tr>' + + '</tbody></table>'; + + console.log(picked3DtileFeature.getProperty('Semantic'));} + + else if (picked3DtileFeature.getProperty('Semantic') === "LandUse") { + + + var featureName = "Information Box"; + selectedEntity.name = featureName; + selectedEntity.description = 'Loading <div class="cesium-infoBox-loading"></div>'; + + viewer.selectedEntity = selectedEntity; + selectedEntity.description = + '<table class="cesium-infoBox-defaultTable"><tbody>' + + '<tr><th>LandUse ID</th><td>' + picked3DtileFeature.getProperty('LU_ID') + '</td></tr>' + + '<tr><th>LandUse Type</th><td>' + picked3DtileFeature.getProperty('LU_Class') + '</td></tr>' + + '<tr><th>Polygon Area </th><td>' + picked3DtileFeature.getProperty('Shape_Area') + ' ' + 'm²' + '</td></tr>' + + '<tr><th>Crop Type</th><td>' + picked3DtileFeature.getProperty('LU_CropTyp') + '</td></tr>' + + '<tr><th>Soil Type</th><td>' + picked3DtileFeature.getProperty('LU_SoilTyp') + '</td></tr>' + + '<tr><th>Location</th><td>' + picked3DtileFeature.getProperty('Area_Name') + '</td></tr>' + + '<tr><th>Region</th><td>' + picked3DtileFeature.getProperty('Systm_Name') + '</td></tr>' + + '<tr><th>Technical Bioenergy Potential</th><td>' + picked3DtileFeature.getProperty('t_bionrg_p') + ' ' + 'GJ/yr' + '</td></tr>' + + '<tr><th>Bioenergy2Electricity Potential</th><td>' + picked3DtileFeature.getProperty('nrg_p_elct') + ' ' + 'GJ/yr' + '</td></tr>' + + '<tr><th>Bioenerg2Thermal Potential</th><td>' + picked3DtileFeature.getProperty('nrg_p_thrm') + ' ' + 'GJ/yr' + '</td></tr>' + + '<tr><th>Vegetal Food Potential</th><td>' + picked3DtileFeature.getProperty('veg_food_p') + ' ' + '10^3 kcal/yr' + '</td></tr>' + + '<tr><th>Animal Food Potential</th><td>' + picked3DtileFeature.getProperty('anm_food_p') + ' ' + '10^3 kcal/yr' + '</td></tr>' + + '<tr><th>Total Food Potential</th><td>' + picked3DtileFeature.getProperty('t_food_p') + ' ' + '10^3 kcal/yr' + '</td></tr>' + + '</tbody></table>'; + + console.log(picked3DtileFeature.getProperty('Semantic'));} + + + else + { + var featureName = "Information Box"; + selectedEntity.name = featureName; + selectedEntity.description = 'Loading <div class="cesium-infoBox-loading"></div>'; + + viewer.selectedEntity = selectedEntity; + selectedEntity.description = + '<table class="cesium-infoBox-defaultTable"><tbody>' + + '<tr><th>Building ID</th><td>' + picked3DtileFeature.getProperty('gml_id') + '</td></tr>' + + '<tr><th>Building Parent ID</th><td>' + picked3DtileFeature.getProperty('gml_parent_id') + '</td></tr>' + + '<tr><th>Installation Area </th><td>' + picked3DtileFeature.getProperty('area') + ' ' + 'm²' + '</td></tr>' + + '</tbody></table>'; + + console.log(picked3DtileFeature.getProperty('Semantic'));} + + var arrow = document.getElementById('arrow'); + var arrowPosition = 10 + ((Number(picked3DtileFeature.getProperty('Sp_Ht_Dmnd')) / 250) * 465); + if (Number(picked3DtileFeature.getProperty('Sp_Ht_Dmnd')) >= 250) { + arrowPosition = 465; + } + console.log("Width: " + arrow.style.width); + arrow.style.left = arrowPosition + "px"; + console.log("position left: : " + 10 + ((Number(picked3DtileFeature.getProperty('Sp_Ht_Dmnd')) / 250) * 100) * 465 + "px"); + arrow.style.visibility = 'visible'; + } + }, Cesium.ScreenSpaceEventType.LEFT_CLICK); +} + +active3DTilePicker(); + -- GitLab