Mensimulasikan perluasan fitur poligon


13

Saya mendapatkan apa yang saya harap akan menjadi pertanyaan menarik. Saya sedang mengerjakan tugas untuk pengantar kursus GIS yang menggunakan beberapa data tumpahan minyak Teluk untuk memperkenalkan metode analisis spasial berbasis vektor yang umum (buffer, overlay, dll.) Saya punya kelas fitur poligon yang memiliki batasan tumpahan minyak Deepwater Horizon pada hari tertentu, dan saya mensimulasikan ekspansi dengan buffer.

Ia melakukan pekerjaan untuk menggambarkan konsep, tetapi tentu saja tidak memberikan hasil yang realistis. Itu membuat saya berpikir tentang bagaimana hal ini dapat dilakukan dengan cara yang memberikan hasil yang kurang seragam, meniru / memalsukan efek arus yang mengarahkan minyak ke berbagai arah saat mengembang.

Dalam arti umum, saya sedang mencari alur kerja yang akan mencapai hal berikut ini diberikan fitur input poligon:

  • Buat fitur poligon baru yang lebih besar dari aslinya dengan area tertentu (seperti 10 km persegi.) Atau mungkin faktor yang ditentukan (seperti 5%)
  • Fitur poligon baru akan memiliki bentuk yang sewenang-wenang, dengan peringatan bahwa ...
  • Fitur poligon baru akan berisi fitur poligon asli (titik ini bukan pemecah kesepakatan, tetapi akan menyenangkan untuk memiliki)

Setiap solusi dunia nyata harus melibatkan pemodelan arus laut, dinamika fluida, dan sejenisnya, yang berjalan dengan baik di luar ruang lingkup apa yang saya coba lakukan (meskipun solusi menggabungkan ini tentu saja diterima dan akan menarik untuk dilihat), tetapi gagasan itu menggelitik keingintahuan saya tentang masalah tata ruang yang mendasarinya dan saya ingin tahu solusi apa yang ada di luar sana. Saya punya satu solusi dalam pikiran, tetapi saya ingin mendengar solusi apa yang mungkin dimiliki orang lain.

Saya bekerja di dunia ESRI, tetapi solusi yang melibatkan paket / platform lain pasti diterima (meskipun saya mungkin tidak dapat mengujinya). Algoritma umum, pseudocode, dan kode juga baik-baik saja.


2
Ada solusi yang menarik dan inovatif, tetapi saya khawatir dengan premis implisit bahwa latihan seperti itu akan ada hubungannya dengan tumpahan minyak. Jumlah informasi ilmiah yang terlibat tidak lebih dari yang tersedia bagi seorang filsuf yang memandang pusarnya. Tentu, sangat menyenangkan untuk menyebarkan poligon di sekitar - Saya ingat pernah mendengar perwakilan ESRI menjelaskan melakukan ini untuk simulasi api dengan ArcView 2 di tahun '96 - tetapi bagaimana Anda membenarkan mengatakan proses ini sama sekali tidak sewenang-wenang dan mungkin menyesatkan?
whuber

1
@whuber - Saya tidak mengklaim hasilnya tidak akan berubah. Memiliki hasil yang sewenang-wenang adalah sesuatu yang secara aktif saya cari dalam pertanyaan itu. Anda benar bahwa hasilnya tidak akan mirip dengan dunia nyata. Itulah bagian dari alasan mengapa saya memberi judul pertanyaan seperti yang saya lakukan (sebagai lawan dari "Mensimulasikan ekspansi tumpahan minyak"). Saya tertarik pada aspek metodologi geometri / GIS komputasi, bukan penerapannya dalam domain tertentu. Bagian tumpahan minyak hanyalah dorongan untuk memikirkan masalah tata ruang yang menarik. Saya akan mencoba dan menjelaskan ini dalam pertanyaan.
James M

Lupa menyebutkan: ada pertanyaan dalam tugas yang meminta siswa untuk berpikir tentang mengapa menggunakan alat penyangga dengan cara ini adalah pilihan yang buruk jika Anda mencoba untuk mencerminkan kenyataan. Jadi, jika ada yang khawatir saya mencoba menganggap ini realistis, jangan :)
James M

Terima kasih. Saya khawatir bahwa siswa yang mudah terpengaruh, setelah melihat demonstrasi grafis keren memperluas poligon bersama dengan beberapa menyebutkan "tumpahan minyak," mungkin secara tidak kritis menerima yang pertama sebagai representasi realistis dari yang terakhir.
whuber

Jawaban:


7

Halo

Di sini saya pikir sedikit cara yang menyenangkan untuk melakukannya di PostGIS. Ini saya pikir bisa diperpanjang sehingga ekspansi mengikuti beberapa linestring yang mewakili arus. Tapi sekarang itu hanya mengembang dalam satu arah.

Iterates 50 kali dan untuk setiap iterasi mengambil poligon dari iterasi terakhir, memindahkannya, buffer (menyederhanakannya untuk membuat semuanya berjalan lebih lancar) dan menyatukannya dengan convexhull. Saya pikir convexhull memberikan hasil yang lebih baik daripada menyatukannya.

Jadi hasilnya adalah 50 poligon menjadi lebih besar dan lebih besar. Setiap poligon yang lebih besar benar-benar tumpang tindih dengan semua poligon yang lebih kecil.

Untuk melihat hasilnya, Anda dapat mencobanya di http://postgisonline.org/map.php

Cukup salin kode sql di bawah ini dan klik "map1"

DENGAN RECURSIVE t (the_geom, n) AS (SELECT 'POLYGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))' :: geometri 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 sebagai n FROM t WHERE n <50) SELECT the_geom FROM ;

Jika Anda hanya ingin melihat poligon dari iterasi 30: Anda dapat menambahkan
batas 1 mengimbangi 30
antara t dan titik koma pada akhirnya

menghasilkan 50 poligon tersebut menggunakan sekitar 50 ms sehingga mungkin untuk memperluas model tanpa menunggu terlalu lama.

Salam Nicklas

Yang ini bahkan lebih baik, saya pikir:

DENGAN RECURSIVE t (the_geom, n) AS (SELECT 'POLYGON ((10 10,8 13, 10 15, 12 14, 15 15, 16 12, 15 10, 10 10))' :: geometri 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 sebagai n FROM t WHERE n <50) PILIH the_geom DARI t

mensimulasikan ekspansi belok kanan


Itu solusi yang rapi, dan pengingat lain bahwa saya perlu mencari waktu untuk mulai belajar tentang GIS dalam konteks basis data spasial. Ini adalah contoh bagus mengapa situs seperti ini berfungsi. Saya tidak hanya menemukan solusi yang sama sekali berbeda dari apa yang ada dalam pikiran saya, tetapi saya menemukan sumber daya baru sebagai bonus.
James M

Ya, ada banyak posibilites dengan sql spasial. Kueri di atas sedikit lebih sulit dibaca daripada biasanya karena bagian rekursif. Ada banyak sumber yang bagus di luar sana untuk membantu memulai.
Nicklas Avén

3

peringatan whuber adalah penting, dan selama Anda melakukan ini hanya untuk tujuan ilustrasi dan tidak ingin menarik ke dalam dinamika fluida permainan, yang mungkin tetapi memperumit masalah.

Yang mengatakan, saya pikir itu pertanyaan yang menarik, dan bisa menyenangkan bagi para siswa. Cara lain untuk melihat masalah adalah dengan menganggapnya sebagai fenomena berbasis raster, dengan kepadatan minyak diukur dalam setiap sel. Dari sana, Anda dapat menggunakan model yang memperhitungkan ansiotropi seperti r.spread( dokumentasi ) untuk memodelkan tingkat pertumbuhan, mungkin termasuk arus palsu untuk 'mengarahkan' spread. Anda juga bisa melakukan sesuatu dengan berbagai jenis operasi fokus dalam ArcGIS, menggunakan bentuk tidak teratur untuk mengatasi masalah buffering linier.


2

Saya pikir saya akan tergoda untuk mendapatkan fitur vektor yang mewakili arus, dan menggunakannya sebagai vektor kontrol dalam operasi warping. Kuncinya adalah penskalaan vektor dengan benar sehingga meniru penyebaran satu hari.

Saya setuju dengan Andy W bahwa menjatuhkan batas ke poin mungkin merupakan prasyarat. Anda mungkin juga perlu menambah jumlah poin untuk mendapatkan hasil yang akurat.

Saya tidak yakin bagaimana Anda warp di dunia ESRI. Saya tahu ekstensi Data Interop akan melakukannya, tetapi saya kira juga harus ada metode bawaan atau ekstensi khusus untuk hal semacam ini.


1

Saya tidak akan terkejut jika seseorang benar-benar melakukan simulasi serupa, tetapi di sini saya pikir saya akan mendekati proyek (tidak memiliki pengetahuan sebelumnya tentang proses Oseanik yang akan meredakan tumpahan minyak).

Jika Anda ingin benar-benar bekerja dengan poligon, saya akan mengiris batas Anda menjadi sejumlah poin yang telah ditentukan. Dengan menggunakan titik-titik itu, saya akan memperkenalkan simulasi Anda, dengan unsur-unsur stokastik sehubungan dengan arah ekspansi dan jarak ekspansi (dalam batas wajar yang telah ditentukan sebelumnya), ulangi langkah-langkah itu sebanyak yang diperlukan. Kemudian buat ulang cembung lambung dari semua titik berdasarkan lokasi baru (jika Anda ingin ini selalu menyertakan poligon sebelumnya Anda harus membatasi ekspansi ke luar). Untuk kursus GIS intro, saya mungkin hanya akan memvisualisasikan beberapa kemungkinan iterasi yang berbeda mengingat unsur-unsur stokastik tersebut.

Juga sedikit pendekatan yang berbeda, saya pikir memvisualisasikan minyak sebagai agen dalam simulasi bisa sangat keren. Misalnya untuk setiap barel minyak mentah tumpah membuat agen baru, lalu tambahkan unsur stokastik yang sama seperti yang saya katakan sebelumnya. Anda dapat memvisualisasikan perluasan agen di seluruh Teluk dalam waktu, atau memvisualisasikan kepadatan minyak dalam waktu.

Kedengarannya seperti proyek yang sangat keren, dan memposting gambar ketika Anda selesai.


0

Hanya untuk mengilustrasikan berbagai hasil yang dapat dihasilkan oleh pertanyaan seperti ini, saya akan membahas solusi yang saya lakukan saat melakukan brainstorming ketika saya memposting pertanyaan. Saya berharap mendapatkan kesempatan untuk mengimplementasikannya dalam beberapa hari ke depan, dan akan mempostingnya ketika saya melakukannya.

  1. Rasterasikan poligon menjadi raster biner.
  2. Buat raster yang lebih besar dari hasil 1 dengan nilai 0 dan 1 yang ditempatkan secara acak. Distribusi nilai 0 dan 1 akan cocok dengan jumlah yang perlu diperluas poligon. Jadi, jika poligon perlu memperluas 5 km persegi. untuk mencapai targetnya, akan ada 5 km persegi. senilai 1 sel.
  3. Hasil gabungan dari (1) dan (2).
  4. Hapus semua sel dari hasil (3) yang tidak berdekatan dengan poligon raster yang asli.
  5. Beri makan hasil (4) ke dalam (2) sebagai pengganti poligon rasterisasi asli, dan ulangi sampai jumlah (1) sel cocok dengan area target.

Ini mungkin bukan cara yang paling efisien untuk melakukannya, tetapi itu harus berhasil. Idenya didasarkan pada latihan pemodelan pertumbuhan perkotaan yang dilakukan kelas atas. Raster acak mereka dibuat berdasarkan kesesuaian untuk pertumbuhan, dan mereka tidak memiliki batasan wilayah, tetapi bagian pertumbuhan acak pada dasarnya sama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.