Die Gewissheit
Im letzten Artikel habe ich einen Schnelldurchlauf durch die gängigsten FOSSGIS Werkzeuge vorgenommen um zu dem Schluss zu kommen, dass GRASS GIS bei rauhen Datenmengen einfach am besten abschneidet was die Performance angeht. Bei Verschneidungen mit kleinen Polygonen, wo sich PostGIS mit Hilfe des Räumlichen Index auf die relevanten Features konzentrieren kann ist die Leistung von PostGIS auch ganz gut. Mit dem Zerstückeln von großen Datensätzen durch die Verwendung von Vektorgittern kann man solche Verschneidungen auch um einiges beschleunigen. Allerdings hat man bei folgendem Fall wenig Chancen durch dieses Vorgehen Performance zu gewinnen: Wenn ST_Difference ins Spiel kommt.
Kurze Klärung: Nicht nur Verschneidungen sind in der GIS-Welt häufig, bei denen die Schnittmenge von zwei Ebenen berechnet wird – nein auch das Ausschneiden von Ausschlussgebieten kommt des öfteren vor. Dies entspricht dem Werkzeug „Erase“ in ArcGIS bzw. dem Tool „v.overlay operator=’not'“ in GRASS GIS. In PostGIS kann man solche Schweinereien auch durchführen. Wer allerdings jetzt unbedacht zu ST_Difference greift, der sei gewarnt! Um das erwartete Ergebnis zu erhalten, sollte man die Differenz-Ebene zuerst mit ST_Union vereinigen, weil SQL eben Feature per Feature anfrägt und damit auf den ersten Blick „fehlerhafte“ Ergebnisse liefert. Die Leistung ist jedoch in beiden Fällen eher dünn.
Das nachfolgende Zitat aus einem Beitrag in der PostGIS Mailing-Liste erklärt warum:
By it’s nature, using SQL for spatial computation is most efficient for
operations which can be carried out in a feature-wise manner.
Unfortunately, overlay does not fall into this category (since there is
a large amount of interaction between features.
Implementing a more efficient overlay algorithm in PostGIS is a nice challenge for the future… [1]
Soll heissen: Große Datenmengen und „Erase“ gehen bei PostGIS nur mit seeeehr viel Geduld. Ich bin spätestens an dieser Stelle zu GRASS GIS gewechselt. Nicht nur ArcGIS nützt nämlich effiziente Algorithmen zum Verschneiden von kompletten Ebenen. Übrigens: seit Mitte Februar gibts jetzt GRASS GIS in der stabilen Version 6.4.2. Was? Und 64Bit? Aber sicher.. Wann kommt nochmal ArcGIS 64Bit?