This used to be habi.gna.ch

Die (Gmeinde)Grenzen der Schweiz

Ihr wisst ja, ich hab’ einen OpenStreetMap-Fetisch :) Schon sehr lange trage ich gemeinsam mit der Schweizer OSM-Community die Idee rum, dass die ~2000 erfassten Gemeindegrenzen in OpenStreetMap besser gepflegt werden sollten.

Diese wurden vor ~14 Jahren in einem sogenannten Import in die OpenStreetMap-Datenbank eingepflegt und seither bei Gemeindefusionen Anfangs Jahr immer mal wieder gepflegt, aber nicht in toto überwacht.

Vor einiger Zeit habe ich im OSM Forum die Diskussion zur Grenzpflege begonnen, das dort angesprochene Tool der serbischen Community ist zwar sehr toll, aber der Umbau auf die Schweizerischen Gegebenheiten hat nicht befriedigend geklappt. Dies trotz der tollen Hilfe der SOSM mit einer virtuellen Maschine (mersi Datendelphin im Speziellen) auf der SOSM-Infrastruktur. Auf dieser VM lief das serbische Tool mit Anpassungen für die Schweiz, war aber nur schwer zu “bedienen”.

In einem Projekt bei der Arbeit habe ich mich etwas eingehender mit den sog. GitHub Actions beschäftigt, mit denen es möglich ist, ja nach Zustand eines GitHub-Projektes Aktionen durchzuführen, die ebenso auf einer virtuellen Infrastruktur (aber halt von Microsoft laufen). Eine solche Action baut beispielsweise aus etwas LaTeX-Code, der online liegt automatisch meinen Lebenslauf (ich hab’ keine Bewerbung offen, brauchte aber letzthin aus anderen Gründen einen Lebenslauf). Oder aus etwas Textschnipseln eine Webseite und ein PDF, das eine Pubikation ergeben wird.

Item, Programmcode im Internet etwas machen zu lassen, ist mit solchen Actions einfach, schnell iterierbar und etwas weniger komplex, als per ssh auf einem Server Python-Code laufen zu lassen.

Um die Gmeindegrenzen in OpenStreetMap zu überwachen habe ich jetzt nicht Programmiercode im Netz zum laufen gebracht, sondern diesen Programmiercode nicht selber geschrieben. Das geht mit sog. vibe coding gemacht. Zu Beginn habe ich das Large Language Model von Claude.ai mit einem Prompt gefüttert, der beschreibt, was ich machen will.

I have the boundaries of the swiss municipalities in https://data.geo.admin.ch/ch.swisstopo.swissboundaries3d/swissboundaries3d_2025-04/swissboundaries3d_2025-04_2056_5728.gpkg.zip. Help me produce a report on how well these match geographically with the boundaries mapped in OpenStreetMap, preferrably via Overpass Turbo. The boundaries in the geopackage have bfs_nummer=355, the boundaries in OSM have swisstopo:BFS_NUMMER=355 as a matching ID.

Can you query Overpass in Python, too?

Can you make this all work in a GitHub action?

Das heisst, ich habe Claude informiert, dass die Gemeindegrenzen der Schweiz in OpenStreetMap in sogenannten Relationen mit z.B. swisstopo:BFS_NUMMER"=355 für Köniz erfasst sind. Die BFS_NUMMER wird vom Bundesamt für Statistik vergeben und taucht genauso in den offiziellen Gemeindegrenzen von swisstopo, swissBOUNDARIES3D auf. Ich hätte die Abfrage der Gemeindegrenzen gerne mit Overpass turbo abgefragt, den Vergleich in Python gemacht und das Ganze per GitHub Action z.B. täglich laufen gelassen. Schon die erste Antwort von Claude lieferte Resultate, die ich dann in VS Code mit CoPilot mit vielen Prompts immer weiter verfeinert habe. Ich habe nur extrem wenig Code selbst geschrieben, praktisch Alles wurde gesteuert durch meine Eingaben maschinell erstellt, minimalste Zwischenschritte wurden von Anderen beigesteuert.

Nachem Simon Poole bemerkt hat, dass Gemeindegrenzen mit Enklaven/Löchern nicht korrekt ausgewertet werden und einigen weitern Korrekturen der Berechnungslogik hat die Schweizer OSM-Community nun ein Tool, das den Vergleich der Gemeindegrenzen von swisstopo mit den Gemeindegrenzen in OpenStreetMap bietet: http://boundaries.osm.ch

Tags:
Categories: