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/05/19 08:37] supporthandleiding_nieuw:sub_spacematrix [2025/11/27 06:51] (current) support
Line 29: Line 29:
 <body> <body>
  
-<h1>Spacematrix & Voorzieningen</h1>+<h1>Stedelijke Dichtheidsrekenmachine</h1>
 <div class="tabs"> <div class="tabs">
   <div class="tab active" onclick="switchTab('rekenblok')">Spacematrix Rekenblok</div>   <div class="tab active" onclick="switchTab('rekenblok')">Spacematrix Rekenblok</div>
Line 59: Line 59:
     </div>     </div>
     <div class="kaartcontainer" style="max-width: 500px;">     <div class="kaartcontainer" style="max-width: 500px;">
-      <img src="https://www.sumsonite.nl/wiki/lib/exe/fetch.php?media=handleiding_nieuw:spacematrix:SPACEMATE1.png" alt="Spacematrix kaart">+      <img src="/wiki/lib/exe/fetch.php?media=handleiding_nieuw:spacematrix:SPACEMATE1.png" alt="Spacematrix kaart">
       <div class="stipje" id="stipje"></div>       <div class="stipje" id="stipje"></div>
     </div>     </div>
Line 257: Line 257:
 function updateStipje(fsi, gsi) { function updateStipje(fsi, gsi) {
   const stip = document.getElementById("stipje");   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));+  // Afbeeldingskalibratie (pixels of procenten afhankelijk van verhoudingen) 
 +  // GSI 0 → linksrand, GSI 0.5 → ongeveer 90% breedte 
 +  const x = Math.min(100, Math.max(0, (gsi / 0.5) 70+ 6));   // pas 70 en 6 aan voor horizontale correctie 
 + 
 +  // FSI 0 → onderrand, FSI 3 → bovenzijde (ongeveer 5% marge boven) 
 +  const y = Math.max(0, Math.min(100, 92 - (fsi / 3) * 88));   // pas 93 en 88 aan voor verticale correctie 
   stip.style.left = `${x}%`;   stip.style.left = `${x}%`;
   stip.style.top = `${y}%`;   stip.style.top = `${y}%`;
Line 623: Line 629:
   const label = (txt) => `| ${txt}`.padEnd(labelWidth);   const label = (txt) => `| ${txt}`.padEnd(labelWidth);
  
 +  // DATA per woningtype (alleen types, dus zonder parkeren)
   const perc = types.map((_, i) => document.getElementById(`perc_${i}`)?.value || "0");   const perc = types.map((_, i) => document.getElementById(`perc_${i}`)?.value || "0");
-  const bvo = types.map((_, i) => document.getElementById(`bvo_${i}`)?.value || "0"); +  const bvo = types.map((_, i) => parseFloat(document.getElementById(`bvo_${i}`)?.value || "0")); 
-  const aantallen = types.map((_, i) => document.getElementById(`aantal_${i}`)?.innerText || "0"); +  const aantallen = types.map((_, i) => parseInt(document.getElementById(`aantal_${i}`)?.innerText || "0")); 
-  const bvo_tot = types.map((_, i) => document.getElementById(`totbvo_${i}`)?.innerText || "0");+  const vormfactor = types.map((_, i) => i < 5 ? 0.9 : 0.75); 
 +  const bvo_tot = bvo.map((b, i) => b * aantallen[i]); 
 +  const gbo = bvo.map((b, i) => (b * vormfactor[i]).toFixed(1));
  
 +  // PARKEERREGELS berekenen
   const pp = parseFloat(document.getElementById("pp_per_woning")?.value || 1);   const pp = parseFloat(document.getElementById("pp_per_woning")?.value || 1);
-  const woningen = aantallen.reduce((acc, val) => acc + parseInt(val || 0), 0);+  const woningen = aantallen.reduce((acc, val) => acc + (val || 0), 0); // alleen woningtypes
   const bvo_pp = parseFloat(document.getElementById("bvo_per_pp")?.value || 25);   const bvo_pp = parseFloat(document.getElementById("bvo_per_pp")?.value || 25);
   const perc_boven = parseFloat(document.getElementById("pp_bovengronds")?.value || 70);   const perc_boven = parseFloat(document.getElementById("pp_bovengronds")?.value || 70);
Line 638: Line 648:
   const bvo_onder = pp_onder * bvo_pp;   const bvo_onder = pp_onder * bvo_pp;
  
-  // Voeg parkeerdata toe +  // PARKEERGEGEVENS toevoegen 
-  perc.push("-"); perc.push("-"); +  perc.push("-""-"); 
-  bvo.push(bvo_pp.toFixed(0), bvo_pp.toFixed(0)); +  bvo.push(bvo_pp, bvo_pp); 
-  aantallen.push(pp_boven.toString()pp_onder.toString()); +  aantallen.push(pp_boven, pp_onder); 
-  bvo_tot.push(bvo_boven.toFixed(0), bvo_onder.toFixed(0));+  bvo_tot.push(bvo_bovenbvo_onder); 
 +  vormfactor.push(1.00, 1.00); 
 +  gbo.push((bvo_pp * 1.00).toFixed(1), (bvo_pp * 1.00).toFixed(1));
  
 +  // TABEL opbouwen
   const r = [];   const r = [];
   r.push(label("Type") + kolommen.map(head).join("|") + "|");   r.push(label("Type") + kolommen.map(head).join("|") + "|");
   r.push("".padEnd(labelWidth, " ") + kolommen.map(() => "-".repeat(colWidth)).join("|") + "|");   r.push("".padEnd(labelWidth, " ") + kolommen.map(() => "-".repeat(colWidth)).join("|") + "|");
   r.push(label("% totaal") + perc.map(pad).join("|") + "|");   r.push(label("% totaal") + perc.map(pad).join("|") + "|");
-  r.push(label("m² BVO/woning") + bvo.map(pad).join("|") + "|"); 
   r.push(label("Aantal woningen") + aantallen.map(pad).join("|") + "|");   r.push(label("Aantal woningen") + aantallen.map(pad).join("|") + "|");
-  r.push(label("Totaal BVO") + bvo_tot.map(pad).join("|") + "|");+  r.push(label("Totaal BVO") + bvo_tot.map(b => pad(b.toFixed(0))).join("|") + "|")
 +  r.push(label("m² BVO/woning") + bvo.map(b => pad(b.toFixed(0))).join("|") + "|"); 
 +  r.push(label("m² GBO/woning") + gbo.map(pad).join("|") + "|"); 
 +  r.push(label("Vormfactor") + vormfactor.map(f => pad(f.toFixed(2))).join("|") + "|"); 
 + 
 +  // GEMIDDELDES (alleen woningtypes, dus index 0 t/m 9) 
 +  const woningtypes = [...Array(10).keys()]; 
 +  const totale_bvo = woningtypes.reduce((sum, i) => sum + bvo[i] * aantallen[i], 0); 
 +  const totale_gbo = woningtypes.reduce((sum, i) => sum + parseFloat(gbo[i]) * aantallen[i], 0); 
 +  const totaal_woningen = woningtypes.reduce((sum, i) => sum + aantallen[i], 0); 
 + 
 +  const gemiddelde_bvo = totaal_woningen > 0 ? (totale_bvo / totaal_woningen).toFixed(1) : "0"; 
 +  const gemiddelde_gbo = totaal_woningen > 0 ? (totale_gbo / totaal_woningen).toFixed(1) : "0";
  
   r.push("");   r.push("");
-  r.push(`Totale aantal woningen: ${woningen}`); +  r.push(`Totale aantal woningen: ${totaal_woningen}`); 
-  r.push(`Gemiddelde BVO per woning: 110.0`);+  r.push(`Gemiddelde BVO per woning: ${gemiddelde_bvo}`); 
 +  r.push(`Gemiddelde GBO per woning: ${gemiddelde_gbo}`);
  
   return r.join("\n");   return r.join("\n");
-} 
- 
- 
-function buildVoorzieningenTable() { 
-  const voorzieningen = [ 
-    { naam: "Huisarts" }, { naam: "Fysiotherapie" }, { naam: "Tandarts" }, 
-    { naam: "Kinderopvang" }, { naam: "Basisschool" }, { naam: "Bibliotheek" }, 
-    { naam: "Buurtcentrum" }, { naam: "Sporthal" }, { naam: "Zwemmen (overdekt)" }, 
-    { naam: "Winkels dagelijks goed." } 
-  ]; 
-  let rows = ["Type | Oppervlak (m²)"]; 
- 
-  voorzieningen.forEach((v, i) => { 
-    const row = document.getElementById(`vchk_${i}`); 
-    if (row && row.checked) { 
-      const el = document.querySelector(`#voorziening_summary_tabel tr:nth-child(${rows.length}) td:last-child`); 
-      const m2 = el ? el.innerText : "-"; 
-      rows.push(`${v.naam} | ${m2}`); 
-    } 
-  }); 
- 
-  return rows.join("\n"); 
-} 
- 
-function buildPlankaartTable() { 
-  const getVal = (id) => parseFloat(document.getElementById(id)?.innerText?.replace(" m²", "") || 0); 
-  const getInput = (id) => parseFloat(document.getElementById(id)?.value || 0); 
- 
-  const ids = ["opp", "m2_groen", "m2_water", "m2_tuinen", "m2_rijbanen", "m2_trottoirs", "m2_parkeren", "m2_pleinen"]; 
-  const labels = ["Totaal bruto plangebied", "Groen", "Water", "Tuinen", "Rijbanen", "Trottoirs", "Parkeren (bovengr.)", "Pleinen"]; 
- 
-  const opp = getInput("opp"); 
-  const gsi = getInput("gsi"); 
-  const footprint = gsi * opp; 
-  const tuin = getVal("m2_tuinen"); 
-  const uitgeefbaar = footprint + tuin; 
-  const verharding = getVal("m2_rijbanen") + getVal("m2_trottoirs") + getVal("m2_parkeren") + getVal("m2_pleinen"); 
- 
-  const col1 = 30; 
-  const col2 = 16; 
-  const pad = (txt, len) => txt.toString().padEnd(len); 
-  const val = (v) => v.toString().padStart(col2); 
- 
-  let rows = []; 
-  rows.push("Omschrijving".padEnd(col1) + "| Oppervlak (m²)"); 
-  rows.push("-".repeat(col1) + "|" + "-".repeat(col2)); 
- 
-  ids.forEach((id, i) => { 
-    const el = document.getElementById(id); 
-    const waarde = el?.value || el?.innerText || "-"; 
-    rows.push(pad(labels[i], col1) + "|" + val(waarde)); 
-  }); 
- 
-  rows.push("-".repeat(col1) + "|" + "-".repeat(col2)); 
-  rows.push(pad("Footprint (GSI x opp)", col1) + "|" + val(footprint.toFixed(0))); 
-  rows.push(pad("Totaal uitgeefbaar", col1) + "|" + val(uitgeefbaar.toFixed(0))); 
-  rows.push(pad("Rijbanen", col1) + "|" + val(getVal("m2_rijbanen"))); 
-  rows.push(pad("Trottoirs", col1) + "|" + val(getVal("m2_trottoirs"))); 
-  rows.push(pad("Parkeren (bovengr.)", col1) + "|" + val(getVal("m2_parkeren"))); 
-  rows.push(pad("Pleinen", col1) + "|" + val(getVal("m2_pleinen"))); 
-  rows.push("-".repeat(col1) + "|" + "-".repeat(col2)); 
-  rows.push(pad("Totaal verharding", col1) + "|" + val(verharding.toFixed(0))); 
-  rows.push(pad("Groen", col1) + "|" + val(getVal("m2_groen"))); 
-  rows.push(pad("Water", col1) + "|" + val(getVal("m2_water"))); 
- 
-  return rows.join("\n"); 
-} 
- 
-function buildGrexTable() { 
-  const getVal = id => parseFloat(document.getElementById(id)?.innerText?.replace(' m²', '') || 0); 
-  const rijbanen = getVal("m2_rijbanen"); 
-  const trottoirs = getVal("m2_trottoirs"); 
-  const parkeren = getVal("m2_parkeren"); 
-  const pleinen = getVal("m2_pleinen"); 
-  const groen = getVal("m2_groen"); 
-  const water = getVal("m2_water"); 
-  const totaalopp = parseFloat(document.getElementById("opp")?.value || 0); 
-  const nazorg = rijbanen * 0.10; 
- 
-  return [ 
-    "Categorie | Omschrijving | Oppervlak (m²)", 
-    `Verwerving | Percelen te verwerven of in te brengen | ${totaalopp.toFixed(0)}`, 
-    `Grondwerk | Graven watergangen | ${water.toFixed(0)}`, 
-    `Bouwrijp maken | Bouwstraten | ${rijbanen.toFixed(0)}`, 
-    `Woonrijp maken | Rijbanen | ${rijbanen.toFixed(0)}`, 
-    `Woonrijp maken | Trottoirs | ${trottoirs.toFixed(0)}`, 
-    `Woonrijp maken | Parkeren | ${parkeren.toFixed(0)}`, 
-    `Woonrijp maken | Pleinen | ${pleinen.toFixed(0)}`, 
-    `Woonrijp maken | Groen | ${groen.toFixed(0)}`, 
-    "Woonrijp maken | Bomen en groenstructuur |", 
-    "Woonrijp maken | Verdere aankleding openbare ruimte |", 
-    `Nazorg | Herstraten bestratingen (10% rijbanen) | ${nazorg.toFixed(0)}`, 
-    "Onvoorzien | Onvoorzien (5-15%) |" 
-  ].join("\n"); 
 } }
  
Line 757: Line 688:
  
   try {   try {
-    const response = await fetch('https://www.sumsonite.nl/wiki/lib/exe/fetch.php?media=handleiding_nieuw:spacematrix:kickstart_template_final.txt&v=' + Date.now());+    const response = await fetch('https://login.sumsonite.nl/wiki/lib/exe/fetch.php?media=handleiding_nieuw:spacematrix:kickstart_template_final.txt&v=' + Date.now());
     if (!response.ok) throw new Error(`Bestand niet bereikbaar (${response.status})`);     if (!response.ok) throw new Error(`Bestand niet bereikbaar (${response.status})`);
  
Line 829: Line 760:
  
 function buildPlankaartTableTXT() { function buildPlankaartTableTXT() {
 +  const opp = parseFloat(document.getElementById("opp").value) || 0;
 +  const gsi = parseFloat(document.getElementById("gsi").value) || 0;
 +  const footprint = gsi * opp;
 +  const tuin = getVal("m2_tuinen");
 +  const uitgeefbaar = tuin + footprint;
 +
   return `Omschrijving                | Oppervlak (m²)   return `Omschrijving                | Oppervlak (m²)
 ----------------------------|---------------- ----------------------------|----------------
-Totaal bruto plangebied     | ${document.getElementById("opp").value}+Totaal bruto plangebied     | ${opp}
 ----------------------------|---------------- ----------------------------|----------------
-Tuinen                      | ${getVal("m2_tuinen")+Tuinen                      | ${tuin
-Footprint (GSI x opp)       | ${(parseFloat(document.getElementById("gsi").value) * parseFloat(document.getElementById("opp").value)).toFixed(0)}+Footprint (GSI x opp)       | ${footprint.toFixed(0)}
 ----------------------------|---------------- ----------------------------|----------------
-Totaal uitgeefbaar          | ${getVal("m2_tuinen") + (parseFloat(document.getElementById("gsi").value) * parseFloat(document.getElementById("opp").value)).toFixed(0)}+Totaal uitgeefbaar          | ${uitgeefbaar.toFixed(0)}
 Rijbanen                    | ${getVal("m2_rijbanen")} Rijbanen                    | ${getVal("m2_rijbanen")}
 Trottoirs                   | ${getVal("m2_trottoirs")} Trottoirs                   | ${getVal("m2_trottoirs")}
Line 842: Line 779:
 Pleinen                     | ${getVal("m2_pleinen")} Pleinen                     | ${getVal("m2_pleinen")}
 ----------------------------|---------------- ----------------------------|----------------
-Totaal verharding           | ${getVal("m2_rijbanen") + getVal("m2_trottoirs") + getVal("m2_parkeren") + getVal("m2_pleinen")}+Totaal verharding           | ${(getVal("m2_rijbanen") + getVal("m2_trottoirs") + getVal("m2_parkeren") + getVal("m2_pleinen")).toFixed(0)}
 Groen                       | ${getVal("m2_groen")} Groen                       | ${getVal("m2_groen")}
 Water                       | ${getVal("m2_water")}`; Water                       | ${getVal("m2_water")}`;
handleiding_nieuw/sub_spacematrix.1747643825.txt.gz · Last modified: 2025/05/19 08:37 by support