Fresh start without large data history
Deploy Standortpruefung / deploy (push) Failing after 7s
Details
Deploy Standortpruefung / deploy (push) Failing after 7s
Details
This commit is contained in:
commit
35d3640668
|
|
@ -0,0 +1,6 @@
|
||||||
|
*.shp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.dbf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.shx filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.cpg filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.qmd filter=lfs diff=lfs merge=lfs -text
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
name: Deploy Standortpruefung
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Code holen
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: App bauen und starten
|
||||||
|
run: |
|
||||||
|
# Da der Runner Zugriff auf den Docker-Socket hat,
|
||||||
|
# baut er die App direkt dort, wo die Dateien liegen.
|
||||||
|
docker compose up -d --build --force-recreate
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
node_modules/
|
||||||
|
dist/
|
||||||
|
.DS_Store
|
||||||
|
*.local
|
||||||
|
.agent/
|
||||||
|
.vscode/
|
||||||
|
public/Daten/
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
# Nutze Node.js als Basis (LTS Version)
|
||||||
|
FROM node:20-alpine AS build
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Kopiere package files und installiere Abhängigkeiten
|
||||||
|
COPY package*.json ./
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
# Kopiere den restlichen Code
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Baue das Frontend (erzeugt den 'dist' Ordner)
|
||||||
|
RUN npm run build
|
||||||
|
|
||||||
|
# Finales Image
|
||||||
|
FROM node:20-alpine
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Installiere nur Production-Abhängigkeiten
|
||||||
|
COPY package*.json ./
|
||||||
|
RUN npm install --production
|
||||||
|
|
||||||
|
# Kopiere das gebaute Frontend und das Backend
|
||||||
|
COPY --from=build /app/dist ./dist
|
||||||
|
COPY --from=build /app/server.cjs ./
|
||||||
|
COPY --from=build /app/public ./public
|
||||||
|
|
||||||
|
# Der Express-Server läuft auf Port 3000
|
||||||
|
EXPOSE 3000
|
||||||
|
|
||||||
|
CMD ["node", "server.cjs"]
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"path": "../../Users/JohannesBaumeister/OneDrive - Enwelo GmbH & Co. KG/Programmieren/Flächenprüfung v2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {}
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 349 KiB |
Binary file not shown.
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Windenergie-Flächenprüfung
|
||||||
|
|
||||||
|
Dieses Projekt dient der automatisierten Vorab-Prüfung von Flächen für Windenergieanlagen in NRW.
|
||||||
|
|
||||||
|
## Schnelleinstieg
|
||||||
|
|
||||||
|
### 1. Installation
|
||||||
|
Stellen Sie sicher, dass Node.js installiert ist und führen Sie im Hauptverzeichnis aus:
|
||||||
|
```bash
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Starten
|
||||||
|
Verwenden Sie die Batch-Datei oder das npm-Skript:
|
||||||
|
* **Batch-Datei:** Doppelklick auf `start_server.bat`
|
||||||
|
* **Terminal:** `npm start`
|
||||||
|
|
||||||
|
Das System startet dann:
|
||||||
|
- den **Geodaten-Server** (Backend) auf [http://localhost:3000](http://localhost:3000)
|
||||||
|
- das **Frontend** (Vite) auf [http://localhost:5173](http://localhost:5173)
|
||||||
|
|
||||||
|
## Komponenten
|
||||||
|
- `server.cjs`: Express-Backend für WFS-Proxies und Shapefile-Parsing.
|
||||||
|
- `main.js`: Frontend-Logik mit Leaflet & Turf.js.
|
||||||
|
- `public/daten/`: Enthält die benötigten GIS-Daten (ZIP/SHP).
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,482 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<wfs:WFS_Capabilities xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:wfs="http://www.opengis.net/wfs/2.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:erneuerbare_energien_wfs="http://www.wfs.nrw.de/schemas" xmlns="http://www.opengis.net/wfs/2.0" version="2.0.0" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">
|
||||||
|
<ows:ServiceIdentification>
|
||||||
|
<ows:Title>WFS Erneuerbare Energien NRW</ows:Title>
|
||||||
|
<ows:Abstract>Der WFS-Dienst Erneuerbare Energien stellt die Anlagen der Erneuerbaren Energien Biomasse, Freiflächenphotovoltaik, Wasserkraft und Windkraft dar. Darüber hinaus werden die Anlagen von Klärgas, Deponiegas und Grubengas dargestellt, die aber streng genommen nicht zu den Erneuerbaren Energien zählen, jedoch ebenfalls in hohem Maße zum Klimaschutz beitragen.</ows:Abstract>
|
||||||
|
<ows:Keywords>
|
||||||
|
<ows:Keyword>WFS</ows:Keyword>
|
||||||
|
<ows:Keyword> WFS Erneuerbare Energien</ows:Keyword>
|
||||||
|
<ows:Keyword> Erneuerbare Energien</ows:Keyword>
|
||||||
|
<ows:Keyword> LANUV</ows:Keyword>
|
||||||
|
<ows:Keyword> Biomasse</ows:Keyword>
|
||||||
|
<ows:Keyword> PV</ows:Keyword>
|
||||||
|
<ows:Keyword> Photovoltaik</ows:Keyword>
|
||||||
|
<ows:Keyword> Wasserkraft</ows:Keyword>
|
||||||
|
<ows:Keyword> Windkraft</ows:Keyword>
|
||||||
|
<ows:Keyword> Klärgas</ows:Keyword>
|
||||||
|
<ows:Keyword> Grubengas</ows:Keyword>
|
||||||
|
<ows:Keyword> Deponiegas</ows:Keyword>
|
||||||
|
</ows:Keywords>
|
||||||
|
<ows:ServiceType codeSpace="OGC">WFS</ows:ServiceType>
|
||||||
|
<ows:ServiceTypeVersion>2.0.0</ows:ServiceTypeVersion>
|
||||||
|
<ows:Fees>keine</ows:Fees>
|
||||||
|
<ows:AccessConstraints>Das Fachinformationssystem 'Energieatlas Nordrhein-Westfalen' (www.energieatlas.nrw.de) sowie der zugehörige WFS-Dienst Erneuerbare Energien werden vom Landesamt für Natur, Umwelt und Verbraucherschutz bereitgestellt.
|
||||||
|
Grundlage für die Anlagendaten der Erneuerbaren Energien sind Daten der Bundesnetzagentur, der Übertragungsnetzbetreiber Amprion und Tennet, LANUV-eigene Daten und Daten des Landesverbandes Erneuerbare Energien NRW.
|
||||||
|
Für die Nutzung des WFS-Dienstes Erneuerbare Energien NRW gelten folgende Nutzungsbedingungen:
|
||||||
|
1. Aussagen, sowie Karten und Graphiken dürfen nicht verändert werden.
|
||||||
|
2. Die Datengrundlagen wurden mit größter Sorgfalt für den Energieatlas aufbereitet und ausgewertet. Für die Richtigkeit, Vollständigkeit und Aktualität der Daten wird keine Gewähr übernommen.
|
||||||
|
3. Die Vervielfältigung und Verbreitung von Inhalten ist, auch auszugsweise, nur mit Angabe des Herausgebers und der jeweiligen Datenquelle gestattet. Es ist an geeigneter Stelle ein deutlich sichtbarer Quellenvermerk wie folgt anzugeben: Energieatlas NRW, Herausgeber: Landesamt für Natur, Umwelt und Verbraucherschutz NRW, [Datenstand einfügen].
|
||||||
|
4. Die Aktualität der Daten ist unter dem Informationsbutton der jeweiligen Karte ersichtlich. Aktuellere Daten sind bei den entsprechenden Datenquellen einzuholen.
|
||||||
|
5. Für Sach- und Vermögensschäden, die Nutzern durch die Verwendung der Daten und Karten sowie aus der Unmöglichkeit des Zugriffes oder der Benutzung entstehen, übernimmt der Herausgeber keine Verantwortung. Dem Herausgeber kommt keine Garantie- und Einstandshaftung für das technische Funktionieren, die Kompatibilität mit der von dem Nutzer verwendeten Soft- oder Hardware sowie Virenfreiheit zu.
|
||||||
|
6. Das LANUV NRW behält sich vor, den Energieatlas NRW ohne Angaben von Gründen einzustellen.
|
||||||
|
Stand Ende 2023</ows:AccessConstraints>
|
||||||
|
</ows:ServiceIdentification>
|
||||||
|
<ows:ServiceProvider>
|
||||||
|
<ows:ProviderName>Landesamt für Natur, Umwelt und Klima Nordrhein-Westfalen</ows:ProviderName>
|
||||||
|
<ows:ProviderSite xlink:type="simple" xlink:href=""/>
|
||||||
|
<!--WARNING: Optional metadata "ows_service_onlineresource" was missing for ows:ProviderSite/@xlink:href-->
|
||||||
|
<ows:ServiceContact>
|
||||||
|
<ows:IndividualName>Christina Seidenstücker</ows:IndividualName>
|
||||||
|
<ows:PositionName>Ansprechpartner</ows:PositionName>
|
||||||
|
<ows:ContactInfo>
|
||||||
|
<ows:Phone>
|
||||||
|
<ows:Voice>+49 (0) 201-7995-1163</ows:Voice>
|
||||||
|
<ows:Facsimile>+49 (0) 201-7995-1446</ows:Facsimile>
|
||||||
|
</ows:Phone>
|
||||||
|
<ows:Address>
|
||||||
|
<ows:DeliveryPoint>Wallneyerstr. 6</ows:DeliveryPoint>
|
||||||
|
<ows:City>Essen</ows:City>
|
||||||
|
<ows:AdministrativeArea>NRW</ows:AdministrativeArea>
|
||||||
|
<ows:PostalCode>45133</ows:PostalCode>
|
||||||
|
<ows:Country>Germany</ows:Country>
|
||||||
|
<ows:ElectronicMailAddress>fachbereich37@lanuv.nrw.de</ows:ElectronicMailAddress>
|
||||||
|
</ows:Address>
|
||||||
|
<ows:OnlineResource xlink:type="simple" xlink:href=""/>
|
||||||
|
<!--WARNING: Optional metadata "ows_service_onlineresource" was missing for ows:OnlineResource/@xlink:href-->
|
||||||
|
<ows:HoursOfService></ows:HoursOfService>
|
||||||
|
<ows:ContactInstructions></ows:ContactInstructions>
|
||||||
|
</ows:ContactInfo>
|
||||||
|
<ows:Role></ows:Role>
|
||||||
|
</ows:ServiceContact>
|
||||||
|
</ows:ServiceProvider>
|
||||||
|
<ows:OperationsMetadata>
|
||||||
|
<ows:Operation name="GetCapabilities">
|
||||||
|
<ows:DCP>
|
||||||
|
<ows:HTTP>
|
||||||
|
<ows:Get xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
<ows:Post xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
</ows:HTTP>
|
||||||
|
</ows:DCP>
|
||||||
|
<ows:Parameter name="AcceptVersions">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>2.0.0</ows:Value>
|
||||||
|
<ows:Value>1.1.0</ows:Value>
|
||||||
|
<ows:Value>1.0.0</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
<ows:Parameter name="AcceptFormats">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>text/xml</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
<ows:Parameter name="Sections">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>ServiceIdentification</ows:Value>
|
||||||
|
<ows:Value>ServiceProvider</ows:Value>
|
||||||
|
<ows:Value>OperationsMetadata</ows:Value>
|
||||||
|
<ows:Value>FeatureTypeList</ows:Value>
|
||||||
|
<ows:Value>Filter_Capabilities</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
</ows:Operation>
|
||||||
|
<ows:Operation name="DescribeFeatureType">
|
||||||
|
<ows:DCP>
|
||||||
|
<ows:HTTP>
|
||||||
|
<ows:Get xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
<ows:Post xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
</ows:HTTP>
|
||||||
|
</ows:DCP>
|
||||||
|
<ows:Parameter name="outputFormat">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>application/gml+xml; version=3.2</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/3.2.1</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/3.1.1</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/2.1.2</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
</ows:Operation>
|
||||||
|
<ows:Operation name="GetFeature">
|
||||||
|
<ows:DCP>
|
||||||
|
<ows:HTTP>
|
||||||
|
<ows:Get xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
<ows:Post xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
</ows:HTTP>
|
||||||
|
</ows:DCP>
|
||||||
|
<ows:Parameter name="outputFormat">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>application/gml+xml; version=3.2</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/3.2.1</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/3.1.1</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/2.1.2</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
</ows:Operation>
|
||||||
|
<ows:Operation name="GetPropertyValue">
|
||||||
|
<ows:DCP>
|
||||||
|
<ows:HTTP>
|
||||||
|
<ows:Get xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
<ows:Post xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
</ows:HTTP>
|
||||||
|
</ows:DCP>
|
||||||
|
<ows:Parameter name="outputFormat">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>application/gml+xml; version=3.2</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/3.2.1</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/3.1.1</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/2.1.2</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
</ows:Operation>
|
||||||
|
<ows:Operation name="ListStoredQueries">
|
||||||
|
<ows:DCP>
|
||||||
|
<ows:HTTP>
|
||||||
|
<ows:Get xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
<ows:Post xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
</ows:HTTP>
|
||||||
|
</ows:DCP>
|
||||||
|
</ows:Operation>
|
||||||
|
<ows:Operation name="DescribeStoredQueries">
|
||||||
|
<ows:DCP>
|
||||||
|
<ows:HTTP>
|
||||||
|
<ows:Get xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
<ows:Post xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
</ows:HTTP>
|
||||||
|
</ows:DCP>
|
||||||
|
</ows:Operation>
|
||||||
|
<ows:Parameter name="version">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>2.0.0</ows:Value>
|
||||||
|
<ows:Value>1.1.0</ows:Value>
|
||||||
|
<ows:Value>1.0.0</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
<ows:Constraint name="ImplementsBasicWFS">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsTransactionalWFS">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsLockingWFS">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="KVPEncoding">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="XMLEncoding">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="SOAPEncoding">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsInheritance">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsRemoteResolve">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsResultPaging">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsStandardJoins">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsSpatialJoins">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsTemporalJoins">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsFeatureVersioning">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ManageStoredQueries">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="PagingIsTransactionSafe">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="CountDefault">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>10000</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="QueryExpressions">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>wfs:Query</ows:Value>
|
||||||
|
<ows:Value>wfs:StoredQuery</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Constraint>
|
||||||
|
</ows:OperationsMetadata>
|
||||||
|
<FeatureTypeList>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Biomasse</Name>
|
||||||
|
<Title>WFS_Biomasse</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Biomasse"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Deponiegas</Name>
|
||||||
|
<Title>WFS_Deponiegas</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Deponiegas"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Freiflaechen_PV</Name>
|
||||||
|
<Title>WFS_Freiflaechen_PV</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Freiflaechen_PV"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Dachflaechen_PV</Name>
|
||||||
|
<Title>WFS_Dachflaechen_PV</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Dachflaechen_PV"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Grubengas</Name>
|
||||||
|
<Title>WFS_Grubengas</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Grubengas"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Klaeranlagen</Name>
|
||||||
|
<Title>WFS_Klaeranlagen</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Klaeranlagen"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Wasserkraft</Name>
|
||||||
|
<Title>WFS_Wasserkraft</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Wasserkraft"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Windenergie</Name>
|
||||||
|
<Title>WFS_Windenergie</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Windenergie"/>
|
||||||
|
</FeatureType>
|
||||||
|
</FeatureTypeList>
|
||||||
|
<fes:Filter_Capabilities>
|
||||||
|
<fes:Conformance>
|
||||||
|
<fes:Constraint name="ImplementsQuery">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsAdHocQuery">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsFunctions">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsResourceId">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsMinStandardFilter">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsStandardFilter">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsMinSpatialFilter">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsSpatialFilter">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsMinTemporalFilter">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsTemporalFilter">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsVersionNav">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsSorting">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsExtendedOperators">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsMinimumXPath">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsSchemaElementFunc">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
</fes:Conformance>
|
||||||
|
<fes:Id_Capabilities>
|
||||||
|
<fes:ResourceIdentifier name="fes:ResourceId"/>
|
||||||
|
</fes:Id_Capabilities>
|
||||||
|
<fes:Scalar_Capabilities>
|
||||||
|
<fes:LogicalOperators/>
|
||||||
|
<fes:ComparisonOperators>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsEqualTo"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsNotEqualTo"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsLessThan"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsGreaterThan"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsLessThanOrEqualTo"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsGreaterThanOrEqualTo"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsLike"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsBetween"/>
|
||||||
|
</fes:ComparisonOperators>
|
||||||
|
</fes:Scalar_Capabilities>
|
||||||
|
<fes:Spatial_Capabilities>
|
||||||
|
<fes:GeometryOperands>
|
||||||
|
<fes:GeometryOperand name="gml:Point"/>
|
||||||
|
<fes:GeometryOperand name="gml:MultiPoint"/>
|
||||||
|
<fes:GeometryOperand name="gml:LineString"/>
|
||||||
|
<fes:GeometryOperand name="gml:MultiLineString"/>
|
||||||
|
<fes:GeometryOperand name="gml:Curve"/>
|
||||||
|
<fes:GeometryOperand name="gml:MultiCurve"/>
|
||||||
|
<fes:GeometryOperand name="gml:Polygon"/>
|
||||||
|
<fes:GeometryOperand name="gml:MultiPolygon"/>
|
||||||
|
<fes:GeometryOperand name="gml:Surface"/>
|
||||||
|
<fes:GeometryOperand name="gml:MultiSurface"/>
|
||||||
|
<fes:GeometryOperand name="gml:Box"/>
|
||||||
|
<fes:GeometryOperand name="gml:Envelope"/>
|
||||||
|
</fes:GeometryOperands>
|
||||||
|
<fes:SpatialOperators>
|
||||||
|
<fes:SpatialOperator name="Equals"/>
|
||||||
|
<fes:SpatialOperator name="Disjoint"/>
|
||||||
|
<fes:SpatialOperator name="Touches"/>
|
||||||
|
<fes:SpatialOperator name="Within"/>
|
||||||
|
<fes:SpatialOperator name="Overlaps"/>
|
||||||
|
<fes:SpatialOperator name="Crosses"/>
|
||||||
|
<fes:SpatialOperator name="Intersects"/>
|
||||||
|
<fes:SpatialOperator name="Contains"/>
|
||||||
|
<fes:SpatialOperator name="DWithin"/>
|
||||||
|
<fes:SpatialOperator name="Beyond"/>
|
||||||
|
<fes:SpatialOperator name="BBOX"/>
|
||||||
|
</fes:SpatialOperators>
|
||||||
|
</fes:Spatial_Capabilities>
|
||||||
|
<fes:Temporal_Capabilities>
|
||||||
|
<fes:TemporalOperands>
|
||||||
|
<fes:TemporalOperand name="gml:TimePeriod"/>
|
||||||
|
<fes:TemporalOperand name="gml:TimeInstant"/>
|
||||||
|
</fes:TemporalOperands>
|
||||||
|
<fes:TemporalOperators>
|
||||||
|
<fes:TemporalOperator name="During"/>
|
||||||
|
</fes:TemporalOperators>
|
||||||
|
</fes:Temporal_Capabilities>
|
||||||
|
</fes:Filter_Capabilities>
|
||||||
|
</wfs:WFS_Capabilities>
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
|
||||||
|
import https from 'https';
|
||||||
|
|
||||||
|
const url = 'https://www.wfs.nrw.de/geobasis/wfs_nw_alkis_vereinfacht?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&TYPENAMES=ave:Flurstueck&COUNT=1';
|
||||||
|
|
||||||
|
https.get(url, (res) => {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', (chunk) => data += chunk);
|
||||||
|
res.on('end', () => {
|
||||||
|
console.log("Response Status:", res.statusCode);
|
||||||
|
console.log("\nResponse Body Preview (first 2000 chars):");
|
||||||
|
console.log(data.substring(0, 2000));
|
||||||
|
|
||||||
|
// Check for user mentioned tags
|
||||||
|
console.log("\nTags check:");
|
||||||
|
console.log("flstnrzae?", data.includes('flstnrzae'));
|
||||||
|
console.log("flstnrnen?", data.includes('flstnrnen'));
|
||||||
|
console.log("gemeinde?", data.includes('gemeinde'));
|
||||||
|
console.log("gemarkung?", data.includes('gemarkung'));
|
||||||
|
console.log("flur?", data.includes('flur'));
|
||||||
|
});
|
||||||
|
}).on('error', (e) => {
|
||||||
|
console.error(e);
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
// import fetch from 'node-fetch'; // Built-in in Node 18+
|
||||||
|
|
||||||
|
async function checkCaps() {
|
||||||
|
try {
|
||||||
|
console.log("Checking Roads...");
|
||||||
|
const resRoads = await fetch('http://localhost:5173/api/wfs/roads?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetCapabilities');
|
||||||
|
const textRoads = await resRoads.text();
|
||||||
|
console.log("Roads Caps Length:", textRoads.length);
|
||||||
|
// Extract FeatureTypes and OutputFormats
|
||||||
|
if (textRoads.includes('FeatureType')) {
|
||||||
|
const types = textRoads.match(/<FeatureType>[\s\S]*?<Name>(.*?)<\/Name>/g) || [];
|
||||||
|
console.log("Roads Layers:", types.map(t => t.match(/<Name>(.*?)<\/Name>/)[1]));
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("\nChecking Sites...");
|
||||||
|
const resSites = await fetch('http://localhost:5173/api/nrw/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetCapabilities');
|
||||||
|
const textSites = await resSites.text();
|
||||||
|
console.log("Sites Caps Length:", textSites.length);
|
||||||
|
if (textSites.includes('FeatureType')) {
|
||||||
|
// Just find OutputFormats
|
||||||
|
const formats = textSites.match(/<ows:Operation name="GetFeature">[\s\S]*?<ows:Parameter name="outputFormat">([\s\S]*?)<\/ows:Parameter>/);
|
||||||
|
if (formats) console.log("Sites Formats:", formats[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
checkCaps();
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
const https = require('https');
|
||||||
|
|
||||||
|
// WMS for Renewable Energy NRW
|
||||||
|
const url = "https://www.wms.nrw.de/umwelt/erneuerbare_energien_wfs?REQUEST=GetCapabilities&SERVICE=WMS";
|
||||||
|
// Note: using WFS prefix in URL but requesting WMS caps?
|
||||||
|
// The search result said: https://www.wms.nrw.de/umwelt/erneuerbare_energien_wfs for WFS
|
||||||
|
// and http://www.wms.nrw.de/umwelt/ea_wind?SERVICE=WMS for Wind.
|
||||||
|
// Let's try `ea_wind` and `erneuerbare_energien_nrw`.
|
||||||
|
|
||||||
|
const url1 = "https://www.wms.nrw.de/umwelt/ea_wind?SERVICE=WMS&REQUEST=GetCapabilities";
|
||||||
|
|
||||||
|
https.get(url1, (res) => {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', chunk => data += chunk);
|
||||||
|
res.on('end', () => {
|
||||||
|
console.log("--- Caps for ea_wind ---");
|
||||||
|
const names = [];
|
||||||
|
const titles = [];
|
||||||
|
let m;
|
||||||
|
const nameRe = /<Name>(.*?)<\/Name>/g;
|
||||||
|
while ((m = nameRe.exec(data)) !== null) names.push(m[1]);
|
||||||
|
const titleRe = /<Title>(.*?)<\/Title>/g;
|
||||||
|
while ((m = titleRe.exec(data)) !== null) titles.push(m[1]);
|
||||||
|
|
||||||
|
console.log("Names:", names);
|
||||||
|
console.log("Titles:", titles);
|
||||||
|
});
|
||||||
|
}).on('error', e => console.log(e.message));
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
const https = require('https');
|
||||||
|
|
||||||
|
const url = "https://www.wms.nrw.de/umwelt/erneuerbare_energien_nrw?SERVICE=WMS&REQUEST=GetCapabilities";
|
||||||
|
|
||||||
|
https.get(url, (res) => {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', chunk => data += chunk);
|
||||||
|
res.on('end', () => {
|
||||||
|
console.log("--- Caps for erneuerbare_energien_nrw ---");
|
||||||
|
const names = [];
|
||||||
|
const titles = [];
|
||||||
|
let m;
|
||||||
|
|
||||||
|
// Simple regex - might miss nested structure but gets list
|
||||||
|
const nameRe = /<Name>(.*?)<\/Name>/g;
|
||||||
|
while ((m = nameRe.exec(data)) !== null) names.push(m[1]);
|
||||||
|
|
||||||
|
const titleRe = /<Title>(.*?)<\/Title>/g;
|
||||||
|
while ((m = titleRe.exec(data)) !== null) titles.push(m[1]);
|
||||||
|
|
||||||
|
console.log("Names:", names);
|
||||||
|
console.log("Titles:", titles);
|
||||||
|
});
|
||||||
|
}).on('error', e => console.log(e.message));
|
||||||
|
|
@ -0,0 +1,42 @@
|
||||||
|
const https = require('https');
|
||||||
|
|
||||||
|
const url = "https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?REQUEST=GetCapabilities&SERVICE=WFS";
|
||||||
|
|
||||||
|
console.log("Fetching capabilities from:", url);
|
||||||
|
|
||||||
|
https.get(url, (res) => {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', chunk => data += chunk);
|
||||||
|
res.on('end', () => {
|
||||||
|
// Simple regex to find FeatureTypes
|
||||||
|
// Look for <Name>...</Name> and <Title>...</Title> inside <FeatureType>
|
||||||
|
// Note: XML namespace prefixes might vary.
|
||||||
|
|
||||||
|
console.log(`Received ${data.length} bytes.`);
|
||||||
|
|
||||||
|
// Split by FeatureType to isolate
|
||||||
|
const parts = data.split(/<\/?(?:wfs:)?FeatureType>/);
|
||||||
|
|
||||||
|
console.log("Found Layers:");
|
||||||
|
let count = 0;
|
||||||
|
for (const part of parts) {
|
||||||
|
if (!part.includes('Name>')) continue;
|
||||||
|
|
||||||
|
const nameMatch = part.match(/<Name>(.*?)<\/Name>/);
|
||||||
|
const titleMatch = part.match(/<Title>(.*?)<\/Title>/);
|
||||||
|
|
||||||
|
if (nameMatch) {
|
||||||
|
// remove namespaces from name for cleaner printing if needed
|
||||||
|
console.log(`- Layer: ${nameMatch[1]}`);
|
||||||
|
if (titleMatch) console.log(` Title: ${titleMatch[1]}`);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (count === 0) {
|
||||||
|
console.log("No layers found. Dumping first 500 chars:");
|
||||||
|
console.log(data.substring(0, 500));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).on('error', err => {
|
||||||
|
console.error("Error:", err.message);
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
// import fetch from 'node-fetch';
|
||||||
|
|
||||||
|
async function checkCaps() {
|
||||||
|
try {
|
||||||
|
console.log("Checking Inspire Sites Caps...");
|
||||||
|
const url = "https://www.wms.nrw.de/umwelt/wfs_nw_inspire-schutzgebiete?REQUEST=GetCapabilities&SERVICE=WMS";
|
||||||
|
const res = await fetch(url);
|
||||||
|
const text = await res.text();
|
||||||
|
console.log("Length:", text.length);
|
||||||
|
|
||||||
|
// formats
|
||||||
|
if (text.includes('Layer')) {
|
||||||
|
const layers = text.match(/<Name>(.*?)<\/Name>/g);
|
||||||
|
// Log first 20 layers
|
||||||
|
if (layers) console.log("Layers:", layers.slice(0, 20));
|
||||||
|
}
|
||||||
|
// Switch back to WMS linfos URL
|
||||||
|
const url2 = "https://www.wms.nrw.de/umwelt/linfos?REQUEST=GetCapabilities&SERVICE=WMS";
|
||||||
|
const res2 = await fetch(url2);
|
||||||
|
const text2 = await res2.text();
|
||||||
|
if (text2.includes('Layer')) {
|
||||||
|
const layers = text2.match(/<Name>(.*?)<\/Name>/g);
|
||||||
|
if (layers) console.log("LINFOS Layers:", layers.slice(0, 20));
|
||||||
|
}
|
||||||
|
if (text.includes('outputFormat')) {
|
||||||
|
// Basic regex to find outputFormat block
|
||||||
|
const match = text.match(/name="outputFormat"[\s\S]*?<\/ows:Parameter>/);
|
||||||
|
if (match) {
|
||||||
|
console.log("OutputFormats Block:", match[0]);
|
||||||
|
} else {
|
||||||
|
console.log("No specific outputFormat parameter found in typical place.");
|
||||||
|
// Look for other indicators
|
||||||
|
const jsonRef = text.match(/json/i);
|
||||||
|
console.log("JSON Keywords:", jsonRef);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log("No outputFormat string found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
checkCaps();
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
const https = require('https');
|
||||||
|
|
||||||
|
const url = "https://www.wms.nrw.de/wms/wms_nw_regionalplan?SERVICE=WMS&REQUEST=GetCapabilities";
|
||||||
|
|
||||||
|
console.log("Fetching capabilities from:", url);
|
||||||
|
|
||||||
|
https.get(url, (res) => {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', chunk => data += chunk);
|
||||||
|
res.on('end', () => {
|
||||||
|
console.log(`Received ${data.length} bytes.`);
|
||||||
|
|
||||||
|
// Simple regex to find Layers
|
||||||
|
// WMS: <Layer> <Name>...</Name> <Title>...</Title> ... <Layer>
|
||||||
|
|
||||||
|
const matches = data.matchAll(/<Layer[^>]*>([\s\S]*?)<\/Layer>/g);
|
||||||
|
console.log("Found Layers (Top level):");
|
||||||
|
// This regex is too greedy for nested layers.
|
||||||
|
// Let's just grep for Name and Title lines to see what's available
|
||||||
|
|
||||||
|
const lines = data.split('\n');
|
||||||
|
lines.forEach(line => {
|
||||||
|
if (line.includes('<Name>') || line.includes('<Title>')) {
|
||||||
|
// console.log(line.trim());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Better: print the structure loosely
|
||||||
|
// Or just print Names
|
||||||
|
const nameMatches = data.matchAll(/<Name>(.*?)<\/Name>/g);
|
||||||
|
const titleMatches = data.matchAll(/<Title>(.*?)<\/Title>/g);
|
||||||
|
|
||||||
|
console.log("--- Names found ---");
|
||||||
|
for (const m of nameMatches) console.log(m[1]);
|
||||||
|
|
||||||
|
console.log("--- Titles found ---");
|
||||||
|
// Limit titles output
|
||||||
|
let i = 0;
|
||||||
|
for (const m of titleMatches) {
|
||||||
|
if (i++ < 20) console.log(m[1]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).on('error', err => {
|
||||||
|
console.error("Error:", err.message);
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
const https = require('https');
|
||||||
|
|
||||||
|
const url = "https://www.wms.nrw.de/wms/wms_nw_regionalplan?SERVICE=WMS&REQUEST=GetCapabilities";
|
||||||
|
|
||||||
|
https.get(url, (res) => {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', chunk => data += chunk);
|
||||||
|
res.on('end', () => {
|
||||||
|
// Match Layer Name and Title
|
||||||
|
const regex = /<Layer[^>]*>([\s\S]*?)<\/Layer>/g;
|
||||||
|
// We need to parse recursively or just look for Name/Title pairs close to each other
|
||||||
|
// Simple scan
|
||||||
|
const layers = [];
|
||||||
|
const lines = data.split(/>\s*</);
|
||||||
|
|
||||||
|
let currentName = "";
|
||||||
|
let currentTitle = "";
|
||||||
|
|
||||||
|
// This simple XML parsing is fragile but sufficient for discovery
|
||||||
|
// Let's just dump all Name/Title occurrences
|
||||||
|
const names = [];
|
||||||
|
const titles = [];
|
||||||
|
|
||||||
|
const nameRe = /<Name>(.*?)<\/Name>/g;
|
||||||
|
const titleRe = /<Title>(.*?)<\/Title>/g;
|
||||||
|
|
||||||
|
let m;
|
||||||
|
while ((m = nameRe.exec(data)) !== null) {
|
||||||
|
names.push(m[1]);
|
||||||
|
}
|
||||||
|
while ((m = titleRe.exec(data)) !== null) {
|
||||||
|
titles.push(m[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Names:", names);
|
||||||
|
console.log("Titles:", titles);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
const turf = require('@turf/turf');
|
||||||
|
const proj4 = require('proj4');
|
||||||
|
|
||||||
|
// Test point within a known potential area (approximate)
|
||||||
|
// You might need to adjust these coords to match a known potential area
|
||||||
|
const testPoint = [7.63, 51.96]; // lon, lat
|
||||||
|
|
||||||
|
// Projection
|
||||||
|
proj4.defs("EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
|
||||||
|
proj4.defs("EPSG:4326", "+proj=longlat +datum=WGS84 +no_defs");
|
||||||
|
|
||||||
|
const [utmX, utmY] = proj4("EPSG:4326", "EPSG:25832", testPoint);
|
||||||
|
console.log(`Test Point (UTM32): ${utmX}, ${utmY}`);
|
||||||
|
|
||||||
|
// Mock features - We need to inspect what the server actually sees.
|
||||||
|
// Since we can't easily reproduce the large zip loading here without the file,
|
||||||
|
// we'll add logging to the server.cjs instead.
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
|
||||||
|
global.self = global;
|
||||||
|
const fs = require('fs');
|
||||||
|
// const shp = require('shpjs'); // Removed
|
||||||
|
|
||||||
|
const ZIP_PATH = 'public/daten/Windenergiebereiche_NRW.zip';
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
try {
|
||||||
|
const { default: shp } = await import('shpjs');
|
||||||
|
console.log("Reading Zip...");
|
||||||
|
const buffer = fs.readFileSync(ZIP_PATH);
|
||||||
|
// shpjs (default export handle)
|
||||||
|
const geojson = await shp(buffer);
|
||||||
|
|
||||||
|
if (Array.isArray(geojson)) {
|
||||||
|
console.log("Found multiple features/files:", geojson.length);
|
||||||
|
geojson.forEach(g => console.log(" - File:", g.fileName || 'unknown', "Features:", g.features.length));
|
||||||
|
} else {
|
||||||
|
console.log("Found single FeatureCollection. Features:", geojson.features.length);
|
||||||
|
if (geojson.features.length > 0) {
|
||||||
|
console.log("First feature geometry type:", geojson.features[0].geometry.type);
|
||||||
|
console.log("First coordinate:", JSON.stringify(geojson.features[0].geometry.coordinates[0][0][0]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error parsing ZIP:", e.message);
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
@ -0,0 +1,24 @@
|
||||||
|
|
||||||
|
import fs from 'fs';
|
||||||
|
import shp from 'shpjs';
|
||||||
|
global.self = global;
|
||||||
|
|
||||||
|
const ZIP_PATH = 'public/daten/Windenergiebereiche-Regionalplanung-NRW_EPSG25832_Geodatabase.zip';
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
try {
|
||||||
|
console.log("Reading Zip...");
|
||||||
|
const buffer = fs.readFileSync(ZIP_PATH);
|
||||||
|
const geojson = await shp(buffer);
|
||||||
|
|
||||||
|
if (Array.isArray(geojson)) {
|
||||||
|
console.log("Found multiple features/files:", geojson.length);
|
||||||
|
geojson.forEach(g => console.log(" - File:", g.fileName || 'unknown', "Features:", g.features.length));
|
||||||
|
} else {
|
||||||
|
console.log("Found single FeatureCollection. Features:", geojson.features.length);
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error parsing ZIP:", e.message); // e.stack for more info
|
||||||
|
if (e.message.includes("but-unzip")) console.log("Hint: This might be a GDB format which shpjs cannot read.");
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
global.self = global; // Polyfill
|
||||||
|
const shp = require('shpjs');
|
||||||
|
console.log("Type of shp:", typeof shp);
|
||||||
|
console.log("Keys of shp entries:", Object.keys(shp));
|
||||||
|
console.log("Is shp a function?", typeof shp === 'function');
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
global.self = global;
|
||||||
|
import shp from 'shpjs';
|
||||||
|
console.log("Imported shp:", shp);
|
||||||
|
console.log("Type:", typeof shp);
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
|
||||||
|
const https = require('https');
|
||||||
|
|
||||||
|
const lat = 51.4332;
|
||||||
|
const lng = 7.6616;
|
||||||
|
const size = 0.001;
|
||||||
|
const bbox = `${lat - size},${lng - size},${lat + size},${lng + size},urn:ogc:def:crs:EPSG::4326`;
|
||||||
|
const url = `https://www.wfs.nrw.de/geobasis/wfs_nw_alkis_vereinfacht?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&TYPENAMES=ave:Nutzung&BBOX=${bbox}&COUNT=1`;
|
||||||
|
|
||||||
|
https.get(url, (res) => {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', (chunk) => data += chunk);
|
||||||
|
res.on('end', () => {
|
||||||
|
console.log("Response Body Preview:");
|
||||||
|
console.log(data.substring(0, 5000));
|
||||||
|
});
|
||||||
|
}).on('error', (e) => {
|
||||||
|
console.error(e);
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
const https = require('https');
|
||||||
|
|
||||||
|
const lat = 51.4332;
|
||||||
|
const lng = 7.6616;
|
||||||
|
const size = 0.05;
|
||||||
|
const bbox = `${lat - size},${lng - size},${lat + size},${lng + size},urn:ogc:def:crs:EPSG::4326`;
|
||||||
|
const url = `https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&TYPENAMES=erneuerbare_energien_wfs:WFS_Windenergie&BBOX=${bbox}&COUNT=10`;
|
||||||
|
|
||||||
|
https.get(url, (res) => {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', (chunk) => data += chunk);
|
||||||
|
res.on('end', () => {
|
||||||
|
console.log("Response length:", data.length);
|
||||||
|
const features = [];
|
||||||
|
const blocks = data.split(/<wfs:member[^>]*>/);
|
||||||
|
console.log("Found blocks:", blocks.length - 1);
|
||||||
|
|
||||||
|
for (let i = 1; i < blocks.length; i++) {
|
||||||
|
const block = blocks[i];
|
||||||
|
const posMatch = block.match(/<gml:pos[^>]*>(.*?)<\/gml:pos>/);
|
||||||
|
const ibjahrMatch = block.match(/<erneuerbare_energien_wfs:ibjahr[^>]*>(.*?)<\/erneuerbare_energien_wfs:ibjahr>/);
|
||||||
|
|
||||||
|
if (posMatch) {
|
||||||
|
const coords = posMatch[1].trim().split(/\s+/).map(Number);
|
||||||
|
features.push({
|
||||||
|
coords: coords,
|
||||||
|
ibjahr: ibjahrMatch ? ibjahrMatch[1].trim() : "Unbekannt"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log("Parsed features:", features.length);
|
||||||
|
if (features.length > 0) console.log("First feature:", features[0]);
|
||||||
|
});
|
||||||
|
}).on('error', (e) => {
|
||||||
|
console.error(e);
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
services:
|
||||||
|
wind-tool-standortpruefung:
|
||||||
|
build: .
|
||||||
|
container_name: wind-tool-standortpruefung
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
labels:
|
||||||
|
# 1. Aktivierung in Traefik
|
||||||
|
- "traefik.enable=true"
|
||||||
|
# 2. Router-Konfiguration
|
||||||
|
- "traefik.http.routers.wind-tool.rule=Host(`wind-tool-standortpruefung.enwelo-serverumgebung.cloud`)"
|
||||||
|
- "traefik.http.routers.wind-tool.entrypoints=websecure"
|
||||||
|
- "traefik.http.routers.wind-tool.tls.certresolver=le"
|
||||||
|
# 3. Port (Express-Server im Container)
|
||||||
|
- "traefik.http.services.wind-tool.loadbalancer.server.port=3000"
|
||||||
|
# 4. Authentik-Schutz
|
||||||
|
- "traefik.http.routers.wind-tool.middlewares=authentik@file"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
|
|
@ -0,0 +1,482 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<wfs:WFS_Capabilities xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:wfs="http://www.opengis.net/wfs/2.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:erneuerbare_energien_wfs="http://www.wfs.nrw.de/schemas" xmlns="http://www.opengis.net/wfs/2.0" version="2.0.0" xsi:schemaLocation="http://www.opengis.net/wfs/2.0 http://schemas.opengis.net/wfs/2.0/wfs.xsd">
|
||||||
|
<ows:ServiceIdentification>
|
||||||
|
<ows:Title>WFS Erneuerbare Energien NRW</ows:Title>
|
||||||
|
<ows:Abstract>Der WFS-Dienst Erneuerbare Energien stellt die Anlagen der Erneuerbaren Energien Biomasse, Freiflächenphotovoltaik, Wasserkraft und Windkraft dar. Darüber hinaus werden die Anlagen von Klärgas, Deponiegas und Grubengas dargestellt, die aber streng genommen nicht zu den Erneuerbaren Energien zählen, jedoch ebenfalls in hohem Maße zum Klimaschutz beitragen.</ows:Abstract>
|
||||||
|
<ows:Keywords>
|
||||||
|
<ows:Keyword>WFS</ows:Keyword>
|
||||||
|
<ows:Keyword> WFS Erneuerbare Energien</ows:Keyword>
|
||||||
|
<ows:Keyword> Erneuerbare Energien</ows:Keyword>
|
||||||
|
<ows:Keyword> LANUV</ows:Keyword>
|
||||||
|
<ows:Keyword> Biomasse</ows:Keyword>
|
||||||
|
<ows:Keyword> PV</ows:Keyword>
|
||||||
|
<ows:Keyword> Photovoltaik</ows:Keyword>
|
||||||
|
<ows:Keyword> Wasserkraft</ows:Keyword>
|
||||||
|
<ows:Keyword> Windkraft</ows:Keyword>
|
||||||
|
<ows:Keyword> Klärgas</ows:Keyword>
|
||||||
|
<ows:Keyword> Grubengas</ows:Keyword>
|
||||||
|
<ows:Keyword> Deponiegas</ows:Keyword>
|
||||||
|
</ows:Keywords>
|
||||||
|
<ows:ServiceType codeSpace="OGC">WFS</ows:ServiceType>
|
||||||
|
<ows:ServiceTypeVersion>2.0.0</ows:ServiceTypeVersion>
|
||||||
|
<ows:Fees>keine</ows:Fees>
|
||||||
|
<ows:AccessConstraints>Das Fachinformationssystem 'Energieatlas Nordrhein-Westfalen' (www.energieatlas.nrw.de) sowie der zugehörige WFS-Dienst Erneuerbare Energien werden vom Landesamt für Natur, Umwelt und Verbraucherschutz bereitgestellt.
|
||||||
|
Grundlage für die Anlagendaten der Erneuerbaren Energien sind Daten der Bundesnetzagentur, der Übertragungsnetzbetreiber Amprion und Tennet, LANUV-eigene Daten und Daten des Landesverbandes Erneuerbare Energien NRW.
|
||||||
|
Für die Nutzung des WFS-Dienstes Erneuerbare Energien NRW gelten folgende Nutzungsbedingungen:
|
||||||
|
1. Aussagen, sowie Karten und Graphiken dürfen nicht verändert werden.
|
||||||
|
2. Die Datengrundlagen wurden mit größter Sorgfalt für den Energieatlas aufbereitet und ausgewertet. Für die Richtigkeit, Vollständigkeit und Aktualität der Daten wird keine Gewähr übernommen.
|
||||||
|
3. Die Vervielfältigung und Verbreitung von Inhalten ist, auch auszugsweise, nur mit Angabe des Herausgebers und der jeweiligen Datenquelle gestattet. Es ist an geeigneter Stelle ein deutlich sichtbarer Quellenvermerk wie folgt anzugeben: Energieatlas NRW, Herausgeber: Landesamt für Natur, Umwelt und Verbraucherschutz NRW, [Datenstand einfügen].
|
||||||
|
4. Die Aktualität der Daten ist unter dem Informationsbutton der jeweiligen Karte ersichtlich. Aktuellere Daten sind bei den entsprechenden Datenquellen einzuholen.
|
||||||
|
5. Für Sach- und Vermögensschäden, die Nutzern durch die Verwendung der Daten und Karten sowie aus der Unmöglichkeit des Zugriffes oder der Benutzung entstehen, übernimmt der Herausgeber keine Verantwortung. Dem Herausgeber kommt keine Garantie- und Einstandshaftung für das technische Funktionieren, die Kompatibilität mit der von dem Nutzer verwendeten Soft- oder Hardware sowie Virenfreiheit zu.
|
||||||
|
6. Das LANUV NRW behält sich vor, den Energieatlas NRW ohne Angaben von Gründen einzustellen.
|
||||||
|
Stand Ende 2023</ows:AccessConstraints>
|
||||||
|
</ows:ServiceIdentification>
|
||||||
|
<ows:ServiceProvider>
|
||||||
|
<ows:ProviderName>Landesamt für Natur, Umwelt und Klima Nordrhein-Westfalen</ows:ProviderName>
|
||||||
|
<ows:ProviderSite xlink:type="simple" xlink:href=""/>
|
||||||
|
<!--WARNING: Optional metadata "ows_service_onlineresource" was missing for ows:ProviderSite/@xlink:href-->
|
||||||
|
<ows:ServiceContact>
|
||||||
|
<ows:IndividualName>Christina Seidenstücker</ows:IndividualName>
|
||||||
|
<ows:PositionName>Ansprechpartner</ows:PositionName>
|
||||||
|
<ows:ContactInfo>
|
||||||
|
<ows:Phone>
|
||||||
|
<ows:Voice>+49 (0) 201-7995-1163</ows:Voice>
|
||||||
|
<ows:Facsimile>+49 (0) 201-7995-1446</ows:Facsimile>
|
||||||
|
</ows:Phone>
|
||||||
|
<ows:Address>
|
||||||
|
<ows:DeliveryPoint>Wallneyerstr. 6</ows:DeliveryPoint>
|
||||||
|
<ows:City>Essen</ows:City>
|
||||||
|
<ows:AdministrativeArea>NRW</ows:AdministrativeArea>
|
||||||
|
<ows:PostalCode>45133</ows:PostalCode>
|
||||||
|
<ows:Country>Germany</ows:Country>
|
||||||
|
<ows:ElectronicMailAddress>fachbereich37@lanuv.nrw.de</ows:ElectronicMailAddress>
|
||||||
|
</ows:Address>
|
||||||
|
<ows:OnlineResource xlink:type="simple" xlink:href=""/>
|
||||||
|
<!--WARNING: Optional metadata "ows_service_onlineresource" was missing for ows:OnlineResource/@xlink:href-->
|
||||||
|
<ows:HoursOfService></ows:HoursOfService>
|
||||||
|
<ows:ContactInstructions></ows:ContactInstructions>
|
||||||
|
</ows:ContactInfo>
|
||||||
|
<ows:Role></ows:Role>
|
||||||
|
</ows:ServiceContact>
|
||||||
|
</ows:ServiceProvider>
|
||||||
|
<ows:OperationsMetadata>
|
||||||
|
<ows:Operation name="GetCapabilities">
|
||||||
|
<ows:DCP>
|
||||||
|
<ows:HTTP>
|
||||||
|
<ows:Get xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
<ows:Post xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
</ows:HTTP>
|
||||||
|
</ows:DCP>
|
||||||
|
<ows:Parameter name="AcceptVersions">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>2.0.0</ows:Value>
|
||||||
|
<ows:Value>1.1.0</ows:Value>
|
||||||
|
<ows:Value>1.0.0</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
<ows:Parameter name="AcceptFormats">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>text/xml</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
<ows:Parameter name="Sections">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>ServiceIdentification</ows:Value>
|
||||||
|
<ows:Value>ServiceProvider</ows:Value>
|
||||||
|
<ows:Value>OperationsMetadata</ows:Value>
|
||||||
|
<ows:Value>FeatureTypeList</ows:Value>
|
||||||
|
<ows:Value>Filter_Capabilities</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
</ows:Operation>
|
||||||
|
<ows:Operation name="DescribeFeatureType">
|
||||||
|
<ows:DCP>
|
||||||
|
<ows:HTTP>
|
||||||
|
<ows:Get xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
<ows:Post xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
</ows:HTTP>
|
||||||
|
</ows:DCP>
|
||||||
|
<ows:Parameter name="outputFormat">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>application/gml+xml; version=3.2</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/3.2.1</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/3.1.1</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/2.1.2</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
</ows:Operation>
|
||||||
|
<ows:Operation name="GetFeature">
|
||||||
|
<ows:DCP>
|
||||||
|
<ows:HTTP>
|
||||||
|
<ows:Get xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
<ows:Post xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
</ows:HTTP>
|
||||||
|
</ows:DCP>
|
||||||
|
<ows:Parameter name="outputFormat">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>application/gml+xml; version=3.2</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/3.2.1</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/3.1.1</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/2.1.2</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
</ows:Operation>
|
||||||
|
<ows:Operation name="GetPropertyValue">
|
||||||
|
<ows:DCP>
|
||||||
|
<ows:HTTP>
|
||||||
|
<ows:Get xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
<ows:Post xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
</ows:HTTP>
|
||||||
|
</ows:DCP>
|
||||||
|
<ows:Parameter name="outputFormat">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>application/gml+xml; version=3.2</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/3.2.1</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/3.1.1</ows:Value>
|
||||||
|
<ows:Value>text/xml; subtype=gml/2.1.2</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
</ows:Operation>
|
||||||
|
<ows:Operation name="ListStoredQueries">
|
||||||
|
<ows:DCP>
|
||||||
|
<ows:HTTP>
|
||||||
|
<ows:Get xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
<ows:Post xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
</ows:HTTP>
|
||||||
|
</ows:DCP>
|
||||||
|
</ows:Operation>
|
||||||
|
<ows:Operation name="DescribeStoredQueries">
|
||||||
|
<ows:DCP>
|
||||||
|
<ows:HTTP>
|
||||||
|
<ows:Get xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
<ows:Post xlink:type="simple" xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?"/>
|
||||||
|
</ows:HTTP>
|
||||||
|
</ows:DCP>
|
||||||
|
</ows:Operation>
|
||||||
|
<ows:Parameter name="version">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>2.0.0</ows:Value>
|
||||||
|
<ows:Value>1.1.0</ows:Value>
|
||||||
|
<ows:Value>1.0.0</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Parameter>
|
||||||
|
<ows:Constraint name="ImplementsBasicWFS">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsTransactionalWFS">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsLockingWFS">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="KVPEncoding">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="XMLEncoding">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="SOAPEncoding">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsInheritance">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsRemoteResolve">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsResultPaging">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsStandardJoins">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsSpatialJoins">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsTemporalJoins">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ImplementsFeatureVersioning">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="ManageStoredQueries">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="PagingIsTransactionSafe">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="CountDefault">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>10000</ows:DefaultValue>
|
||||||
|
</ows:Constraint>
|
||||||
|
<ows:Constraint name="QueryExpressions">
|
||||||
|
<ows:AllowedValues>
|
||||||
|
<ows:Value>wfs:Query</ows:Value>
|
||||||
|
<ows:Value>wfs:StoredQuery</ows:Value>
|
||||||
|
</ows:AllowedValues>
|
||||||
|
</ows:Constraint>
|
||||||
|
</ows:OperationsMetadata>
|
||||||
|
<FeatureTypeList>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Biomasse</Name>
|
||||||
|
<Title>WFS_Biomasse</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Biomasse"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Deponiegas</Name>
|
||||||
|
<Title>WFS_Deponiegas</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Deponiegas"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Freiflaechen_PV</Name>
|
||||||
|
<Title>WFS_Freiflaechen_PV</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Freiflaechen_PV"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Dachflaechen_PV</Name>
|
||||||
|
<Title>WFS_Dachflaechen_PV</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Dachflaechen_PV"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Grubengas</Name>
|
||||||
|
<Title>WFS_Grubengas</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Grubengas"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Klaeranlagen</Name>
|
||||||
|
<Title>WFS_Klaeranlagen</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Klaeranlagen"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Wasserkraft</Name>
|
||||||
|
<Title>WFS_Wasserkraft</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Wasserkraft"/>
|
||||||
|
</FeatureType>
|
||||||
|
<FeatureType>
|
||||||
|
<Name>erneuerbare_energien_wfs:WFS_Windenergie</Name>
|
||||||
|
<Title>WFS_Windenergie</Title>
|
||||||
|
<DefaultCRS>urn:ogc:def:crs:EPSG::25832</DefaultCRS>
|
||||||
|
<OutputFormats>
|
||||||
|
<Format>application/gml+xml; version=3.2</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.2.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/3.1.1</Format>
|
||||||
|
<Format>text/xml; subtype=gml/2.1.2</Format>
|
||||||
|
</OutputFormats>
|
||||||
|
<ows:WGS84BoundingBox dimensions="2">
|
||||||
|
<ows:LowerCorner>5.593338 50.057798</ows:LowerCorner>
|
||||||
|
<ows:UpperCorner>9.741582 52.799797</ows:UpperCorner>
|
||||||
|
</ows:WGS84BoundingBox>
|
||||||
|
<MetadataURL xlink:href="https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?request=GetMetadata&layer=WFS_Windenergie"/>
|
||||||
|
</FeatureType>
|
||||||
|
</FeatureTypeList>
|
||||||
|
<fes:Filter_Capabilities>
|
||||||
|
<fes:Conformance>
|
||||||
|
<fes:Constraint name="ImplementsQuery">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsAdHocQuery">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsFunctions">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsResourceId">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsMinStandardFilter">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsStandardFilter">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsMinSpatialFilter">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsSpatialFilter">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsMinTemporalFilter">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsTemporalFilter">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsVersionNav">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsSorting">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsExtendedOperators">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsMinimumXPath">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>TRUE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
<fes:Constraint name="ImplementsSchemaElementFunc">
|
||||||
|
<ows:NoValues/>
|
||||||
|
<ows:DefaultValue>FALSE</ows:DefaultValue>
|
||||||
|
</fes:Constraint>
|
||||||
|
</fes:Conformance>
|
||||||
|
<fes:Id_Capabilities>
|
||||||
|
<fes:ResourceIdentifier name="fes:ResourceId"/>
|
||||||
|
</fes:Id_Capabilities>
|
||||||
|
<fes:Scalar_Capabilities>
|
||||||
|
<fes:LogicalOperators/>
|
||||||
|
<fes:ComparisonOperators>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsEqualTo"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsNotEqualTo"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsLessThan"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsGreaterThan"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsLessThanOrEqualTo"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsGreaterThanOrEqualTo"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsLike"/>
|
||||||
|
<fes:ComparisonOperator name="PropertyIsBetween"/>
|
||||||
|
</fes:ComparisonOperators>
|
||||||
|
</fes:Scalar_Capabilities>
|
||||||
|
<fes:Spatial_Capabilities>
|
||||||
|
<fes:GeometryOperands>
|
||||||
|
<fes:GeometryOperand name="gml:Point"/>
|
||||||
|
<fes:GeometryOperand name="gml:MultiPoint"/>
|
||||||
|
<fes:GeometryOperand name="gml:LineString"/>
|
||||||
|
<fes:GeometryOperand name="gml:MultiLineString"/>
|
||||||
|
<fes:GeometryOperand name="gml:Curve"/>
|
||||||
|
<fes:GeometryOperand name="gml:MultiCurve"/>
|
||||||
|
<fes:GeometryOperand name="gml:Polygon"/>
|
||||||
|
<fes:GeometryOperand name="gml:MultiPolygon"/>
|
||||||
|
<fes:GeometryOperand name="gml:Surface"/>
|
||||||
|
<fes:GeometryOperand name="gml:MultiSurface"/>
|
||||||
|
<fes:GeometryOperand name="gml:Box"/>
|
||||||
|
<fes:GeometryOperand name="gml:Envelope"/>
|
||||||
|
</fes:GeometryOperands>
|
||||||
|
<fes:SpatialOperators>
|
||||||
|
<fes:SpatialOperator name="Equals"/>
|
||||||
|
<fes:SpatialOperator name="Disjoint"/>
|
||||||
|
<fes:SpatialOperator name="Touches"/>
|
||||||
|
<fes:SpatialOperator name="Within"/>
|
||||||
|
<fes:SpatialOperator name="Overlaps"/>
|
||||||
|
<fes:SpatialOperator name="Crosses"/>
|
||||||
|
<fes:SpatialOperator name="Intersects"/>
|
||||||
|
<fes:SpatialOperator name="Contains"/>
|
||||||
|
<fes:SpatialOperator name="DWithin"/>
|
||||||
|
<fes:SpatialOperator name="Beyond"/>
|
||||||
|
<fes:SpatialOperator name="BBOX"/>
|
||||||
|
</fes:SpatialOperators>
|
||||||
|
</fes:Spatial_Capabilities>
|
||||||
|
<fes:Temporal_Capabilities>
|
||||||
|
<fes:TemporalOperands>
|
||||||
|
<fes:TemporalOperand name="gml:TimePeriod"/>
|
||||||
|
<fes:TemporalOperand name="gml:TimeInstant"/>
|
||||||
|
</fes:TemporalOperands>
|
||||||
|
<fes:TemporalOperators>
|
||||||
|
<fes:TemporalOperator name="During"/>
|
||||||
|
</fes:TemporalOperators>
|
||||||
|
</fes:Temporal_Capabilities>
|
||||||
|
</fes:Filter_Capabilities>
|
||||||
|
</wfs:WFS_Capabilities>
|
||||||
|
|
@ -0,0 +1,142 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||||
|
<!-- Optimierung für mobile Geräte: Keine Skalierung durch User, App-Feeling -->
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
|
<title>enwelo - Vorab-Flächenprüfung</title>
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js"></script>
|
||||||
|
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
|
||||||
|
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="app">
|
||||||
|
<main class="main-content">
|
||||||
|
<div id="map"></div>
|
||||||
|
|
||||||
|
<!-- Logo, Status & Links Oben Links -->
|
||||||
|
<div class="top-left-logo glass-panel">
|
||||||
|
<div class="logo-row">
|
||||||
|
<img src="/Logos/20201202-ENWELO-Logo-4c_ohne_Claim.png" alt="enwelo Logo">
|
||||||
|
<div class="logo-divider"></div>
|
||||||
|
<span class="logo-text">Flächenprüfung</span>
|
||||||
|
</div>
|
||||||
|
<div class="info-row">
|
||||||
|
<div id="backend-status" class="status-indicator offline">
|
||||||
|
<span class="status-dot"></span>
|
||||||
|
<span class="status-text">Server-Status</span>
|
||||||
|
</div>
|
||||||
|
<div class="info-divider"></div>
|
||||||
|
<button id="open-impressum" class="text-link impressum-link">Impressum</button>
|
||||||
|
</div>
|
||||||
|
<!-- Container for Geocoder Search -->
|
||||||
|
<div id="search-container" class="search-row"></div>
|
||||||
|
|
||||||
|
<!-- Base Map Toggle -->
|
||||||
|
<div class="basemap-toggle-row">
|
||||||
|
<button id="toggle-osm" class="basemap-btn active">OSM</button>
|
||||||
|
<button id="toggle-dop" class="basemap-btn">Luftbild</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Analysis Button -->
|
||||||
|
<button id="check-site-btn" class="primary-btn sidebar-btn" disabled>
|
||||||
|
Analyse starten
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Result Card (Bottom Sheet style) -->
|
||||||
|
<div id="results-area" class="results-hidden glass-panel theme-panel">
|
||||||
|
<!-- Content generated by JS -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Anleitung (Initial) -->
|
||||||
|
<div id="intro-hint" class="intro-overlay">
|
||||||
|
<div class="hint-content">
|
||||||
|
<p id="marker-hint-msg">Bitte wählen Sie einen möglichen <strong>Windenergieanlagenstandort</strong> durch
|
||||||
|
Klicken auf die Karte aus.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Impressum Modal -->
|
||||||
|
<div id="impressum-modal" class="modal-overlay hidden">
|
||||||
|
<div class="modal-content glass-panel">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h2>Impressum</h2>
|
||||||
|
<button class="close-modal-btn">×</button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<h3>Angaben gemäß § 5 TMG</h3>
|
||||||
|
<p>
|
||||||
|
ENWELO GmbH & Co.KG<br>
|
||||||
|
Hollich 79<br>
|
||||||
|
48565 Steinfurt
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>Handelsregister:</strong> HRA 7670 und HRB 12991<br>
|
||||||
|
<strong>Registergericht:</strong> Steinfurt
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Vertreten durch:</h3>
|
||||||
|
<p>ENWELO Verwaltungs GmbH</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>Diese wird vertreten durch:</strong><br>
|
||||||
|
Jan-Hendrik Wolke
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<strong>Handelsregister:</strong> 12991<br>
|
||||||
|
<strong>Registergericht:</strong> Steinfurt
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Kontakt</h3>
|
||||||
|
<p>
|
||||||
|
Telefon: 02551 70 90 90<br>
|
||||||
|
E-Mail: <a href="mailto:info@enwelo.de">info@enwelo.de</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Umsatzsteuer-ID</h3>
|
||||||
|
<p>
|
||||||
|
Umsatzsteuer-Identifikationsnummer gemäß § 27 a Umsatzsteuergesetz:<br>
|
||||||
|
DE336008081
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Redaktionell Verantwortlicher</h3>
|
||||||
|
<p>Thomas Voß, Hollich 79, 48565 Steinfurt</p>
|
||||||
|
|
||||||
|
<h3>Verbraucherstreitbeilegung/Universalschlichtungsstelle</h3>
|
||||||
|
<p>Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.</p>
|
||||||
|
|
||||||
|
<h3>Haftung für Inhalte</h3>
|
||||||
|
<p>Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen.</p>
|
||||||
|
<p>Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.</p>
|
||||||
|
|
||||||
|
<h3>Haftung für Links</h3>
|
||||||
|
<p>Unser Angebot enthält Links zu externen Websites Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar.</p>
|
||||||
|
<p>Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.</p>
|
||||||
|
|
||||||
|
<h3>Urheberrecht</h3>
|
||||||
|
<p>Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet.</p>
|
||||||
|
<p>Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.</p>
|
||||||
|
|
||||||
|
<p><small>Quelle: eRecht24</small></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script type="module" src="./main.js"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
const AdmZip = require('adm-zip');
|
||||||
|
|
||||||
|
const zipPath = path.join(__dirname, 'public/daten/Windenergiebereiche-Regionalplanung-NRW_EPSG25832_Geodatabase.zip');
|
||||||
|
|
||||||
|
try {
|
||||||
|
const zip = new AdmZip(zipPath);
|
||||||
|
const zipEntries = zip.getEntries();
|
||||||
|
console.log("Entries in zip:");
|
||||||
|
zipEntries.forEach(entry => {
|
||||||
|
console.log(entry.entryName);
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error reading zip:", e);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
const AdmZip = require('adm-zip');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
const zipPath = path.resolve('public/daten/Windenergiebereiche-Regionalplanung-NRW_EPSG25832_Geodatabase.zip');
|
||||||
|
|
||||||
|
try {
|
||||||
|
const zip = new AdmZip(zipPath);
|
||||||
|
const zipEntries = zip.getEntries();
|
||||||
|
|
||||||
|
console.log(`Contents of ${zipPath}:`);
|
||||||
|
zipEntries.forEach(entry => {
|
||||||
|
console.log(entry.entryName);
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Error reading zip:", e.message);
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"name": "flaechenpruefung-windenergie",
|
||||||
|
"private": true,
|
||||||
|
"version": "0.1.0",
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite",
|
||||||
|
"server": "node server.cjs",
|
||||||
|
"start": "concurrently \"npm run server\" \"npm run dev\"",
|
||||||
|
"build": "vite build",
|
||||||
|
"preview": "vite preview"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"concurrently": "^9.2.1",
|
||||||
|
"vite": "^5.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@turf/turf": "^7.3.3",
|
||||||
|
"cors": "^2.8.6",
|
||||||
|
"express": "^5.2.1",
|
||||||
|
"leaflet": "^1.9.4",
|
||||||
|
"leaflet-control-geocoder": "^3.3.1",
|
||||||
|
"leaflet.vectorgrid": "^1.3.0",
|
||||||
|
"osmtogeojson": "^3.0.0-beta.5",
|
||||||
|
"proj4": "^2.20.2",
|
||||||
|
"shapefile": "^0.6.6",
|
||||||
|
"shpjs": "^6.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
Test push from Antigravity.
|
||||||
|
Time: 2026-04-27
|
||||||
|
|
@ -0,0 +1,513 @@
|
||||||
|
const express = require('express');
|
||||||
|
const cors = require('cors');
|
||||||
|
// Polyfill for shpjs which expects self.DecompressionStream
|
||||||
|
global.self = global;
|
||||||
|
const proj4 = require('proj4');
|
||||||
|
const path = require('path');
|
||||||
|
const fs = require('fs');
|
||||||
|
const https = require('https');
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
const PORT = 3000;
|
||||||
|
|
||||||
|
app.use(cors());
|
||||||
|
app.use(express.static('dist'));
|
||||||
|
|
||||||
|
// Define Projections
|
||||||
|
proj4.defs("EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
|
||||||
|
proj4.defs("EPSG:4326", "+proj=longlat +datum=WGS84 +no_defs");
|
||||||
|
|
||||||
|
const sourceProj = "EPSG:25832";
|
||||||
|
const destProj = "EPSG:4326";
|
||||||
|
|
||||||
|
const ALKIS_WFS_URL = 'https://www.wfs.nrw.de/geobasis/wfs_nw_alkis_vereinfacht';
|
||||||
|
const SHP_PATH = path.join(__dirname, 'public/Daten/260130_Wohngebäude.shp');
|
||||||
|
|
||||||
|
app.get('/api/buildings', async (req, res) => {
|
||||||
|
let { bbox, limit } = req.query;
|
||||||
|
|
||||||
|
// Quick test endpoint via browser simply loading /api/buildings
|
||||||
|
if (!bbox) return res.send('Worker is ready. Use ?bbox=minLon,minLat,maxLon,maxLat');
|
||||||
|
|
||||||
|
const bounds = bbox.split(',').map(Number);
|
||||||
|
if (bounds.length !== 4) return res.status(400).json({ error: 'Invalid bbox' });
|
||||||
|
|
||||||
|
console.time("Query");
|
||||||
|
|
||||||
|
// 1. Project Query BBOX to UTM32
|
||||||
|
const corners = [
|
||||||
|
[bounds[0], bounds[1]], [bounds[2], bounds[3]],
|
||||||
|
[bounds[0], bounds[3]], [bounds[2], bounds[1]]
|
||||||
|
].map(c => proj4(destProj, sourceProj, c));
|
||||||
|
|
||||||
|
const minX = Math.min(...corners.map(c => c[0]));
|
||||||
|
const maxX = Math.max(...corners.map(c => c[0]));
|
||||||
|
const minY = Math.min(...corners.map(c => c[1]));
|
||||||
|
const maxY = Math.max(...corners.map(c => c[1]));
|
||||||
|
|
||||||
|
const queryBbox = [minX - 50, minY - 50, maxX + 50, maxY + 50];
|
||||||
|
const maxFeatures = limit ? parseInt(limit) : 2000;
|
||||||
|
const results = [];
|
||||||
|
|
||||||
|
// 2. Buffered Scanning
|
||||||
|
const BUFFER_SIZE = 10 * 1024 * 1024; // 10MB chunk
|
||||||
|
|
||||||
|
// We open the file and read large chunks.
|
||||||
|
// We maintain a "buffer cursor" and a "file position".
|
||||||
|
|
||||||
|
let fd;
|
||||||
|
try {
|
||||||
|
fd = fs.openSync(SHP_PATH, 'r');
|
||||||
|
const fileSize = fs.statSync(SHP_PATH).size;
|
||||||
|
|
||||||
|
let buf = Buffer.alloc(BUFFER_SIZE);
|
||||||
|
// Initial Read: Skip 100 bytes header
|
||||||
|
let filePos = 100;
|
||||||
|
let bytesRead = fs.readSync(fd, buf, 0, BUFFER_SIZE, filePos);
|
||||||
|
let bufPos = 0; // Position within current buffer
|
||||||
|
|
||||||
|
while (filePos < fileSize && results.length < maxFeatures && bytesRead > 0) {
|
||||||
|
// Need at least 8 bytes for Record Header
|
||||||
|
if (bufPos + 8 > bytesRead) {
|
||||||
|
// Not enough bytes left in buffer for header.
|
||||||
|
// Move remaining to start, read more.
|
||||||
|
// Or simply: Refill logic.
|
||||||
|
// Simplest: If near end, just read a new chunk from filePos.
|
||||||
|
// But filePos is tricky if we processed partial buffer.
|
||||||
|
// Let's track absolute `currentRecordPos` = filePos + bufPos
|
||||||
|
}
|
||||||
|
|
||||||
|
// SIMPLER LOGIC:
|
||||||
|
// Valid data is in buf[bufPos ... bytesRead]
|
||||||
|
const remaining = bytesRead - bufPos;
|
||||||
|
|
||||||
|
if (remaining < 8) {
|
||||||
|
// Fetch next chunk
|
||||||
|
// Determine where we are in file: filePos + bufPos
|
||||||
|
filePos += bufPos;
|
||||||
|
bytesRead = fs.readSync(fd, buf, 0, BUFFER_SIZE, filePos);
|
||||||
|
bufPos = 0;
|
||||||
|
if (bytesRead < 8) break; // EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read Record Header (8 bytes)
|
||||||
|
// Record Num (4 bytes BE) - ignore
|
||||||
|
const recLenWords = buf.readInt32BE(bufPos + 4);
|
||||||
|
const recLenBytes = recLenWords * 2;
|
||||||
|
|
||||||
|
// Check if we have the full record content in buffer
|
||||||
|
// 8 header + recLenBytes content
|
||||||
|
const totalRecSize = 8 + recLenBytes;
|
||||||
|
|
||||||
|
if (bufPos + totalRecSize > bytesRead) {
|
||||||
|
// Record spans across buffer boundary (or is larger than buffer remaining)
|
||||||
|
// Check if it's larger than entire buffer?
|
||||||
|
if (totalRecSize > BUFFER_SIZE) {
|
||||||
|
// Huge record. Rare for buildings. Skip or alloc special.
|
||||||
|
// Just skip logic:
|
||||||
|
filePos += bufPos + totalRecSize;
|
||||||
|
// Refill
|
||||||
|
bytesRead = fs.readSync(fd, buf, 0, BUFFER_SIZE, filePos);
|
||||||
|
bufPos = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move pointer to filePos += bufPos
|
||||||
|
filePos += bufPos;
|
||||||
|
// Read fresh chunk starting at this record
|
||||||
|
bytesRead = fs.readSync(fd, buf, 0, BUFFER_SIZE, filePos);
|
||||||
|
bufPos = 0;
|
||||||
|
|
||||||
|
if (bytesRead < totalRecSize) break; // Should not happen unless EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
const recOffset = filePos + bufPos;
|
||||||
|
|
||||||
|
// Now buf[bufPos] is start of header.
|
||||||
|
// buf[bufPos+8] is start of content.
|
||||||
|
const contentOffset = bufPos + 8;
|
||||||
|
|
||||||
|
// Parse BBox (32 bytes) at Content+4 (Type)
|
||||||
|
// Type is at contentOffset (4 bytes LE)
|
||||||
|
const type = buf.readInt32LE(contentOffset);
|
||||||
|
|
||||||
|
// BBox: offset + 4
|
||||||
|
const bXmin = buf.readDoubleLE(contentOffset + 4);
|
||||||
|
const bYmin = buf.readDoubleLE(contentOffset + 12);
|
||||||
|
const bXmax = buf.readDoubleLE(contentOffset + 20);
|
||||||
|
const bYmax = buf.readDoubleLE(contentOffset + 28);
|
||||||
|
|
||||||
|
const disjoint = (bXmin > queryBbox[2] || bXmax < queryBbox[0] || bYmin > queryBbox[3] || bYmax < queryBbox[1]);
|
||||||
|
|
||||||
|
if (!disjoint) {
|
||||||
|
// Match! Parse Geometry.
|
||||||
|
// Only if Type 5 (Polygon)
|
||||||
|
if (type === 5) {
|
||||||
|
const numParts = buf.readInt32LE(contentOffset + 36);
|
||||||
|
const numPoints = buf.readInt32LE(contentOffset + 40);
|
||||||
|
|
||||||
|
if (numPoints > 0 && numPoints < 10000) {
|
||||||
|
const parts = [];
|
||||||
|
for (let i = 0; i < numParts; i++) {
|
||||||
|
parts.push(buf.readInt32LE(contentOffset + 44 + i * 4));
|
||||||
|
}
|
||||||
|
parts.push(numPoints);
|
||||||
|
|
||||||
|
const pointsOffset = contentOffset + 44 + numParts * 4;
|
||||||
|
const coords = [];
|
||||||
|
|
||||||
|
for (let p = 0; p < numParts; p++) {
|
||||||
|
const start = parts[p];
|
||||||
|
const end = parts[p + 1];
|
||||||
|
const ring = [];
|
||||||
|
for (let k = start; k < end; k++) {
|
||||||
|
const px = buf.readDoubleLE(pointsOffset + k * 16);
|
||||||
|
const py = buf.readDoubleLE(pointsOffset + k * 16 + 8);
|
||||||
|
const [lon, lat] = proj4(sourceProj, destProj, [px, py]);
|
||||||
|
ring.push([lon, lat]);
|
||||||
|
}
|
||||||
|
coords.push(ring);
|
||||||
|
}
|
||||||
|
|
||||||
|
results.push({
|
||||||
|
type: "Feature",
|
||||||
|
properties: { id: "SHP_" + recOffset },
|
||||||
|
geometry: { type: "Polygon", coordinates: coords }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Advance
|
||||||
|
bufPos += totalRecSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Fehler beim Scannen des Buffers:", e);
|
||||||
|
} finally {
|
||||||
|
if (fd) fs.closeSync(fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.timeEnd("Query");
|
||||||
|
console.log(`BBox-Abfrage fand ${results.length} Gebäude`);
|
||||||
|
res.json({ type: "FeatureCollection", features: results });
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API: Ruft detaillierte ALKIS-Informationen für einen Punkt ab (GML-Parsing)
|
||||||
|
*/
|
||||||
|
app.get('/api/alkis-info', async (req, res) => {
|
||||||
|
const { lat, lng } = req.query;
|
||||||
|
if (!lat || !lng) return res.status(400).json({ error: 'Koordinaten fehlen' });
|
||||||
|
|
||||||
|
const lats = parseFloat(lat);
|
||||||
|
const lngs = parseFloat(lng);
|
||||||
|
const size = 0.0001;
|
||||||
|
const bbox = `${lats - size},${lngs - size},${lats + size},${lngs + size},urn:ogc:def:crs:EPSG::4326`;
|
||||||
|
const url = `${ALKIS_WFS_URL}?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&TYPENAMES=ave:Flurstueck&BBOX=${bbox}&COUNT=1`;
|
||||||
|
|
||||||
|
https.get(url, (wfsRes) => {
|
||||||
|
let data = '';
|
||||||
|
wfsRes.on('data', (chunk) => data += chunk);
|
||||||
|
wfsRes.on('end', () => {
|
||||||
|
try {
|
||||||
|
// Einfaches Regex-basiertes Parsing für GML (da kein schwerer XML-Parser installiert ist)
|
||||||
|
const getTag = (tag) => {
|
||||||
|
const match = data.match(new RegExp(`<${tag}[^>]*>(.*?)<\/${tag}>`, 's'));
|
||||||
|
return match ? match[1].trim() : null;
|
||||||
|
};
|
||||||
|
|
||||||
|
const info = {
|
||||||
|
gemarkung: getTag('gemarkung'),
|
||||||
|
gemeinde: getTag('gemeinde'),
|
||||||
|
kreis: getTag('kreis'),
|
||||||
|
regbezirk: getTag('regbezirk'),
|
||||||
|
flur: getTag('flur'),
|
||||||
|
flstnrzae: getTag('flstnrzae'),
|
||||||
|
flstnrnen: getTag('flstnrnen'),
|
||||||
|
flaeche: getTag('flaeche'),
|
||||||
|
aktualit: getTag('aktualit'),
|
||||||
|
lagebeztxt: getTag('lagebeztxt'),
|
||||||
|
flstkennz: getTag('flstkennz')
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!info.flstkennz) {
|
||||||
|
return res.json({ found: false });
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json({ found: true, properties: info });
|
||||||
|
} catch (err) {
|
||||||
|
res.status(500).json({ error: 'Parsing Fehler', details: err.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).on('error', (e) => {
|
||||||
|
res.status(500).json({ error: 'WFS Fehler', details: e.message });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API: Ruft ALKIS-Nutzungsinformationen für einen Punkt ab
|
||||||
|
*/
|
||||||
|
app.get('/api/alkis-usage', async (req, res) => {
|
||||||
|
const { lat, lng } = req.query;
|
||||||
|
if (!lat || !lng) return res.status(400).json({ error: 'Koordinaten fehlen' });
|
||||||
|
|
||||||
|
const lats = parseFloat(lat);
|
||||||
|
const lngs = parseFloat(lng);
|
||||||
|
const size = 0.00001; // Sehr kleiner BBOX für präzise Punkt-Abfrage (~1m)
|
||||||
|
const bbox = `${lats - size},${lngs - size},${lats + size},${lngs + size},urn:ogc:def:crs:EPSG::4326`;
|
||||||
|
const url = `${ALKIS_WFS_URL}?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&TYPENAMES=ave:Nutzung&BBOX=${bbox}&COUNT=1`;
|
||||||
|
|
||||||
|
https.get(url, (wfsRes) => {
|
||||||
|
let data = '';
|
||||||
|
wfsRes.on('data', (chunk) => data += chunk);
|
||||||
|
wfsRes.on('end', () => {
|
||||||
|
try {
|
||||||
|
// Regex-Parsing für nutzart und bez
|
||||||
|
const nutzartMatch = data.match(/<nutzart[^>]*>(.*?)<\/nutzart>/s);
|
||||||
|
const bezMatch = data.match(/<bez[^>]*>(.*?)<\/bez>/s);
|
||||||
|
|
||||||
|
const nutzart = nutzartMatch ? nutzartMatch[1].trim() : null;
|
||||||
|
const bez = bezMatch ? bezMatch[1].trim() : null;
|
||||||
|
|
||||||
|
if (!nutzart && !bez) {
|
||||||
|
return res.json({ found: false });
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json({ found: true, nutzart, bez });
|
||||||
|
} catch (err) {
|
||||||
|
res.status(500).json({ error: 'Parsing Fehler', details: err.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).on('error', (e) => {
|
||||||
|
res.status(500).json({ error: 'WFS Fehler', details: e.message });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API: Ruft Windenergieanlagen in der Nähe ab (WFS Proxy)
|
||||||
|
*/
|
||||||
|
app.get('/api/wind-turbines', async (req, res) => {
|
||||||
|
const { lat, lng } = req.query;
|
||||||
|
if (!lat || !lng) return res.status(400).json({ error: 'Koordinaten fehlen' });
|
||||||
|
|
||||||
|
const lats = parseFloat(lat);
|
||||||
|
const lngs = parseFloat(lng);
|
||||||
|
const size = 0.05; // ~5.5km BBOX für absolute Sicherheit
|
||||||
|
const bbox = `${lats - size},${lngs - size},${lats + size},${lngs + size},urn:ogc:def:crs:EPSG::4326`;
|
||||||
|
|
||||||
|
// Wir nutzen WFS 2.0.0 da dieser stabil Daten liefert
|
||||||
|
const url = `https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&TYPENAMES=erneuerbare_energien_wfs:WFS_Windenergie&BBOX=${bbox}&COUNT=100`;
|
||||||
|
|
||||||
|
console.log(`[WindProxy] Fetching: ${url}`);
|
||||||
|
|
||||||
|
https.get(url, (wfsRes) => {
|
||||||
|
console.log(`[WindProxy] Status: ${wfsRes.statusCode}`);
|
||||||
|
let data = '';
|
||||||
|
wfsRes.on('data', (chunk) => data += chunk);
|
||||||
|
wfsRes.on('end', () => {
|
||||||
|
try {
|
||||||
|
if (data.includes('ExceptionReport')) {
|
||||||
|
console.error(`[WindProxy] WFS Exception: ${data.substring(0, 500)}`);
|
||||||
|
return res.status(500).json({ error: 'WFS Exception', details: 'Der Dienst hat einen Fehler gemeldet.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
const features = [];
|
||||||
|
// Robustes Splitten (Regex handles attributes in member tag)
|
||||||
|
const blocks = data.split(/<wfs:member[^>]*>/);
|
||||||
|
|
||||||
|
for (let i = 1; i < blocks.length; i++) {
|
||||||
|
const block = blocks[i];
|
||||||
|
|
||||||
|
// Extrahiere UTM Koordinaten aus gml:pos
|
||||||
|
const posMatch = block.match(/<gml:pos[^>]*>(.*?)<\/gml:pos>/);
|
||||||
|
const ibjahrMatch = block.match(/<erneuerbare_energien_wfs:ibjahr[^>]*>(.*?)<\/erneuerbare_energien_wfs:ibjahr>/);
|
||||||
|
|
||||||
|
if (posMatch) {
|
||||||
|
const coords = posMatch[1].trim().split(/\s+/).map(Number);
|
||||||
|
const [lon, lat] = proj4(sourceProj, destProj, [coords[0], coords[1]]);
|
||||||
|
features.push({
|
||||||
|
type: 'Feature',
|
||||||
|
geometry: {
|
||||||
|
type: 'Point',
|
||||||
|
coordinates: [lon, lat] // [Lon, Lat] in WGS84
|
||||||
|
},
|
||||||
|
properties: {
|
||||||
|
ibjahr: ibjahrMatch ? ibjahrMatch[1].trim() : "Unbekannt"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log(`[WindProxy] Found ${features.length} turbines for ${lat},${lng}`);
|
||||||
|
res.json({ features });
|
||||||
|
} catch (err) {
|
||||||
|
res.status(500).json({ error: 'Parsing Fehler', details: err.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}).on('error', (e) => {
|
||||||
|
res.status(500).json({ error: 'WFS Fehler', details: e.message });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// --- Logik für Potenzialflächen & Regionalplanung ---
|
||||||
|
const POTENTIAL_ZIP_PATH = path.join(__dirname, 'public/daten/Potenzialkarten-Windenergieanlagen-NRW_EPSG25832_Shape.zip');
|
||||||
|
const PLANNING_ZIP_PATH = path.join(__dirname, 'public/daten/Windenergiebereiche_NRW.zip');
|
||||||
|
|
||||||
|
let potentialFeatures = [];
|
||||||
|
let potentialLoaded = false;
|
||||||
|
let planningFeatures = [];
|
||||||
|
let planningLoaded = false;
|
||||||
|
let planningError = null;
|
||||||
|
let turf = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prüft, ob ein Punkt innerhalb eines Polygons liegt (unter Verwendung von Turf.js)
|
||||||
|
*/
|
||||||
|
function checkPointInFeature(pt, feature) {
|
||||||
|
if (!turf) return false;
|
||||||
|
if (!feature || !feature.geometry) return false;
|
||||||
|
try {
|
||||||
|
const point = turf.point(pt); // pt muss [lng, lat] sein
|
||||||
|
if (feature.geometry.type === 'Polygon' || feature.geometry.type === 'MultiPolygon') {
|
||||||
|
return turf.booleanPointInPolygon(point, feature);
|
||||||
|
}
|
||||||
|
} catch (e) { }
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lädt die notwendigen Bibliotheken und Geodaten beim Serverstart
|
||||||
|
*/
|
||||||
|
(async () => {
|
||||||
|
try {
|
||||||
|
console.log("Lade Bibliotheken & Daten...");
|
||||||
|
const { default: shp } = await import('shpjs');
|
||||||
|
const turfModule = await import('@turf/turf');
|
||||||
|
turf = turfModule.default || turfModule;
|
||||||
|
|
||||||
|
// 1. Regionalplanung (Windenergiebereiche) laden
|
||||||
|
if (fs.existsSync(PLANNING_ZIP_PATH)) {
|
||||||
|
console.log(`[${new Date().toISOString()}] Lade Planungsdaten von: ${PLANNING_ZIP_PATH}`);
|
||||||
|
try {
|
||||||
|
const buffer = fs.readFileSync(PLANNING_ZIP_PATH);
|
||||||
|
const geojson = await shp(buffer);
|
||||||
|
|
||||||
|
if (Array.isArray(geojson)) {
|
||||||
|
geojson.forEach(fc => { if (fc.features) planningFeatures.push(...fc.features); });
|
||||||
|
} else {
|
||||||
|
planningFeatures = geojson.features;
|
||||||
|
}
|
||||||
|
planningLoaded = true;
|
||||||
|
console.log(`[${new Date().toISOString()}] Planungsdaten geladen: ${planningFeatures.length} Features.`);
|
||||||
|
} catch (err) {
|
||||||
|
planningError = err.message;
|
||||||
|
console.warn("Konnte Planungs-ZIP nicht laden:", err);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.warn("Planungs-ZIP nicht gefunden:", PLANNING_ZIP_PATH);
|
||||||
|
planningError = "Datei nicht gefunden: " + PLANNING_ZIP_PATH;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. Potenzialkarten laden
|
||||||
|
if (fs.existsSync(POTENTIAL_ZIP_PATH)) {
|
||||||
|
console.log(`[${new Date().toISOString()}] Lade Potenzialdaten...`);
|
||||||
|
const buffer = fs.readFileSync(POTENTIAL_ZIP_PATH);
|
||||||
|
const geojson = await shp(buffer);
|
||||||
|
if (Array.isArray(geojson)) {
|
||||||
|
geojson.forEach(fc => { if (fc.features) potentialFeatures.push(...fc.features); });
|
||||||
|
} else {
|
||||||
|
potentialFeatures = geojson.features;
|
||||||
|
}
|
||||||
|
potentialLoaded = true;
|
||||||
|
console.log(`[${new Date().toISOString()}] Potenzialdaten geladen: ${potentialFeatures.length} Features.`);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (e) {
|
||||||
|
console.error("Fehler beim Laden der Daten / Libs:", e);
|
||||||
|
planningError = "Globaler Ladefehler: " + e.message;
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API: Prüft, ob ein Standort in einer LANUV-Potenzialfläche liegt
|
||||||
|
*/
|
||||||
|
app.get('/api/check-potential', (req, res) => {
|
||||||
|
const { lat, lng } = req.query;
|
||||||
|
if (!potentialLoaded) return res.json({ result: 'error', message: 'Daten nicht geladen' });
|
||||||
|
if (!lat || !lng) return res.json({ result: 'error', message: 'Koordinaten fehlen' });
|
||||||
|
|
||||||
|
try {
|
||||||
|
const pt = [parseFloat(lng), parseFloat(lat)];
|
||||||
|
if (isNaN(pt[0]) || isNaN(pt[1])) throw new Error("Ungültige Koordinaten");
|
||||||
|
|
||||||
|
let found = false;
|
||||||
|
let props = {};
|
||||||
|
|
||||||
|
for (const f of potentialFeatures) {
|
||||||
|
if (checkPointInFeature(pt, f)) {
|
||||||
|
found = true;
|
||||||
|
props = f.properties;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json({
|
||||||
|
found: found,
|
||||||
|
properties: found ? props : null
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
res.status(500).json({ error: e.toString() });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API: Prüft, ob ein Standort in einem Windenergiebereich liegt
|
||||||
|
*/
|
||||||
|
app.get('/api/check-planning', (req, res) => {
|
||||||
|
const { lat, lng } = req.query;
|
||||||
|
if (!planningLoaded) return res.json({ found: false, message: 'Daten nicht geladen' });
|
||||||
|
if (!lat || !lng) return res.json({ found: false, message: 'Koordinaten fehlen' });
|
||||||
|
|
||||||
|
try {
|
||||||
|
const pt = [parseFloat(lng), parseFloat(lat)];
|
||||||
|
let found = false;
|
||||||
|
let props = {};
|
||||||
|
|
||||||
|
for (const f of planningFeatures) {
|
||||||
|
if (checkPointInFeature(pt, f)) {
|
||||||
|
found = true;
|
||||||
|
props = f.properties;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json({ found: found, properties: found ? props : null });
|
||||||
|
} catch (e) {
|
||||||
|
res.status(500).json({ error: e.toString() });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API: Liefert alle Potenzialflächen als GeoJSON
|
||||||
|
*/
|
||||||
|
app.get('/api/potential-data', (req, res) => {
|
||||||
|
if (!potentialLoaded) return res.status(503).json({ error: 'Daten noch nicht bereit' });
|
||||||
|
res.json({ type: 'FeatureCollection', features: potentialFeatures });
|
||||||
|
});
|
||||||
|
|
||||||
|
/**
|
||||||
|
* API: Liefert alle Windenergiebereiche als GeoJSON
|
||||||
|
*/
|
||||||
|
app.get('/api/planning-data', (req, res) => {
|
||||||
|
if (!planningLoaded) {
|
||||||
|
if (planningError) {
|
||||||
|
return res.status(500).json({ error: 'Laden der Planungsdaten fehlgeschlagen: ' + planningError });
|
||||||
|
}
|
||||||
|
return res.status(503).json({ error: 'Daten werden geladen... bitte erneut versuchen.', retry: true });
|
||||||
|
}
|
||||||
|
res.json({ type: 'FeatureCollection', features: planningFeatures });
|
||||||
|
});
|
||||||
|
|
||||||
|
app.listen(PORT, () => {
|
||||||
|
console.log(`Geodaten-Server läuft auf http://localhost:${PORT} (Buffered Mode)`);
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
@echo off
|
||||||
|
cd /d "%~dp0"
|
||||||
|
echo Starting Development Server...
|
||||||
|
call npm start
|
||||||
|
pause
|
||||||
|
|
@ -0,0 +1,622 @@
|
||||||
|
:root {
|
||||||
|
--primary-color: #307725; /* 48 119 37 */
|
||||||
|
--primary-light: #73B076; /* 115 176 118 */
|
||||||
|
--primary-pale: #D7EAD8; /* 215 234 216 */
|
||||||
|
--accent-color: #407A95; /* 64 122 149 */
|
||||||
|
--accent-light: #97C5D4; /* 151 197 212 */
|
||||||
|
--bg-pale: #EEF5F6; /* 238 245 246 */
|
||||||
|
|
||||||
|
--text-dark: #0f172a;
|
||||||
|
--text-light: #f8fafc;
|
||||||
|
--bg-dark: #0f172a;
|
||||||
|
--glass-bg: rgba(238, 245, 246, 0.95);
|
||||||
|
--glass-border: rgba(48, 119, 37, 0.2);
|
||||||
|
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
||||||
|
--radius-xl: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-family: 'Outfit', sans-serif;
|
||||||
|
color: var(--text-dark);
|
||||||
|
background: var(--bg-dark);
|
||||||
|
height: 100vh;
|
||||||
|
width: 100vw;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.main-content {
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
#map {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.top-left-logo {
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
left: 20px;
|
||||||
|
z-index: 1000;
|
||||||
|
pointer-events: auto;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 12px;
|
||||||
|
padding: 12px 16px;
|
||||||
|
min-width: 240px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo-row img {
|
||||||
|
height: 28px;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo-divider {
|
||||||
|
width: 1px;
|
||||||
|
height: 18px;
|
||||||
|
background: #cbd5e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo-text {
|
||||||
|
font-weight: 700;
|
||||||
|
font-size: 0.85rem;
|
||||||
|
color: var(--primary-color);
|
||||||
|
letter-spacing: 0.03em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
padding-top: 8px;
|
||||||
|
border-top: 1px solid rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.info-divider {
|
||||||
|
width: 1px;
|
||||||
|
height: 12px;
|
||||||
|
background: #cbd5e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.impressum-link {
|
||||||
|
color: var(--primary-color) !important;
|
||||||
|
font-weight: 500;
|
||||||
|
text-decoration: none;
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
padding: 0;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.impressum-link:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-row {
|
||||||
|
margin-top: 4px;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-row .leaflet-control-geocoder {
|
||||||
|
box-shadow: none !important;
|
||||||
|
border: 1px solid var(--glass-border) !important;
|
||||||
|
background: white !important;
|
||||||
|
width: 100% !important;
|
||||||
|
border-radius: 8px !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-row .leaflet-control-geocoder-form input {
|
||||||
|
font-family: 'Outfit', sans-serif !important;
|
||||||
|
font-size: 0.85rem !important;
|
||||||
|
padding: 8px 12px !important;
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-row .leaflet-control-geocoder-icon {
|
||||||
|
display: none !important; /* Hide search icon if we want clean look, or keep if preferred */
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-btn {
|
||||||
|
width: 100%;
|
||||||
|
margin-top: 8px;
|
||||||
|
padding: 0.6rem 1rem !important;
|
||||||
|
font-size: 0.85rem !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.basemap-toggle-row {
|
||||||
|
display: flex;
|
||||||
|
gap: 4px;
|
||||||
|
margin-top: 8px;
|
||||||
|
background: rgba(0, 0, 0, 0.05);
|
||||||
|
padding: 3px;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.basemap-btn {
|
||||||
|
flex: 1;
|
||||||
|
border: none;
|
||||||
|
background: none;
|
||||||
|
padding: 6px;
|
||||||
|
font-size: 0.75rem;
|
||||||
|
font-weight: 600;
|
||||||
|
border-radius: 6px;
|
||||||
|
cursor: pointer;
|
||||||
|
color: #64748b;
|
||||||
|
transition: all 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.basemap-btn.active {
|
||||||
|
background: white;
|
||||||
|
color: var(--primary-color);
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
.primary-btn {
|
||||||
|
pointer-events: auto;
|
||||||
|
background: linear-gradient(135deg, var(--primary-color), var(--primary-light));
|
||||||
|
color: white;
|
||||||
|
border: none;
|
||||||
|
padding: 0.8rem 1.8rem;
|
||||||
|
border-radius: 2rem;
|
||||||
|
font-weight: 600;
|
||||||
|
box-shadow: 0 4px 15px rgba(48, 119, 37, 0.3);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.primary-btn:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: 0 6px 20px rgba(48, 119, 37, 0.4);
|
||||||
|
background: linear-gradient(135deg, var(--primary-light), var(--primary-color));
|
||||||
|
}
|
||||||
|
.primary-btn:disabled {
|
||||||
|
opacity: 0.7;
|
||||||
|
background: #94a3b8;
|
||||||
|
cursor: not-allowed;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#results-area {
|
||||||
|
position: absolute;
|
||||||
|
top: 80px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
width: 95%;
|
||||||
|
max-width: 800px;
|
||||||
|
z-index: 1000;
|
||||||
|
max-height: 80vh;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.glass-panel {
|
||||||
|
background: var(--glass-bg);
|
||||||
|
backdrop-filter: blur(12px);
|
||||||
|
-webkit-backdrop-filter: blur(12px);
|
||||||
|
border: 1px solid var(--glass-border);
|
||||||
|
box-shadow: var(--shadow-lg);
|
||||||
|
border-radius: var(--radius-xl);
|
||||||
|
padding: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-card h2 {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
color: var(--primary-dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
.category-block {
|
||||||
|
background: var(--bg-pale);
|
||||||
|
border-radius: 0.75rem;
|
||||||
|
padding: 0.6rem 1rem;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
border-left: 4px solid var(--primary-color);
|
||||||
|
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.03);
|
||||||
|
}
|
||||||
|
|
||||||
|
.category-block:nth-child(even) {
|
||||||
|
border-left-color: var(--accent-color);
|
||||||
|
background: #fdfdfe; /* Very slight variation */
|
||||||
|
}
|
||||||
|
|
||||||
|
.category-title {
|
||||||
|
font-size: 0.8rem;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
color: var(--primary-color);
|
||||||
|
margin-bottom: 0.3rem;
|
||||||
|
font-weight: 700;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-item {
|
||||||
|
font-size: 0.85rem;
|
||||||
|
line-height: 1.3;
|
||||||
|
color: var(--text-dark);
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: flex-start;
|
||||||
|
padding: 2px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-item strong {
|
||||||
|
color: var(--text-dark);
|
||||||
|
font-weight: 600;
|
||||||
|
max-width: 60%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-item span {
|
||||||
|
font-weight: 500;
|
||||||
|
text-align: right;
|
||||||
|
flex: 1;
|
||||||
|
padding-left: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-emerald-500 {
|
||||||
|
color: var(--primary-color);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-amber-500 {
|
||||||
|
color: #d97706; /* Branded Amber */
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-red-500 {
|
||||||
|
color: #dc2626; /* Branded Red */
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-slate-400 {
|
||||||
|
color: #64748b;
|
||||||
|
}
|
||||||
|
|
||||||
|
.report-note {
|
||||||
|
background: var(--primary-pale);
|
||||||
|
border-left: 4px solid var(--primary-color);
|
||||||
|
padding: 1rem;
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
border-radius: 6px;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: var(--text-dark);
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.report-note-title {
|
||||||
|
display: block;
|
||||||
|
font-weight: 700;
|
||||||
|
margin-bottom: 0.25rem;
|
||||||
|
color: var(--primary-dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-btn {
|
||||||
|
background: #f1f5f9;
|
||||||
|
border: none;
|
||||||
|
font-size: 1.2rem;
|
||||||
|
width: 32px;
|
||||||
|
height: 32px;
|
||||||
|
border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-btn:hover {
|
||||||
|
background: #e2e8f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.export-pdf-btn {
|
||||||
|
background: white;
|
||||||
|
border: 1px solid #e2e8f0;
|
||||||
|
color: #64748b;
|
||||||
|
font-size: 0.8rem;
|
||||||
|
padding: 0.4rem 0.8rem;
|
||||||
|
border-radius: 6px;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
transition: all 0.2s;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.export-pdf-btn:hover {
|
||||||
|
background: #f8fafc;
|
||||||
|
color: var(--primary-color);
|
||||||
|
border-color: var(--primary-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* PDF Export mode styles */
|
||||||
|
.pdf-export-mode .export-pdf-btn,
|
||||||
|
.pdf-export-mode .close-btn {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pdf-export-mode {
|
||||||
|
animation: none !important;
|
||||||
|
transform: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
border: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.results-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.results-visible {
|
||||||
|
display: block;
|
||||||
|
animation: slideUp 0.4s cubic-bezier(0, 0, 0.2, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes slideUp {
|
||||||
|
from {
|
||||||
|
transform: translate(-50%, 20px);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
to {
|
||||||
|
transform: translate(-50%, 0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.loader {
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
border: 4px solid #e2e8f0;
|
||||||
|
border-top: 4px solid var(--primary-color);
|
||||||
|
border-radius: 50%;
|
||||||
|
animation: spin 1s linear infinite;
|
||||||
|
margin: 1.5rem auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes spin {
|
||||||
|
from {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
to {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.dist-tooltip-premium {
|
||||||
|
background: white !important;
|
||||||
|
border: 2px solid var(--primary-color) !important;
|
||||||
|
color: var(--primary-dark) !important;
|
||||||
|
font-weight: 700 !important;
|
||||||
|
font-size: 14px !important;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 6px 12px;
|
||||||
|
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.turbine-rotor {
|
||||||
|
transform-origin: 30px 40px;
|
||||||
|
animation: rotate-turbine 3s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes rotate-turbine {
|
||||||
|
from {
|
||||||
|
transform: rotate(0deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
to {
|
||||||
|
transform: rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Scrollbar */
|
||||||
|
#results-area::-webkit-scrollbar {
|
||||||
|
width: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#results-area::-webkit-scrollbar-track {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#results-area::-webkit-scrollbar-thumb {
|
||||||
|
background: #cbd5e1;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Intro Overlay */
|
||||||
|
.intro-overlay {
|
||||||
|
position: absolute;
|
||||||
|
top: 80px;
|
||||||
|
left: 50%;
|
||||||
|
transform: translateX(-50%);
|
||||||
|
z-index: 1100;
|
||||||
|
width: 90%;
|
||||||
|
max-width: 400px;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hint-content {
|
||||||
|
background: white;
|
||||||
|
padding: 1rem 1.5rem;
|
||||||
|
border-radius: 12px;
|
||||||
|
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
|
||||||
|
border-left: 5px solid var(--primary-color);
|
||||||
|
pointer-events: auto;
|
||||||
|
animation: bounceIn 0.8s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hint-content p {
|
||||||
|
font-size: 0.95rem;
|
||||||
|
color: var(--text-dark);
|
||||||
|
line-height: 1.4;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@keyframes bounceIn {
|
||||||
|
0% {
|
||||||
|
transform: scale(0.9);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
70% {
|
||||||
|
transform: scale(1.05);
|
||||||
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
transform: scale(1);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Status Indicator --- */
|
||||||
|
.status-indicator {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
background: transparent;
|
||||||
|
padding: 0;
|
||||||
|
border-radius: 0;
|
||||||
|
box-shadow: none;
|
||||||
|
font-size: 0.7rem;
|
||||||
|
font-weight: 600;
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-dot {
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: #cbd5e1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-indicator.online .status-dot {
|
||||||
|
background: #10b981;
|
||||||
|
box-shadow: 0 0 8px rgba(16, 185, 129, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-indicator.offline .status-dot {
|
||||||
|
background: #ef4444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-indicator.online .status-text {
|
||||||
|
color: #059669;
|
||||||
|
}
|
||||||
|
|
||||||
|
.status-indicator.offline .status-text {
|
||||||
|
color: #dc2626;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Modal Styling */
|
||||||
|
.modal-overlay {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: rgba(15, 23, 42, 0.4);
|
||||||
|
backdrop-filter: blur(4px);
|
||||||
|
z-index: 2000;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-content {
|
||||||
|
max-width: 700px;
|
||||||
|
width: 100%;
|
||||||
|
max-height: 85vh;
|
||||||
|
overflow-y: auto;
|
||||||
|
position: relative;
|
||||||
|
animation: modalAppear 0.3s cubic-bezier(0.34, 1.56, 0.64, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes modalAppear {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: scale(0.9) translateY(20px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: scale(1) translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
position: sticky;
|
||||||
|
top: 0;
|
||||||
|
background: var(--glass-bg);
|
||||||
|
padding-bottom: 10px;
|
||||||
|
border-bottom: 1px solid var(--glass-border);
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-header h2 {
|
||||||
|
color: var(--primary-color);
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-modal-btn {
|
||||||
|
background: none;
|
||||||
|
border: none;
|
||||||
|
font-size: 2rem;
|
||||||
|
color: var(--text-dark);
|
||||||
|
cursor: pointer;
|
||||||
|
line-height: 1;
|
||||||
|
transition: color 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.close-modal-btn:hover {
|
||||||
|
color: var(--primary-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-body h3 {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
color: var(--primary-color);
|
||||||
|
margin: 1.5rem 0 0.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-body p {
|
||||||
|
font-size: 0.95rem;
|
||||||
|
line-height: 1.6;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
color: var(--text-dark);
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-body a {
|
||||||
|
color: var(--primary-color);
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modal-body a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
|
||||||
|
const https = require('https');
|
||||||
|
|
||||||
|
const lat = 51.4332;
|
||||||
|
const lng = 7.6616;
|
||||||
|
const size = 0.00001;
|
||||||
|
const bbox = `${lat - size},${lng - size},${lat + size},${lng + size},urn:ogc:def:crs:EPSG::4326`;
|
||||||
|
const url = `https://www.wfs.nrw.de/geobasis/wfs_nw_alkis_vereinfacht?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&TYPENAMES=ave:Nutzung&BBOX=${bbox}&COUNT=1`;
|
||||||
|
|
||||||
|
https.get(url, (res) => {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', (chunk) => data += chunk);
|
||||||
|
res.on('end', () => {
|
||||||
|
const nutzartMatch = data.match(/<nutzart[^>]*>(.*?)<\/nutzart>/s);
|
||||||
|
const bezMatch = data.match(/<bez[^>]*>(.*?)<\/bez>/s);
|
||||||
|
console.log("Nutzart:", nutzartMatch ? nutzartMatch[1] : "not found");
|
||||||
|
console.log("Bez:", bezMatch ? bezMatch[1] : "not found");
|
||||||
|
});
|
||||||
|
}).on('error', (e) => {
|
||||||
|
console.error(e);
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
|
||||||
|
const proj4 = require('proj4');
|
||||||
|
const https = require('https');
|
||||||
|
|
||||||
|
proj4.defs("EPSG:25832", "+proj=utm +zone=32 +ellps=GRS80 +units=m +no_defs");
|
||||||
|
|
||||||
|
const pos = { lat: 51.4332, lng: 7.6616 }; // Marker position
|
||||||
|
const size = 0.02;
|
||||||
|
const bbox = `${pos.lat - size},${pos.lng - size},${pos.lat + size},${pos.lng + size},urn:ogc:def:crs:EPSG::4326`;
|
||||||
|
const url = `https://www.wfs.nrw.de/umwelt/erneuerbare_energien_wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&TYPENAMES=erneuerbare_energien_wfs:WFS_Windenergie&BBOX=${bbox}&COUNT=10`;
|
||||||
|
|
||||||
|
https.get(url, (res) => {
|
||||||
|
let data = '';
|
||||||
|
res.on('data', (chunk) => data += chunk);
|
||||||
|
res.on('end', () => {
|
||||||
|
const markerUtm = proj4("EPSG:4326", "EPSG:25832", [pos.lng, pos.lat]);
|
||||||
|
console.log("Marker UTM:", markerUtm);
|
||||||
|
|
||||||
|
const blocks = data.split(/<wfs:member[^>]*>/);
|
||||||
|
console.log("Found turbines:", blocks.length - 1);
|
||||||
|
|
||||||
|
blocks.slice(1).forEach((block, idx) => {
|
||||||
|
const posMatch = block.match(/<gml:pos[^>]*>(.*?)<\/gml:pos>/);
|
||||||
|
const ibjahrMatch = block.match(/<erneuerbare_energien_wfs:ibjahr[^>]*>(.*?)<\/erneuerbare_energien_wfs:ibjahr>/);
|
||||||
|
const statusMatch = block.match(/<erneuerbare_energien_wfs:status[^>]*>(.*?)<\/erneuerbare_energien_wfs:status>/);
|
||||||
|
|
||||||
|
if (posMatch) {
|
||||||
|
const coords = posMatch[1].trim().split(/\s+/).map(Number);
|
||||||
|
const d = Math.sqrt(Math.pow(coords[0] - markerUtm[0], 2) + Math.pow(coords[1] - markerUtm[1], 2));
|
||||||
|
const jahr = ibjahrMatch ? ibjahrMatch[1] : "???";
|
||||||
|
const status = statusMatch ? statusMatch[1] : "???";
|
||||||
|
console.log(`Turbine ${idx + 1}: Coords=[${coords}], Dist=${d.toFixed(1)}m, Jahr=${jahr}, Status=${status}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,611 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<WMS_Capabilities version="1.3.0"
|
||||||
|
xmlns="http://www.opengis.net/wms"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xmlns:esri_wms="http://www.esri.com/wms"
|
||||||
|
xsi:schemaLocation="http://www.opengis.net/wms http://schemas.opengis.net/wms/1.3.0/capabilities_1_3_0.xsd http://www.esri.com/wms https://www.wms.nrw.de/umwelt/wasser/uesg?version=1.3.0%26service=WMS%26request=GetSchemaExtension">
|
||||||
|
<Service>
|
||||||
|
<Name><![CDATA[WMS]]></Name>
|
||||||
|
<Title><![CDATA[Überschwemmungsgebiete NRW]]></Title>
|
||||||
|
<Abstract><![CDATA[Stand: Aktuell. Unabhängig von den Vorgaben der EG-Richtlinie über die Bewertung und das Management von Hochwasserrisiken (EG-HWRM-RL) werden in Nordrhein-Westfalen seit vielen Jahren die Überschwemmungsgebiete von hochwassergefährdeten Gewässern rechnerisch ermittelt und durch ordnungsbehördliche Verordnung festgesetzt bzw. vorläufig gesichert. Berechnungsgrundlage ist dabei bundeseinheitlich ein Hochwasserereignis, wie es statistisch einmal in 100 Jahren zu erwarten ist. Die Ausweisung von Überschwemmungsgebieten gehört zu den strategischen Vorsorgemaßnahmen im Hochwasserschutz mit unmittelbaren planungsrechtlichen Auswirkungen, wie z.B. Restriktionen bei der Ausweisung oder Erweiterung kommunaler Baugebiete. Diese Aufgabe bleibt - unabhängig von der EG-HWRM-RL - weiterhin gesetzliche Pflicht und wird durch die Bezirksregierungen wahrgenommen. Weitere Informationen finden Sie auf den Internetseiten der Bezirksregierungen.]]></Abstract>
|
||||||
|
<KeywordList><Keyword><![CDATA[]]></Keyword></KeywordList>
|
||||||
|
<OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="https://www.wms.nrw.de/umwelt/wasser/uesg?"/>
|
||||||
|
<ContactInformation>
|
||||||
|
<ContactPersonPrimary>
|
||||||
|
<ContactPerson><![CDATA[Bezirksregierungen von NRW]]></ContactPerson>
|
||||||
|
<ContactOrganization><![CDATA[Landesamt für Natur, Umwelt und Verbraucherschutz NRW - ELWAS-Geschäftsstelle]]></ContactOrganization>
|
||||||
|
</ContactPersonPrimary>
|
||||||
|
<ContactPosition><![CDATA[]]></ContactPosition>
|
||||||
|
<ContactAddress>
|
||||||
|
<AddressType><![CDATA[postalisch]]></AddressType>
|
||||||
|
<Address><![CDATA[Leibnizstraße 10]]></Address>
|
||||||
|
<City><![CDATA[Recklinghausen]]></City>
|
||||||
|
<StateOrProvince><![CDATA[NRW]]></StateOrProvince>
|
||||||
|
<PostCode><![CDATA[45659]]></PostCode>
|
||||||
|
<Country><![CDATA[DE]]></Country>
|
||||||
|
</ContactAddress>
|
||||||
|
<ContactVoiceTelephone><![CDATA[+49 (0)211 - 1590 2165 ]]></ContactVoiceTelephone>
|
||||||
|
<ContactFacsimileTelephone><![CDATA[+49 (0)211 - 1590 2205]]></ContactFacsimileTelephone>
|
||||||
|
<ContactElectronicMailAddress><![CDATA[elwas-gs@lanuv.nrw.de]]></ContactElectronicMailAddress>
|
||||||
|
</ContactInformation>
|
||||||
|
<Fees><![CDATA[keine]]></Fees>
|
||||||
|
<AccessConstraints><![CDATA[Open Data - Dieses Angebot vom Landesamt für Natur, Umwelt und Verbraucherschutz Nordrhein-Westfalen ist lizensiert unter der Datenlizenz Deutschland Namensnennung 2.0 (https://www.govdata.de/dl-de/by-2-0). Datensätze unter dieser Lizenz müssen bei Weiterverwendung mit dem Quellenverweis „Land NRW“ versehen werden.]]></AccessConstraints>
|
||||||
|
<MaxWidth>5000</MaxWidth>
|
||||||
|
<MaxHeight>5000</MaxHeight>
|
||||||
|
</Service>
|
||||||
|
<Capability>
|
||||||
|
<Request>
|
||||||
|
<GetCapabilities>
|
||||||
|
<Format>application/vnd.ogc.wms_xml</Format>
|
||||||
|
<Format>text/xml</Format>
|
||||||
|
<DCPType>
|
||||||
|
<HTTP><Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="https://www.wms.nrw.de/umwelt/wasser/uesg?"/></Get></HTTP>
|
||||||
|
</DCPType>
|
||||||
|
</GetCapabilities>
|
||||||
|
<GetMap>
|
||||||
|
<Format>image/bmp</Format>
|
||||||
|
<Format>image/jpeg</Format>
|
||||||
|
<Format>image/tiff</Format>
|
||||||
|
<Format>image/png</Format>
|
||||||
|
<Format>image/png8</Format>
|
||||||
|
<Format>image/png24</Format>
|
||||||
|
<Format>image/png32</Format>
|
||||||
|
<Format>image/gif</Format>
|
||||||
|
<Format>image/svg+xml</Format>
|
||||||
|
<DCPType>
|
||||||
|
<HTTP><Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="https://www.wms.nrw.de/umwelt/wasser/uesg?"/></Get></HTTP>
|
||||||
|
</DCPType>
|
||||||
|
</GetMap>
|
||||||
|
<GetFeatureInfo>
|
||||||
|
<Format>application/vnd.esri.wms_raw_xml</Format>
|
||||||
|
<Format>application/vnd.esri.wms_featureinfo_xml</Format>
|
||||||
|
<Format>application/vnd.ogc.wms_xml</Format>
|
||||||
|
<Format>application/geo+json</Format>
|
||||||
|
<Format>text/xml</Format>
|
||||||
|
<Format>text/html</Format>
|
||||||
|
<Format>text/plain</Format>
|
||||||
|
<DCPType>
|
||||||
|
<HTTP><Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="https://www.wms.nrw.de/umwelt/wasser/uesg?"/></Get></HTTP>
|
||||||
|
</DCPType>
|
||||||
|
</GetFeatureInfo>
|
||||||
|
<esri_wms:GetStyles>
|
||||||
|
<Format>application/vnd.ogc.sld+xml</Format>
|
||||||
|
<DCPType>
|
||||||
|
<HTTP><Get><OnlineResource xmlns:xlink="http://www.w3.org/1999/xlink" xlink:type="simple" xlink:href="https://www.wms.nrw.de/umwelt/wasser/uesg?"/></Get></HTTP>
|
||||||
|
</DCPType>
|
||||||
|
</esri_wms:GetStyles>
|
||||||
|
</Request>
|
||||||
|
<Exception>
|
||||||
|
<Format>application/vnd.ogc.se_xml</Format>
|
||||||
|
<Format>application/vnd.ogc.se_inimage</Format>
|
||||||
|
<Format>application/vnd.ogc.se_blank</Format>
|
||||||
|
<Format>text/xml</Format>
|
||||||
|
<Format>XML</Format>
|
||||||
|
</Exception>
|
||||||
|
<Layer>
|
||||||
|
<Title><![CDATA[Überschwemmungsgebiete NRW]]></Title>
|
||||||
|
<CRS>CRS:84</CRS>
|
||||||
|
<CRS>EPSG:4326</CRS>
|
||||||
|
<CRS>EPSG:25832</CRS>
|
||||||
|
<CRS>EPSG:3034</CRS>
|
||||||
|
<CRS>EPSG:3035</CRS>
|
||||||
|
<CRS>EPSG:3043</CRS>
|
||||||
|
<CRS>EPSG:3044</CRS>
|
||||||
|
<CRS>EPSG:3045</CRS>
|
||||||
|
<CRS>EPSG:3857</CRS>
|
||||||
|
<!-- alias 3857 -->
|
||||||
|
<CRS>EPSG:102100</CRS>
|
||||||
|
<CRS>EPSG:4258</CRS>
|
||||||
|
<CRS>EPSG:4647</CRS>
|
||||||
|
<!-- alias 4647 -->
|
||||||
|
<CRS>EPSG:102362</CRS>
|
||||||
|
<CRS>EPSG:5649</CRS>
|
||||||
|
<CRS>EPSG:5650</CRS>
|
||||||
|
<CRS>EPSG:5651</CRS>
|
||||||
|
<CRS>EPSG:5652</CRS>
|
||||||
|
<CRS>EPSG:5653</CRS>
|
||||||
|
<CRS>EPSG:25831</CRS>
|
||||||
|
<CRS>EPSG:25833</CRS>
|
||||||
|
<CRS>EPSG:28992</CRS>
|
||||||
|
<CRS>EPSG:31466</CRS>
|
||||||
|
<!-- alias 31466 -->
|
||||||
|
<CRS>EPSG:31462</CRS>
|
||||||
|
<CRS>EPSG:31467</CRS>
|
||||||
|
<!-- alias 31467 -->
|
||||||
|
<CRS>EPSG:31463</CRS>
|
||||||
|
<EX_GeographicBoundingBox><westBoundLongitude>5.766008</westBoundLongitude><eastBoundLongitude>9.468066</eastBoundLongitude><southBoundLatitude>50.342833</southBoundLatitude><northBoundLatitude>52.519758</northBoundLatitude></EX_GeographicBoundingBox>
|
||||||
|
<BoundingBox CRS="CRS:84" minx="5.766008" miny="50.342833" maxx="9.468066" maxy="52.519758"/>
|
||||||
|
<BoundingBox CRS="EPSG:4326" minx="50.342833" miny="5.766008" maxx="52.519758" maxy="9.468066"/>
|
||||||
|
<BoundingBox CRS="EPSG:25832" minx="280374.968000" miny="5581306.307300" maxx="531760.056900" maxy="5818849.746600"/>
|
||||||
|
<BoundingBox CRS="EPSG:3034" minx="2626418.448171" miny="3719216.543717" maxx="2859070.918053" maxy="3965118.138104"/>
|
||||||
|
<BoundingBox CRS="EPSG:3035" minx="3030252.493646" miny="4030235.136442" maxx="3271281.371938" maxy="4284891.291766"/>
|
||||||
|
<BoundingBox CRS="EPSG:3043" minx="5580808.041666" miny="687850.523885" maxx="5838430.834726" maxy="958155.698507"/>
|
||||||
|
<BoundingBox CRS="EPSG:3044" minx="5581306.307300" miny="280374.968000" maxx="5818849.746600" maxy="531760.056900"/>
|
||||||
|
<BoundingBox CRS="EPSG:3045" minx="5595966.573682" miny="-146071.074841" maxx="5854120.742134" maxy="124787.416673"/>
|
||||||
|
<BoundingBox CRS="EPSG:3857" minx="641869.116978" miny="6505861.593340" maxx="1053980.236458" maxy="6894655.542144"/>
|
||||||
|
<BoundingBox CRS="EPSG:102100" minx="641869.116978" miny="6505861.593340" maxx="1053980.236458" maxy="6894655.542144"/>
|
||||||
|
<BoundingBox CRS="EPSG:4258" minx="50.342833" miny="5.766008" maxx="52.519758" maxy="9.468066"/>
|
||||||
|
<BoundingBox CRS="EPSG:4647" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5818849.746600"/>
|
||||||
|
<BoundingBox CRS="EPSG:102362" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5818849.746600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5649" minx="31687850.523885" miny="5580808.041666" maxx="31958155.698507" maxy="5838430.834726"/>
|
||||||
|
<BoundingBox CRS="EPSG:5650" minx="32853928.925159" miny="5595966.573682" maxx="33124787.416673" maxy="5854120.742134"/>
|
||||||
|
<BoundingBox CRS="EPSG:5651" minx="31687850.523885" miny="5580808.041666" maxx="31958155.698507" maxy="5838430.834726"/>
|
||||||
|
<BoundingBox CRS="EPSG:5652" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5818849.746600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5653" minx="32853928.925159" miny="5595966.573682" maxx="33124787.416673" maxy="5854120.742134"/>
|
||||||
|
<BoundingBox CRS="EPSG:25831" minx="687850.523885" miny="5580808.041666" maxx="958155.698507" maxy="5838430.834726"/>
|
||||||
|
<BoundingBox CRS="EPSG:25833" minx="-146071.074841" miny="5595966.573682" maxx="124787.416673" maxy="5854120.742134"/>
|
||||||
|
<BoundingBox CRS="EPSG:28992" minx="180704.021066" miny="261420.508086" maxx="443608.161222" maxy="511154.275308"/>
|
||||||
|
<BoundingBox CRS="EPSG:31466" minx="5578412.972602" miny="2484102.714759" maxx="5826131.056108" maxy="2745089.297693"/>
|
||||||
|
<BoundingBox CRS="EPSG:31462" minx="5578412.972602" miny="2484102.714759" maxx="5826131.056108" maxy="2745089.297693"/>
|
||||||
|
<BoundingBox CRS="EPSG:31467" minx="5582967.334653" miny="3280313.877032" maxx="5820578.707326" maxy="3531768.891117"/>
|
||||||
|
<BoundingBox CRS="EPSG:31463" minx="5582967.334653" miny="3280313.877032" maxx="5820578.707326" maxy="3531768.891117"/>
|
||||||
|
<Layer queryable="1">
|
||||||
|
<Title><![CDATA[Sonstige Überschwemmungsgebiete]]></Title>
|
||||||
|
<Abstract><![CDATA[]]></Abstract>
|
||||||
|
<CRS>CRS:84</CRS>
|
||||||
|
<CRS>EPSG:4326</CRS>
|
||||||
|
<CRS>EPSG:25832</CRS>
|
||||||
|
<CRS>EPSG:3034</CRS>
|
||||||
|
<CRS>EPSG:3035</CRS>
|
||||||
|
<CRS>EPSG:3043</CRS>
|
||||||
|
<CRS>EPSG:3044</CRS>
|
||||||
|
<CRS>EPSG:3045</CRS>
|
||||||
|
<CRS>EPSG:3857</CRS>
|
||||||
|
<!-- alias 3857 -->
|
||||||
|
<CRS>EPSG:102100</CRS>
|
||||||
|
<CRS>EPSG:4258</CRS>
|
||||||
|
<CRS>EPSG:4647</CRS>
|
||||||
|
<!-- alias 4647 -->
|
||||||
|
<CRS>EPSG:102362</CRS>
|
||||||
|
<CRS>EPSG:5649</CRS>
|
||||||
|
<CRS>EPSG:5650</CRS>
|
||||||
|
<CRS>EPSG:5651</CRS>
|
||||||
|
<CRS>EPSG:5652</CRS>
|
||||||
|
<CRS>EPSG:5653</CRS>
|
||||||
|
<CRS>EPSG:25831</CRS>
|
||||||
|
<CRS>EPSG:25833</CRS>
|
||||||
|
<CRS>EPSG:28992</CRS>
|
||||||
|
<CRS>EPSG:31466</CRS>
|
||||||
|
<!-- alias 31466 -->
|
||||||
|
<CRS>EPSG:31462</CRS>
|
||||||
|
<CRS>EPSG:31467</CRS>
|
||||||
|
<!-- alias 31467 -->
|
||||||
|
<CRS>EPSG:31463</CRS>
|
||||||
|
<EX_GeographicBoundingBox><westBoundLongitude>5.766008</westBoundLongitude><eastBoundLongitude>9.468066</eastBoundLongitude><southBoundLatitude>50.342833</southBoundLatitude><northBoundLatitude>52.519758</northBoundLatitude></EX_GeographicBoundingBox>
|
||||||
|
<BoundingBox CRS="CRS:84" minx="5.766008" miny="50.342833" maxx="9.468066" maxy="52.519758"/>
|
||||||
|
<BoundingBox CRS="EPSG:4326" minx="50.342833" miny="5.766008" maxx="52.519758" maxy="9.468066"/>
|
||||||
|
<BoundingBox CRS="EPSG:25832" minx="280374.968000" miny="5581306.307300" maxx="531760.056900" maxy="5818849.746600"/>
|
||||||
|
<BoundingBox CRS="EPSG:3034" minx="2626418.448171" miny="3719216.543717" maxx="2859070.918053" maxy="3965118.138104"/>
|
||||||
|
<BoundingBox CRS="EPSG:3035" minx="3030252.493646" miny="4030235.136442" maxx="3271281.371938" maxy="4284891.291766"/>
|
||||||
|
<BoundingBox CRS="EPSG:3043" minx="5580808.041666" miny="687850.523885" maxx="5838430.834726" maxy="958155.698507"/>
|
||||||
|
<BoundingBox CRS="EPSG:3044" minx="5581306.307300" miny="280374.968000" maxx="5818849.746600" maxy="531760.056900"/>
|
||||||
|
<BoundingBox CRS="EPSG:3045" minx="5595966.573682" miny="-146071.074841" maxx="5854120.742134" maxy="124787.416673"/>
|
||||||
|
<BoundingBox CRS="EPSG:3857" minx="641869.116978" miny="6505861.593340" maxx="1053980.236458" maxy="6894655.542144"/>
|
||||||
|
<BoundingBox CRS="EPSG:102100" minx="641869.116978" miny="6505861.593340" maxx="1053980.236458" maxy="6894655.542144"/>
|
||||||
|
<BoundingBox CRS="EPSG:4258" minx="50.342833" miny="5.766008" maxx="52.519758" maxy="9.468066"/>
|
||||||
|
<BoundingBox CRS="EPSG:4647" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5818849.746600"/>
|
||||||
|
<BoundingBox CRS="EPSG:102362" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5818849.746600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5649" minx="31687850.523885" miny="5580808.041666" maxx="31958155.698507" maxy="5838430.834726"/>
|
||||||
|
<BoundingBox CRS="EPSG:5650" minx="32853928.925159" miny="5595966.573682" maxx="33124787.416673" maxy="5854120.742134"/>
|
||||||
|
<BoundingBox CRS="EPSG:5651" minx="31687850.523885" miny="5580808.041666" maxx="31958155.698507" maxy="5838430.834726"/>
|
||||||
|
<BoundingBox CRS="EPSG:5652" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5818849.746600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5653" minx="32853928.925159" miny="5595966.573682" maxx="33124787.416673" maxy="5854120.742134"/>
|
||||||
|
<BoundingBox CRS="EPSG:25831" minx="687850.523885" miny="5580808.041666" maxx="958155.698507" maxy="5838430.834726"/>
|
||||||
|
<BoundingBox CRS="EPSG:25833" minx="-146071.074841" miny="5595966.573682" maxx="124787.416673" maxy="5854120.742134"/>
|
||||||
|
<BoundingBox CRS="EPSG:28992" minx="180704.021066" miny="261420.508086" maxx="443608.161222" maxy="511154.275308"/>
|
||||||
|
<BoundingBox CRS="EPSG:31466" minx="5578412.972602" miny="2484102.714759" maxx="5826131.056108" maxy="2745089.297693"/>
|
||||||
|
<BoundingBox CRS="EPSG:31462" minx="5578412.972602" miny="2484102.714759" maxx="5826131.056108" maxy="2745089.297693"/>
|
||||||
|
<BoundingBox CRS="EPSG:31467" minx="5582967.334653" miny="3280313.877032" maxx="5820578.707326" maxy="3531768.891117"/>
|
||||||
|
<BoundingBox CRS="EPSG:31463" minx="5582967.334653" miny="3280313.877032" maxx="5820578.707326" maxy="3531768.891117"/>
|
||||||
|
<Layer queryable="1">
|
||||||
|
<Name>1</Name>
|
||||||
|
<Title><![CDATA[Rückgewinnbare Rückhalteflächen]]></Title>
|
||||||
|
<Abstract><![CDATA[]]></Abstract>
|
||||||
|
<CRS>CRS:84</CRS>
|
||||||
|
<CRS>EPSG:4326</CRS>
|
||||||
|
<CRS>EPSG:25832</CRS>
|
||||||
|
<CRS>EPSG:3034</CRS>
|
||||||
|
<CRS>EPSG:3035</CRS>
|
||||||
|
<CRS>EPSG:3043</CRS>
|
||||||
|
<CRS>EPSG:3044</CRS>
|
||||||
|
<CRS>EPSG:3045</CRS>
|
||||||
|
<CRS>EPSG:3857</CRS>
|
||||||
|
<!-- alias 3857 -->
|
||||||
|
<CRS>EPSG:102100</CRS>
|
||||||
|
<CRS>EPSG:4258</CRS>
|
||||||
|
<CRS>EPSG:4647</CRS>
|
||||||
|
<!-- alias 4647 -->
|
||||||
|
<CRS>EPSG:102362</CRS>
|
||||||
|
<CRS>EPSG:5649</CRS>
|
||||||
|
<CRS>EPSG:5650</CRS>
|
||||||
|
<CRS>EPSG:5651</CRS>
|
||||||
|
<CRS>EPSG:5652</CRS>
|
||||||
|
<CRS>EPSG:5653</CRS>
|
||||||
|
<CRS>EPSG:25831</CRS>
|
||||||
|
<CRS>EPSG:25833</CRS>
|
||||||
|
<CRS>EPSG:28992</CRS>
|
||||||
|
<CRS>EPSG:31466</CRS>
|
||||||
|
<!-- alias 31466 -->
|
||||||
|
<CRS>EPSG:31462</CRS>
|
||||||
|
<CRS>EPSG:31467</CRS>
|
||||||
|
<!-- alias 31467 -->
|
||||||
|
<CRS>EPSG:31463</CRS>
|
||||||
|
<EX_GeographicBoundingBox><westBoundLongitude>5.767005</westBoundLongitude><eastBoundLongitude>9.467921</eastBoundLongitude><southBoundLatitude>50.342833</southBoundLatitude><northBoundLatitude>52.506148</northBoundLatitude></EX_GeographicBoundingBox>
|
||||||
|
<BoundingBox CRS="CRS:84" minx="5.767005" miny="50.342833" maxx="9.467921" maxy="52.506148"/>
|
||||||
|
<BoundingBox CRS="EPSG:4326" minx="50.342833" miny="5.767005" maxx="52.506148" maxy="9.467921"/>
|
||||||
|
<BoundingBox CRS="EPSG:25832" minx="280374.968000" miny="5581306.307300" maxx="531760.056900" maxy="5817335.818600"/>
|
||||||
|
<BoundingBox CRS="EPSG:3034" minx="2626418.448171" miny="3719216.543717" maxx="2857608.834051" maxy="3965098.122561"/>
|
||||||
|
<BoundingBox CRS="EPSG:3035" minx="3030252.493646" miny="4030235.136442" maxx="3269767.520179" maxy="4284870.346137"/>
|
||||||
|
<BoundingBox CRS="EPSG:3043" minx="5580808.041666" miny="687976.127217" maxx="5836918.599953" maxy="958155.698507"/>
|
||||||
|
<BoundingBox CRS="EPSG:3044" minx="5581306.307300" miny="280374.968000" maxx="5817335.818600" maxy="531760.056900"/>
|
||||||
|
<BoundingBox CRS="EPSG:3045" minx="5595966.573682" miny="-146071.074841" maxx="5852605.701367" maxy="124661.414182"/>
|
||||||
|
<BoundingBox CRS="EPSG:3857" minx="641980.088463" miny="6505861.593340" maxx="1053964.141781" maxy="6892165.966479"/>
|
||||||
|
<BoundingBox CRS="EPSG:102100" minx="641980.088463" miny="6505861.593340" maxx="1053964.141781" maxy="6892165.966479"/>
|
||||||
|
<BoundingBox CRS="EPSG:4258" minx="50.342833" miny="5.767005" maxx="52.506148" maxy="9.467921"/>
|
||||||
|
<BoundingBox CRS="EPSG:4647" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5817335.818600"/>
|
||||||
|
<BoundingBox CRS="EPSG:102362" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5817335.818600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5649" minx="31687976.127217" miny="5580808.041666" maxx="31958155.698507" maxy="5836918.599953"/>
|
||||||
|
<BoundingBox CRS="EPSG:5650" minx="32853928.925159" miny="5595966.573682" maxx="33124661.414182" maxy="5852605.701367"/>
|
||||||
|
<BoundingBox CRS="EPSG:5651" minx="31687976.127217" miny="5580808.041666" maxx="31958155.698507" maxy="5836918.599953"/>
|
||||||
|
<BoundingBox CRS="EPSG:5652" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5817335.818600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5653" minx="32853928.925159" miny="5595966.573682" maxx="33124661.414182" maxy="5852605.701367"/>
|
||||||
|
<BoundingBox CRS="EPSG:25831" minx="687976.127217" miny="5580808.041666" maxx="958155.698507" maxy="5836918.599953"/>
|
||||||
|
<BoundingBox CRS="EPSG:25833" minx="-146071.074841" miny="5595966.573682" maxx="124661.414182" maxy="5852605.701367"/>
|
||||||
|
<BoundingBox CRS="EPSG:28992" minx="180779.663459" miny="261420.508086" maxx="443608.161222" maxy="509641.226162"/>
|
||||||
|
<BoundingBox CRS="EPSG:31466" minx="5578412.972602" miny="2484165.566016" maxx="5824616.994221" maxy="2745089.297693"/>
|
||||||
|
<BoundingBox CRS="EPSG:31462" minx="5578412.972602" miny="2484165.566016" maxx="5824616.994221" maxy="2745089.297693"/>
|
||||||
|
<BoundingBox CRS="EPSG:31467" minx="5582967.334653" miny="3280313.877032" maxx="5819064.347428" maxy="3531768.891117"/>
|
||||||
|
<BoundingBox CRS="EPSG:31463" minx="5582967.334653" miny="3280313.877032" maxx="5819064.347428" maxy="3531768.891117"/>
|
||||||
|
<Style>
|
||||||
|
<Name>default</Name>
|
||||||
|
<Title><![CDATA[Rückgewinnbare Rückhalteflächen]]></Title>
|
||||||
|
<LegendURL width="18" height="18">
|
||||||
|
<Format>image/png</Format>
|
||||||
|
<OnlineResource xlink:href="https://www.wms.nrw.de/umwelt/wasser/uesg?request=GetLegendGraphic%26version=1.3.0%26format=image/png%26layer=1" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" />
|
||||||
|
</LegendURL>
|
||||||
|
</Style>
|
||||||
|
</Layer>
|
||||||
|
<Layer queryable="1">
|
||||||
|
<Name>2</Name>
|
||||||
|
<Title><![CDATA[Überflutetes Gebiet]]></Title>
|
||||||
|
<Abstract><![CDATA[]]></Abstract>
|
||||||
|
<CRS>CRS:84</CRS>
|
||||||
|
<CRS>EPSG:4326</CRS>
|
||||||
|
<CRS>EPSG:25832</CRS>
|
||||||
|
<CRS>EPSG:3034</CRS>
|
||||||
|
<CRS>EPSG:3035</CRS>
|
||||||
|
<CRS>EPSG:3043</CRS>
|
||||||
|
<CRS>EPSG:3044</CRS>
|
||||||
|
<CRS>EPSG:3045</CRS>
|
||||||
|
<CRS>EPSG:3857</CRS>
|
||||||
|
<!-- alias 3857 -->
|
||||||
|
<CRS>EPSG:102100</CRS>
|
||||||
|
<CRS>EPSG:4258</CRS>
|
||||||
|
<CRS>EPSG:4647</CRS>
|
||||||
|
<!-- alias 4647 -->
|
||||||
|
<CRS>EPSG:102362</CRS>
|
||||||
|
<CRS>EPSG:5649</CRS>
|
||||||
|
<CRS>EPSG:5650</CRS>
|
||||||
|
<CRS>EPSG:5651</CRS>
|
||||||
|
<CRS>EPSG:5652</CRS>
|
||||||
|
<CRS>EPSG:5653</CRS>
|
||||||
|
<CRS>EPSG:25831</CRS>
|
||||||
|
<CRS>EPSG:25833</CRS>
|
||||||
|
<CRS>EPSG:28992</CRS>
|
||||||
|
<CRS>EPSG:31466</CRS>
|
||||||
|
<!-- alias 31466 -->
|
||||||
|
<CRS>EPSG:31462</CRS>
|
||||||
|
<CRS>EPSG:31467</CRS>
|
||||||
|
<!-- alias 31467 -->
|
||||||
|
<CRS>EPSG:31463</CRS>
|
||||||
|
<EX_GeographicBoundingBox><westBoundLongitude>5.767005</westBoundLongitude><eastBoundLongitude>9.467921</eastBoundLongitude><southBoundLatitude>50.342833</southBoundLatitude><northBoundLatitude>52.506148</northBoundLatitude></EX_GeographicBoundingBox>
|
||||||
|
<BoundingBox CRS="CRS:84" minx="5.767005" miny="50.342833" maxx="9.467921" maxy="52.506148"/>
|
||||||
|
<BoundingBox CRS="EPSG:4326" minx="50.342833" miny="5.767005" maxx="52.506148" maxy="9.467921"/>
|
||||||
|
<BoundingBox CRS="EPSG:25832" minx="280374.968000" miny="5581306.307300" maxx="531760.056900" maxy="5817335.818600"/>
|
||||||
|
<BoundingBox CRS="EPSG:3034" minx="2626418.448171" miny="3719216.543717" maxx="2857608.834051" maxy="3965098.122561"/>
|
||||||
|
<BoundingBox CRS="EPSG:3035" minx="3030252.493646" miny="4030235.136442" maxx="3269767.520179" maxy="4284870.346137"/>
|
||||||
|
<BoundingBox CRS="EPSG:3043" minx="5580808.041666" miny="687976.127217" maxx="5836918.599953" maxy="958155.698507"/>
|
||||||
|
<BoundingBox CRS="EPSG:3044" minx="5581306.307300" miny="280374.968000" maxx="5817335.818600" maxy="531760.056900"/>
|
||||||
|
<BoundingBox CRS="EPSG:3045" minx="5595966.573682" miny="-146071.074841" maxx="5852605.701367" maxy="124661.414182"/>
|
||||||
|
<BoundingBox CRS="EPSG:3857" minx="641980.088463" miny="6505861.593340" maxx="1053964.141781" maxy="6892165.966479"/>
|
||||||
|
<BoundingBox CRS="EPSG:102100" minx="641980.088463" miny="6505861.593340" maxx="1053964.141781" maxy="6892165.966479"/>
|
||||||
|
<BoundingBox CRS="EPSG:4258" minx="50.342833" miny="5.767005" maxx="52.506148" maxy="9.467921"/>
|
||||||
|
<BoundingBox CRS="EPSG:4647" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5817335.818600"/>
|
||||||
|
<BoundingBox CRS="EPSG:102362" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5817335.818600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5649" minx="31687976.127217" miny="5580808.041666" maxx="31958155.698507" maxy="5836918.599953"/>
|
||||||
|
<BoundingBox CRS="EPSG:5650" minx="32853928.925159" miny="5595966.573682" maxx="33124661.414182" maxy="5852605.701367"/>
|
||||||
|
<BoundingBox CRS="EPSG:5651" minx="31687976.127217" miny="5580808.041666" maxx="31958155.698507" maxy="5836918.599953"/>
|
||||||
|
<BoundingBox CRS="EPSG:5652" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5817335.818600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5653" minx="32853928.925159" miny="5595966.573682" maxx="33124661.414182" maxy="5852605.701367"/>
|
||||||
|
<BoundingBox CRS="EPSG:25831" minx="687976.127217" miny="5580808.041666" maxx="958155.698507" maxy="5836918.599953"/>
|
||||||
|
<BoundingBox CRS="EPSG:25833" minx="-146071.074841" miny="5595966.573682" maxx="124661.414182" maxy="5852605.701367"/>
|
||||||
|
<BoundingBox CRS="EPSG:28992" minx="180779.663459" miny="261420.508086" maxx="443608.161222" maxy="509641.226162"/>
|
||||||
|
<BoundingBox CRS="EPSG:31466" minx="5578412.972602" miny="2484165.566016" maxx="5824616.994221" maxy="2745089.297693"/>
|
||||||
|
<BoundingBox CRS="EPSG:31462" minx="5578412.972602" miny="2484165.566016" maxx="5824616.994221" maxy="2745089.297693"/>
|
||||||
|
<BoundingBox CRS="EPSG:31467" minx="5582967.334653" miny="3280313.877032" maxx="5819064.347428" maxy="3531768.891117"/>
|
||||||
|
<BoundingBox CRS="EPSG:31463" minx="5582967.334653" miny="3280313.877032" maxx="5819064.347428" maxy="3531768.891117"/>
|
||||||
|
<Style>
|
||||||
|
<Name>default</Name>
|
||||||
|
<Title><![CDATA[Überflutetes Gebiet]]></Title>
|
||||||
|
<LegendURL width="18" height="18">
|
||||||
|
<Format>image/png</Format>
|
||||||
|
<OnlineResource xlink:href="https://www.wms.nrw.de/umwelt/wasser/uesg?request=GetLegendGraphic%26version=1.3.0%26format=image/png%26layer=2" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" />
|
||||||
|
</LegendURL>
|
||||||
|
</Style>
|
||||||
|
</Layer>
|
||||||
|
<Layer queryable="1">
|
||||||
|
<Name>3</Name>
|
||||||
|
<Title><![CDATA[Ermittelte Überschwemmungsgebiete]]></Title>
|
||||||
|
<Abstract><![CDATA[]]></Abstract>
|
||||||
|
<CRS>CRS:84</CRS>
|
||||||
|
<CRS>EPSG:4326</CRS>
|
||||||
|
<CRS>EPSG:25832</CRS>
|
||||||
|
<CRS>EPSG:3034</CRS>
|
||||||
|
<CRS>EPSG:3035</CRS>
|
||||||
|
<CRS>EPSG:3043</CRS>
|
||||||
|
<CRS>EPSG:3044</CRS>
|
||||||
|
<CRS>EPSG:3045</CRS>
|
||||||
|
<CRS>EPSG:3857</CRS>
|
||||||
|
<!-- alias 3857 -->
|
||||||
|
<CRS>EPSG:102100</CRS>
|
||||||
|
<CRS>EPSG:4258</CRS>
|
||||||
|
<CRS>EPSG:4647</CRS>
|
||||||
|
<!-- alias 4647 -->
|
||||||
|
<CRS>EPSG:102362</CRS>
|
||||||
|
<CRS>EPSG:5649</CRS>
|
||||||
|
<CRS>EPSG:5650</CRS>
|
||||||
|
<CRS>EPSG:5651</CRS>
|
||||||
|
<CRS>EPSG:5652</CRS>
|
||||||
|
<CRS>EPSG:5653</CRS>
|
||||||
|
<CRS>EPSG:25831</CRS>
|
||||||
|
<CRS>EPSG:25833</CRS>
|
||||||
|
<CRS>EPSG:28992</CRS>
|
||||||
|
<CRS>EPSG:31466</CRS>
|
||||||
|
<!-- alias 31466 -->
|
||||||
|
<CRS>EPSG:31462</CRS>
|
||||||
|
<CRS>EPSG:31467</CRS>
|
||||||
|
<!-- alias 31467 -->
|
||||||
|
<CRS>EPSG:31463</CRS>
|
||||||
|
<EX_GeographicBoundingBox><westBoundLongitude>6.010924</westBoundLongitude><eastBoundLongitude>7.948934</eastBoundLongitude><southBoundLatitude>50.817050</southBoundLatitude><northBoundLatitude>51.970984</northBoundLatitude></EX_GeographicBoundingBox>
|
||||||
|
<BoundingBox CRS="CRS:84" minx="6.010924" miny="50.817050" maxx="7.948934" maxy="51.970984"/>
|
||||||
|
<BoundingBox CRS="EPSG:4326" minx="50.817050" miny="6.010924" maxx="51.970984" maxy="7.948934"/>
|
||||||
|
<BoundingBox CRS="EPSG:25832" minx="294537.049800" miny="5633536.000000" maxx="426008.504600" maxy="5758358.821600"/>
|
||||||
|
<BoundingBox CRS="EPSG:3034" minx="2678250.421596" miny="3733577.849043" maxx="2800482.491351" maxy="3862153.777909"/>
|
||||||
|
<BoundingBox CRS="EPSG:3035" minx="3083945.109983" miny="4045107.030105" maxx="3210599.967973" maxy="4178277.836017"/>
|
||||||
|
<BoundingBox CRS="EPSG:3043" minx="5634011.546946" miny="706964.434276" maxx="5769263.820826" maxy="848304.376712"/>
|
||||||
|
<BoundingBox CRS="EPSG:3044" minx="5633536.000000" miny="294537.049800" maxx="5758358.821600" maxy="426008.504600"/>
|
||||||
|
<BoundingBox CRS="EPSG:3045" minx="5656737.177529" miny="-127633.465949" maxx="5792404.841063" maxy="14137.570257"/>
|
||||||
|
<BoundingBox CRS="EPSG:3857" minx="669133.021159" miny="6588995.576788" maxx="884871.308527" maxy="6794880.649963"/>
|
||||||
|
<BoundingBox CRS="EPSG:102100" minx="669133.021159" miny="6588995.576788" maxx="884871.308527" maxy="6794880.649963"/>
|
||||||
|
<BoundingBox CRS="EPSG:4258" minx="50.817050" miny="6.010924" maxx="51.970984" maxy="7.948934"/>
|
||||||
|
<BoundingBox CRS="EPSG:4647" minx="32294537.049800" miny="5633536.000000" maxx="32426008.504600" maxy="5758358.821600"/>
|
||||||
|
<BoundingBox CRS="EPSG:102362" minx="32294537.049800" miny="5633536.000000" maxx="32426008.504600" maxy="5758358.821600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5649" minx="31706964.434276" miny="5634011.546946" maxx="31848304.376712" maxy="5769263.820826"/>
|
||||||
|
<BoundingBox CRS="EPSG:5650" minx="32872366.534051" miny="5656737.177529" maxx="33014137.570257" maxy="5792404.841063"/>
|
||||||
|
<BoundingBox CRS="EPSG:5651" minx="31706964.434276" miny="5634011.546946" maxx="31848304.376712" maxy="5769263.820826"/>
|
||||||
|
<BoundingBox CRS="EPSG:5652" minx="32294537.049800" miny="5633536.000000" maxx="32426008.504600" maxy="5758358.821600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5653" minx="32872366.534051" miny="5656737.177529" maxx="33014137.570257" maxy="5792404.841063"/>
|
||||||
|
<BoundingBox CRS="EPSG:25831" minx="706964.434276" miny="5634011.546946" maxx="848304.376712" maxy="5769263.820826"/>
|
||||||
|
<BoundingBox CRS="EPSG:25833" minx="-127633.465949" miny="5656737.177529" maxx="14137.570257" maxy="5792404.841063"/>
|
||||||
|
<BoundingBox CRS="EPSG:28992" minx="197855.755926" miny="314270.561853" maxx="335340.417493" maxy="445439.452721"/>
|
||||||
|
<BoundingBox CRS="EPSG:31466" minx="5631158.631497" miny="2500751.197351" maxx="5761269.162862" maxy="2637232.773075"/>
|
||||||
|
<BoundingBox CRS="EPSG:31462" minx="5631158.631497" miny="2500751.197351" maxx="5761269.162862" maxy="2637232.773075"/>
|
||||||
|
<BoundingBox CRS="EPSG:31467" minx="5635211.983296" miny="3294479.914942" maxx="5760070.513610" maxy="3425987.933036"/>
|
||||||
|
<BoundingBox CRS="EPSG:31463" minx="5635211.983296" miny="3294479.914942" maxx="5760070.513610" maxy="3425987.933036"/>
|
||||||
|
<Style>
|
||||||
|
<Name>default</Name>
|
||||||
|
<Title><![CDATA[Ermittelte Überschwemmungsgebiete]]></Title>
|
||||||
|
<LegendURL width="18" height="18">
|
||||||
|
<Format>image/png</Format>
|
||||||
|
<OnlineResource xlink:href="https://www.wms.nrw.de/umwelt/wasser/uesg?request=GetLegendGraphic%26version=1.3.0%26format=image/png%26layer=3" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" />
|
||||||
|
</LegendURL>
|
||||||
|
</Style>
|
||||||
|
</Layer>
|
||||||
|
<Layer queryable="1">
|
||||||
|
<Name>4</Name>
|
||||||
|
<Title><![CDATA[Überschwemmungsgebiet preuss. Aufnahme]]></Title>
|
||||||
|
<Abstract><![CDATA[]]></Abstract>
|
||||||
|
<CRS>CRS:84</CRS>
|
||||||
|
<CRS>EPSG:4326</CRS>
|
||||||
|
<CRS>EPSG:25832</CRS>
|
||||||
|
<CRS>EPSG:3034</CRS>
|
||||||
|
<CRS>EPSG:3035</CRS>
|
||||||
|
<CRS>EPSG:3043</CRS>
|
||||||
|
<CRS>EPSG:3044</CRS>
|
||||||
|
<CRS>EPSG:3045</CRS>
|
||||||
|
<CRS>EPSG:3857</CRS>
|
||||||
|
<!-- alias 3857 -->
|
||||||
|
<CRS>EPSG:102100</CRS>
|
||||||
|
<CRS>EPSG:4258</CRS>
|
||||||
|
<CRS>EPSG:4647</CRS>
|
||||||
|
<!-- alias 4647 -->
|
||||||
|
<CRS>EPSG:102362</CRS>
|
||||||
|
<CRS>EPSG:5649</CRS>
|
||||||
|
<CRS>EPSG:5650</CRS>
|
||||||
|
<CRS>EPSG:5651</CRS>
|
||||||
|
<CRS>EPSG:5652</CRS>
|
||||||
|
<CRS>EPSG:5653</CRS>
|
||||||
|
<CRS>EPSG:25831</CRS>
|
||||||
|
<CRS>EPSG:25833</CRS>
|
||||||
|
<CRS>EPSG:28992</CRS>
|
||||||
|
<CRS>EPSG:31466</CRS>
|
||||||
|
<!-- alias 31466 -->
|
||||||
|
<CRS>EPSG:31462</CRS>
|
||||||
|
<CRS>EPSG:31467</CRS>
|
||||||
|
<!-- alias 31467 -->
|
||||||
|
<CRS>EPSG:31463</CRS>
|
||||||
|
<EX_GeographicBoundingBox><westBoundLongitude>6.243344</westBoundLongitude><eastBoundLongitude>9.420324</eastBoundLongitude><southBoundLatitude>50.681060</southBoundLatitude><northBoundLatitude>52.519758</northBoundLatitude></EX_GeographicBoundingBox>
|
||||||
|
<BoundingBox CRS="CRS:84" minx="6.243344" miny="50.681060" maxx="9.420324" maxy="52.519758"/>
|
||||||
|
<BoundingBox CRS="EPSG:4326" minx="50.681060" miny="6.243344" maxx="52.519758" maxy="9.420324"/>
|
||||||
|
<BoundingBox CRS="EPSG:25832" minx="312835.841500" miny="5617707.345000" maxx="528520.524700" maxy="5818849.746600"/>
|
||||||
|
<BoundingBox CRS="EPSG:3034" minx="2661621.349239" miny="3751037.298693" maxx="2858676.192334" maxy="3961987.691298"/>
|
||||||
|
<BoundingBox CRS="EPSG:3035" minx="3066706.583632" miny="4063182.470041" maxx="3270845.765182" maxy="4281650.758123"/>
|
||||||
|
<BoundingBox CRS="EPSG:3043" minx="5619715.508548" miny="720199.514867" maxx="5838160.854563" maxy="951965.654395"/>
|
||||||
|
<BoundingBox CRS="EPSG:3044" minx="5617707.345000" miny="312835.841500" maxx="5818849.746600" maxy="528520.524700"/>
|
||||||
|
<BoundingBox CRS="EPSG:3045" minx="5632579.967551" miny="-110611.464581" maxx="5851404.737937" maxy="121553.493363"/>
|
||||||
|
<BoundingBox CRS="EPSG:3857" minx="695005.824493" miny="6565069.709879" maxx="1048665.698691" maxy="6894655.541776"/>
|
||||||
|
<BoundingBox CRS="EPSG:102100" minx="695005.824493" miny="6565069.709879" maxx="1048665.698691" maxy="6894655.541776"/>
|
||||||
|
<BoundingBox CRS="EPSG:4258" minx="50.681060" miny="6.243344" maxx="52.519758" maxy="9.420324"/>
|
||||||
|
<BoundingBox CRS="EPSG:4647" minx="32312835.841500" miny="5617707.345000" maxx="32528520.524700" maxy="5818849.746600"/>
|
||||||
|
<BoundingBox CRS="EPSG:102362" minx="32312835.841500" miny="5617707.345000" maxx="32528520.524700" maxy="5818849.746600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5649" minx="31720199.514867" miny="5619715.508548" maxx="31951965.654395" maxy="5838160.854563"/>
|
||||||
|
<BoundingBox CRS="EPSG:5650" minx="32889388.535419" miny="5632579.967551" maxx="33121553.493363" maxy="5851404.737937"/>
|
||||||
|
<BoundingBox CRS="EPSG:5651" minx="31720199.514867" miny="5619715.508548" maxx="31951965.654395" maxy="5838160.854563"/>
|
||||||
|
<BoundingBox CRS="EPSG:5652" minx="32312835.841500" miny="5617707.345000" maxx="32528520.524700" maxy="5818849.746600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5653" minx="32889388.535419" miny="5632579.967551" maxx="33121553.493363" maxy="5851404.737937"/>
|
||||||
|
<BoundingBox CRS="EPSG:25831" minx="720199.514867" miny="5619715.508548" maxx="951965.654395" maxy="5838160.854563"/>
|
||||||
|
<BoundingBox CRS="EPSG:25833" minx="-110611.464581" miny="5632579.967551" maxx="121553.493363" maxy="5851404.737937"/>
|
||||||
|
<BoundingBox CRS="EPSG:28992" minx="213114.472811" miny="299357.810097" maxx="438573.671653" maxy="510992.571211"/>
|
||||||
|
<BoundingBox CRS="EPSG:31466" minx="5616087.740091" miny="2516528.116664" maxx="5825996.295665" maxy="2740375.657973"/>
|
||||||
|
<BoundingBox CRS="EPSG:31462" minx="5616087.740091" miny="2516528.116664" maxx="5825996.295665" maxy="2740375.657973"/>
|
||||||
|
<BoundingBox CRS="EPSG:31467" minx="5619378.804109" miny="3312783.790711" maxx="5820578.707572" maxy="3528528.456212"/>
|
||||||
|
<BoundingBox CRS="EPSG:31463" minx="5619378.804109" miny="3312783.790711" maxx="5820578.707572" maxy="3528528.456212"/>
|
||||||
|
<Style>
|
||||||
|
<Name>default</Name>
|
||||||
|
<Title><![CDATA[Überschwemmungsgebiet preuss. Aufnahme]]></Title>
|
||||||
|
<LegendURL width="18" height="18">
|
||||||
|
<Format>image/png</Format>
|
||||||
|
<OnlineResource xlink:href="https://www.wms.nrw.de/umwelt/wasser/uesg?request=GetLegendGraphic%26version=1.3.0%26format=image/png%26layer=4" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" />
|
||||||
|
</LegendURL>
|
||||||
|
</Style>
|
||||||
|
</Layer>
|
||||||
|
</Layer>
|
||||||
|
<Layer queryable="1">
|
||||||
|
<Name>5</Name>
|
||||||
|
<Title><![CDATA[vorläufig gesicherte Überschwemmungsgebiete]]></Title>
|
||||||
|
<Abstract><![CDATA[]]></Abstract>
|
||||||
|
<CRS>CRS:84</CRS>
|
||||||
|
<CRS>EPSG:4326</CRS>
|
||||||
|
<CRS>EPSG:25832</CRS>
|
||||||
|
<CRS>EPSG:3034</CRS>
|
||||||
|
<CRS>EPSG:3035</CRS>
|
||||||
|
<CRS>EPSG:3043</CRS>
|
||||||
|
<CRS>EPSG:3044</CRS>
|
||||||
|
<CRS>EPSG:3045</CRS>
|
||||||
|
<CRS>EPSG:3857</CRS>
|
||||||
|
<!-- alias 3857 -->
|
||||||
|
<CRS>EPSG:102100</CRS>
|
||||||
|
<CRS>EPSG:4258</CRS>
|
||||||
|
<CRS>EPSG:4647</CRS>
|
||||||
|
<!-- alias 4647 -->
|
||||||
|
<CRS>EPSG:102362</CRS>
|
||||||
|
<CRS>EPSG:5649</CRS>
|
||||||
|
<CRS>EPSG:5650</CRS>
|
||||||
|
<CRS>EPSG:5651</CRS>
|
||||||
|
<CRS>EPSG:5652</CRS>
|
||||||
|
<CRS>EPSG:5653</CRS>
|
||||||
|
<CRS>EPSG:25831</CRS>
|
||||||
|
<CRS>EPSG:25833</CRS>
|
||||||
|
<CRS>EPSG:28992</CRS>
|
||||||
|
<CRS>EPSG:31466</CRS>
|
||||||
|
<!-- alias 31466 -->
|
||||||
|
<CRS>EPSG:31462</CRS>
|
||||||
|
<CRS>EPSG:31467</CRS>
|
||||||
|
<!-- alias 31467 -->
|
||||||
|
<CRS>EPSG:31463</CRS>
|
||||||
|
<EX_GeographicBoundingBox><westBoundLongitude>5.974238</westBoundLongitude><eastBoundLongitude>8.863744</eastBoundLongitude><southBoundLatitude>50.492330</southBoundLatitude><northBoundLatitude>52.519339</northBoundLatitude></EX_GeographicBoundingBox>
|
||||||
|
<BoundingBox CRS="CRS:84" minx="5.974238" miny="50.492330" maxx="8.863744" maxy="52.519339"/>
|
||||||
|
<BoundingBox CRS="EPSG:4326" minx="50.492330" miny="5.974238" maxx="52.519339" maxy="8.863744"/>
|
||||||
|
<BoundingBox CRS="EPSG:25832" minx="294536.814500" miny="5597381.500000" maxx="490342.360800" maxy="5818812.667000"/>
|
||||||
|
<BoundingBox CRS="EPSG:3034" minx="2642487.037325" miny="3733102.092919" maxx="2858863.475934" maxy="3925094.247221"/>
|
||||||
|
<BoundingBox CRS="EPSG:3035" minx="3046895.936259" miny="4044611.230705" maxx="3271054.463204" maxy="4243460.187643"/>
|
||||||
|
<BoundingBox CRS="EPSG:3043" minx="5597973.136583" miny="701965.351261" maxx="5834943.435901" maxy="915474.816429"/>
|
||||||
|
<BoundingBox CRS="EPSG:3044" minx="5597381.500000" miny="294536.814500" maxx="5818812.667000" maxy="490342.360800"/>
|
||||||
|
<BoundingBox CRS="EPSG:3045" minx="5615375.730794" miny="-130584.858594" maxx="5852898.446297" maxy="83430.527450"/>
|
||||||
|
<BoundingBox CRS="EPSG:3857" minx="665049.185441" miny="6531979.370340" maxx="986707.473220" maxy="6894578.901701"/>
|
||||||
|
<BoundingBox CRS="EPSG:102100" minx="665049.185441" miny="6531979.370340" maxx="986707.473220" maxy="6894578.901701"/>
|
||||||
|
<BoundingBox CRS="EPSG:4258" minx="50.492330" miny="5.974238" maxx="52.519339" maxy="8.863744"/>
|
||||||
|
<BoundingBox CRS="EPSG:4647" minx="32294536.814500" miny="5597381.500000" maxx="32490342.360800" maxy="5818812.667000"/>
|
||||||
|
<BoundingBox CRS="EPSG:102362" minx="32294536.814500" miny="5597381.500000" maxx="32490342.360800" maxy="5818812.667000"/>
|
||||||
|
<BoundingBox CRS="EPSG:5649" minx="31701965.351261" miny="5597973.136583" maxx="31915474.816429" maxy="5834943.435901"/>
|
||||||
|
<BoundingBox CRS="EPSG:5650" minx="32869415.141406" miny="5615375.730794" maxx="33083430.527450" maxy="5852898.446297"/>
|
||||||
|
<BoundingBox CRS="EPSG:5651" minx="31701965.351261" miny="5597973.136583" maxx="31915474.816429" maxy="5834943.435901"/>
|
||||||
|
<BoundingBox CRS="EPSG:5652" minx="32294536.814500" miny="5597381.500000" maxx="32490342.360800" maxy="5818812.667000"/>
|
||||||
|
<BoundingBox CRS="EPSG:5653" minx="32869415.141406" miny="5615375.730794" maxx="33083430.527450" maxy="5852898.446297"/>
|
||||||
|
<BoundingBox CRS="EPSG:25831" minx="701965.351261" miny="5597973.136583" maxx="915474.816429" maxy="5834943.435901"/>
|
||||||
|
<BoundingBox CRS="EPSG:25833" minx="-130584.858594" miny="5615375.730794" maxx="83430.527450" maxy="5852898.446297"/>
|
||||||
|
<BoundingBox CRS="EPSG:28992" minx="194845.003427" miny="278164.193269" maxx="401414.461792" maxy="509049.598788"/>
|
||||||
|
<BoundingBox CRS="EPSG:31466" minx="5595042.148956" miny="2498249.978220" maxx="5824371.398980" maxy="2703018.666160"/>
|
||||||
|
<BoundingBox CRS="EPSG:31462" minx="5595042.148956" miny="2498249.978220" maxx="5824371.398980" maxy="2703018.666160"/>
|
||||||
|
<BoundingBox CRS="EPSG:31467" minx="5599047.135072" miny="3294479.668063" maxx="5820541.617816" maxy="3490339.675551"/>
|
||||||
|
<BoundingBox CRS="EPSG:31463" minx="5599047.135072" miny="3294479.668063" maxx="5820541.617816" maxy="3490339.675551"/>
|
||||||
|
<Style>
|
||||||
|
<Name>default</Name>
|
||||||
|
<Title><![CDATA[vorläufig gesicherte Überschwemmungsgebiete]]></Title>
|
||||||
|
<LegendURL width="18" height="18">
|
||||||
|
<Format>image/png</Format>
|
||||||
|
<OnlineResource xlink:href="https://www.wms.nrw.de/umwelt/wasser/uesg?request=GetLegendGraphic%26version=1.3.0%26format=image/png%26layer=5" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" />
|
||||||
|
</LegendURL>
|
||||||
|
</Style>
|
||||||
|
</Layer>
|
||||||
|
<Layer queryable="1">
|
||||||
|
<Name>6</Name>
|
||||||
|
<Title><![CDATA[Festgesetzte Überschwemmungsgebiete]]></Title>
|
||||||
|
<Abstract><![CDATA[]]></Abstract>
|
||||||
|
<CRS>CRS:84</CRS>
|
||||||
|
<CRS>EPSG:4326</CRS>
|
||||||
|
<CRS>EPSG:25832</CRS>
|
||||||
|
<CRS>EPSG:3034</CRS>
|
||||||
|
<CRS>EPSG:3035</CRS>
|
||||||
|
<CRS>EPSG:3043</CRS>
|
||||||
|
<CRS>EPSG:3044</CRS>
|
||||||
|
<CRS>EPSG:3045</CRS>
|
||||||
|
<CRS>EPSG:3857</CRS>
|
||||||
|
<!-- alias 3857 -->
|
||||||
|
<CRS>EPSG:102100</CRS>
|
||||||
|
<CRS>EPSG:4258</CRS>
|
||||||
|
<CRS>EPSG:4647</CRS>
|
||||||
|
<!-- alias 4647 -->
|
||||||
|
<CRS>EPSG:102362</CRS>
|
||||||
|
<CRS>EPSG:5649</CRS>
|
||||||
|
<CRS>EPSG:5650</CRS>
|
||||||
|
<CRS>EPSG:5651</CRS>
|
||||||
|
<CRS>EPSG:5652</CRS>
|
||||||
|
<CRS>EPSG:5653</CRS>
|
||||||
|
<CRS>EPSG:25831</CRS>
|
||||||
|
<CRS>EPSG:25833</CRS>
|
||||||
|
<CRS>EPSG:28992</CRS>
|
||||||
|
<CRS>EPSG:31466</CRS>
|
||||||
|
<!-- alias 31466 -->
|
||||||
|
<CRS>EPSG:31462</CRS>
|
||||||
|
<CRS>EPSG:31467</CRS>
|
||||||
|
<!-- alias 31467 -->
|
||||||
|
<CRS>EPSG:31463</CRS>
|
||||||
|
<EX_GeographicBoundingBox><westBoundLongitude>5.767005</westBoundLongitude><eastBoundLongitude>9.467921</eastBoundLongitude><southBoundLatitude>50.342833</southBoundLatitude><northBoundLatitude>52.506148</northBoundLatitude></EX_GeographicBoundingBox>
|
||||||
|
<BoundingBox CRS="CRS:84" minx="5.767005" miny="50.342833" maxx="9.467921" maxy="52.506148"/>
|
||||||
|
<BoundingBox CRS="EPSG:4326" minx="50.342833" miny="5.767005" maxx="52.506148" maxy="9.467921"/>
|
||||||
|
<BoundingBox CRS="EPSG:25832" minx="280374.968000" miny="5581306.307300" maxx="531760.056900" maxy="5817335.818600"/>
|
||||||
|
<BoundingBox CRS="EPSG:3034" minx="2626418.448171" miny="3719216.543717" maxx="2857608.834051" maxy="3965098.122561"/>
|
||||||
|
<BoundingBox CRS="EPSG:3035" minx="3030252.493646" miny="4030235.136442" maxx="3269767.520179" maxy="4284870.346137"/>
|
||||||
|
<BoundingBox CRS="EPSG:3043" minx="5580808.041666" miny="687976.127217" maxx="5836918.599953" maxy="958155.698507"/>
|
||||||
|
<BoundingBox CRS="EPSG:3044" minx="5581306.307300" miny="280374.968000" maxx="5817335.818600" maxy="531760.056900"/>
|
||||||
|
<BoundingBox CRS="EPSG:3045" minx="5595966.573682" miny="-146071.074841" maxx="5852605.701367" maxy="124661.414182"/>
|
||||||
|
<BoundingBox CRS="EPSG:3857" minx="641980.088463" miny="6505861.593340" maxx="1053964.141781" maxy="6892165.966479"/>
|
||||||
|
<BoundingBox CRS="EPSG:102100" minx="641980.088463" miny="6505861.593340" maxx="1053964.141781" maxy="6892165.966479"/>
|
||||||
|
<BoundingBox CRS="EPSG:4258" minx="50.342833" miny="5.767005" maxx="52.506148" maxy="9.467921"/>
|
||||||
|
<BoundingBox CRS="EPSG:4647" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5817335.818600"/>
|
||||||
|
<BoundingBox CRS="EPSG:102362" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5817335.818600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5649" minx="31687976.127217" miny="5580808.041666" maxx="31958155.698507" maxy="5836918.599953"/>
|
||||||
|
<BoundingBox CRS="EPSG:5650" minx="32853928.925159" miny="5595966.573682" maxx="33124661.414182" maxy="5852605.701367"/>
|
||||||
|
<BoundingBox CRS="EPSG:5651" minx="31687976.127217" miny="5580808.041666" maxx="31958155.698507" maxy="5836918.599953"/>
|
||||||
|
<BoundingBox CRS="EPSG:5652" minx="32280374.968000" miny="5581306.307300" maxx="32531760.056900" maxy="5817335.818600"/>
|
||||||
|
<BoundingBox CRS="EPSG:5653" minx="32853928.925159" miny="5595966.573682" maxx="33124661.414182" maxy="5852605.701367"/>
|
||||||
|
<BoundingBox CRS="EPSG:25831" minx="687976.127217" miny="5580808.041666" maxx="958155.698507" maxy="5836918.599953"/>
|
||||||
|
<BoundingBox CRS="EPSG:25833" minx="-146071.074841" miny="5595966.573682" maxx="124661.414182" maxy="5852605.701367"/>
|
||||||
|
<BoundingBox CRS="EPSG:28992" minx="180779.663459" miny="261420.508086" maxx="443608.161222" maxy="509641.226162"/>
|
||||||
|
<BoundingBox CRS="EPSG:31466" minx="5578412.972602" miny="2484165.566016" maxx="5824616.994221" maxy="2745089.297693"/>
|
||||||
|
<BoundingBox CRS="EPSG:31462" minx="5578412.972602" miny="2484165.566016" maxx="5824616.994221" maxy="2745089.297693"/>
|
||||||
|
<BoundingBox CRS="EPSG:31467" minx="5582967.334653" miny="3280313.877032" maxx="5819064.347428" maxy="3531768.891117"/>
|
||||||
|
<BoundingBox CRS="EPSG:31463" minx="5582967.334653" miny="3280313.877032" maxx="5819064.347428" maxy="3531768.891117"/>
|
||||||
|
<Style>
|
||||||
|
<Name>default</Name>
|
||||||
|
<Title><![CDATA[Festgesetzte Überschwemmungsgebiete]]></Title>
|
||||||
|
<LegendURL width="18" height="18">
|
||||||
|
<Format>image/png</Format>
|
||||||
|
<OnlineResource xlink:href="https://www.wms.nrw.de/umwelt/wasser/uesg?request=GetLegendGraphic%26version=1.3.0%26format=image/png%26layer=6" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" />
|
||||||
|
</LegendURL>
|
||||||
|
</Style>
|
||||||
|
</Layer>
|
||||||
|
</Layer>
|
||||||
|
</Capability>
|
||||||
|
</WMS_Capabilities>
|
||||||
|
|
@ -0,0 +1,142 @@
|
||||||
|
import { defineConfig } from 'vite';
|
||||||
|
|
||||||
|
export default defineConfig({
|
||||||
|
server: {
|
||||||
|
proxy: {
|
||||||
|
'/api/local': {
|
||||||
|
target: 'http://localhost:3000',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/local/, '/api')
|
||||||
|
},
|
||||||
|
'/api/planning-data': {
|
||||||
|
target: 'http://localhost:3000',
|
||||||
|
changeOrigin: true
|
||||||
|
},
|
||||||
|
'/api/potential-data': {
|
||||||
|
target: 'http://localhost:3000',
|
||||||
|
changeOrigin: true
|
||||||
|
},
|
||||||
|
// -- WFS Proxies --
|
||||||
|
'/api/wfs/linfos': {
|
||||||
|
target: 'https://www.wfs.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wfs\/linfos/, '/umwelt/linfos'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
'/api/wfs/alkis': {
|
||||||
|
target: 'https://www.wfs.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wfs\/alkis/, '/geobasis/wfs_nw_alkis_vereinfacht'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
'/api/wfs/roads': {
|
||||||
|
target: 'https://www.wfs.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wfs\/roads/, '/wfs/DE_NW_SBV_INSPIRE_Downloadservice_Strassennetz'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
// Inspire Schutzgebiete (bisher genutzt)
|
||||||
|
'/api/nrw/wfs': {
|
||||||
|
target: 'https://www.wfs.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/nrw\/wfs/, '/umwelt/wfs_nw_inspire-schutzgebiete'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
// Aviation WFS (HaleConnect)
|
||||||
|
'/api/wfs/aviation': {
|
||||||
|
target: 'https://haleconnect.com',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wfs\/aviation/, '/ows/services/org.732.341f2791-919e-49de-8d86-3b18e040c430_wfs'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
|
||||||
|
// NRW Strassennetz WFS (Downloadservice)
|
||||||
|
'/api/wfs/nrw_roads': {
|
||||||
|
target: 'http://www.wfs.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wfs\/nrw_roads/, '/wfs/DE_NW_SBV_INSPIRE_Downloadservice_Strassennetz'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
|
||||||
|
// ATKIS Basis-DLM (Topographic data)
|
||||||
|
'/api/wfs/atkis': {
|
||||||
|
target: 'https://www.wfs.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wfs\/atkis/, '/geobasis/wfs_nw_inspire-verkehrsnetze_atkis-basis-dlm'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
|
||||||
|
// Flood Zones (Überschwemmungsgebiete) WMS
|
||||||
|
'/api/wms/uesg_new': {
|
||||||
|
target: 'https://www.wms.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wms\/uesg_new/, '/umwelt/wasser/uesg'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
|
||||||
|
// Renewable Energy WFS
|
||||||
|
'/api/wfs/energy': {
|
||||||
|
target: 'https://www.wfs.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wfs\/energy/, '/umwelt/erneuerbare_energien_wfs'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
|
||||||
|
// -- WMS Proxies (Bilder) --
|
||||||
|
'/api/wms/dop': {
|
||||||
|
target: 'https://www.wms.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wms\/dop/, '/geobasis/wms_nw_dop'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
'/api/wms/hu': { // Hausumringe
|
||||||
|
target: 'https://www.wms.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wms\/hu/, '/geobasis/wms_nw_hu'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
'/api/wms/energy': { // Erneuerbare Energien
|
||||||
|
target: 'https://www.wms.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wms\/energy/, '/umwelt/erneuerbare_energien_nrw'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
'/api/wms/wsg': { // Wasserschutzgebiete
|
||||||
|
target: 'https://www.wms.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wms\/wsg/, '/umwelt/wasser/wsg'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
'/api/wfs/wsg': { // Wasserschutzgebiete WFS
|
||||||
|
target: 'https://www.wfs.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wfs\/wsg/, '/umwelt/wasser/wsg'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
'/api/wms/roads': { // Strassen NRW Karten
|
||||||
|
target: 'https://www.wms.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wms\/roads/, '/wms/strassen_nrw_karten'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
'/api/wms/linfos': { // LINFOS Visual
|
||||||
|
target: 'https://www.wms.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wms\/linfos/, '/umwelt/linfos'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
'/api/wms/uesg': { // Überschwemmungsgebiete
|
||||||
|
target: 'https://www.wms.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wms\/uesg/, '/umwelt/wasser/uesg'),
|
||||||
|
secure: false
|
||||||
|
},
|
||||||
|
'/api/wms/alkis': { // ALKIS WMS
|
||||||
|
target: 'https://www.wms.nrw.de',
|
||||||
|
changeOrigin: true,
|
||||||
|
rewrite: (path) => path.replace(/^\/api\/wms\/alkis/, '/geobasis/wms_nw_alkis'),
|
||||||
|
secure: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
<?xml version='1.0' encoding="UTF-8" ?>
|
||||||
|
<schema
|
||||||
|
targetNamespace="http://www.wfs.nrw.de/schemas"
|
||||||
|
xmlns:erneuerbare_energien_wfs="http://www.wfs.nrw.de/schemas"
|
||||||
|
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns="http://www.w3.org/2001/XMLSchema"
|
||||||
|
xmlns:gml="http://www.opengis.net/gml/3.2"
|
||||||
|
elementFormDefault="qualified" version="0.1" >
|
||||||
|
|
||||||
|
<import namespace="http://www.opengis.net/gml/3.2"
|
||||||
|
schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd" />
|
||||||
|
|
||||||
|
<element name="WFS_Windenergie"
|
||||||
|
type="erneuerbare_energien_wfs:WFS_WindenergieType"
|
||||||
|
substitutionGroup="gml:AbstractFeature" />
|
||||||
|
|
||||||
|
<complexType name="WFS_WindenergieType">
|
||||||
|
<complexContent>
|
||||||
|
<extension base="gml:AbstractFeatureType">
|
||||||
|
<sequence>
|
||||||
|
<element name="msGeometry" type="gml:GeometryPropertyType" minOccurs="0" maxOccurs="1"/>
|
||||||
|
<element name="lanuv_id" minOccurs="0" type="string"/>
|
||||||
|
<element name="anlage" minOccurs="0" type="string"/>
|
||||||
|
<element name="reg_bezirk" minOccurs="0" type="string"/>
|
||||||
|
<element name="plan_reg" minOccurs="0" type="string"/>
|
||||||
|
<element name="gkz" minOccurs="0" type="string"/>
|
||||||
|
<element name="kreis" minOccurs="0" type="string"/>
|
||||||
|
<element name="plz" minOccurs="0" type="string"/>
|
||||||
|
<element name="gemeinde" minOccurs="0" type="string"/>
|
||||||
|
<element name="utmost" minOccurs="0" type="double"/>
|
||||||
|
<element name="utmnord" minOccurs="0" type="double"/>
|
||||||
|
<element name="status" minOccurs="0" type="string"/>
|
||||||
|
<element name="ibjahr" minOccurs="0" type="string"/>
|
||||||
|
<element name="gen_dat" minOccurs="0" type="integer"/>
|
||||||
|
<element name="leistung" minOccurs="0" type="double"/>
|
||||||
|
<element name="herstell" minOccurs="0" type="string"/>
|
||||||
|
<element name="anl_typ" minOccurs="0" type="string"/>
|
||||||
|
<element name="durchmes" minOccurs="0" type="double"/>
|
||||||
|
<element name="nab_hoeh" minOccurs="0" type="double"/>
|
||||||
|
<element name="ges_hoeh" minOccurs="0" type="double"/>
|
||||||
|
<element name="technol" minOccurs="0" type="string"/>
|
||||||
|
<element name="einspeisg" minOccurs="0" type="string"/>
|
||||||
|
<element name="Stand" minOccurs="0" type="integer"/>
|
||||||
|
</sequence>
|
||||||
|
</extension>
|
||||||
|
</complexContent>
|
||||||
|
</complexType>
|
||||||
|
|
||||||
|
</schema>
|
||||||
Loading…
Reference in New Issue