User Tools

Site Tools

handleiding_nieuw:sub_spacematrix

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
handleiding_nieuw:sub_spacematrix [2025/04/08 20:28] supporthandleiding_nieuw:sub_spacematrix [2025/04/15 15:51] (current) support
Line 1: Line 1:
 <html> <html>
 <style> <style>
-  .spacematrix-wrapper +    .inputrow { 
-    max-width: 100%+        display: flex; 
-    text-align: center+        align-items: center; 
-    margin-bottom1em+        gap: 10px; 
-  +        margin-bottom: 8px; 
-  .spacematrix-caption +    } 
-    font-styleitalic+    .inputrow label { 
-    color: #666; +        width: 200px; 
-  }+    
 +    .inputrow input { 
 +        width: 80px
 +    
 +    .resultblock { 
 +        margin-left: 40px; 
 +        font-size: 0.9em; 
 +        min-width: 200px; 
 +        text-align: right
 +    
 +    table.rekenblok { 
 +        border-collapse: collapse; 
 +        margin-top25px
 +        font-size: 0.9em; 
 +    
 +    table.rekenblok td, table.rekenblok th { 
 +        padding: 4px 6px; 
 +        border: 1px solid #ccc; 
 +        text-align: right; 
 +    
 +    table.rekenblok th { 
 +        background-color#f0f0f0
 +    
 +    .scheiding td { 
 +        background-color: #fafafa; 
 +        border-top: 2px solid #666; 
 +    } 
 +    .kaartcontainer { 
 +        position: absolute; 
 +        top: 0; 
 +        right: 0; 
 +        width: 320px; 
 +    } 
 +    .kaartcontainer img { 
 +        width: 100%; 
 +        display: block; 
 +    } 
 +    .stipje { 
 +        position: absolute; 
 +        width: 14px; 
 +        height: 14px; 
 +        background: red; 
 +        border-radius: 50%; 
 +        transform: translate(-50%, -50%); 
 +        border: 2px solid white; 
 +    }
 </style> </style>
  
-<div class="spacematrix-wrapper"> +<div style="position: relative;"> 
-  <img id="spacematrix-img+    <div class="kaartcontainer"> 
-       src="https://www.sumsonite.nl/wiki/lib/exe/fetch.php?media=handleiding_nieuw:spacematrix:SPACEMATE1.png" +        <img src="https://www.sumsonite.nl/wiki/lib/exe/fetch.php?media=handleiding_nieuw:spacematrix:SPACEMATE1.png" alt="Spacematrix kaart"> 
-       width="800" +        <div class="stipje" id="stipje"></div> 
-       alt="Spacematrix interactief voorbeeld/+    </div>
-  <div class="spacematrix-caption">Klik op een zone in de Spacematrix om voorbeelden te bekijken</div>+
 </div> </div>
  
-<map name="spacematrixmap"> +<h2>Spacematrix Rekenblok</h2> 
-  <area shape="rectcoords="151,620,181,709" href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:a1" alt="Zone A1"+ 
-  <area shape="rectcoords="181,582,254,709href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:a2alt="Zone A2"> +<div class="inputrow"> 
-  <area shape="rectcoords="254,532,315,709href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:a3" alt="Zone A3"> +    <label for="opp">Oppervlak projectgebied (m²):</label
-  <area shape="rectcoords="315,494,448,620" href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:balt="Zone B"> +    <input id="opptype="numbervalue="10000oninput="updateLaadvermogen()"> 
-  <area shape="rectcoords="145,532,181,620href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:c1alt="Zone C1"> +    <div class="resultblockid="lv1"></div> 
-  <area shape="rectcoords="181,481,254,582href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:c2" alt="Zone C2"> +</div> 
-  <area shape="rectcoords="254,494,315,532" href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:d1alt="Zone D1"> +<div class="inputrow"> 
-  <area shape="rectcoords="254,367,351,494href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:d2alt="Zone D2"> +    <label for="fsi">FSI:</label> 
-  <area shape="rectcoords="351,278,473,481href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:e" alt="Zone E"> +    <input id="fsitype="numberstep="0.01value="1.6oninput="updateLaadvermogen()"> 
-  <area shape="rectcoords="473,278,703,443" href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:f1" alt="Zone F1"+    <div class="resultblockid="lv2"></div> 
-  <area shape="rectcoords="491,152,727,278href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:f2alt="Zone F2"> +</div> 
-  <area shape="rectcoords="351,0,491,278href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:g1alt="Zone G1"> +<div class="inputrow"> 
-  <area shape="rectcoords="491,0,588,152" href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:g2" alt="Zone G2"> +    <label for="gsi">GSI:</label> 
-  <area shape="rectcoords="60,101,145,620" href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:h1alt="Zone H1"> +    <input id="gsitype="numberstep="0.01value="0.3oninput="updateLaadvermogen()"> 
-  <area shape="rect" coords="145,101,181,532" href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:h2alt="Zone H2"> +    <div class="resultblockid="lv3"></div> 
-  <area shape="rectcoords="181,101,254,481" href="https://www.sumsonite.nl/wiki/doku.php?id=handleiding_nieuw:spacematrix:h3alt="Zone H3"> +</div> 
-</map>+<div class="inputrow"> 
 +    <label for="voorziening">% BVO voor voorzieningen:</label
 +    <input id="voorzieningtype="numberstep="1" value="10" oninput="updateLaadvermogen()"> 
 +    <div class="resultblockid="lv4"></div> 
 +</div> 
 + 
 +<div style="margin-top30px;"
 +<table class="rekenblok"> 
 +    <thead> 
 +        <tr> 
 +            <th>Type</th> 
 +            <th style="width: 60px;">%</th> 
 +            <th style="width70px;">/won</th> 
 +            <th>Aantal</th> 
 +            <th>TotBVO</th> 
 +        </tr> 
 +    </thead> 
 +    <tbody id="woningtypes"></tbody
 +    <tfoot> 
 +        <tr class="scheiding"
 +            <td><b>Totaal</b></td> 
 +            <td id="totaal_perc">-</td
 +            <td id="totaal_gewbvo">-</td> 
 +            <td id="totaal_won">-</td
 +            <td id="totaal_bvo">-</td> 
 +        </tr> 
 +    </tfoot> 
 +</table> 
 +</div> 
 + 
 +<h3>Resultaat</h3> 
 +<div id="output"></div>
  
 <script> <script>
-  window.onload function () { +    const types 
-    var img = document.getElementById('spacematrix-img'); +        "egw sociaal", "egw goedkoop", "egw midden", "egw duur", "egw top", 
-    if (img) { +        "mgw sociaal", "mgw goedkoop", "mgw midden", "mgw duur", "mgw top" 
-      img.setAttribute('usemap', '#spacematrixmap');+    ]; 
 + 
 +    const tbody = document.getElementById("woningtypes")
 + 
 +    types.forEach((type, i) => { 
 +        const row = document.createElement("tr"); 
 +        if (i === 5) row.className = "scheiding"; 
 +        row.innerHTML = ` 
 +            <td style="text-align: left;">${type}</td> 
 +            <td><input type="number" id="perc_${i}" value="${i < 5 ? 5 : 10}" step="0.1" oninput="updateLaadvermogen()"></td> 
 +            <td><input type="number" id="bvo_${i}" value="${i < 5 ? 130 : 90}" step="1" oninput="updateLaadvermogen()"></td> 
 +            <td id="aantal_${i}">-</td> 
 +            <td id="totbvo_${i}">-</td> 
 +        `; 
 +        tbody.appendChild(row); 
 +    }); 
 + 
 +    function formatGetal(n) { 
 +        return n.toLocaleString("nl-NL");
     }     }
-  };+ 
 +    function updateStipje(fsi, gsi) { 
 +        const stip = document.getElementById("stipje"); 
 +        const x = Math.min(100, Math.max(0, gsi * 190)); 
 +        const y = Math.max(0, Math.min(100, (3 - fsi) * 35)); 
 +        stip.style.left = `${x}%`; 
 +        stip.style.top = `${y}%`; 
 +    } 
 + 
 +    function updateLaadvermogen() { 
 +        const opp = parseFloat(document.getElementById("opp").value); 
 +        const fsi = parseFloat(document.getElementById("fsi").value); 
 +        const gsi = parseFloat(document.getElementById("gsi").value); 
 +        const voorzieningPerc = parseFloat(document.getElementById("voorziening").value) / 100; 
 + 
 +        const laadvermogen = Math.round(opp * fsi); 
 +        const bvoVoorzieningen = Math.round(laadvermogen * voorzieningPerc); 
 +        const bvoWonen = laadvermogen - bvoVoorzieningen; 
 + 
 +        document.getElementById("lv2").innerText = `Laadvermogen: ${formatGetal(laadvermogen)} m² BVO`; 
 +        document.getElementById("lv3").innerText = `Voorzieningen: ${formatGetal(bvoVoorzieningen)} m²`; 
 +        document.getElementById("lv4").innerText = `Wonen: ${formatGetal(bvoWonen)} m²`; 
 + 
 +        updateStipje(fsi, gsi); 
 +        bereken(); 
 +    } 
 + 
 +    function bereken() { 
 +        const opp = parseFloat(document.getElementById("opp").value); 
 +        const fsi = parseFloat(document.getElementById("fsi").value); 
 +        const voorzieningPerc = parseFloat(document.getElementById("voorziening").value) / 100; 
 +        const laadvermogen = opp * fsi; 
 +        const woonBVO = laadvermogen * (1 - voorzieningPerc); 
 + 
 +        let gewogenBVO = 0; 
 +        let totalPerc = 0; 
 +        const details = []; 
 + 
 +        for (let i = 0; i < types.length; i++) { 
 +            const perc = parseFloat(document.getElementById(`perc_${i}`).value) || 0; 
 +            const bvo = parseFloat(document.getElementById(`bvo_${i}`).value) || 0; 
 +            gewogenBVO += (perc / 100) * bvo; 
 +            totalPerc += perc; 
 +            details.push({ i, perc, bvo }); 
 +        } 
 + 
 +        if (totalPerc === 0 || gewogenBVO === 0) return; 
 + 
 +        const totaalWoningenExact = woonBVO / gewogenBVO; 
 +        let sumWon = 0; 
 +        let sumBVO = 0; 
 +        let wonPerType = []; 
 + 
 +        let restant = Math.round(totaalWoningenExact); 
 +        for (let i = 0; i < details.length; i++) { 
 +            const { perc } = details[i]; 
 +            let aant = (perc / 100) * totaalWoningenExact; 
 +            let afgerond = Math.floor(aant); 
 +            wonPerType.push(afgerond); 
 +            restant -= afgerond; 
 +        } 
 + 
 +        const decimaalSort = details.map((d, i) => ({ 
 +            i, rest: ((d.perc / 100) * totaalWoningenExact) % 1 
 +        })).sort((a, b) => b.rest - a.rest); 
 + 
 +        for (let j = 0; j < restant; j++) { 
 +            wonPerType[decimaalSort[j].i]++; 
 +        } 
 + 
 +        for (let i = 0; i < details.length; i++) { 
 +            const aant = wonPerType[i]; 
 +            const bvoTot = aant * details[i].bvo; 
 +            document.getElementById(`aantal_${i}`).innerText = formatGetal(aant); 
 +            document.getElementById(`totbvo_${i}`).innerText = formatGetal(bvoTot); 
 +            sumWon += aant; 
 +            sumBVO += bvoTot; 
 +        } 
 + 
 +        document.getElementById("totaal_perc").innerText = `${totalPerc.toFixed(1)}%`; 
 +        document.getElementById("totaal_gewbvo").innerText = `${gewogenBVO.toFixed(1)} m²`; 
 +        document.getElementById("totaal_won").innerText = formatGetal(sumWon); 
 +        document.getElementById("totaal_bvo").innerText = formatGetal(sumBVO); 
 + 
 +        document.getElementById("output").innerHTML = ` 
 +            <p><b>Gewogen BVO/ehd:</b> ${gewogenBVO.toFixed(1)} m²<br> 
 +            <b>Totaal aantal woningen:</b> ${formatGetal(sumWon)}</p> 
 +        `; 
 +    } 
 + 
 +    updateLaadvermogen();
 </script> </script>
 </html> </html>
 +
handleiding_nieuw/sub_spacematrix.1744144130.txt.gz · Last modified: 2025/04/08 20:28 by support