Bagaimana cara menggeneralisasi garis pantai?

12

Saya memiliki satu set besar titik data yang pada dasarnya mewakili garis pantai dunia. Saya tidak tahu resolusi persisnya tetapi saya akan mengatakan itu berada di sekitar 5-10m.

Bayangkan satu set poin yang mewakili garis pantai yang bergerigi. Pada resolusi 1m, kita melihat semua detail dan membutuhkan 50 titik data untuk mewakili pantai dengan benar, namun pada resolusi 10 km pantai terlihat seperti garis lurus dan kita hanya perlu 2 titik.

Saya sedang menulis aplikasi pemetaan yang akan membutuhkan data untuk ditingkatkan dari resolusi "full-planet" ke resolusi "jalan". Saya butuh bantuan mengurangi resolusi poin data saya, dan kemudian jumlah data untuk resolusi yang lebih luas.

Saya sudah membaca tentang Vector-Tiling dan berpikir ini akan menjadi solusi terbaik (saya sudah melakukan sesuatu seperti ini), namun, pada resolusi rendah, set data saya masih sangat berarti bahwa proses render membutuhkan waktu yang relatif lama waktu, di mana resolusi tinggi cepat karena dataset 'efektif' itu kecil (subset dari keseluruhan).

Saya mencoba menentukan cara mengambil dataset besar saya dan mengurangi skala sehingga data ubin tampilan 'planet penuh' saya adalah ukuran yang dapat dikelola. Bagaimana cara membuat sub-dataset ubin dari dataset lengkap yang lebih besar?

Saya senang menggunakan alat tetapi saya lebih suka melakukannya sendiri dalam upaya untuk mempelajari bagaimana hal itu dilakukan.

Stephan
sumber
1
Sudahkah Anda memeriksa jawaban di gis.stackexchange.com/questions/6585/… ? Tolong jelaskan jika menurut Anda pertanyaan Anda berbeda.
underdark
1
Sepertinya pertanyaannya seharusnya tentang garis pantai, bukan "poin". Ketika resolusi semakin rendah, haruskah pulau-pulau kecil menghilang? apakah boleh untuk garis pantai di sekitar pulau serpentine yang kurus untuk dilintasi?
Kirk Kuykendall
Jika Anda hanya ingin melakukan pekerjaan yang lumayan dan melanjutkan, @R Thiede mungkin adalah tempat terbaik untuk memulai. Jika Anda ingin mengerjakan tantangan nyata, menyederhanakan pekerjaan garis tanpa kehilangan arti bentuk, lihat pertanyaan terkait gis.stackexchange.com/questions/38/… dan gis.stackexchange.com/questions/440/… .
matt wilkie

Jawaban:

7

Bagaimana Anda menyelesaikan masalah ini benar-benar tergantung pada kasusnya, dan seberapa penting topologi yang sebenarnya bagi Anda (dibandingkan hanya waktu visual / rendering). Karena tujuan akhir Anda adalah menggeneralisasi garis pantai, Anda mungkin menemukan beberapa ide tentang generalisasi bermanfaat.

Salah satu pendekatan menggunakan buffering, seperti yang terlihat di sini . Saya juga punya masalah serupa beberapa waktu lalu dan menjelaskan solusi saya di sini .

Singkatnya, Anda dapat menggunakan dataset vektor yang terpisah (atau setidaknya geometri yang terpisah), digeneralisasi ke tingkat yang berbeda. Ini mengatasi masalah dasar Anda meskipun tidak menggunakan ubin, tetapi tentu saja Anda masih bisa menggunakannya jika Anda mau. Tentu saja, jika Anda akan membagi dataset Anda menjadi ubin berdasarkan kotak, pastikan untuk menggeneralisasi terlebih dahulu, atau Anda akan berakhir dengan kesenjangan antara ubin.

R Thiede
sumber
+1 untuk balasan yang bijaksana. Selamat datang di situs kami, Rüdiger!
whuber
5

Anda harus menyiapkan versi umum berbeda dari data Anda yang ditetapkan untuk level zoom "full planet" ke bawah untuk zoom close-up.

Algoritma generalisasi klasik adalah algoritma Douglas-Peucker . Anda harus menghubungkan titik ke garis pantai terlebih dahulu jika Anda belum melakukannya.

underdark
sumber
2
Pustaka GEOS memiliki algoritma Douglas-Peucker built-in yang dapat Anda gunakan, jika Anda ingin mengkodekannya sendiri. Anda mungkin ingin mempertimbangkan topologi, dalam hal ini alat GRASS v.generalisasi dapat membantu juga.
lagerratrobe
Hai @ lagerratrobe. Saya membuat wiki komunitas jawaban ini, jadi Anda harus dapat mengeditnya secara langsung dan menambahkan solusi GEOS dan GRASS ke dalamnya.
underdark