Zählen und Rastern von Polygonüberlappungen in ArcGIS Desktop?
17
Wie können Sie eine Vektorebene mit überlappenden Polygonen in ein Raster umwandeln, in dem jede Zelle die Anzahl der Polygone zählt, die diese Zelle enthalten?
Wir untersuchen Polygone von Brandherden zwischen 1976 und 2000 und möchten wissen, wie viele Brände in jeder Rasterzelle enthalten sind.
Führen Sie dies in drei Schritten durch: Zerlegen Sie die Polygone in ihre Bestandteile, zählen Sie die Überlappungen und konvertieren Sie sie in ein Raster. Dadurch werden die potenziell enormen Rechenaufwendungen vermieden, die entstehen, wenn jedes Polygon separat in ein Raster konvertiert und diese Raster kombiniert werden.
Union(im GeoprocessingMenü) zerlegt die Polygone in ihre Teile.
Leider wird jede Überlappung in der Ausgabe dupliziert : Sie enthält eine identische Kopie für jedes Originalpolygon, das sie abdeckt. Deshalb
Dissolve(erneut im GeoprocessingMenü) werden überlappende Teile zusammengeführt, sofern Sie eine Möglichkeit finden, sie eindeutig zu identifizieren. Lesen Sie den Dialog durch: Gegen Ende haben Sie die Möglichkeit, "Statistiken" zu berechnen. Wählen Sie ein beliebiges Feld aus, in dem die ursprünglichen Polygone möglicherweise identifiziert wurden, und fordern Sie eine Zählung an.
In vielen Fällen werden die Teile durch die Kombination von Polygonfläche und Umfang eindeutig identifiziert. Andernfalls können Sie weitere geometrische Eigenschaften in zusätzlichen Feldern wie den Koordinaten des Schwerpunkts hinzufügen, bis Sie genügend Informationen gesammelt haben, um jedes Feature zu unterscheiden.
Die resultierende Ebene hat ein Merkmal für jede Polygonüberlappung und eine Art "Zähl" -Feld, das die Anzahl der Überlappungen zählt.
Konvertieren Sie das in ein Raster, indem Sie das Feld "count" für die Attribute verwenden.
Hier sind zum Beispiel einige überlappende Polygone und ihre Bezeichner mit der gezeigten Attributtabelle:
Nach dem zweiten Schritt haben wir einen Datensatz für jeden überlappenden Bereich zusammen mit einer Zählung, die bereits verwendet werden kann, um das Ausmaß der Überlappung zu symbolisieren:
Der Rest ist einfach - und es ist nur ein einziger Rasterungsvorgang.
Diese Vektormethode funktioniert auch hervorragend, außer wenn sie auf Hunderttausende von Polygonen mit vielen Überlappungen auf einem Computer mit begrenztem Speicher
angewendet wird
@ccn Wenn es mehr Polygone gibt, als ArcGIS verarbeiten kann, teilen Sie das Dataset in Teile, die es verarbeiten kann . Die Ausgabe besteht aus mehreren Rastern - aber nicht aus Tausenden oder Millionen -, die sich dann einfach summieren lassen. Ein weiterer Vorteil der Verwendung Unionist, dass mit fast demselben Workflow die Situation angegangen werden kann, in der sich die Polygone in mehreren Datensätzen befinden (was normalerweise ein schlechtes Datenbankdesign ist, aber leider häufig vorkommt): Man vereinigt einfach alle Eingabedatensätze auf einmal.
whuber
@ccn (Fortsetzung) Der Punkt, den Sie ansprechen, ist folgender: Wann ist es besser, die Polygone zu rastern und mit Rasteroperationen zusammenzuführen, als mit Vektoroperationen ( union), gefolgt von Rasterisierung? Vektoroperationen geraten ins Stocken, wenn die Features detaillierter als nötig digitalisiert werden, wodurch sie mit zu vielen Scheitelpunkten versehen werden. Unter diesen extremen Umständen könnte der Rasteransatz besser sein (obwohl eine erste Vereinfachung der Polygone eine überlegene Option sein könnte). In allen anderen Situationen ist das separate Rastern jedes Polygons eine enorme Verschwendung von Computer- und menschlicher Zeit.
Whuber
1
+1 für eine vektorbasierte Lösung. Um die Dinge hier ins rechte Licht zu rücken, sind die Brennen-Perimeter-Daten nie sehr groß. Beispielsweise enthält der gesamte MTBS-Brennumfangs-Datensatz (USA, einschließlich Alaska) für 1984 - 2010 ~ 19000 Polygone. Ein vektorbasierter oder ein rasterbasierter Ansatz funktioniert problemlos.
Aaron
@ Aaron Danke für die Perspektive. Um die konterminösen USA sofort mit einer angemessenen Auflösung (z. B. 100 m) zu erreichen, benötigen Sie beispielsweise ein Raster von 50000 Spalten und 30000 Zeilen mit 1.500.000.000 Zellen. Das Erzeugen von 19.000 solcher Raster - auch unter Berücksichtigung der eingebauten Komprimierung - und das anschließende Durchführen von 19.000 * 1500000000 = ungefähr 30000 Milliarden Additionen würde einige Zeit in Anspruch nehmen ! Wenn stattdessen für jedes Polygon beispielsweise 100 Scheitelpunkte verwendet werden (was sehr detailliert ist), umfasst die Vereinigung 1.900.000 Scheitelpunkte und ist eine O (n log (n)) -Operation. im Prinzip (aber nicht in ArcGIS :-) dauert das weniger als 1 sek.
Für diesen rechnerisch schnellen und einfachen Raster-Ansatz müssen Sie (1) die überlappenden Polygone in separate Ebenen unterteilen (vermutlich nach Jahr für Feuerpolygone), indem Sie in ModelBuilder die Option " Nach Attributen auswählen" mit einem Iterator oder einem Skript-Tool verwenden (2) Polygon in Raster mit der MAXIMUM_COMBINED_AREA Zellenzuweisung (gleiche Gewährleistung Zellgröße , Fang - Raster , und daß das Ausmaß , bleibt das gleiche wie die gesamte Gruppe von Polygonen) - einem konstanten Feldwert (zB das Jahresfeld oder Zeilen verwenden , die alle 1 s haben) Zum Konvertieren auf (verwenden Sie ModelBuilder erneut mit einem Iterator oder Python-Skript, um die Automatisierung zu unterstützen), und wenden Sie dann (3) das folgende Spatial Analyst-Tool an: Cell Statistics - Verwenden Sie "statistics_type VARIETY", wenn jedes Raster einen eindeutigen Wert hat, z. B. "year" oder "SUM", wenn alle Rasterzellenwerte 1s sind. - Achten Sie darauf, NoData zu ignorieren.
Die Zwischen-Raster (aus der vorherigen Konvertierung) können gelöscht werden oder können für nachfolgende Rasteranalysen verwendet werden.
Union
ist, dass mit fast demselben Workflow die Situation angegangen werden kann, in der sich die Polygone in mehreren Datensätzen befinden (was normalerweise ein schlechtes Datenbankdesign ist, aber leider häufig vorkommt): Man vereinigt einfach alle Eingabedatensätze auf einmal.union
), gefolgt von Rasterisierung? Vektoroperationen geraten ins Stocken, wenn die Features detaillierter als nötig digitalisiert werden, wodurch sie mit zu vielen Scheitelpunkten versehen werden. Unter diesen extremen Umständen könnte der Rasteransatz besser sein (obwohl eine erste Vereinfachung der Polygone eine überlegene Option sein könnte). In allen anderen Situationen ist das separate Rastern jedes Polygons eine enorme Verschwendung von Computer- und menschlicher Zeit.Der folgende Beitrag enthält eine ähnliche Frage, für die Sie eine verwandte Lösung finden könnten: Erstellen einer Rasteroberfläche aus Überlappungen von Vektorpolygon-Shapefiles? .
Für diesen rechnerisch schnellen und einfachen Raster-Ansatz müssen Sie (1) die überlappenden Polygone in separate Ebenen unterteilen (vermutlich nach Jahr für Feuerpolygone), indem Sie in ModelBuilder die Option " Nach Attributen auswählen" mit einem Iterator oder einem Skript-Tool verwenden (2) Polygon in Raster mit der MAXIMUM_COMBINED_AREA Zellenzuweisung (gleiche Gewährleistung Zellgröße , Fang - Raster , und daß das Ausmaß , bleibt das gleiche wie die gesamte Gruppe von Polygonen) - einem konstanten Feldwert (zB das Jahresfeld oder Zeilen verwenden , die alle 1 s haben) Zum Konvertieren auf (verwenden Sie ModelBuilder erneut mit einem Iterator oder Python-Skript, um die Automatisierung zu unterstützen), und wenden Sie dann (3) das folgende Spatial Analyst-Tool an: Cell Statistics - Verwenden Sie "statistics_type VARIETY", wenn jedes Raster einen eindeutigen Wert hat, z. B. "year" oder "SUM", wenn alle Rasterzellenwerte 1s sind. - Achten Sie darauf, NoData zu ignorieren.
Die Zwischen-Raster (aus der vorherigen Konvertierung) können gelöscht werden oder können für nachfolgende Rasteranalysen verwendet werden.
quelle