Simulation der Erweiterung von Polygon-Features


13

Ich habe, was ich hoffe, eine interessante Frage. Ich arbeite an einer Aufgabe für einen GIS-Einführungskurs, in dem anhand einiger Daten zur Ölverschmutzung am Golf übliche vektorbasierte räumliche Analysemethoden (Puffer, Überlagerungen usw.) eingeführt werden. Ich habe eine Polygon-Feature-Class, die die Grenzen von enthält Das Öl von Deepwater Horizon wird an einem bestimmten Tag verschüttet, und ich simuliere seine Ausdehnung mit Puffern.

Es macht den Job, das Konzept zu veranschaulichen, liefert aber sicherlich keine realistischen Ergebnisse. Ich habe darüber nachgedacht, wie dies auf eine Weise geschehen kann, die weniger einheitliche Ergebnisse liefert und den Effekt von Strömungen nachahmt / vortäuscht, die das Öl in verschiedene Richtungen lenken, wenn es sich ausdehnt.

Im Allgemeinen suche ich nach einem Workflow, der bei gegebener Eingabe-Polygon-Funktion Folgendes bewirkt:

  • Erstellen Sie ein neues Polygon-Feature, das um einen bestimmten Bereich (z. B. 10 km²) oder einen bestimmten Faktor (z. B. 5%) größer als das Original ist.
  • Das neue Polygon-Feature hätte eine beliebige Form, mit der Einschränkung, dass ...
  • Das neue Polygon-Feature würde das ursprüngliche Polygon-Feature enthalten (dieser Punkt ist kein Deal Breaker, wäre aber nett zu haben).

Jede reale Lösung müsste die Modellierung von Meeresströmungen, Fluiddynamik und dergleichen beinhalten, was weit über das hinausgeht, was ich versuche (obwohl Lösungen, die dies beinhalten, sicherlich willkommen sind und interessant zu sehen wären). Aber die Idee hat meine Neugier auf das zugrunde liegende räumliche Problem geweckt und ich bin gespannt, welche Lösungen es gibt. Ich habe eine Lösung im Sinn, möchte aber gerne wissen, welche Lösungen andere haben.

Ich arbeite in der ESRI-Welt, aber Lösungen, die andere Pakete / Plattformen beinhalten, sind auf jeden Fall willkommen (obwohl ich sie möglicherweise nicht testen kann). Allgemeine Algorithmen, Pseudocode und Code sind ebenfalls in Ordnung.


2
Es gibt interessante und innovative Lösungen, aber ich bin besorgt über die implizite Annahme, dass eine solche Übung überhaupt etwas mit Ölunfällen zu tun haben würde. Die Menge an wissenschaftlichen Informationen ist nicht mehr als verfügbar für einen Philosophen, der auf seinen Nabel schaut. Sicher, es macht Spaß, Polygone zu verteilen - ich erinnere mich, dass ein ESRI-Mitarbeiter dies bereits '96 für Feuersimulationen mit ArcView 2 beschrieben hat - aber wie rechtfertigen Sie es, wenn dieser Prozess alles andere als willkürlich und möglicherweise irreführend ist?
whuber

1
@whuber - Ich behaupte nicht, dass die Ergebnisse alles andere als willkürlich wären. Ein willkürliches Ergebnis zu haben, ist etwas, das ich in der Frage aktiv suche. Sie haben Recht, dass die Ergebnisse keine Ähnlichkeit mit der realen Welt haben würden. Dies ist einer der Gründe, warum ich die Frage so betitelt habe (im Gegensatz zu "Simulation der Ausdehnung einer Ölpest"). Ich interessiere mich für den Aspekt der rechnergestützten Geometrie / GIS-Methodik und nicht für deren Anwendung in einem bestimmten Bereich. Der Teil der Ölpest war einfach der Anstoß zum Nachdenken über ein interessantes räumliches Problem. Ich werde versuchen, dies in der Frage zu klären.
James M

Vergessen zu erwähnen: Die Aufgabe enthält eine Frage, in der die Schüler gefragt werden, warum die Verwendung des Puffertools auf diese Weise eine schlechte Wahl ist, wenn Sie versuchen, die Realität widerzuspiegeln. Also, wenn jemand Angst hat, dass ich versuche, dies als realistisch auszugeben, sei nicht so :)
James M

Vielen Dank. Ich befürchtete, dass beeindruckende Studenten, die eine coole grafische Demonstration expandierender Polygone zusammen mit einer Erwähnung von "Ölverschmutzung" sahen, die erstere als realistische Darstellung der letzteren unkritisch akzeptieren könnten.
Whuber

Antworten:


7

Hallo

Hier finde ich ein wenig Spaß daran, es in PostGIS zu machen. Ich denke, dies könnte erweitert werden, sodass die Erweiterung einer Linienfolge folgt, die die aktuelle repräsentiert. Aber jetzt dehnt es sich nur in eine Richtung aus.

Es wird 50-mal iteriert und für jede Iteration wird das Polygon aus der letzten Iteration genommen, verschoben, gepuffert (vereinfacht, um einen reibungslosen Ablauf zu gewährleisten) und mit der konvexen Hülle verbunden. Ich dachte, dass Convexhull ein schöneres Ergebnis liefert, als es zu vereinigen.

Das Ergebnis sind also 50 Polygone, die immer größer werden. Jedes größere Polygon überlappt vollständig alle kleineren Polygone.

Um das Ergebnis zu sehen, können Sie es unter http://postgisonline.org/map.php versuchen

Kopieren Sie einfach den folgenden SQL-Code und klicken Sie auf "map1"

WITH RECURSIVE t (the_geom, n) AS (SELECT 'POLYGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))' :: geometry AS the_geom, 1 as n UNION ALL SELECT ST_Convexhull (ST_Collect (ST_Simplify (ST_Buffer (ST_Transscale (the_geom, 1.3, 2.7,1,1), 1), 0.1), the_geom)), n + 1 as n FROM t WHERE n <50) SELECT the_geom FROM t ;

Wenn Sie nur das Polygon ab der 30. Iteration sehen möchten, können Sie am Ende einen
Offset 30
zwischen dem t und dem Semikolon hinzufügen

Das Generieren dieser 50 Polygone benötigt ca. 50 ms, sodass das Modell ohne zu viel Wartezeit erweitert werden kann.

Grüße Nicklas

Dieser war noch schöner, denke ich:

WITH RECURSIVE t (the_geom, n) AS (SELECT 'POLYGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))' :: geometry AS the_geom, 1 as n UNION ALL SELECT st_convexhull (ST_collect (ST_Simplify (ST_Buffer (ST_Transscale (the_geom, 1.1 * n, 15.1.1), 0.2 * n), 0.1), the_geom)), n + 1 als n FROM t WHERE n <50) SELECT the_geom FROM t

Simulation der Expansion nach rechts drehen


Das ist eine saubere Lösung und eine weitere Erinnerung daran, dass ich Zeit finden muss, um mich mit GIS in einem räumlichen Datenbankkontext vertraut zu machen. Dies ist ein gutes Beispiel dafür, warum eine Site wie diese funktioniert. Ich finde nicht nur eine Lösung, die völlig anders ist als das, was ich mir vorgestellt habe, sondern ich finde auch eine neue Ressource als Bonus.
James M

Ja, es gibt viele Möglichkeiten mit räumlichem SQL. Die obige Abfrage ist aufgrund des rekursiven Teils etwas schwerer zu lesen als üblich. Es gibt viele großartige Ressourcen, die Ihnen den Einstieg erleichtern.
Nicklas Avén 20.10.10

3

Die Einschränkungen von whuber sind wichtig, und solange Sie dies nur zur Veranschaulichung tun und die Fluiddynamik nicht ins Spiel bringen möchten, ist dies möglich, erschwert jedoch das Problem.

Trotzdem denke ich, dass es eine interessante Frage ist und den Schülern Spaß machen könnte. Eine andere Möglichkeit, das Problem zu betrachten, besteht darin, es als rasterbasiertes Phänomen zu betrachten, bei dem die Dichte des Öls in jeder Zelle gemessen wird. Von dort aus können Sie ein Modell verwenden, das die Ansiotropie berücksichtigt, z. B. r.spread( Dokumentation ), um die Wachstumsrate zu modellieren, und möglicherweise auch Scheinströme , um die Ausbreitung zu steuern . In ArcGIS können Sie auf ähnliche Weise verschiedene Arten von Fokusoperationen ausführen und dabei unregelmäßige Formen verwenden, um die Probleme der linearen Pufferung zu umgehen.


2

Ich glaube, ich wäre versucht, Vektormerkmale zu erhalten, die die Ströme darstellen, und diese als Steuervektoren in einer Verzerrungsoperation zu verwenden. Der Schlüssel wäre, die Vektoren richtig zu skalieren, um die Ausbreitung eines einzelnen Tages nachzuahmen.

Ich bin mit Andy W einverstanden, dass das Fallenlassen der Grenze in Punkte eine Voraussetzung sein könnte. Möglicherweise müssen Sie auch die Anzahl der Punkte verdichten, um ein genaues Ergebnis zu erhalten.

Ich bin mir nicht sicher, wie Sie sich in der ESRI-Welt verziehen. Ich weiß, dass die Data Interop-Erweiterung dies tun würde, aber ich gehe davon aus, dass es entweder eine eingebaute Methode oder eine Erweiterung speziell für diese Art von Dingen geben muss.


1

Es würde mich nicht wundern, wenn jemand tatsächlich ähnliche Simulationen durchgeführt hätte, aber hier ist, wie ich denke, ich würde das Projekt angehen (ohne Vorkenntnisse über ozeanische Prozesse, die die Ölverschmutzung zerstreuen würden).

Wenn Sie streng mit Polygonen arbeiten möchten, würde ich Ihre Grenze in eine vorbestimmte Anzahl von Punkten aufteilen. Anhand dieser Punkte möchte ich Ihre Simulationen mit stochastischen Elementen in Bezug auf die Ausdehnungsrichtung und die Ausdehnungsentfernung (innerhalb festgelegter angemessener Grenzen) einführen und diese Schritte so oft wie nötig wiederholen. Stellen Sie dann die konvexe Hülle aller Punkte basierend auf den neuen Positionen wieder her (wenn dies immer das vorherige Polygon einschließen soll, müssen Sie die Ausdehnung nach außen begrenzen). Für einen Intro-GIS-Kurs würde ich wahrscheinlich nur verschiedene mögliche Iterationen angesichts dieser stochastischen Elemente visualisieren.

Auch ein etwas anderer Ansatz, ich denke, das Öl als Agenten in einer Simulation zu visualisieren, könnte ziemlich cool sein. Stellen Sie zum Beispiel für jedes verschüttete Barrel Rohöl ein neues Mittel her und fügen Sie dann die gleichen stochastischen Elemente hinzu, wie ich bereits sagte. Sie können entweder die Ausdehnung der Wirkstoffe im gesamten Golf zu gegebener Zeit oder die Dichte des Öls zu gegebener Zeit visualisieren.

Es klingt nach einem wirklich coolen Projekt und poste Bilder, wenn du fertig bist.


0

Um die Vielfalt der Ergebnisse zu veranschaulichen, die eine solche Frage hervorbringen kann, gehe ich auf die Lösung ein, die ich beim Posten der Frage im Brainstorming gefunden habe. Ich hoffe, in den nächsten Tagen eine Chance zu bekommen, es umzusetzen, und werde es veröffentlichen, wenn ich es tue.

  1. Rasterisieren Sie das Polygon in ein binäres Raster.
  2. Erstellen Sie ein Raster, das größer als die Ergebnisse von 1 ist, mit zufällig platzierten 0- und 1-Werten. Die Verteilung der Werte 0 und 1 entspricht dem Betrag, den das Polygon zum Erweitern benötigt. Also, wenn das Polygon 5 km ² erweitert werden muss. Um sein Ziel zu erreichen, wären es 5 km ². Wert von 1 Zellen.
  3. Unionsergebnisse von (1) und (2).
  4. Entfernen Sie alle Zellen aus dem Ergebnis von (3), die nicht neben dem ursprünglichen gerasterten Polygon liegen.
  5. Fügen Sie die Ergebnisse von (4) anstelle des ursprünglichen gerasterten Polygons in (2) ein und wiederholen Sie dies, bis die Anzahl der (1) Zellen mit dem Zielbereich übereinstimmt.

Es ist wahrscheinlich nicht die effizienteste Methode, aber es sollte funktionieren. Die Idee basiert auf einer Übung zur Modellierung des Stadtwachstums, die eine Oberschicht durchführt. Ihr zufälliges Raster wird basierend auf der Eignung für das Wachstum erstellt und sie haben keine Gebietsbeschränkungen, aber der zufällige Wachstumsteil ist im Wesentlichen der gleiche.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.