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