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.
Jawaban:
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
sumber
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.sumber
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.
sumber
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.
sumber
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.
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.
sumber