Symulowanie rozszerzenia funkcji wielokąta


13

Mam nadzieję, że będzie to interesujące pytanie. Pracuję nad zleceniem wprowadzenia do kursu GIS, który wykorzystuje niektóre dane o wycieku ropy z Zatoki Perskiej, aby wprowadzić typowe metody analizy przestrzennej oparte na wektorze (bufory, nakładki itp.) Mam klasę cech wielokąta, która trzyma granice wyciek oleju Deepwater Horizon w danym dniu, a ja symuluję jego ekspansję za pomocą buforów.

Zadanie polega na zilustrowaniu koncepcji, ale z pewnością nie zapewnia realistycznych rezultatów. Zmusiło mnie do zastanowienia się, jak można to zrobić w sposób zapewniający mniej jednolite wyniki, naśladując / udając działanie prądów kierujących olej w różnych kierunkach podczas jego rozszerzania.

Ogólnie rzecz biorąc, szukam przepływu pracy, który osiągnąłby następujące wyniki, biorąc pod uwagę wejściową funkcję wielokąta:

  • Utwórz nowy element wielokąta, który jest większy od oryginału o określony obszar (np. 10 km kw.) Lub może określony współczynnik (np. 5%)
  • Nowa funkcja wielokąta miałaby dowolny kształt, z zastrzeżeniem, że ...
  • Nowa funkcja wielokąta zawierałaby oryginalną funkcję wielokąta (ten punkt nie jest przełomowy, ale dobrze byłoby mieć)

Każde rzeczywiste rozwiązanie musiałoby obejmować modelowanie prądów oceanicznych, dynamikę płynów itp., Co wykracza poza zakres tego, co próbuję zrobić (chociaż rozwiązania, które to uwzględniają, są z pewnością mile widziane i byłyby interesujące do zobaczenia), ale ten pomysł wzbudził moją ciekawość na temat leżącego u podstaw problemu przestrzennego i jestem ciekawy, jakie są dostępne rozwiązania. Mam na myśli jedno rozwiązanie, ale chciałbym usłyszeć, jakie rozwiązania mogą mieć inni.

Pracuję w świecie ESRI, ale rozwiązania, które dotyczą innych pakietów / platform, są z pewnością mile widziane (choć mogę ich nie przetestować). Ogólne algorytmy, pseudokod i kod są również w porządku.


2
Istnieją ciekawe i innowacyjne rozwiązania, ale martwi mnie domniemane założenie, że takie ćwiczenie miałoby cokolwiek wspólnego z wyciekami ropy. Ilość zaangażowanych informacji naukowych jest nie więcej niż dostępna dla filozofa spoglądającego na pępek. Jasne, fajnie jest rozrzucać wielokąty - pamiętam, jak słyszałem przedstawiciela ESRI opisującego robienie symulacji pożaru za pomocą ArcView 2 jeszcze w 96 roku - ale jak usprawiedliwiacie twierdzenie, że ten proces jest czymś innym niż arbitralnym i być może wprowadzającym w błąd?
whuber

1
@ whuber - Nie twierdzę, że wyniki byłyby cokolwiek innego niż arbitralne. Osiągnięcie arbitralnego wyniku jest czymś, czego aktywnie szukam w tym pytaniu. Masz rację, że wyniki nie będą przypominały prawdziwego świata. To jeden z powodów, dla których tak samo napisałem pytanie (w przeciwieństwie do „Symulacji ekspansji wycieku ropy”). Interesuje mnie aspekt geometrii obliczeniowej / metodologii GIS, a nie jej zastosowanie w konkretnej dziedzinie. Wyciek ropy był po prostu impulsem do myślenia o interesującym problemie przestrzennym. Spróbuję wyjaśnić to w pytaniu.
James M

Zapomniałem wspomnieć: w zadaniu jest pytanie, w którym uczniowie zastanawiają się, dlaczego użycie narzędzia buforującego w ten sposób jest złym wyborem, jeśli próbujesz odzwierciedlić rzeczywistość. Więc jeśli ktoś się martwi, że staram się przekazać to jako realistyczne, nie bądźcie :)
James M

Dzięki. Niepokoiło mnie to, że wrażliwi studenci, widząc fajną graficzną demonstrację rozszerzających się wielokątów, a także wzmiankę o „wycieku ropy”, mogą bezkrytycznie zaakceptować tę pierwszą jako realistyczną reprezentację drugiej.
whuber

Odpowiedzi:


7

Halo

Tutaj myślę, że to fajny sposób na zrobienie tego w PostGIS. Myślę, że można to rozszerzyć, aby rozszerzenie następowało po pewnym linijce reprezentującej prąd. Ale teraz rozszerza się tylko w jednym kierunku.

Wykonuje iterację 50 razy i dla każdej iteracji pobiera wielokąt z ostatniej iteracji, przesuwa go, buforuje (upraszcza, aby wszystko działało płynniej) i łączy go z wypukłym kadłubem. Myślałem, że wypukły daje lepszy wynik niż połączenie.

W rezultacie powstaje 50 wielokątów, które stają się coraz większe. Każde większe wielokąty całkowicie nachodzą na wszystkie mniejsze wielokąty.

Aby zobaczyć wynik, możesz spróbować na http://postgisonline.org/map.php

Po prostu skopiuj poniższy kod SQL i kliknij „map1”

Z REKURSYWNYM t (the_geom, n) AS (WYBIERZ „POLYGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))” :: geometria 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 OD t GDZIE n <50) WYBIERZ ten argument od t ;

Jeśli chcesz tylko zobaczyć wielokąt z 30-tej iteracji, możesz dodać
limit 1 przesunięcia 30
między ti średnikiem na końcu

generowanie tych 50 wielokątów zajmuje około 50 ms, więc powinno być możliwe rozwinięcie modelu bez zbytniego oczekiwania.

Pozdrawiam Nicklas

Myślę, że ten był jeszcze ładniejszy:

Z REKURSYWNYM t (the_geom, n) AS (WYBIERZ „POLYGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))” :: geometria 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 as n OD T GDZIE n <50) Wybierz the_geom FROM t

symulacja rozszerzenia skręca w prawo


To fajne rozwiązanie i jeszcze jedno przypomnienie, że muszę znaleźć czas, aby zacząć uczyć się o GIS w kontekście przestrzennej bazy danych. To dobry przykład, dlaczego taka witryna działa. Nie tylko znajduję rozwiązanie zupełnie inne niż to, co miałem na myśli, ale znajduję nowy zasób jako bonus.
James M

Tak, istnieje wiele posibilitów z przestrzennym sql. Powyższe zapytanie jest nieco trudniejsze do odczytania niż zwykle ze względu na część rekurencyjną. Istnieje wiele świetnych zasobów, które pomogą Ci zacząć.
Nicklas Avén,

3

zastrzeżenia Whubera są ważne i tak długo, jak robisz to wyłącznie w celach ilustracyjnych i nie chcesz angażować się w dynamikę płynów, co jest możliwe, ale komplikuje problem.

To powiedziawszy, uważam, że jest to interesujące pytanie i może być zabawą dla studentów. Innym sposobem spojrzenia na problem jest myślenie o nim jako zjawisku opartym na rastrze, z gęstością oleju mierzoną w każdej komórce. Stamtąd można użyć modelu uwzględniającego ansiotropię, takiego jak r.spread( dokumentacja ), aby modelować tempo wzrostu, być może włączając sztuczne prądy do „kierowania” spreadem. Podobnie możesz zrobić coś z różnymi rodzajami operacji ogniskowych w ArcGIS, używając nieregularnych kształtów, aby obejść problemy z buforowaniem liniowym.


2

Myślę, że kusiłoby mnie, aby uzyskać cechy wektorowe reprezentujące prądy i użyć ich jako wektorów sterujących w operacji wypaczania. Kluczem byłoby prawidłowe skalowanie wektorów, tak aby naśladować rozpiętość jednego dnia.

Zgadzam się z Andym W, że upuszczenie granicy na punkty może być warunkiem wstępnym. Konieczne może być również zagęszczenie liczby punktów, aby uzyskać dokładny wynik.

Obawiam się, że nie jestem pewien, jak wypaczasz się w świecie ESRI. Wiem, że rozszerzenie Data Interop by to zrobiło, ale przypuszczam, że musi istnieć albo wbudowana metoda, albo rozszerzenie specjalnie do tego rodzaju rzeczy.


1

Nie zdziwiłbym się, gdyby ktoś faktycznie przeprowadził podobne symulacje, ale oto, jak myślę, podszedłbym do projektu (nie mając wcześniejszej wiedzy na temat procesów oceanicznych, które rozproszyłyby wyciek ropy).

Jeśli chcesz ściśle pracować z wielokątami, podzieliłbym twoją granicę na z góry określoną liczbę punktów. Korzystając z tych punktów, przedstawiłbym wasze symulacje, z elementami stochastycznymi w odniesieniu do kierunku ekspansji i odległości ekspansji (w ustalonych rozsądnych granicach), powtarzam te kroki tyle razy, ile to konieczne. Następnie ponownie wykonaj wypukły kadłub wszystkich punktów na podstawie nowych lokalizacji (jeśli chcesz, aby zawsze zawierał poprzedni wielokąt, będziesz musiał ograniczyć ekspansję na zewnątrz). W przypadku wstępnego kursu GIS prawdopodobnie wyobrażam sobie kilka różnych możliwych iteracji, biorąc pod uwagę te elementy stochastyczne.

Również nieco inne podejście, myślę, że wizualizacja oleju jako czynników w symulacji może być całkiem fajna. Na przykład dla każdej rozlanej surowej baryłki oleju stwórz nowy środek, a następnie dodaj te same elementy stochastyczne, jak powiedziałem wcześniej. Możesz wizualizować ekspansję agentów w czasie w Zatoce Perskiej lub wizualizować gęstość ropy naftowej w czasie.

To brzmi jak naprawdę fajny projekt i publikuj zdjęcia po zakończeniu.


0

Aby zilustrować różnorodność wyników, jakie może wywołać takie pytanie, przedstawię rozwiązanie burzy mózgów, kiedy zamieściłem pytanie. Mam nadzieję, że uda mi się go wdrożyć w ciągu najbliższych kilku dni i opublikuję go, gdy to zrobię.

  1. Rasteryzuj wielokąt w binarny raster.
  2. Utwórz raster większy niż wyniki 1 z losowo umieszczonymi wartościami 0 i 1. Rozkład wartości 0 i 1 byłby zgodny z wielkością potrzebną do rozwinięcia się wielokąta. Więc jeśli wielokąt musi rozszerzyć 5 km2. aby osiągnąć swój cel, byłoby 5 km kw. wart 1 komórki.
  3. Wyniki unijne z (1) i (2).
  4. Usuń wszystkie komórki z wyniku (3), które nie sąsiadują z oryginalnym zrasteryzowanym wielokątem.
  5. Wprowadź wyniki (4) do (2) zamiast oryginalnego zrasteryzowanego wielokąta i powtarzaj, aż liczba (1) komórek dopasuje się do obszaru docelowego.

Prawdopodobnie nie jest to najbardziej efektywny sposób, ale powinien działać. Pomysł opiera się na ćwiczeniach modelowania wzrostu miejskiego, które wykonuje klasa wyższa. Ich losowy raster jest tworzony w oparciu o przydatność do wzrostu i nie mają ograniczeń obszarowych, ale część losowego wzrostu jest zasadniczo taka sama.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.