geothermie-atlas/app/gwwp/table-ampelkarte-gwwp.tsx

312 lines
12 KiB
TypeScript
Raw Permalink Normal View History

2023-10-19 09:07:33 +00:00
import Collapsible from '../components/collapsible';
const hinweiseText: any = {
Grundwasserchemismus: {
'Eisen- und Manganausfällung': `Am Standort kann es zu Eisen- und Manganausfällungen in den Brunnen kommen.
Diese können mit bestimmten technischen Maßnahmen wie der Luftfreihaltung des Systems von der Entnahme bis zur Rückgabe des Wassers reduziert oder vermieden werden.
Jedenfalls wird im Vorfeld eine chemische Analyse des Grundwassers am Standort empfohlen.`,
Metallkorrosion: `Am Standort kann es zur Metallkorrosion in den Brunnen kommen. Dies kann mit bestimmten technischen Maßnahmen, wie einem Wärmetauscher aus rostfreiem Stahl bzw. einem zusätzlichen Trennwärmetauscher reduziert oder vermieden werden. Jedenfalls wird im Vorfeld eine chemische Analyse des Grundwassers am Standort empfohlen.`,
'Keine Daten': `Auf Grund fehlender chemischer Wasseranalysen können keine Aussagen zur Grundwasserchemie getroffen werden.`,
'Kein Risiko durch GW-Chemismus': 'Kein Risiko durch GW-Chemismus',
},
Naturdenkmal: `Am Standort gibt es Naturdenkmäler, die eine Nutzung der Oberflächennahen Geothermie eventuell beschränken können.`,
'Gespannte Grundwasserzone': `Am Standort können gespannte Grundwasserverhältnisse auftreten. Bei der Planung und Durchführung zukünftiger Bohrungen in diesem Bereich muss dies berücksichtigt werden.`,
Gasvorkommen: `Am Standort können oberflächennahe Gasvorkommen nicht ausgeschlossen werden. Bei der Planung und Durchführung zukünftiger Bohrungen in diesem Bereich muss dies berücksichtigt werden.`,
'Mehrere Grundwasserstockwerke': `Am Standort können mehrere Grundwasserstockwerke angetroffen werden.`,
};
const einschraenkungenText: any = {
Naturschutz: `Sind durch ein Vorhaben ein Schutzgebiet (z.B. Nationalpark, Europaschutzgebiet, Landschaftsschutzgebiet, Naturschutzgebiet, geschützter Landschafsteil),
ein Schutzobjekt (Naturdenkmal) oder streng (geschützte) Tier- und Pflanzenarten betroffen, ist jedenfalls rechtzeitig mit der Magistratsabteilung 22 - Umweltschutz Kontakt aufzunehmen,
um eine allfällige naturschutzbehördliche Bewilligungspflicht abklären zu können. Auf folgenden Seiten sind sämtliche Informationen zu Schutzgebieten und objekten sowie zu den Artenschutzbestimmungen zu finden:`,
Naturschutz_links: [
'https://www.wien.gv.at/umweltschutz/naturschutz/gebiet/schutzgebiete.html#schutzgebiete',
'https://www.wien.gv.at/umweltschutz/naturschutz/biotop/artenschutz.html',
],
'Artesisch gespannte Brunnen': `In einem Umkreis von 100 m Radius wurde mit Bohrungen artesisch gespanntes Grundwasser angetroffen. Bei der Planung und Durchführung zukünftiger Bohrungen in diesem Bereich muss dies berücksichtigt werden.`,
Karstzonen: `Am Standort treten verkarstungsfähige Gesteine auf. Bohrungen können daher Hohlräume antreffen.`,
Altlasten: `Es befindet sich eine Altlast am Standort. Weitere Informationen über die Altlasten sind im Altlasten-GIS unter folgendem Link zu finden: `,
Altlasten_links: 'https://secure.umweltbundesamt.at/altlasten/?servicehandler=publicgis',
'Unterirdische Bauwerke': `In einem Umkreis von 2 m befindet sich ein unterirdisches Verkehrsbauwerk (entsprechend Digitalem Verkehrsgraph - GIP). Auf diesen Flächen und im Nahbereich ist der Einsatz von Erdwärmesonden ausgeschlossen.
Es kann jedoch noch weitere unterirdische Bauwerke wie Tiefgaragen, Verbindungsgänge oder Einbauten im restlichen Stadtgebiet geben, die den Einsatz von Erdwärmesonden beschränken können.`,
};
const tableDataCSS = 'w-full break-words border-b border-solid border-gray-300 px-2 text-sm';
let einschraenkungen_erlaeuterungen: any = {};
let hinweise_erlaeuterungen: any = {};
const getEinschraenkungen = (attributes: any) => {
let einschraenkungen = [];
// Wasserschutz- und Wasserschongebiete
switch (attributes['GWP_01']) {
case 'Grün':
einschraenkungen.push(
<tr key={einschraenkungen.length}>
<td className={tableDataCSS}>{attributes['Para_01']}</td>
<td className={tableDataCSS}>{getAmpelText('Grün')}</td>
</tr>
);
break;
case 'Gelb':
einschraenkungen.push(
<tr key={einschraenkungen.length}>
<td className={tableDataCSS}>
{attributes['Para_01']}: {attributes['Kat_01']}
</td>
<td className={tableDataCSS}>{getAmpelText('Gelb')}</td>
</tr>
);
break;
case 'Magenta':
einschraenkungen.push(
<tr key={einschraenkungen.length}>
<td className={tableDataCSS}>
{attributes['Para_01']}: {attributes['Kat_01']}
</td>
<td className={tableDataCSS}>{getAmpelText('Magenta')}</td>
</tr>
);
break;
default:
break;
}
// Altlasten
switch (attributes['GWP_02']) {
case 'Gelb':
einschraenkungen_erlaeuterungen[attributes['Para_02']] = (
<>
{einschraenkungenText[attributes['Para_02']]}
<a href={einschraenkungenText[attributes['Para_02'] + '_links']}>
{einschraenkungenText[attributes['Para_02'] + '_links']}
</a>
</>
);
einschraenkungen.push(
<tr key={einschraenkungen.length}>
<td className={tableDataCSS}>
{attributes['Para_02']}
<sup>{Object.keys(einschraenkungen_erlaeuterungen).length}</sup>
</td>
<td className={tableDataCSS}>{getAmpelText('Gelb')}</td>
</tr>
);
break;
default:
break;
}
// Artesisch gespannte Brunnen
switch (attributes['GWP_03']) {
case 'Gelb':
einschraenkungen_erlaeuterungen[attributes['Para_03']] = einschraenkungenText[attributes['Para_03']];
einschraenkungen.push(
<tr key={einschraenkungen.length}>
<td className={tableDataCSS}>
{attributes['Para_03']}
<sup>{Object.keys(einschraenkungen_erlaeuterungen).length}</sup>
</td>
<td className={tableDataCSS}>{getAmpelText('Gelb')}</td>
</tr>
);
break;
default:
break;
}
// Bergbaugebiete
switch (attributes['GWP_04']) {
case 'Gelb':
einschraenkungen.push(
<tr key={einschraenkungen.length}>
<td className={tableDataCSS}>{attributes['Para_04']}</td>
<td className={tableDataCSS}>{getAmpelText('Gelb')}</td>
</tr>
);
break;
default:
break;
}
// Karstzonen
switch (attributes['GWP_05']) {
case 'Gelb':
einschraenkungen_erlaeuterungen[attributes['Para_05']] = einschraenkungenText[attributes['Para_05']];
einschraenkungen.push(
<tr key={einschraenkungen.length}>
<td className={tableDataCSS}>{attributes['Para_05']}</td>
<td className={tableDataCSS}>{getAmpelText('Gelb')}</td>
</tr>
);
break;
default:
break;
}
// Naturschutz
switch (attributes['GWP_06']) {
case 'Gelb':
einschraenkungen_erlaeuterungen[attributes['Para_06']] = (
<>
Sind durch ein Vorhaben ein Schutzgebiet (z.B. Nationalpark, Europaschutzgebiet, Landschaftsschutzgebiet,
Naturschutzgebiet, geschützter Landschafsteil), ein Schutzobjekt (Naturdenkmal) oder streng (geschützte) Tier-
und Pflanzenarten betroffen, ist jedenfalls rechtzeitig mit der Magistratsabteilung 22 - Umweltschutz Kontakt
aufzunehmen, um eine allfällige naturschutzbehördliche Bewilligungspflicht abklären zu können. Auf folgenden
Seiten sind sämtliche Informationen zu Schutzgebieten und objekten sowie zu den Artenschutzbestimmungen zu
finden:
<ul className="pt-2">
<li>
<a href="https://www.wien.gv.at/umweltschutz/naturschutz/gebiet/schutzgebiete.html#schutzgebiete">
https://www.wien.gv.at/umweltschutz/naturschutz/gebiet/schutzgebiete.html#schutzgebiete
</a>
</li>
<li>
<a href="https://www.wien.gv.at/umweltschutz/naturschutz/biotop/artenschutz.html">
https://www.wien.gv.at/umweltschutz/naturschutz/biotop/artenschutz.html
</a>
</li>
</ul>
</>
);
einschraenkungen.push(
<tr key={einschraenkungen.length} className="w-full">
<td className={tableDataCSS}>
{attributes['Para_06']}
<sup>{Object.keys(einschraenkungen_erlaeuterungen).length}</sup>:{' '}
{attributes['Kat_06'].replaceAll(',', ', ')}
</td>
<td className={tableDataCSS}>{getAmpelText('Gelb')}</td>
</tr>
);
break;
default:
break;
}
return einschraenkungen;
};
const getHinweise = (attributes: any) => {
let hinweise = [];
if (attributes['Hinweis_01']) {
hinweise.push(
<tr key={hinweise.length}>
<td className={tableDataCSS}>{attributes['Hinweis_01']}</td>
<td className={tableDataCSS}>
{attributes['Kat_01']} {attributes['Kat_01'] !== 'Kein Risiko durch GW-Chemismus' && <sup>1</sup>}
</td>
</tr>
);
if (attributes['Kat_01'] !== 'Kein Risiko durch GW-Chemismus') {
hinweise_erlaeuterungen[attributes['Hinweis_01']] = (
<>{hinweiseText.Grundwasserchemismus[attributes['Kat_01']]}</>
);
}
}
return hinweise;
};
export const getAmpelText = (color: string) => {
switch (color) {
case 'Grün':
return 'Nutzung generell möglich';
case 'Gelb':
return 'Genauere Beurteilung notwendig';
case 'Magenta':
return 'Nutzung generell nicht möglich';
default:
return;
}
};
export const TableAmpelkarteGWWP = ({ results }: { results: any }) => {
let einschraenkungen: any[] = [];
let hinweise: any[] = [];
einschraenkungen_erlaeuterungen = {};
results.forEach((result: any) => {
const attributes = result.feature.attributes;
if (result.layerId === 0) {
einschraenkungen = getEinschraenkungen(attributes);
} else {
hinweise = getHinweise(attributes);
}
});
return (
<>
{einschraenkungen.length > 0 ? (
<Collapsible title="Einschränkungen" open={true}>
<table id={'einschraenkungen-table'} className="table-fixed w-full mb-4">
<thead>
<tr>
<td colSpan={2}></td>
</tr>
</thead>
<tbody>{einschraenkungen}</tbody>
<tbody>
{Object.keys(einschraenkungen_erlaeuterungen).length > 0
? Object.keys(einschraenkungen_erlaeuterungen).map((key, index) => {
return (
<tr key={key} className="w-full">
<td
colSpan={2}
className="w-full break-words border-b border-solid border-gray-300 px-2 text-xs"
>
{index + 1}: {einschraenkungen_erlaeuterungen[key]}
</td>
</tr>
);
})
: null}
</tbody>
</table>
</Collapsible>
) : (
<Collapsible title="Einschränkungen" open={true}>
<table id={'einschraenkungen-table'} className="table-fixed w-full mb-4">
<thead>
<tr>
<td></td>
</tr>
</thead>
<tbody>
<tr className="w-full">
<td className={tableDataCSS}>An diesem Standort sind keine Einschränkungen bekannt.</td>
</tr>
</tbody>
</table>
</Collapsible>
)}
{hinweise.length > 0 ? (
<Collapsible title="Hinweise" open={true}>
<table id={'hinweise-table'} className="table-fixed w-full mb-4">
<thead>
<tr>
<td></td>
</tr>
</thead>
<tbody>{hinweise}</tbody>
<tbody>
{Object.keys(hinweise_erlaeuterungen).length > 0 &&
Object.keys(hinweise_erlaeuterungen).map((key, index) => {
return (
<tr key={key}>
<td colSpan={2} className="w-full break-words border-b border-solid border-gray-300 px-2 text-xs">
{index + 1}: {hinweise_erlaeuterungen[key]}
</td>
</tr>
);
})}
</tbody>
</table>
</Collapsible>
) : null}
</>
);
};