← Alle Artikel

83.000 Polygone gegen Falsch-Positive

Offengestanden war ich ziemlich stolz auf den NDYI — der Index erkennt gelbe Flächen aus Satellitenbildern mit erstaunlicher Treffsicherheit. Bloß: „gelb" und „Rapsfeld" sind halt nicht dasselbe. Ein Ikea-Dach in Kiel, eine Baustellenabsicherung bei Neumünster, diverse Wellblechhallen in Lübeck — sie alle treffen exakt den Farbton, den Sentinel-2 für „gelb" hält. Die spektralen Vorfilter (Szenenklassifikation, Vegetationsindex, Helligkeitsschwellen) eliminieren zwar den gröbsten Unfug, aber ein gelbes Industriedach neben einer Grünfläche rutscht bei 10-Meter-Pixeln trotzdem durch. Irgendwann stellt man sich die naheliegende Frage: Warum versuche ich algorithmisch herauszufinden, ob etwas ein Acker ist — wenn es Leute gibt, die das aufgeschrieben haben?

Schleswig-Holstein veröffentlicht nämlich als Open Data die sog. Feldblockdaten: 83.157 Ackerland-Polygone in einem GeoPackage von stattlichen 178 MB. Das Prinzip ist bestechend simpel — liegt ein NDYI-Treffer nicht auf offiziellem Ackerland, kann es schlicht und ergreifend kein Rapsfeld sein. Die Umsetzung allerdings (man ahnt es) hat ein paar Ecken, an denen man sich stößt.

Das GeoPackage — im Grunde eine SQLite-Datenbank — ist zu groß für den Webserver-Prozeß, also läuft der Import über die CLI. Die eigentliche Überraschung lauerte aber bei den Koordinaten: Die liegen nämlich nicht in WGS84 (wäre ja zu einfach gewesen), sondern in einem UTM-System mit Zonenpräfix im Easting-Wert. Die Rückkonvertierung erfordert inverse Transverse-Mercator-Projektion — ellipsoidale Geometrie mit Helmert-Koeffizienten und Reihenentwicklungen, also all die schöne Mathematik, die man im Studium für unnütz hielt und dann doch braucht. Statt eine ganze Geodäsie-Bibliothek als Abhängigkeit reinzuziehen: Mathe von Hand implementiert, gegen ein offizielles Tool validiert. Abweichung unter einem Millimeter. Das war … befriedigend ;-)

Für die eigentliche Filterung sorgt ein zweistufiger Ansatz: Erst schränkt eine Bounding-Box-Suche über indizierte Datenbankspalten die Kandidaten ein — aus 83.157 werden typischerweise eine Handvoll. Dann prüft Ray-Casting, ob der Punkt tatsächlich im Polygon liegt, inklusive Löcher für Hofstellen und Gewässer. Klingt aufwendig, ist aber in Millisekunden erledigt.

Das Ergebnis: Gelbe Punkte nur noch auf offiziellem Ackerland. Natürlich filtert das auch Rapsfelder heraus, die auf Grünland-Feldblöcken stehen (Stichwort Fruchtfolge — der Landwirt baut Raps an, aber der Feldblock ist als Grünland klassifiziert). Ein bewußter Trade-off zugunsten der Präzision: Lieber ein echtes Feld verschweigen als falsche Treffer anzeigen.

Was lernen wir daraus? Daß manchmal die beste Lösung keine algorithmische ist — sondern ein guter Datensatz. Daß Schleswig-Holstein seine Feldblöcke als Open Data veröffentlicht, macht diesen ganzen Ansatz überhaupt erst möglich. Und daß Bounding-Box-Indizes 83.000 Polygone handzahm machen, ist auch nicht schlecht :-)