From 0258c39742917eb9fab8e8e1bdab9d5759d07c56 Mon Sep 17 00:00:00 2001 From: Daria Kolokolnikova <72koda1bif@hft-stuttgart.de> Date: Tue, 30 Nov 2021 21:19:37 +0100 Subject: [PATCH] -refactoring -local api data (buildinginformation) can be loaded --- public/js/connectToAPI.js | 314 +++++++++++++++++++------------------- 1 file changed, 161 insertions(+), 153 deletions(-) diff --git a/public/js/connectToAPI.js b/public/js/connectToAPI.js index aaf43e3..ae4d993 100644 --- a/public/js/connectToAPI.js +++ b/public/js/connectToAPI.js @@ -110,174 +110,182 @@ function processData() { fetchDataJSON().then(data => { - console.log(data); - document.getElementById("cesiumContainer").style.opacity = "1"; - document.getElementById("loader").style.visibility = "hidden" - console.log("....received data") + calculateData(data); + }).catch(() => { + console.log("wird nix") + fetch("/3dclient4simstadtapi/public/test/APIdata/buildingInformation.json") + .then(response => response.text()) + .then(text => calculateData( JSON.parse(text))) + }) +} - var buildingsMAP = new Map() - data.buildings.forEach(bu => { - var partsArray = [] - var surefacesArray = [] +function calculateData(data){ + console.log(data); + document.getElementById("cesiumContainer").style.opacity = "1"; + document.getElementById("loader").style.visibility = "hidden" + console.log("....received data") - bu.parts.forEach(p => - p.surfaces.forEach(s => - surefacesArray.push(new Surface(s.id, - s.attributes.uValue, - s.attributes.totalSurfaceArea)))) + var buildingsMAP = new Map() - bu.parts.forEach(p => partsArray.push(new Part(p.id, - surefacesArray, - p.attributes.volume, - p.attributes.height, - p.attributes.heatedVolume, - p.attributes.yearOfConstruction, - p.attributes.buildingFunction, - p.attributes.monthlyHeating, - p.attributes.monthlyCooling, - p.attributes.roofType))) + data.buildings.forEach(bu => { - buildingsMAP.set(bu.id, new Building(bu.id, partsArray)) //puts buildings with parts and surfaces in a map + var partsArray = [] + var surefacesArray = [] - }) + bu.parts.forEach(p => + p.surfaces.forEach(s => + surefacesArray.push(new Surface(s.id, + s.attributes.uValue, + s.attributes.totalSurfaceArea)))) - var partHeightMAP = new Map() - var partVolumeMAP = new Map() - var partHeatedVolumeMAP = new Map() - var partConstructionYearMAP = new Map() - var partBuildingTypeMAP = new Map() - var partMonthlyHeatingMAP = new Map() - var partMonthlyCoolingMAP = new Map() - var surfaceUValueMAP = new Map() - var partRoofTypeMAP = new Map() - var surfaceTotalSurfaceAreaMAP = new Map() - - //fill height, heated volume and construction year map - buildingsMAP.forEach(b => { - b.parts.forEach(part => { - if (part.height !== undefined) { - partHeightMAP.set(part.id, part.height) - } - if (part.volume !== undefined) { - partVolumeMAP.set(part.id, part.volume) - } - if (part.heatedVolume !== undefined) { - partHeatedVolumeMAP.set(part.id, part.heatedVolume) - } - if (part.yearOfConstruction !== undefined && part.yearOfConstruction <= "2020") { - partConstructionYearMAP.set(part.id, part.yearOfConstruction) - } - if (part.buildingFunction !== undefined) { - partBuildingTypeMAP.set(part.id, part.buildingFunction) - } - if (part.monthlyHeating !== undefined) { - partMonthlyHeatingMAP.set(part.id, part.monthlyHeating) - } - if (part.monthlyCooling !== undefined) { - partMonthlyCoolingMAP.set(part.id, part.monthlyCooling) - } - if (part.roofType !== undefined) { - partRoofTypeMAP.set(part.id, part.roofType) + bu.parts.forEach(p => partsArray.push(new Part(p.id, + surefacesArray, + p.attributes.volume, + p.attributes.height, + p.attributes.heatedVolume, + p.attributes.yearOfConstruction, + p.attributes.buildingFunction, + p.attributes.monthlyHeating, + p.attributes.monthlyCooling, + p.attributes.roofType))) + + buildingsMAP.set(bu.id, new Building(bu.id, partsArray)) //puts buildings with parts and surfaces in a map + + }) + + var partHeightMAP = new Map() + var partVolumeMAP = new Map() + var partHeatedVolumeMAP = new Map() + var partConstructionYearMAP = new Map() + var partBuildingTypeMAP = new Map() + var partMonthlyHeatingMAP = new Map() + var partMonthlyCoolingMAP = new Map() + var surfaceUValueMAP = new Map() + var partRoofTypeMAP = new Map() + var surfaceTotalSurfaceAreaMAP = new Map() + + //fill height, heated volume and construction year map + buildingsMAP.forEach(b => { + b.parts.forEach(part => { + if (part.height !== undefined) { + partHeightMAP.set(part.id, part.height) + } + if (part.volume !== undefined) { + partVolumeMAP.set(part.id, part.volume) + } + if (part.heatedVolume !== undefined) { + partHeatedVolumeMAP.set(part.id, part.heatedVolume) + } + if (part.yearOfConstruction !== undefined && part.yearOfConstruction <= "2020") { + partConstructionYearMAP.set(part.id, part.yearOfConstruction) + } + if (part.buildingFunction !== undefined) { + partBuildingTypeMAP.set(part.id, part.buildingFunction) + } + if (part.monthlyHeating !== undefined) { + partMonthlyHeatingMAP.set(part.id, part.monthlyHeating) + } + if (part.monthlyCooling !== undefined) { + partMonthlyCoolingMAP.set(part.id, part.monthlyCooling) + } + if (part.roofType !== undefined) { + partRoofTypeMAP.set(part.id, part.roofType) + } + part.surfaces.forEach(s => { + if (s.uValue !== undefined) { + surfaceUValueMAP.set(s.id, s.uValue) } - part.surfaces.forEach(s => { - if (s.uValue !== undefined) { - surfaceUValueMAP.set(s.id, s.uValue) - } - }) - //totalSurfaceArea - surfaceTotalSurfaceAreaMAP.set(part.id, part.surfaces) }) + //totalSurfaceArea + surfaceTotalSurfaceAreaMAP.set(part.id, part.surfaces) }) + }) - //sort maps - const heightSort = new Map([...partHeightMAP.entries()].sort((a, b) => b[1] - a[1])); - const heatedVolumeSort = new Map([...partHeatedVolumeMAP.entries()].sort((a, b) => b[1] - a[1])); - const constructionYearSort = new Map([...partConstructionYearMAP.entries()].sort((a, b) => a[1] - b[1])); - const uValueSort = new Map([...surfaceUValueMAP.entries()].sort((a, b) => b[1] - a[1])); - - //for Properties Single Buildings - buildingFunctionSortPick = new Map([...partBuildingTypeMAP.entries()].sort((a, b) => b[1] - a[1])); - constructionYearSortPick = new Map([...partConstructionYearMAP.entries()].sort((a, b) => a[1] - b[1])); - heightSortPick = new Map([...partHeightMAP.entries()].sort((a, b) => b[1] - a[1])); - heatedVolumeSortPick = new Map([...partHeatedVolumeMAP.entries()].sort((a, b) => b[1] - a[1])); - totalSurfaceAreaSortPick = new Map([...surfaceTotalSurfaceAreaMAP.entries()].sort((a, b) => b[1] - a[1])); - roofTypeSortPick = new Map([...partRoofTypeMAP.entries()].sort((a, b) => b[1] - a[1])); - uValueSortPick = new Map([...surfaceUValueMAP.entries()].sort((a, b) => b[1] - a[1])); - - - //fill arrays needed for charts - heightSort.forEach((value, key) => addHeightInfosToArrays(key, value)) - heatedVolumeSort.forEach((value, key) => addHeatedVolumeInfosToArrays(key, value)) - constructionYearSort.forEach((value) => yearOfConstructionValues.push(value)) - partBuildingTypeMAP.forEach((value) => buildingTypeValues.push(value)) - partMonthlyHeatingMAP.forEach((valueArray, key) => yearlyHeatingDemand(key, valueArray)) - partMonthlyCoolingMAP.forEach((valueArray, key) => yearlyCoolingDemand(key, valueArray)) - uValueSort.forEach((value, key) => { - uValueSurfaces(key, value) - uValuesAll.push(value) - }) + //sort maps + const heightSort = new Map([...partHeightMAP.entries()].sort((a, b) => b[1] - a[1])); + const heatedVolumeSort = new Map([...partHeatedVolumeMAP.entries()].sort((a, b) => b[1] - a[1])); + const constructionYearSort = new Map([...partConstructionYearMAP.entries()].sort((a, b) => a[1] - b[1])); + const uValueSort = new Map([...surfaceUValueMAP.entries()].sort((a, b) => b[1] - a[1])); + + //for Properties Single Buildings + buildingFunctionSortPick = new Map([...partBuildingTypeMAP.entries()].sort((a, b) => b[1] - a[1])); + constructionYearSortPick = new Map([...partConstructionYearMAP.entries()].sort((a, b) => a[1] - b[1])); + heightSortPick = new Map([...partHeightMAP.entries()].sort((a, b) => b[1] - a[1])); + heatedVolumeSortPick = new Map([...partHeatedVolumeMAP.entries()].sort((a, b) => b[1] - a[1])); + totalSurfaceAreaSortPick = new Map([...surfaceTotalSurfaceAreaMAP.entries()].sort((a, b) => b[1] - a[1])); + roofTypeSortPick = new Map([...partRoofTypeMAP.entries()].sort((a, b) => b[1] - a[1])); + uValueSortPick = new Map([...surfaceUValueMAP.entries()].sort((a, b) => b[1] - a[1])); + + + //fill arrays needed for charts + heightSort.forEach((value, key) => addHeightInfosToArrays(key, value)) + heatedVolumeSort.forEach((value, key) => addHeatedVolumeInfosToArrays(key, value)) + constructionYearSort.forEach((value) => yearOfConstructionValues.push(value)) + partBuildingTypeMAP.forEach((value) => buildingTypeValues.push(value)) + partMonthlyHeatingMAP.forEach((valueArray, key) => yearlyHeatingDemand(key, valueArray)) + partMonthlyCoolingMAP.forEach((valueArray, key) => yearlyCoolingDemand(key, valueArray)) + uValueSort.forEach((value, key) => { + uValueSurfaces(key, value) + uValuesAll.push(value) + }) - partMonthlyHeatingMAP.forEach((value, key) => addmonthlyHeatingInfosToArrays(key, value)) - partMonthlyCoolingMAP.forEach((value, key) => addmonthlyCoolingInfosToArrays(key, value)) - partVolumeMAP.forEach((value, key) => addVolumeValues(key, value)) - - //calculates year of construction frequency - yearFrequency() - - //calculates building type frequency - buildingTypeFrequency() - - //calculates uValue frequency - uValueFrequency() - - //sorts yearly heating & cooling demand for charts - sortMap() - - //disables attributes in chart without values - availableAttributes() - - //color buildings with heating demand - document.getElementById("checkbox2").addEventListener("change", function () { - if (this.checked) { - tileContent.forEach(t => { - let tileID = t.getProperty("gml_parent_id") - let tileColor = heatingIDColorMAP.get(tileID) - if (tileColor !== undefined) { - t.color = Cesium.Color.fromCssColorString(tileColor) - } else { - t.color = new Cesium.Color(1, 1, 1, 1) - } - }) - console.log("colored") - } else { - tileContent.forEach(t => t.color = new Cesium.Color(1, 1, 1, 1)) - console.log("not colored") - } - }) + partMonthlyHeatingMAP.forEach((value, key) => addmonthlyHeatingInfosToArrays(key, value)) + partMonthlyCoolingMAP.forEach((value, key) => addmonthlyCoolingInfosToArrays(key, value)) + partVolumeMAP.forEach((value, key) => addVolumeValues(key, value)) - //color surfaces with uValue - document.getElementById("checkbox1").addEventListener("change", function () { - if (this.checked) { - tileContent.forEach(t => { - let tileID = t.getProperty("gml_id") - let tileColor = surfaceIDColorMAP.get(tileID) - if (tileColor !== undefined) { - t.color = Cesium.Color.fromCssColorString(tileColor) - } else { - t.color = new Cesium.Color(1, 1, 1, 1) - } - }) - console.log("colored") - } else { - tileContent.forEach(t => t.color = new Cesium.Color(1, 1, 1, 1)) - console.log("not colored") - } - }) + //calculates year of construction frequency + yearFrequency() + + //calculates building type frequency + buildingTypeFrequency() + + //calculates uValue frequency + uValueFrequency() - }).catch((err) => { - console.log(err) + //sorts yearly heating & cooling demand for charts + sortMap() + + //disables attributes in chart without values + availableAttributes() + + //color buildings with heating demand + document.getElementById("checkbox2").addEventListener("change", function () { + if (this.checked) { + tileContent.forEach(t => { + let tileID = t.getProperty("gml_parent_id") + let tileColor = heatingIDColorMAP.get(tileID) + if (tileColor !== undefined) { + t.color = Cesium.Color.fromCssColorString(tileColor) + } else { + t.color = new Cesium.Color(1, 1, 1, 1) + } + }) + console.log("colored") + } else { + tileContent.forEach(t => t.color = new Cesium.Color(1, 1, 1, 1)) + console.log("not colored") + } + }) + + //color surfaces with uValue + document.getElementById("checkbox1").addEventListener("change", function () { + if (this.checked) { + tileContent.forEach(t => { + let tileID = t.getProperty("gml_id") + let tileColor = surfaceIDColorMAP.get(tileID) + if (tileColor !== undefined) { + t.color = Cesium.Color.fromCssColorString(tileColor) + } else { + t.color = new Cesium.Color(1, 1, 1, 1) + } + }) + console.log("colored") + } else { + tileContent.forEach(t => t.color = new Cesium.Color(1, 1, 1, 1)) + console.log("not colored") + } }) } -- GitLab