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.
Antworten:
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
quelle
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.quelle
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.
quelle
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.
quelle
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.
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.
quelle