Mencari fungsi biaya-jarak raster sumber terbuka yang cepat untuk digunakan dalam kode

9

Saya telah menjelajahi internet untuk mencari fungsi jarak-biaya yang cepat dan open source yang bisa saya masukkan ke dalam kode saya. Fungsionalitas pada dasarnya harus bekerja seperti implementasi ArcGIS di mana saya dapat menentukan raster sumber dan raster biaya dan menghasilkan raster jarak biaya. Karena itu, implementasinya tidak perlu secanggih ArcGIS sehingga saya tidak perlu memasukkan "raster" dengan embedded geo metadata - tanda tangan yang menggunakan array numerik sederhana sudah cukup karena saya dapat memverifikasi bahwa data tumpang tindih dengan benar pada saat saya memanggil fungsi.

Maksud spesifik saya adalah untuk menghitung jarak-biaya ke satu titik di tengah raster biaya 1000 x 1000 berdasarkan klik pengguna, jadi eksekusi cepat sangat penting.

Implementasi AC # akan ideal tetapi saya akan melihat apa pun yang ada di luar sana.

Adakah yang tahu perpustakaan sumber terbuka yang mendukung ini? Terima kasih atas bantuan Anda!

atogle
sumber

Jawaban:

5

GRASS GIS memiliki implementasi C di r.cost( sumber , dokumentasi ) yang menggunakan min-heap . Atau, Anda dapat menggunakan paket grafik seperti QuickGraph dan Floyd-Warshall untuk menghitung biaya.

Perubahan terbaru dalam GRASS 6.4 telah membuat r.cost secara signifikan lebih cepat , jadi mungkin kinerjanya mungkin cukup baik: pada laptop saya, dibutuhkan sekitar 3 detik untuk wilayah sel 1M, atau 5 detik dengan gerakan knight diaktifkan. GRASS adalah aplikasi C, bukan solusi drop-in untuk basis kode C #. Jika Anda menambahkan OK ke tumpukan Anda, Anda bisa menggunakan PyWPS untuk membuat panggilan ke GRASS, dan kemudian menggunakan hasilnya di tempat lain dalam aplikasi Anda.

scw
sumber
Saya akan menggunakan ini dalam aplikasi web, jadi tujuan saya adalah menyelesaikan operasi hanya dalam beberapa detik. Saya hanya akan memiliki sel target tunggal dan jarak biaya max yang relatif ketat (jarak dari sel target pusat ke tepi raster biaya, dengan asumsi garis lurus dengan biaya minimum). Tes saya menggunakan ArcMap dalam kondisi ini membuat saya berpikir itu mungkin. Adakah tips atau pengalaman menggunakan GRASS di C #?
atogle
Saya telah memperbarui pertanyaan saya untuk menjawab pertanyaan Anda, itu dimulai sebagai komentar, tetapi terlalu lama. Semoga itu bisa membantu!
scw
Terima kasih scw! Ini semua informasi yang hebat, tetapi tidak benar-benar membuat saya ke tempat saya harus kecuali saya mulai porting kode GRASS (yang saya tidak ingin lakukan). Mungkin ada beberapa geek raster lain di luar sana dengan beberapa tips. Saya akan terus menggali ini dan saya akan memposting solusi yang saya setujui.
atogle
Mungkin Anda dapat beralih ke kolega Anda: azavea.com/research/staff-research-projects/map-algebra ;-) Saya menyarankan kode GRASS karena implementasinya yang kuat dan cepat, C # relatif baru di ruang pemrosesan geoproses , jadi sudah ada sebelumnya implementasi mungkin sulit didapat.
scw
scw - di situlah perjalanan saya dimulai, sebenarnya. Masalah saya adalah implementasinya mengorbankan waktu pemrosesan untuk perhitungan berkualitas tinggi. Kami sedang mengerjakan algoritma untuk melakukan yang sebaliknya. GRASS adalah saran yang bagus, saya hanya tidak punya cara untuk memanfaatkannya. =)
atogle
3

Saya sudah sering menggunakan r.costfungsi ini dalam GRASS. 1000 * 1000 kisi tidak ada masalah pada laptop normal. Ada juga paket R (gdistance, http://r-forge.r-project.org/projects/gdistance/ ) yang sedang dikembangkan. Saya menemukan GRASS jauh lebih cepat.

johannes
sumber