From b045e62363b1ef153d07694b37f24c374dfaf830 Mon Sep 17 00:00:00 2001 From: BujarMuharemi <bujar.muharemi.28@gmail.com> Date: Sun, 19 Dec 2021 14:05:34 +0100 Subject: [PATCH] added beautify extension and formated all files --- .jsbeautifyrc | 22 ++ public/js/connectToAPI.js | 138 ++++----- public/js/globe.js | 550 +++++++++++++++++----------------- public/js/shadowPalette.js | 9 +- public/js/sidebar.js | 124 ++++---- public/js/testingAPIValues.js | 7 +- 6 files changed, 434 insertions(+), 416 deletions(-) create mode 100644 .jsbeautifyrc diff --git a/.jsbeautifyrc b/.jsbeautifyrc new file mode 100644 index 0000000..1f0e79b --- /dev/null +++ b/.jsbeautifyrc @@ -0,0 +1,22 @@ +{ + "indent_size": 4, + "indent_char": " ", + "indent_level": 0, + "end-with-newline": true, + "indent_with_tabs": false, + "preserve_newlines": true, + "max_preserve_newlines": 10, + "jslint_happy": false, + "space_after_anon_function": false, + "brace_style": "collapse,preserve-inline", + "keep_array_indentation": false, + "keep_function_indentation": false, + "space_before_conditional": true, + "break_chained_methods": false, + "eval_code": false, + "unescape_strings": false, + "wrap_line_length": 0, + "css": { + "selector_separator_newline": false + } +} \ No newline at end of file diff --git a/public/js/connectToAPI.js b/public/js/connectToAPI.js index 37d6ee9..8ae2e99 100644 --- a/public/js/connectToAPI.js +++ b/public/js/connectToAPI.js @@ -19,23 +19,23 @@ var uValueSortPick var shadowdata -async function fetchPvPotentialJSON() { +async function fetchPvPotentialJSON() { var bottomLat = coordinatesBB[1] var leftLng = coordinatesBB[0] var rightLng = coordinatesBB[2] var topLat = coordinatesBB[3] - const response = await fetch(pvURL, { + const response = await fetch(pvURL, { method: "POST", body: JSON.stringify({ "boundingBox": { "bottomLat": bottomLat, //48.779004965, - "leftLng": leftLng, //9.1686843081, + "leftLng": leftLng, //9.1686843081, "lodType": "LOD2", - "rightLng": rightLng, //9.175336684, - "topLat": topLat //48.7822869656 - }, - "cityGMLRef": "campusLOD2" + "rightLng": rightLng, //9.175336684, + "topLat": topLat //48.7822869656 + }, + "cityGMLRef": "campusLOD2" }), headers: { "Content-Type": "application/json", @@ -51,17 +51,17 @@ async function fetchshadowDataJSON() { var bottomLat = coordinatesBB[1] var leftLng = coordinatesBB[0] var rightLng = coordinatesBB[2] - var topLat = coordinatesBB[3]// + var topLat = coordinatesBB[3] // var day = "1"; - const response = await fetch(url2 + day, { + const response = await fetch(url2 + day, { method: "POST", body: JSON.stringify({ "boundingBox": { "bottomLat": bottomLat, //48.779004965, - "leftLng": leftLng, //9.1686843081, + "leftLng": leftLng, //9.1686843081, "lodType": "LOD2", - "rightLng": rightLng, //9.175336684, - "topLat": topLat //48.7822869656 + "rightLng": rightLng, //9.175336684, + "topLat": topLat //48.7822869656 }, "cityGMLRef": "campusLOD2" }), @@ -80,17 +80,17 @@ async function fetchDataJSON() { var bottomLat = coordinatesBB[1] var leftLng = coordinatesBB[0] var rightLng = coordinatesBB[2] - var topLat = coordinatesBB[3]// + var topLat = coordinatesBB[3] // -const response = await fetch(url, { + const response = await fetch(url, { method: "POST", body: JSON.stringify({ "boundingBox": { "bottomLat": bottomLat, //48.779004965, - "leftLng": leftLng, //9.1686843081, + "leftLng": leftLng, //9.1686843081, "lodType": "LOD2", - "rightLng": rightLng, //9.175336684, - "topLat": topLat //48.7822869656 + "rightLng": rightLng, //9.175336684, + "topLat": topLat //48.7822869656 }, "cityGMLRef": "campusLOD2", "interestedAttributes": [ @@ -104,7 +104,7 @@ const response = await fetch(url, { "monthlyCooling", "pvPotential", "roofType", - "totalSurfaceArea" + "totalSurfaceArea" ], "properies": { "physicsUseScenario": false @@ -121,39 +121,39 @@ const response = await fetch(url, { document.getElementById("loader").style.visibility = "hidden" -async function getLocalShadowdata(){ +async function getLocalShadowdata() { // gets the response from the api and put it inside a constant const response = await fetch(localShadowData); //the response have to be converted to json type file, so it can be used - const data = await response.json(); + const data = await response.json(); console.log(data) - // shadowData=data; + // shadowData=data; return data; - } +} function processData() { console.log(coordinatesBB) console.log("Waiting for data....") - timeout(25000, fetchshadowDataJSON()).then((response)=>{ - console.log(response) - shadowdata = response ; - }).catch((error)=>{ //catching the error(no connection)/ timeout and displaying an alert for the user - // shadowdata= getLocalShadowdata(); + timeout(25000, fetchshadowDataJSON()).then((response) => { + console.log(response) + shadowdata = response; + }).catch((error) => { //catching the error(no connection)/ timeout and displaying an alert for the user + // shadowdata= getLocalShadowdata(); console.log(shadowdata); //loadLocalAPIshadowData here... - }) + }) - timeout(10000, fetchPvPotentialJSON()).then((response)=>{ - console.log(response) - }).catch((error) => { + timeout(10000, fetchPvPotentialJSON()).then((response) => { + console.log(response) + }).catch((error) => { console.log(error) - }) - - - timeout(10000, fetchDataJSON()).then((response)=>{ - calculateData(response); - }).catch((error) => { + }) + + + timeout(10000, fetchDataJSON()).then((response) => { + calculateData(response); + }).catch((error) => { console.log(error) /* fetch("/3dclient4simstadtapi/public/test/APIdata/buildingInformation.json") @@ -162,14 +162,14 @@ function processData() { */ }) - - + + } -function calculateData(data){ +function calculateData(data) { console.log(data); document.getElementById("cesiumContainer").style.opacity = "1"; document.getElementById("loader").style.visibility = "hidden" @@ -199,7 +199,7 @@ function calculateData(data){ p.attributes.monthlyCooling, p.attributes.roofType))) - buildingsMAP.set(bu.id, new Building(bu.id, partsArray)) //puts buildings with parts and surfaces in a map + buildingsMAP.set(bu.id, new Building(bu.id, partsArray)) //puts buildings with parts and surfaces in a map }) @@ -299,7 +299,7 @@ function calculateData(data){ availableAttributes() //color buildings with heating demand - document.getElementById("checkbox2").addEventListener("change", function () { + document.getElementById("checkbox2").addEventListener("change", function() { if (this.checked) { tileContent.forEach(t => { let tileID = t.getProperty("gml_parent_id") @@ -318,7 +318,7 @@ function calculateData(data){ }) //color surfaces with uValue - document.getElementById("checkbox1").addEventListener("change", function () { + document.getElementById("checkbox1").addEventListener("change", function() { if (this.checked) { tileContent.forEach(t => { let tileID = t.getProperty("gml_id") @@ -377,13 +377,13 @@ var modal = document.getElementById("myModal"); var span = document.getElementsByClassName("close")[0]; //close the modal -span.onclick = function () { +span.onclick = function() { modal.style.display = "none"; deleteTilesetButtons() } // modal closes, when the user clicks anywhere outside of the modal -window.onclick = function (event) { +window.onclick = function(event) { if (event.target == modal) { modal.style.display = "none"; deleteTilesetButtons() @@ -401,24 +401,24 @@ var localTestTileset = '/3dclient4simstadtapi/public/test/gmlTileset_v1.json'; function timeout(ms, promise) { return new Promise(function(resolve, reject) { - setTimeout(function() { - reject(new Error("timeout")) - }, ms) - promise.then(resolve, reject) + setTimeout(function() { + reject(new Error("timeout")) + }, ms) + promise.then(resolve, reject) }) } - + //fetching the tileset and handling the connection -async function fetchTileset(){ - timeout(1000, fetch(tilesetURL)).then((response)=>{ - loadAndZoomToTileset(tilesetURL); - }).catch((error)=>{ //catching the error(no connection)/ timeout and displaying an alert for the user +async function fetchTileset() { + timeout(1000, fetch(tilesetURL)).then((response) => { + loadAndZoomToTileset(tilesetURL); + }).catch((error) => { //catching the error(no connection)/ timeout and displaying an alert for the user //var errorString = error["stack"]+"\n"+error["message"]; // formatting the error array - swal({text:"Could not connect to Server. Using now: local data",icon:"info" } ); + swal({ text: "Could not connect to Server. Using now: local data", icon: "info" }); console.log("Using local test data"); loadAndZoomToTileset(localTestTileset); //TODO#3: fix the link so the local tileset can be loaded - }) + }) } @@ -436,26 +436,26 @@ async function fetchTileset(){ //loads tileset after submit button is clicked -function loadTileset() { +function loadTileset() { viewer.scene.primitives.remove(tileset); tileContent = []; modal.style.display = "block"; - + fetchTileset(); - + //var userurl = document.getElementById("3Durl").value; //returns the chosen area from the dropdown } //loads the tileset from the url into the cesium viewer and zooms to it -function loadAndZoomToTileset(url){ - tileset=viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ +function loadAndZoomToTileset(url) { + tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ url: url })); - + viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0, -0.5, 0)); - modal.style.display = "none"; - saveTilesetContent(tileset) - deleteTilesetButtons() + modal.style.display = "none"; + saveTilesetContent(tileset) + deleteTilesetButtons() } @@ -469,7 +469,7 @@ function useContent(content) { document.getElementById("myList").appendChild(element); - element.onclick = function () { + element.onclick = function() { tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({ url: cont.href })); @@ -494,13 +494,13 @@ function saveTilesetContent(tileset) { function deleteTilesetButtons() { var x = document.getElementsByName("individualTileset") var len = x.length - + //checking if there are even tileset to delete - if(x.length>0){ + if (x.length > 0) { parentNode = x[0].parentNode; for (var i = 0; i < len; i++) { parentNode.removeChild(x[0]); } } - + } diff --git a/public/js/globe.js b/public/js/globe.js index e292bf6..c1a6367 100644 --- a/public/js/globe.js +++ b/public/js/globe.js @@ -9,7 +9,7 @@ var viewer = new Cesium.Viewer('cesiumContainer', { animation: false, sceneModePicker: false, geocoder: false, - + }); viewer.scene.globe.depthTestAgainstTerrain = true; @@ -31,11 +31,11 @@ nameOverlay.style.padding = "4px"; nameOverlay.style.backgroundColor = "white"; -var chosenDate = new Cesium.GregorianDate(2021,12,2,11); //the chosen Date from the Timeline +var chosenDate = new Cesium.GregorianDate(2021, 12, 2, 11); //the chosen Date from the Timeline //getting clicked Date from the timeline element viewer.timeline.container.onmouseup = (e) => { - var julianDate=viewer.clock.currentTime; + var julianDate = viewer.clock.currentTime; Cesium.JulianDate.toGregorianDate(julianDate, chosenDate); //console.log(chosenDate); } @@ -69,7 +69,7 @@ var radio = document.getElementById('radio-group'); var gmlID; -radio.addEventListener('click', function () { +radio.addEventListener('click', function() { //hide chart for individual buildings singleChart.style.visibility = 'hidden'; @@ -89,105 +89,105 @@ radio.addEventListener('click', function () { // Color a feature yellow on hover. viewer.screenSpaceEventHandler.setInputAction(function onMouseMove(movement) { - pickedselect = true; + pickedselect = true; - // If a feature was previously highlighted, undo the highlight - tileContent.forEach(t => { - if (t.getProperty("gml_parent_id") === hoverpid) { - highlightedFeatures.forEach(h => { - if (Cesium.defined(h.feature) && (t.getProperty("gml_id") === h.feature.getProperty("gml_id"))) { - t.color = h.originalColor; + // If a feature was previously highlighted, undo the highlight + tileContent.forEach(t => { + if (t.getProperty("gml_parent_id") === hoverpid) { + highlightedFeatures.forEach(h => { + if (Cesium.defined(h.feature) && (t.getProperty("gml_id") === h.feature.getProperty("gml_id"))) { + t.color = h.originalColor; + } + }); + } + }); + highlightedFeatures = []; + hoverpid = 0; + + // Pick a new feature + var pickedFeature = viewer.scene.pick(movement.endPosition); + if (!Cesium.defined(pickedFeature)) { + nameOverlay.style.display = "none"; + return; + } + + //SURFACE-VIEW + if (document.getElementById("surface").checked) { + + // A feature was picked, so show it's overlay content + nameOverlay.style.display = "block"; + nameOverlay.style.bottom = viewer.canvas.clientHeight - movement.endPosition.y + "px"; + nameOverlay.style.left = movement.endPosition.x + "px"; + + if (!Cesium.defined(pickedFeature) || !(pickedFeature instanceof Cesium.Cesium3DTileFeature)) { + nameOverlay.style.display = 'none'; + return; + } + + var name = pickedFeature.getProperty("gml_id"); + var shadowhourvaluepercent = 0; + nameOverlay.textContent = "ID: " + name + "\t shadowvalue:" + shadowhourvaluepercent; + // Highlight the feature if it's not already selected. + selectedFeatures.forEach(s => { + if (s.feature === pickedFeature) { + pickedselect = false; } }); - } - }); - highlightedFeatures = []; - hoverpid = 0; - - // Pick a new feature - var pickedFeature = viewer.scene.pick(movement.endPosition); - if (!Cesium.defined(pickedFeature)) { - nameOverlay.style.display = "none"; - return; - } - //SURFACE-VIEW - if (document.getElementById("surface").checked) { + hoverpid = pickedFeature.getProperty("gml_parent_id"); - // A feature was picked, so show it's overlay content - nameOverlay.style.display = "block"; - nameOverlay.style.bottom = viewer.canvas.clientHeight - movement.endPosition.y + "px"; - nameOverlay.style.left = movement.endPosition.x + "px"; + if (pickedselect) { + tileContent.forEach(t => { + if (t === pickedFeature) { + if (t.getProperty("feature_type") === "RoofSurface") { + highlightedFeatures.push(new featurevar(t, t.color)); + t.color = Cesium.Color.GREEN; + + } else { + highlightedFeatures.push(new featurevar(t, t.color)); + t.color = Cesium.Color.YELLOW; + } + + } + }); + } - if (!Cesium.defined(pickedFeature) || !(pickedFeature instanceof Cesium.Cesium3DTileFeature)) { - nameOverlay.style.display = 'none'; - return; } - var name = pickedFeature.getProperty("gml_id"); + //Building View + else if (document.getElementById("building").checked) { + // A feature was picked, so show it's overlay content + nameOverlay.style.display = "block"; + nameOverlay.style.bottom = viewer.canvas.clientHeight - movement.endPosition.y + "px"; + nameOverlay.style.left = movement.endPosition.x + "px"; - nameOverlay.textContent = "ID: " + name + "\t shadowvalue:" + shadowhourvaluepercent; - // Highlight the feature if it's not already selected. - selectedFeatures.forEach(s => { - if (s.feature === pickedFeature) { - pickedselect = false; + if (!Cesium.defined(pickedFeature) || !(pickedFeature instanceof Cesium.Cesium3DTileFeature)) { + nameOverlay.style.display = 'none'; + return; } - }); - hoverpid = pickedFeature.getProperty("gml_parent_id"); - if (pickedselect) { - tileContent.forEach(t => { - if (t === pickedFeature) { - if(t.getProperty("feature_type")==="RoofSurface"){ - highlightedFeatures.push(new featurevar(t, t.color)); - t.color = Cesium.Color.GREEN; + name = pickedFeature.getProperty("gml_parent_id"); + hoverpid = name; - }else{ + nameOverlay.textContent = name; + // Highlight the feature if it's not already selected. + if (hoverpid !== selectpid) { + tileContent.forEach(t => { + if (t.getProperty("gml_parent_id") === hoverpid) { highlightedFeatures.push(new featurevar(t, t.color)); t.color = Cesium.Color.YELLOW; } - - } - }); - } - - } - - //Building View - else if(document.getElementById("building").checked){ - // A feature was picked, so show it's overlay content - nameOverlay.style.display = "block"; - nameOverlay.style.bottom = viewer.canvas.clientHeight - movement.endPosition.y + "px"; - nameOverlay.style.left = movement.endPosition.x + "px"; - - if (!Cesium.defined(pickedFeature) || !(pickedFeature instanceof Cesium.Cesium3DTileFeature)) { - nameOverlay.style.display = 'none'; - return; + }); + } } - - name = pickedFeature.getProperty("gml_parent_id"); - hoverpid = name; - - nameOverlay.textContent = name; - // Highlight the feature if it's not already selected. - if (hoverpid !== selectpid) { - tileContent.forEach(t => { - if (t.getProperty("gml_parent_id") === hoverpid) { - highlightedFeatures.push(new featurevar(t, t.color)); - t.color = Cesium.Color.YELLOW; - } - }); + //Roof View + else if (document.getElementById("roof").checked) { + console.log("clicked when in roof view and on hover"); } - } - //Roof View - else if(document.getElementById("roof").checked){ - console.log("clicked when in roof view and on hover"); - } - -}, + }, Cesium.ScreenSpaceEventType.MOUSE_MOVE); @@ -199,220 +199,220 @@ var pickHeatedVolume var pickTotalSurfaceArea = 0 var pickRoofType var pickUValue -var shadowHourValue=0; +var shadowHourValue = 0; //Color a feature on selection and show metadata in the InfoBox viewer.screenSpaceEventHandler.setInputAction(function onLeftClick(movement) { - //hide chart for individual buildings - singleChart.style.visibility = 'hidden'; + //hide chart for individual buildings + singleChart.style.visibility = 'hidden'; - pickedhigh = false; + pickedhigh = false; - pickedalreadyselect = false; + pickedalreadyselect = false; - // If a feature was previously selected, undo the highlight - tileContent.forEach(t => { - if (t.getProperty("gml_parent_id") === selectpid) { - selectedFeatures.forEach(s => { - if (Cesium.defined(s.feature) && (t.getProperty("gml_id") === s.feature.getProperty("gml_id"))) { - t.color = s.originalColor; - } - }); + // If a feature was previously selected, undo the highlight + tileContent.forEach(t => { + if (t.getProperty("gml_parent_id") === selectpid) { + selectedFeatures.forEach(s => { + if (Cesium.defined(s.feature) && (t.getProperty("gml_id") === s.feature.getProperty("gml_id"))) { + t.color = s.originalColor; + } + }); + } + }); + selectpid = 0; + selectedFeatures = []; + + //pick a new feature + var pickedFeature = viewer.scene.pick(movement.position); + if (!Cesium.defined(pickedFeature)) { + clickHandler(movement); + return; } - }); - selectpid = 0; - selectedFeatures = []; + selectpid = pickedFeature.getProperty("gml_parent_id"); - //pick a new feature - var pickedFeature = viewer.scene.pick(movement.position); - if (!Cesium.defined(pickedFeature)) { - clickHandler(movement); - return; - } - selectpid = pickedFeature.getProperty("gml_parent_id"); + //Show chart for individual buildings. But only if building view is activated + if (Cesium.defined(pickedFeature) && (!document.getElementById("surface").checked)) { + singleChart.style.visibility = 'visible'; + } - //Show chart for individual buildings. But only if building view is activated - if (Cesium.defined(pickedFeature) && (!document.getElementById("surface").checked)) { - singleChart.style.visibility = 'visible'; - } + /*select the feature if it's not already selected + selectedFeatures.forEach(s => { + if (pickedFeature === s.feature) { + console.log("return"); + pickedalreadyselect = true; + } + }); - /*select the feature if it's not already selected - selectedFeatures.forEach(s => { - if (pickedFeature === s.feature) { - console.log("return"); - pickedalreadyselect = true; - } - }); + if(pickedalreadyselect){ + return; + }*/ - if(pickedalreadyselect){ - return; - }*/ + highlightedFeatures.forEach(h => { + if (h.feature === pickedFeature) { + pickedhigh = true; + } + }); - highlightedFeatures.forEach(h => { - if (h.feature === pickedFeature) { - pickedhigh = true; - } - }); + //fill individual charts + gmlID = pickedFeature.getProperty("gml_parent_id"); + surID = pickedFeature.getProperty("gml_id") + + pickBuildingFunction = "Not Defined" + pickYearOfConstruction = "Not Defined" + pickHeight = "Not Defined" + pickHeatedVolume = "Not Defined" + pickTotalSurfaceArea = 0 + pickRoofType = "Not Defined" + pickUValue = "Not Defined" + + //fill variables for Single Building Properties + fillTableProperties(gmlID, surID) + + + //Surface View + if (document.getElementById("surface").checked) { + resetRoofColors(); + //save the selected feature's original color + if (pickedhigh) { + highlightedFeatures.forEach(h => { + if (h.feature === pickedFeature) { + selectedFeatures.push(new featurevar(h.feature, h.originalColor)); + } + }); + highlightedFeatures = []; - //fill individual charts - gmlID = pickedFeature.getProperty("gml_parent_id"); - surID = pickedFeature.getProperty("gml_id") - - pickBuildingFunction = "Not Defined" - pickYearOfConstruction = "Not Defined" - pickHeight = "Not Defined" - pickHeatedVolume = "Not Defined" - pickTotalSurfaceArea = 0 - pickRoofType = "Not Defined" - pickUValue = "Not Defined" - - //fill variables for Single Building Properties - fillTableProperties(gmlID, surID) - - - //Surface View - if (document.getElementById("surface").checked) { - resetRoofColors(); - //save the selected feature's original color - if (pickedhigh) { - highlightedFeatures.forEach(h => { - if (h.feature === pickedFeature) { - selectedFeatures.push(new featurevar(h.feature, h.originalColor)); - } - }); - highlightedFeatures = []; + //highlight newly selected feature + tileContent.forEach(t => { + if (t === pickedFeature) { + console.log(t.getProperty("description") + "\n" + t.getProperty("feature_type") + "\n" + t.getProperty("gml_id") + "\n" + t.getProperty("gml_parent_id")); - //highlight newly selected feature - tileContent.forEach(t => { - if (t === pickedFeature) { - console.log(t.getProperty("description")+"\n"+t.getProperty("feature_type")+"\n" + t.getProperty("gml_id") + "\n" + t.getProperty("gml_parent_id")); - - t.color = Cesium.Color.LIME; - - //color surfaces depending on their shadow value - for (const [key, value] of Object.entries(shadowdata)) { //looping threw the shadowdata array - if(key === t.getProperty("gml_id")){ //checking if the ids of the current surface match the id in the shadowdata array - //console.log("hour:",chosenDate.hour); - shadowHourValue = value[chosenDate.hour-1] //getting the current chosen hour from the timeline - //console.log("shadowHourValue",shadowHourValue); - - t.color = Cesium.Color.fromCssColorString(getShadowPalette(shadowHourValue)); //coloring the surface - - } - } - } - }); - } else { - tileContent.forEach(t => { - if (t === pickedFeature) { - selectedFeatures.push(new featurevar(t, t.color)); - } - }); - //highlight newly selected feature - tileContent.forEach(t => { - if (t === pickedFeature) { - t.color = Cesium.Color.LIME; - } - }); - } + t.color = Cesium.Color.LIME; - var shadowhourvaluepercent = 100-(shadowHourValue*100) - //set feature infobox description (surface view) - var featureName = pickedFeature.getProperty("name"); - 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>Surface_ID</th><td>" + pickedFeature.getProperty("gml_id") + "</td></tr>" + - "<tr><th>u_Value</th><td>" + pickUValue + "</td></tr>" + - "<tr><th>description</th><td>" + pickedFeature.getProperty("description") + "</td></tr>" + - "<tr><th>feature_type</th><td>" + pickedFeature.getProperty("feature_type") + "</td></tr>" + - "<tr><th>shadow value</th><td>" + shadowhourvaluepercent.toFixed(1) + "%" + "</td></tr>" + - - - "</tbody></table>"; - + //color surfaces depending on their shadow value + for (const [key, value] of Object.entries(shadowdata)) { //looping threw the shadowdata array + if (key === t.getProperty("gml_id")) { //checking if the ids of the current surface match the id in the shadowdata array + //console.log("hour:",chosenDate.hour); + shadowHourValue = value[chosenDate.hour - 1] //getting the current chosen hour from the timeline + //console.log("shadowHourValue",shadowHourValue); - } + t.color = Cesium.Color.fromCssColorString(getShadowPalette(shadowHourValue)); //coloring the surface - //Building View - else if(document.getElementById("building").checked){ - resetRoofColors(); - //save the selected feature's original color - if (pickedhigh) { - highlightedFeatures.forEach(h => { - if (h.feature.getProperty("gml_parent_id") === selectpid) { - selectedFeatures.push(new featurevar(h.feature, h.originalColor)); - } - }); - highlightedFeatures = []; + } + } + } + }); + } else { + tileContent.forEach(t => { + if (t === pickedFeature) { + selectedFeatures.push(new featurevar(t, t.color)); + } + }); + //highlight newly selected feature + tileContent.forEach(t => { + if (t === pickedFeature) { + t.color = Cesium.Color.LIME; + } + }); + } - //highlight newly selected feature - tileContent.forEach(t => { - if (t.getProperty("gml_parent_id") === selectpid) { - t.color = Cesium.Color.LIME; - } - }); + var shadowhourvaluepercent = 100 - (shadowHourValue * 100) + //set feature infobox description (surface view) + var featureName = pickedFeature.getProperty("name"); + 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>Surface_ID</th><td>" + pickedFeature.getProperty("gml_id") + "</td></tr>" + + "<tr><th>u_Value</th><td>" + pickUValue + "</td></tr>" + + "<tr><th>description</th><td>" + pickedFeature.getProperty("description") + "</td></tr>" + + "<tr><th>feature_type</th><td>" + pickedFeature.getProperty("feature_type") + "</td></tr>" + + "<tr><th>shadow value</th><td>" + shadowhourvaluepercent.toFixed(1) + "%" + "</td></tr>" + + + + "</tbody></table>"; - } else { - tileContent.forEach(t => { - if (t.getProperty("gml_parent_id") === selectpid) { - selectedFeatures.push(new featurevar(t, t.color)); - } - }); - //highlight newly selected feature - tileContent.forEach(t => { - if (t.getProperty("gml_parent_id") === selectpid) { - t.color = Cesium.Color.LIME; - } - }); } - buildings(gmlID) - - //set feature infobox description (building view) - var featureName = pickedFeature.getProperty("name"); - 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>" + pickedFeature.getProperty("gml_parent_id") + "</td></tr>" + - "<tr><th>buildingFunction</th><td>" + pickBuildingFunction + "</td></tr>" + - "<tr><th>yearOfConstruction</th><td>" + pickYearOfConstruction + "</td></tr>" + - "<tr><th>height</th><td>" + pickHeight + "</td></tr>" + - "<tr><th>heatedVolume</th><td>" + pickHeatedVolume + "</td></tr>" + - "<tr><th>Total_Surface_Area</th><td>" + pickTotalSurfaceArea + "</td></tr>" + - "<tr><th>rooftype</th><td>" + pickRoofType + "</td></tr>" + - "</tbody></table>"; + //Building View + else if (document.getElementById("building").checked) { + resetRoofColors(); + //save the selected feature's original color + if (pickedhigh) { + highlightedFeatures.forEach(h => { + if (h.feature.getProperty("gml_parent_id") === selectpid) { + selectedFeatures.push(new featurevar(h.feature, h.originalColor)); + } + }); + highlightedFeatures = []; - } + //highlight newly selected feature + tileContent.forEach(t => { + if (t.getProperty("gml_parent_id") === selectpid) { + t.color = Cesium.Color.LIME; + } + }); - //Roof View - //BUG: shows random attributes ui element ?? - else if(document.getElementById("roof").checked){ - console.log("clicked when in roof view and on click"); + } else { + tileContent.forEach(t => { + if (t.getProperty("gml_parent_id") === selectpid) { + selectedFeatures.push(new featurevar(t, t.color)); + } + }); - //looping threw all surfaces - tileContent.forEach(t => { - if(t.getProperty("description").includes("Roof")){ //HACK: checking if the are a roof surface (should come from feature_type) - for (const [key, value] of Object.entries(shadowdata)) { //looping threw the shadowdata array - if(key === t.getProperty("gml_id")){ //checking the id - console.log(value); - shadowHourValue = value[chosenDate.hour-1]; //getting the current chosen hour from the timeline - t.color = Cesium.Color.fromCssColorString(getShadowPalette(shadowHourValue)); //coloring the surface + //highlight newly selected feature + tileContent.forEach(t => { + if (t.getProperty("gml_parent_id") === selectpid) { + t.color = Cesium.Color.LIME; } - } - + }); } - - }); - } -}, + buildings(gmlID) + + //set feature infobox description (building view) + var featureName = pickedFeature.getProperty("name"); + 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>" + pickedFeature.getProperty("gml_parent_id") + "</td></tr>" + + "<tr><th>buildingFunction</th><td>" + pickBuildingFunction + "</td></tr>" + + "<tr><th>yearOfConstruction</th><td>" + pickYearOfConstruction + "</td></tr>" + + "<tr><th>height</th><td>" + pickHeight + "</td></tr>" + + "<tr><th>heatedVolume</th><td>" + pickHeatedVolume + "</td></tr>" + + "<tr><th>Total_Surface_Area</th><td>" + pickTotalSurfaceArea + "</td></tr>" + + "<tr><th>rooftype</th><td>" + pickRoofType + "</td></tr>" + + "</tbody></table>"; + + } + + //Roof View + //BUG: shows random attributes ui element ?? + else if (document.getElementById("roof").checked) { + console.log("clicked when in roof view and on click"); + + //looping threw all surfaces + tileContent.forEach(t => { + if (t.getProperty("description").includes("Roof")) { //HACK: checking if the are a roof surface (should come from feature_type) + for (const [key, value] of Object.entries(shadowdata)) { //looping threw the shadowdata array + if (key === t.getProperty("gml_id")) { //checking the id + //console.log(value); + shadowHourValue = value[chosenDate.hour - 1]; //getting the current chosen hour from the timeline + t.color = Cesium.Color.fromCssColorString(getShadowPalette(shadowHourValue)); //coloring the surface + } + } + + } + + }); + } + + }, Cesium.ScreenSpaceEventType.LEFT_CLICK); @@ -483,14 +483,14 @@ function fillTableProperties(gID, sID) { } -function resetRoofColors(){ +function resetRoofColors() { tileContent.forEach(t => { - if(t.getProperty("description").includes("Roof")){ - for (const [key, value] of Object.entries(shadowdata)) { - if(key === t.getProperty("gml_id")){ - t.color = Cesium.Color.WHITE; + if (t.getProperty("description").includes("Roof")) { + for (const [key, value] of Object.entries(shadowdata)) { + if (key === t.getProperty("gml_id")) { + t.color = Cesium.Color.WHITE; } - } - } + } + } }); } diff --git a/public/js/shadowPalette.js b/public/js/shadowPalette.js index 8dbe915..0482acd 100644 --- a/public/js/shadowPalette.js +++ b/public/js/shadowPalette.js @@ -1,15 +1,14 @@ //Shadow palette for coloring the roofs //color pallet white->black -var colorPalette = ['#ffffff','#f0f0f0','#d9d9d9','#bdbdbd','#969696','#737373','#525252','#252525']; -const shadowPalette = colorPalette.reverse(); +var colorPalette = ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525']; +const shadowPalette = colorPalette.reverse(); //returns the responding color from the shadowPalette, depending on the inputShadowValue(0 to 1 in float) -function getShadowPalette(inputShadowValue){ +function getShadowPalette(inputShadowValue) { //checking for the float values - var index = Math.ceil((shadowPalette.length-1)*inputShadowValue); + var index = Math.ceil((shadowPalette.length - 1) * inputShadowValue); //console.log(inputShadowValue,"---",shadowPalette[index]); return shadowPalette[index]; } - diff --git a/public/js/sidebar.js b/public/js/sidebar.js index 6416ddb..05931d0 100644 --- a/public/js/sidebar.js +++ b/public/js/sidebar.js @@ -4,75 +4,73 @@ var radio = document.getElementById('radio-group'); var filterswitches = document.getElementById('filterswitches'); //Show / hide chart -chartButton.addEventListener('click', function () { - //sets as default attribute building function - myChartArea("bar", "Building Function", 1, "Building Type", "Frequency", coloR); - addGlobalData(areaChart, buildingType, btFrequency, btFrequency.length) +chartButton.addEventListener('click', function() { + //sets as default attribute building function + myChartArea("bar", "Building Function", 1, "Building Type", "Frequency", coloR); + addGlobalData(areaChart, buildingType, btFrequency, btFrequency.length) - if (drawBox === false) { - swal("CAN'T LOAD DATA!", "mark an area first!", "error"); - } else { - var x = document.getElementById('areaChartContainer'); - - if (x.style.visibility === 'visible') { - //button.firstChild.data = "Show chart"; - x.style.visibility = 'hidden'; + if (drawBox === false) { + swal("CAN'T LOAD DATA!", "mark an area first!", "error"); } else { - //button.firstChild.data = "Hide chart"; - x.style.visibility = 'visible'; - } - } -}, false); + var x = document.getElementById('areaChartContainer'); -heatingdemand.addEventListener('click', function () { - var x = document.getElementById('heat-demand-legend'); - if (!document.getElementById('checkbox2').checked) { - x.style.visibility = 'hidden'; - } else { - x.style.visibility = 'visible'; - } + if (x.style.visibility === 'visible') { + //button.firstChild.data = "Show chart"; + x.style.visibility = 'hidden'; + } else { + //button.firstChild.data = "Hide chart"; + x.style.visibility = 'visible'; + } + } }, false); -radio.addEventListener('click', function () { - if (document.getElementById("surface").checked) { - document.getElementById("checkbox1").disabled = false; - document.getElementById("checkbox2").disabled = true; - if (document.getElementById("checkbox2").checked) { - document.getElementById("checkbox2").checked = false; - document.getElementById('heat-demand-legend').style.visibility = 'hidden'; - tileContent.forEach(t => t.color = new Cesium.Color(1, 1, 1, 1)) - } - } - else { - document.getElementById("checkbox1").disabled = true; - document.getElementById("checkbox2").disabled = false; - if (document.getElementById("checkbox1").checked) { - document.getElementById("checkbox1").checked = false; - tileContent.forEach(t => t.color = new Cesium.Color(1, 1, 1, 1)) +heatingdemand.addEventListener('click', function() { + var x = document.getElementById('heat-demand-legend'); + if (!document.getElementById('checkbox2').checked) { + x.style.visibility = 'hidden'; + } else { + x.style.visibility = 'visible'; } - } }, false); -filterswitches.addEventListener('click', function () { - if (drawBox === false) { - swal("CAN'T LOAD DATA!", "mark an area first!", "error"); - document.getElementById("checkbox2").disabled = true; - document.getElementById("checkbox1").disabled = true; - } else { +radio.addEventListener('click', function() { if (document.getElementById("surface").checked) { - document.getElementById("checkbox1").disabled = false; - document.getElementById("checkbox2").disabled = true; + document.getElementById("checkbox1").disabled = false; + document.getElementById("checkbox2").disabled = true; + if (document.getElementById("checkbox2").checked) { + document.getElementById("checkbox2").checked = false; + document.getElementById('heat-demand-legend').style.visibility = 'hidden'; + tileContent.forEach(t => t.color = new Cesium.Color(1, 1, 1, 1)) + } + } else { + document.getElementById("checkbox1").disabled = true; + document.getElementById("checkbox2").disabled = false; + if (document.getElementById("checkbox1").checked) { + document.getElementById("checkbox1").checked = false; + tileContent.forEach(t => t.color = new Cesium.Color(1, 1, 1, 1)) + } } - else { - document.getElementById("checkbox1").disabled = true; - document.getElementById("checkbox2").disabled = false; +}, false); + +filterswitches.addEventListener('click', function() { + if (drawBox === false) { + swal("CAN'T LOAD DATA!", "mark an area first!", "error"); + document.getElementById("checkbox2").disabled = true; + document.getElementById("checkbox1").disabled = true; + } else { + if (document.getElementById("surface").checked) { + document.getElementById("checkbox1").disabled = false; + document.getElementById("checkbox2").disabled = true; + } else { + document.getElementById("checkbox1").disabled = true; + document.getElementById("checkbox2").disabled = false; + } } - } }, false); function toggleSidebar(ref) { - document.getElementById("sidebar").classList.toggle('active'); + document.getElementById("sidebar").classList.toggle('active'); } //loop through all dropdown buttons to toggle between hiding and showing its dropdown content @@ -80,13 +78,13 @@ var dropdown = document.getElementsByClassName("dropdown-btn"); var i; for (i = 0; i < dropdown.length; i++) { - dropdown[i].addEventListener("click", function () { - this.classList.toggle("active"); - var dropdownContent = this.nextElementSibling; - if (dropdownContent.style.display === "block") { - dropdownContent.style.display = "none"; - } else { - dropdownContent.style.display = "block"; - } - }); + dropdown[i].addEventListener("click", function() { + this.classList.toggle("active"); + var dropdownContent = this.nextElementSibling; + if (dropdownContent.style.display === "block") { + dropdownContent.style.display = "none"; + } else { + dropdownContent.style.display = "block"; + } + }); } diff --git a/public/js/testingAPIValues.js b/public/js/testingAPIValues.js index f9c39c6..83840d7 100644 --- a/public/js/testingAPIValues.js +++ b/public/js/testingAPIValues.js @@ -27,7 +27,7 @@ function test() { p.attributes.monthlyHeating, p.attributes.monthlyCooling))) - buildingsMAP.set(bu.id, new Building(bu.id, partsArray)) //puts buildings with parts and surfaces in a map + buildingsMAP.set(bu.id, new Building(bu.id, partsArray)) //puts buildings with parts and surfaces in a map }) @@ -104,7 +104,7 @@ function test() { sortMap() //color buildings with heating demand - document.getElementById("checkbox2").addEventListener("change", function () { + document.getElementById("checkbox2").addEventListener("change", function() { if (this.checked) { tileContent.forEach(t => { let tileID = t.getProperty("gml_parent_id") @@ -124,7 +124,7 @@ function test() { }) //color surfaces with uValue - document.getElementById("checkbox1").addEventListener("change", function () { + document.getElementById("checkbox1").addEventListener("change", function() { if (this.checked) { tileContent.forEach(t => { let tileID = t.getProperty("gml_id") @@ -143,4 +143,3 @@ function test() { } }) } - -- GitLab