a13n
Build AI agents and run them on cloud.
Create bulk routes from many origins to a target location with optional layer overlays
AI summary · website content
Developer toolsJavaScript · PythonGitHub @vizsimOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Eine interaktive Web-Anwendung zur Visualisierung von Routen mit mehreren Startpunkten zu einem Zielpunkt. Die Anwendung nutzt die GraphHopper Routing API, um Routen zu berechnen und bietet verschiedene Visualisierungs- und Analyseoptionen.
#zoom/lat/lng)edge_id (kein Geometrie-Matching), Farbcodierung über wählbare Colormaps (viridis, plasma, inferno, magma)sidewalk, bicycle_infra, max_speed …); Klick auf eine Linie zeigt die Infrastruktur des Abschnitts — Details in docs/INFRA_ANSICHT.mdcount) plus Aufschlüsselung nach Verkehrsmittel (count_foot, …) und Quelle (count_residential/count_transit); einzeln mit profile und startSource je Routetrips, trips_<modus> und Metadaten); Konzept in docs/ANALYSE_MODUS_KONZEPT.mdDie Anwendung ist verfügbar unter: https://vizsim.github.io/routing_bulk/
npm install # einmalig
npm run dev # Dev-Server mit Auto-Reload (Vite)
npm run build # Produktions-Build nach dist/
npm test # Unit-Tests (node --test)
Ohne eigenen Routing-Server: node tools/mock-graphhopper.mjs startet einen
Mock-GraphHopper auf Port 8989 (siehe docs/INFRA_ANSICHT.md).
Das Deployment auf GitHub Pages läuft automatisch: Jeder Push auf main baut
und deployt über die GitHub Action (.github/workflows/deploy.yml).
routing_bulk/
├── index.html # Einstiegspunkt (ein ES-Module-Script)
├── style.css # Stylesheet (Designtokens wie die Unfallkarte, Mobile-Query ≤ 640 px)
├── vite.config.js # Vite (base './', MapLibre-Worker)
├── package.json # Scripts + Dependencies (maplibre-gl, pmtiles, pbf)
├── .github/workflows/ # GitHub-Pages-Deployment (Vite-Build)
│
├── docs/ # Dokumentation
│ ├── routing_bulk_review.md # Review, Plan & Umsetzungsstand
│ ├── AGGREGATION_PROBLEM.md # (historisch) Geometrie-Aggregation
│ ├── INFRA_ANSICHT.md # Infrastruktur-Ansicht (v1)
│ └── ...
│
├── tests/ # Unit-Tests (node --test)
├── tools/ # mock-graphhopper.mjs (lokaler Test-Server)
│
└── src/
├── core/ # Konfiguration, State, Event-Bus, Utils
├── domain/ # Geo-Funktionen, Verteilungen, GraphHopper-API,
│ # infra.js: Infrastruktur-Klassen, Labels, Farben
├── services/ # Business-Logik
│ ├── route-service.js # Routen-Berechnung (Pool, Abbruch, Profile)
│ ├── demand-service.js # Nachfragemodell (Kapazität, unter-18, ÖPNV-Mix)
│ ├── population-service.js # Zensus-/PMTiles-Reader (Tiles direkt lesen)
│ ├── aggregation-service.js # exakte Kanten-Aggregation (edge_id)
│ ├── target-service.js # Zielpunkt-Verwaltung
│ └── export-service.js # GeoJSON-Export
├── visualization/ # MapLibre-Rendering
│ ├── map-renderer.js # Karte, Layer (Routen, Schulen, ÖPNV, Zensus), Kontextmenü
│ ├── route-renderer.js # Routen als GeoJSON-Sources (data-driven Styling)
│ ├── visualization.js # Orchestrierung, Marker (Start/Ziel)
│ ├── marker-manager.js # Ziel-Marker-Verwaltung
│ ├── histogram-renderer.js # Histogramm (Canvas)
│ └── colormap-utils.js # Colormap-Berechnungen
├── ui/ # Panel-Komponenten
│ ├── accordion.js # einklappbare Bereiche (mit localStorage)
│ ├── demand-selector.js # Bereich "Nachfragedetails"
│ ├── infra-controls.js # Färben nach / Modus / Merkmal + Legende
│ ├── segment-panel.js # Infopanel beim Klick auf ein Segment
│ ├── mobile-layout.js # Auf-/Zuklappen, Bottom-Sheet am Handy, Lupen-Suche, Fußzeile
│ ├── draw-bar.js / polygon-draw.js # Bereich zeichnen (Gebietsanalyse)
│ ├── info-hints.js # ⓘ-Tooltips (fixed, Viewport-Klemmung)
│ ├── targets-list.js / config-helpers.js / distribution-selector.js
│ └── colormap-selector.js / route-warning.js
├── handlers/ # Event-Handler (Routen berechnet/progressiv)
├── utils/ # Geocoder (Adresssuche)
└── app.js # Haupt-Orchestrierung
edge_id-Path-Details)Die Hauptkonfiguration befindet sich in src/core/config.js:
export const CONFIG = {
GH_ROUTE_URL: "https://ghroute.vizsim.de/route",
BASEMAP_STYLE_URL: "https://tiles.openfreemap.org/styles/positron",
PROFILE: "foot",
N: 10,
RADIUS_M: 2000,
ROUTE_CONCURRENCY: 12,
// PMTiles-Quellen: POPULATION_*, SCHOOLS_*, PLATFORMS_*
// Nachfragemodell: DEMAND_BASIS, DEMAND_TRANSIT_SHARE, DEMAND_TRANSIT_STOPS
};
Die Aggregation zählt exakt pro Kante des Straßengraphen: GraphHopper liefert
per Path Detail edge_id, welche Kanten jede Route benutzt — zwei Routen teilen
sich ein Segment genau dann, wenn sie dieselbe Kanten-ID haben. Kein
Geometrie-Matching, keine Toleranzen. Die früheren geometrischen Methoden und
ihr Grundproblem sind historisch dokumentiert in
docs/AGGREGATION_PROBLEM.md; Plan und
Umsetzungsstand in docs/routing_bulk_review.md.
Die Anwendung folgt einer modularen Architektur mit klarer Trennung von Concerns:
visualization.js: Orchestrierung und Marker (Start/Ziel)map-renderer.js: MapLibre-Karte, Sources/Layer, Kontextmenü, Legendenroute-renderer.js: Routen und Aggregation als GeoJSON-Featurescolormap-utils.js: Colormap-Berechnungenhistogram-renderer.js: Histogramm-Visualisierungmarker-manager.js: Ziel-Marker-VerwaltungDie Kommunikation zwischen Modulen erfolgt über einen Event-Bus (EventBus), was eine lose Kopplung und einfache Erweiterbarkeit ermöglicht.
Der Kern-Use-Case ist die Modellierung von Schulwegen. Zwei der drei dafür nötigen Bausteine sind inzwischen umgesetzt:
Nachfrage (Schülerinnen und Schüler) — ✅ umgesetzt:
Einwohner und Unter18 als PMTilesBushaltestellen und Fußverkehr — ✅ umgesetzt:
/plan); die Aggregation zählt
dort pro Linie und Ein-/Ausstiegspaar — siehe docs/routing_bulk_review.mdEinzugsbereiche der Schulen — offen:
| Bezirk | Format | Beschreibung | Link |
|---|---|---|---|
| Treptow-Köpenick | PDF Karte | Einschulungsbereiche als PDF-Karte verfügbar | Link |
| Neukölln | Digital(?) | Einschulungsbereiche in digitaler Form verfügbar, aber nicht öffentlich nutzbar (kein echtes WMS) | Link |
| Steglitz-Zehlendorf | PDF mit Karte und Adressen | Einschulungsbereiche als PDF mit Karte und Adressliste | Link |
| Mitte | PDF mit Karte und Adressliste | Einschulungsbereiche als PDF mit Karte und Adressliste | Link |
Die Integration dieser Datenquellen würde es ermöglichen:
Dieses Projekt steht unter der MIT-Lizenz. Siehe LICENSE für Details.