QGIS: Zusammengefügte Features wieder aufsplitten

Seit einigen Jahren beschäftige ich mich nebenbei und bisher überwiegend hobbymäßig – also dilettantisch – mit verschiedenen OpenSource-GIS Anwendungen. Eine davon QuantumGIS (QGIS), welches als sehr nutzerfreundliches GIS (Geographische Informationssysteme) einen schnellen und leichten Einstieg ermöglicht aber durch zahlreiche Plugins mittlerweile trotzdem über einen sehr breiten Funktionsumfang verfügt und als Schnittstelle bzw. GUI für zahlreiche andere FOSSGIS-Anwendungen nutzbar ist.

Dieses Blog sollte ursprünglich mal dem Zweck dienen eigenes Arbeiten und Lernen (vorzugsweise im geographischen Bereich, was eigentlich fast alles sein kann, sofern man nur den richtigen Blickwinkel darauf richtet) zu dokumentieren. Da ich mich derzeit aus beruflichen Gründen verstärkt mit QGIS, PostgreSQL und PostGIS beschäftige soll dieser Zweck nun endlich ein wenig zur Geltung kommen.

Heute habe ich beispielsweise viele Stunden damit verbracht, herauszufinden, wie Features (Polygone die als georeferenzierten Shapefiles vorliegen), die ich von einem zugrunde liegenden Ausgangslayer, zunächst zur Generalisierung und Zusammenfassung gleicher Areale, zusammengefügt hatte, wieder anhand des Ausgangslayers aufsplitten kann. Hört sich vielleicht trivial an, ist es aber durchaus nicht. Zusammenfügen ist immer einfach, splitten, vor allem bei großen Datenmengen die man nur schwer überblicken kann, dagegen viel weniger. Vor allem wenn klare Anforderungen an das Ergebnis bestehen.

Diese wären:

  • Keine Doppelung oder gar Vervielfachung der jeweiligen Features (als Polygone auf der Karte und als Elemente in der Attributtabelle)
  • Nicht alle erzeugten Generalisierungen (zusammengefasste Features) sollen wieder aufgespalten werden
  • Die bereits zusätzlich erzeugten bzw. manuell hinzugefügten und  in der Attributtabelle gespeicherten Attribute, sollen erhalten bleiben
  • Es dürfen am Ende keine Fehler (Datenlücken, Überschneidungen der Polygone oder Vielfacheinträge) im Datensatz vorliegen

Um dies möglichst effizient zu erreichen habe ich einiges ausprobiert. Bisher ist das alles noch Kompromiss, die perfekte Lösung ist noch nicht gefunden. Wichtig ist in jedem Fall bei allen Arbeiten im GIS nicht die Originaldaten zu nutzen sondern mit einer Kopie der betreffenden Layer zu arbeiten. Das hatte ich bereits beim zusammenfügen der Features gemacht, nur so habe ich jetzt den Ausgangslayer zur Verfügung anhand dessen ich das wiederaufsplitten erreichen will. Und auch für alle Versuche um das richtige Tool zu finden oder diese zu testen sind Kopien der Layer äußerst sinnvoll. Bei meiner Datenmasse war es auch nötig zunächst sehr kleine Auschnitte zu erstellen, die jeweils nur eine geringe Anzahl an Elementen enthalten um überhaupt einen Überblick über die Ergebnisse zu behalten. Außerdem beschleunigt es die Berechnungen beim rumprobieren gewaltig.

Eine Auswahl eines Datensatzes lässt sich in QGIS sehr einfach erstellen, indem das Auswahlwerkzeug genutzt wird und die selektierten Features anschließend mit einem Rechtclick auf den entsprechenden Layer und Wahl von „Save Selection As…“ als neues Shapefile gespeichert werden.

Da der Originaldatensatz datenschutzrechtlich geschützt ist habe ich einmal ein paar Beispielpolygone erzeugt, die in etwa auch der Größe eines sinnvollen Übungsdatensatzes entsprechen, wenn die einzelnen Tools auf ihre Funktionsweise hin getestet werden. Ich habe zwei Shapefiles:

  • parzellen (Durch schwarze Linien umrandete Polygone)
  • nutzung Grün eingefärbte Flächen)

Nun wollte ich einige dieser Polygone (im Beispielfall sind es die vier grünen Flächen) wieder anhand des Ausgangslayers (parzellen) zerlegen. Im Beispiel nehmen wir an ich möchte Fläche unten links wieder aufteilen. Zunächst hatte ich es über eine Funktion des Plugins ftools versucht. Dieses Plugin ist in der aktuellen Version von QGIS fester Bestandteil, muss allerdings noch unter Plugins –> Manage Plugins… aktiviert werden. Dann steht unter Vector –> Geoprocessing Tools –> Union zur Verfügung. Zuvor habe ich noch ein weiteres Shapefile erstellt das nur die fünf Polygone dieser grünen Fläche enthielt, da ansonsten alle Features des parzellen-Layers mit dem nutzung-Layer vereint würden. Dieses Shapefile habe ich muster genannt.

Unter Output shapefile wird noch der Name des neu zu erstellenden Layers eingetragen. Dann auf OK und der Layer wird erzeugt. Optisch sieht das Ergebnis auch ganz gut aus:

Wenn ich jetzt allerdings in die Attributtabelle schaue sehe ich folgendes:

Hier noch die Attributtabellen der Layer nutzung und muster:

Jetzt sieht man, dass durch das Vereinen der beiden Layer jede Menge zusätzlicher Features und Attributspalten erzeugt wurden. Das hat sicher seine Gründe, um Informationsverluste zu vermeiden. Für meine Ansprüche war es jedoch in diesem Fall unbrauchbar. Wäre mein Datensatz so klein wie dieser Beispieldatensatz wäre es kein Problem. Aber bei Attributtabellen mit über 50000 Zeilen lässt sich das unmöglich managen. Wahrscheinlich gibt es Möglichkeiten die redundanten Features irgendwie zu eliminieren, ich habe das entsprechende Tool noch nicht kennengelernt.

Sextante-Plugin

Ein weiteres Plugin, welches zunächst über die Plugin-Repositories nachinstalliert werden muss ist SEXTANTE. Ich hatte es bisher nicht verwendet und bin heute erst bei der Recherche nach einer Lösung darauf gestoßen. Es stellt eine Vielzahl zusätzlicher Tools zur Verfügung, vor allem indem es die Toolkits anderer OpenSource GIS Anwendungen integriert. Beispiele dafür sind die Tools von GrassGIS und SAGA GIS.

Ist das Sextante-Plugin installiert steht oben ein weiteres Pulldown-Menu Analysis zur Verfügung. SEXTANTE Toolbar zeigt daraufhin die verfügbaren Tools an. Zunächst habe ich mit den Grass Tools v.patch und v.overlay herunprobiert, hatte jedoch damit wenig Erfolg. Als relativ hilfreich hat sich jedoch das SAGA Tool Merge Shapes Layers herausgestellt.

Als Main Layer wurde nutzung verwendet, unter Additional Layer habe ich den Layer muster aktiviert. Möglich wäre auch die Auswahl mehrerer Layer gewesen. Als Merged Layer habe ich zunächst die Default-Einstellung belassen, da beim Versuch einen Layernamen anzugeben das Tool regelmäßig abstürzte. Es wurde also ein temporärer Layer erstellt. Hinterher kann man diesen ja ohnehin noch unter anderem Namen abspeichern.

Das Resultat ist optisch das Gleiche wie oben. Ein Blick auf die Attributtabelle zeigt jedoch folgendes:

Das sieht doch für meine Aufgabenstellung schon wesentlich aufgeräumter aus. Lediglich die markierte Zeile 3 enthält noch das größere Feature das wieder aufgesplittet wurde und müsste daher noch manuell gelöscht werden. Außerdem wurden die Spalten LAYER-ID und LAYER erzeugt um zu zeigen aus welchem Layer die Informationen entnommen wurden.

Merge shapefiles to one

Entschieden habe ich mich letztendlich jedoch für die Verwendung des Tools Merge shapefiles to one, welches unter Vector –> Data Management Tools zu finden ist. Das bedurfte zwar ein wenig Vorarbeit, war aber am Ende für meinen Datenumfang doch das effizienteste. Allerdings nur, da bisher nur ein kleiner Teil des gesamten Datensatzes bearbeitet wurde und demnach auch nur wenige Polygone wieder geschnitten werden mussten. Ansonsten wäre wahrscheinlich die das SAGA Tool am einfachsten gewesen.

Ich habe dann erstmal aus dem nutzungs-Layer die zu splittenden Features über die Attributtabelle ausgewählt und gelöscht. Dann die Features die diese zusammen diese Flächen ergeben im parzellen-Ausgangslayer markiert und als eigenes Shapefile gespeichert. Das ging auch mit dem großen Datensatz relativ einfach, da durch das Übereinanderliegen der Layer alle vorher gelöschten Features von nutzung farblich gut zu erkennen waren. Mit den verschiedenen Möglichkeiten des Auswahlwerkzeuges lassen sich auch große Mengen nicht zusammenhängender Features relativ schnell selektieren.

Hier kann man entweder einen Ordner ausdwählen, dann sollten auch nur die zu vereinenden Shapes in einem Ordner zusammen liegen. Oder man aktiviert das Feld Select by layers in the folder und kann mehrere Shapefiles auswählen. Hat man die Aufräumarbeiten vorher sauber gemacht erhält man daraufhin einen Layer der wirklich nur die Features enthält die man auch haben will.

Anstehende autodidaktische Projekte

Schon eine ganze Weile versuche ich mich ein wenig in der Programmiersprache Python zurechtzufinden. Einiges wurde auch schon erreicht, doch leider komme ich dann doch zu selten dazu. Ich hoffe in nächster Zeit ein bisschen schneller voran zu kommen.

Ziel dabei ist vor allem das Scripten für ein weiteres learning-by-doing Projekt von mir: OpenSource GIS-Anwendungen. Hier bisher insbesondere Quantum GIS (QGIS), worin ich mich schon relativ gut zurechtfinde, da es wirklich einfach und sehr anwenderfreundlich gestaltet ist. Außerdem ein paar Erfahrungen mit GrassGIS, was allerdings echt nicht sehr einfach ist und auf jeden Fall noch mehr Zeit erfordert. Angeschaut und herumgespielt habe ich außerdem mit SAGA GIS, uDIG, gvSIG und ein paar kleineren Tools aus dem Bereich. Diese sind eigentlich mit etwas Grundverständnis was Geographische Informationssysteme (GIS) angeht auch recht leicht zu handhaben.

Neu am Start ist jetzt außerdem, was das Programmieren angeht auch noch die Mono-Development Plattform um damit ein bisschen C# (C-Sharp) Erfahrungen zu machen.

Es ist also viel tun, los geht’s! Ich sollte nicht mehr so viel Zeit (sinnlos) im Netz verprokrastinieren. Daher jetzt mal ins Bett und….The Linux Command Line lesen. Upps, das ist ja noch ein zusätzliches Projekt. Tja, man muss vielseitig bleiben. Ich bin ja schon immer ein großer Fan des Universalgelehrtentums. 😉