A Germany-wide livability map. → wohnortatlas.de
The pipeline scores H3 (resolution 8) hexes across the German mainland on a few dozen livability layers — rent, commute, daily-needs access, leisure, quiet, green, flood risk, and more. The static web map then re-scores everything client-side against a user's own preferences. What each layer measures, how, and where it falls short is documented on the site's method page.
| Path | What |
|---|---|
scripts/ |
the pipeline — numbered NN_*.py stages, run in order by the Makefile |
wohnen/ |
shared library code (config, I/O, routing, scoring helpers) |
web/ |
the static map (index.html + decode.js, no build step) and its assets |
Makefile |
build targets with file-based caching |
The input data (data/), the built map bundle (web/data.bin), and the routing
caches (web/reach/) are not tracked — they are downloaded and generated by
the build. A clone is the source, not a ready-to-serve site.
Prerequisites (developed on macOS; the Makefile assumes Homebrew):
- Poetry (Python ≥ 3.12)
osmium-toolandopenjdk@21— the routing (r5py) needs JDK 21 (brew install osmium-tool openjdk@21)- ~25 GB free disk for the raw downloads and intermediate layers
poetry install
make check-env # verifies osmium, JDK 21, and the Python deps
make download # fetches the open datasets (large; cached under data/raw/)
make web # runs the full pipeline → web/data.binThen serve the web/ directory over HTTP and open it — it fetches data.bin, so
it will not work from a file:// URL:
cd web && python3 -m http.server # → http://localhost:8000The job-market ("Branche") commute targets are optional and need a free
regionalstatistik.de account: set
GENESIS_USER / GENESIS_PASS, then make jobs && make web.
Gotcha worth knowing:
- The free GTFS feed expires ~7 days after download; an expired feed makes the
router silently fall back to walk/bike times.
make freshnessshows the age; re-make downloadand rerun the routing stages to refresh.
The project's own code is MIT. The bundled browser libraries, the map and geocoding services used at runtime, and the input datasets each keep their own licenses — see THIRD-PARTY-LICENSES.md and the sources list on the method page.
Contributions are welcome where they fit the project.