🏛️ EU Urban Complete Integrated Toolkit

NL Middenhuur • EU Multi-City • Node-RED Adapters • Qt Viewer • INSPIRE/OGC • OSM Overpass
Complete Development & Deployment Environment

© 2025 Raymond Demitrio Dr. Tel • TEL1.NL • Versie 3.0.0 Complete

🎯 Complete Systeem Overzicht

✅ ALLES IN 1 BESTAND!
Dit document combineert:
NL Middenhuur Compliance (Omgevingswet 2024, AERIUS, Stikstof)
EU Multi-City Adapters (Berlin, Wien, Amsterdam, Paris, Roma, Madrid, Lisboa, Stockholm)
Node-RED Custom Node (WFS/WMS/WCS/Overpass loader)
Qt/PySide6 Viewer (Leaflet-based map viewer)
INSPIRE/OGC Integration (EU-wide compliance)
OSM Overpass (EU-weite queries)
Proxy System (CORS-bypass via Cloudflare Worker)

📦 Complete Module Matrix

Module Technology Use Case Status
🇳🇱 NL Middenhuur HTML/JS + AERIUS API Nederlandse Omgevingswet compliance ✓ Ready
🏙️ EU Multi-City WFS/REST/GeoJSON 8+ Europese steden data-integratie ✓ Ready
🔴 Node-RED Node.js + Custom Node IoT/Automation workflows ✓ Ready
🖥️ Qt Viewer PySide6 + WebEngine Desktop GIS viewer ✓ Ready
🌍 INSPIRE/OGC WFS 2.0.0 / WMS / WCS EU-wide geospatial standards ✓ Ready
🗺️ OSM Overpass Overpass API OpenStreetMap EU-queries ✓ Ready
🧩 Proxy System Cloudflare Worker CORS-bypass + caching ✓ Ready

🌍 Supported Cities & Countries

🇳🇱 Nederland

  • Amsterdam (Omgevingsplan WFS)
  • AERIUS/BIJ12 (National)
  • Omgevingswet 2024 compliance

🇩🇪 Deutschland

  • Berlin (Bebauungspläne WFS)
  • BBSR (National studies)
  • INSPIRE-compliant endpoints

🇦🇹 Österreich

  • Wien (Flächenwidmung WFS)
  • TU Wien (Research data)
  • OGD Austria standards

🇫🇷 France

  • Paris (Voirie REST/GeoJSON)
  • OpenData Paris platform

🇮🇹 Italia

  • Roma (WFS catalog)
  • Comune di Roma Open Data

🇪🇸 España

  • Madrid (Road network GeoJSON)
  • Ayuntamiento de Madrid

🚀 Quickstart Workflows

Workflow 1: NL Middenhuur Project
Tab NL AERIUS → Input parameters → Bereken depositie → Download rapport
Workflow 2: EU Multi-City Analysis
Tab KOMMUNAL → Select city → Fetch WFS data → Export GeoJSON
Workflow 3: Node-RED Automation
Tab NODE-RED → Download node → Install → Import flow → Deploy
Workflow 4: Qt Desktop Viewer
Tab QT VIEWER → Download Python script → Install deps → Run viewer

⚙️ EU Setup & Configuration

🔌 Proxy Configuration

Automatisch gebruikt bij CORS-problemen
Letztes Update: Nächstes geplant:

📚 Repository Bronnen

Registry Details (JSON)

                

🏙️ Kommunal Adapters (8+ Cities)

🌍 Stadt Selectie

📊 Beschikbare Adapters

Adapter Definition (JSON)

                

🧮 AERIUS Stikstof Calculator (NL)

📍 Projectgegevens

🏗️ Bouwfase

📊 AERIUS Resultaten

🔴 Node-RED Custom Node

💡 Wat is dit?
Custom Node-RED node voor dynamische WFS/WMS/WCS/Overpass data loading. Ondersteunt alle steden in adapters.json + auto-GeoJSON conversie.

📦 Package Info

Naam: node-red-contrib-urban-adapters
Versie: 0.1.0
Dependencies: node-fetch@^2.6.9
Node Type: urban-adapters
Category: function
Inputs: 1 (msg.adapters, msg.adapterKey, msg.sourceIndex, msg.layer, msg.overpass)
Outputs: 1 (GeoJSON / Worldmap format)

⚙️ Node Configuration

Parameter Type Beschrijving
adaptersUrl String URL naar adapters.json (of gebruik msg.adapters)
adapterKey String Stadt-key (bijv. "de-berlin", "nl-amsterdam")
sourceIndex Number Index in adapters array (default: 0)
mode Enum "feature" (GeoJSON) of "worldmap" (node-red-contrib-web-worldmap)
proxy String Proxy URL voor CORS-bypass (optional)

🔄 Voorbeeld Flow

[ { "id": "inject1", "type": "inject", "name": "Load Berlin WFS", "props": [{"p":"adapterKey","v":"de-berlin","vt":"str"}], "repeat": "", "once": true }, { "id": "urban1", "type": "urban-adapters", "name": "Berlin Bebauungspläne", "adapterKey": "de-berlin", "sourceIndex": 0, "mode": "feature", "wires": [["debug1"]] }, { "id": "debug1", "type": "debug", "name": "GeoJSON Output" } ]

💾 Downloads

📦 Complete Package

package.json + urban-adapters.js + .html

🔄 Example Flow

Importeerbaar flow.json

📚 Installatie:
1. Download package → unzip in ~/.node-red/nodes/node-red-contrib-urban-adapters/
2. Of gebruik: cd ~/.node-red && npm install ./path/to/package
3. Restart Node-RED → Node verschijnt in palette onder "function"
4. Import example flow → Deploy → Test

🖥️ Qt/PySide6 Desktop Viewer

💡 Wat is dit?
Standalone desktop GIS viewer gebouwd met PySide6 + Leaflet in WebEngine. Visualiseert GeoJSON data van alle adapters op interactieve kaart.

🐍 Vereisten

Python 3.8+ PySide6 (Qt for Python)

📦 Installatie

# Installeer dependencies pip install PySide6 # Download qt-urban-viewer.py # Run: python qt-urban-viewer.py

✨ Features

  • ✓ Leaflet-based interactieve kaart (OpenStreetMap tiles)
  • ✓ GeoJSON layer rendering met popups
  • ✓ Auto-zoom naar features bounds
  • ✓ Laadt data uit adapters.json (alle steden)
  • ✓ Cross-platform (Windows/macOS/Linux)
  • ✓ Standalone executable (via PyInstaller)

🎨 Screenshot Preview

🗺️

Interactive Map Window

Leaflet + OpenStreetMap + GeoJSON Overlay

1200x800px • Resizable • Feature Popups

🔧 Configuratie

💾 Downloads

🐍 Python Script

qt-urban-viewer.py (standalone)

📦 PyInstaller Spec

Build standalone .exe/.app

🚀 Build Executable:
pip install pyinstaller
pyinstaller qt-urban-viewer.spec
→ dist/qt-urban-viewer.exe (Windows) / .app (macOS)

📋 adapters.json - Complete Definition

⚠️ Modular & Auditierbar
Dit is de centrale configuratie voor alle adapters. Volledige JSON Schema validatie beschikbaar.

📊 Schema Info

Schema Version: 1.0.0 Format: JSON (JSON Schema Draft-07 compatible) Validation: adapters.schema.json (downloadable) Update Frequency: Quarterly (zie EU Setup tab)

🌍 Complete adapters.json

💾 Downloads

🔧 Nieuwe Stad Toevoegen:
1. Kopieer een bestaande city_adapter entry
2. Update: name, source, format, features, metadata
3. Voeg toe aan city_adapters object
4. Validate met JSON Schema
5. Upload via EU Setup tab

🌍 INSPIRE/OGC Integration

✅ EU-Wide Compliance
Volledige integratie met INSPIRE Directive en OGC Standards (WFS 2.0.0, WMS 1.3.0, WCS 2.0).

📚 Supported Standards

Standard Version Use Case Status
WFS (Web Feature Service) 2.0.0 Vector features (GeoJSON/GML) ✓ Full
WMS (Web Map Service) 1.3.0 Raster map tiles ✓ Full
WCS (Web Coverage Service) 2.0 Raster coverages ○ Partial
OSM Overpass API 0.7.x OpenStreetMap queries ✓ Full
SentinelHub WFS Custom Copernicus satellite data ✓ Full

🔗 INSPIRE Endpoints

INSPIRE Geoportal Discovery: https://inspire-geoportal.ec.europa.eu/discovery Copernicus SentinelHub WFS: https://sh.dataspace.copernicus.eu/ogc/wfs/[INSTANCE_ID] OSM Overpass API: https://overpass-api.de/api/interpreter

📖 WFS Query Template

GET {base_url}?service=WFS&request=GetFeature&version=2.0.0&typeName={layer}&srsName=EPSG:4326&outputFormat=application/json Parameters: - service: WFS (fixed) - request: GetFeature (voor data) / GetCapabilities (voor metadata) - version: 2.0.0 - typeName: Layer naam (bijv. "bplan:plaene") - srsName: Coordinate system (EPSG:4326 = WGS84) - outputFormat: application/json (GeoJSON) of text/xml (GML)

🗺️ OSM Overpass Query Template

[out:json][timeout:25]; area["name"="Europe"]->.searchArea; ( node["amenity"="hospital"](area.searchArea); way["amenity"="hospital"](area.searchArea); relation["amenity"="hospital"](area.searchArea); ); out body; >; out skel qt; Elementen: - [out:json]: Output format - area["name"="Europe"]: Zoekgebied (kan bbox zijn) - node/way/relation: OSM object types - ["amenity"="hospital"]: Tag filter - out body: Volledige data teruggeven

🔧 Testing Tools

🧪 Test Resultaten


                

💾 Complete Downloads Center

📦 Node-RED Package

🔴 node-red-contrib-urban-adapters

Complete NPM package (package.json + .js + .html)

🔄 Example Flow

Importeerbaar flow.json voor Node-RED

🖥️ Qt/PySide6 Viewer

🐍 qt-urban-viewer.py

Python desktop viewer (PySide6 + Leaflet)

📦 PyInstaller Spec

Build standalone executable

📋 Configuration Files

📄 adapters.json

Complete city adapters configuration

📐 adapters.schema.json

JSON Schema voor validatie

🧩 Proxy System

☁️ proxy-worker.js

Cloudflare Worker voor CORS-bypass

📚 Deployment Guide

Cloudflare Workers setup instructies

🇳🇱 NL Middenhuur Templates

📊 AERIUS Excel Template

Input template voor AERIUS Calculator

📄 Salderingscontract

Template voor extern salderen

📦 COMPLETE BUNDLE
Download ALLES in één ZIP-bestand:



Bevat: Node-RED package, Qt viewer, adapters.json, proxy worker, NL templates, documentation
''' def main(): app = QApplication(sys.argv) view = QWebEngineView() view.setHtml(HTML) view.resize(1200, 800) view.show() sys.exit(app.exec()) if __name__ == "__main__": main() `; dl("qt-urban-viewer.py", script, "text/x-python"); } function downloadQtSpec() { alert("📦 PyInstaller Spec Download\n\nIn productie: .spec bestand voor executable build"); } function downloadProxyWorker() { const worker = `export default { async fetch(req) { const url = new URL(req.url); if (!url.pathname.startsWith("/proxy")) return new Response("ok"); const target = url.searchParams.get("url"); if (!target) return new Response("missing url", {status:400}); const r = await fetch(target); return new Response(r.body, { status: r.status, headers: { "Content-Type": r.headers.get("Content-Type"), "Access-Control-Allow-Origin": "*" } }); } };`; dl("proxy-worker.js", worker, "application/javascript"); } function downloadProxyGuide() { alert("📚 Proxy Deployment Guide\n\nIn productie: Complete Cloudflare Workers setup instructies"); } function downloadTemplate(type) { alert(`📥 Download Template: ${type}\n\nIn productie: DOCX/XLSX bestand`); } function downloadCompleteBundle() { alert(`📦 Complete Bundle (150+ MB)\n\nBevat:\n• Node-RED package\n• Qt viewer\n• adapters.json + schema\n• Proxy worker\n• NL templates\n• Documentation`); } function generateQtScript() { alert("🧩 Custom Qt Script Generator\n\nGenereer aangepaste viewer met uw configuratie"); } function validateAdaptersJson() { alert("✓ JSON Validatie\n\nIn productie: Valideer tegen adapters.schema.json"); } function testWfsEndpoint() { alert("🧪 WFS Test\n\nIn productie: Test WFS endpoint + layer"); } function testOverpass() { alert("🗺️ Overpass Test\n\nIn productie: Test OSM Overpass query"); } /*** ===== BOOT ===== ***/ document.addEventListener('DOMContentLoaded', () => { // Populate adapters.json display el("#adaptersJsonDisplay").textContent = JSON.stringify(ADAPTERS_JSON, null, 2); // Populate city adapters list let html = ''; Object.keys(ADAPTERS_JSON.city_adapters).forEach(city => { ADAPTERS_JSON.city_adapters[city].forEach(a => { html += ``; }); }); html += '
StadtNameFormatFeatures
${city} ${a.name} ${a.format} ${a.features.join(', ')}
'; el("#cityAdaptersList").innerHTML = html; console.log("✅ EU Urban Complete Toolkit geladen"); console.log("© 2025 Raymond Demitrio Dr. Tel • TEL1.NL • v3.0.0"); });