Geobeet
Gartenplanung mit amtlichen Schweizer Geodaten, vom Luftbild bis zum massstäblichen Druckplan.
- Rolle
- Alleinentwickler, Eigenprojekt
- Zeitraum
- Juli bis September 2026
- Python 3.13
- FastAPI
- Pydantic
- uvicorn
- SQLite
- Shapely
- pyproj
- Leaflet
- swisstopo
- WMTS
- rough.js
Worum es ging
Ein reales Grundstück in Däniken SO, bis dahin auf Papier und im Kopf geplant. Gesucht war kein Gartentagebuch, sondern ein Werkzeug, das mit den tatsächlichen Massen rechnet: Flächen werden auf dem swisstopo-Luftbild gezeichnet oder mit dem Bandmass ausgemessen, Kulturen über die Saison geplant, die Fruchtfolge geprüft, und daraus entsteht ein massstäblicher A4-Plan zum Ausdrucken.
Der Kern in einem Satz: gespeichert wird in WGS84, gerechnet ausschliesslich in LV95. Nur so stimmen Quadratmeter und Kantenlängen in der Schweiz. Die Transformation ist an einer einzigen Stelle gekapselt, weil eine Konvention, an die man sich bei jedem Aufruf erinnern muss, keine Konvention ist, sondern eine Fehlerquelle mit Verzögerung. Erschwerend: ein Projektionsfehler stürzt nicht ab, er liefert eine plausibel aussehende Zahl.
Geobeet ist das einzige der sechs Projekte ohne React und TypeScript, bewusst so gewählt: Python, eine typisierte API mit FastAPI und Pydantic, und die Arbeit mit fremden Schnittstellen, deren Verhalten nicht in der Dokumentation steht, sondern gemessen werden muss.
Zahlen
- typisierte API-Endpunkte
- 22 typisierte API-Endpunkte
- Auflösungsgrenze, gemessen statt geschätzt
- 10 cm Auflösungsgrenze, gemessen statt geschätzt
- maximaler Kantenfehler über sieben Testfälle
- 0.00003 mm maximaler Kantenfehler über sieben Testfälle
Einblicke



Die Auflösungsgrenze gemessen, statt am Bild zu optimieren
Der Ausgangswunsch war ein schärferes Luftbild, um Beetkanten genauer abzeichnen zu können. Statt zu optimieren wurde zuerst gemessen: Die WMTS-Kacheln enden bei rund 10 cm pro Pixel, darüber antwortet der Server mit HTTP 400, und eine Spektralanalyse des Orthofotos bestätigt dieselbe Grenze. Schärfer existiert nicht. Damit war die Frage falsch gestellt: nicht das Bild musste besser werden, sondern die Eingabe. Ein Bandmass ist an einem 3-Meter-Hochbeet rund zehnmal genauer als das beste verfügbare Luftbild, und daraus entstand die Funktion «Ausmessen statt Abmalen». Was am Bild machbar war, wurde trotzdem gemacht: eine Unsharp-Mask, deren Radius mit der Vergrösserung mitwächst, gemessen von 1.76 auf 4.45 Kantenschärfe.
Stack
- Sprache
- Python 3.13
- kein Build-Schritt
- Web
- FastAPI 0.141
- uvicorn 0.52
- Pydantic 2.13
- OpenAPI automatisch aus den Schemata
- Geometrie
- Shapely 2.1
- pyproj 3.7
- Transformation zwischen WGS84 und LV95
- Datenhaltung
- SQLite 3.51 aus der Standardbibliothek
- Schema als SQL-Datei
- GeoJSON als Text
- Karte und Plan
- Leaflet 1.9
- Leaflet.draw
- swisstopo-Luftbild als WMTS-Dienst
- generiertes SVG
- rough.js
Status
Karte, Ausmessen, Gehölze, Pflanzungen und Planansicht sind fertig; Kalender, Testsuite und Deployment offen, Weiterführung geplant. Läuft lokal mit einem Befehl. Repository privat, Einsicht und Vorführung auf Anfrage.