Saya memiliki garis shapefile yang mewakili jaringan jalan. Saya ingin merasterisasi data ini, dengan nilai yang dihasilkan di raster menunjukkan panjang total garis yang termasuk dalam sel raster.
Data dalam proyeksi British National Grid sehingga unit akan menjadi meter.
Idealnya saya ingin melakukan operasi ini menggunakan R
, dan saya menduga bahwa rasterize
fungsi dari raster
paket akan berperan dalam mencapai ini, saya hanya tidak bisa mengetahui apa fungsi yang seharusnya diterapkan.
raster
r
line
rasterization
JPD
sumber
sumber
vignette('over', package = 'sp')
bisa membantu.Jawaban:
Mengikuti pertanyaan terakhir , Anda mungkin ingin menggunakan fungsionalitas yang ditawarkan oleh paket rgeos untuk menyelesaikan masalah Anda. Untuk alasan reproduktifitas, saya mengunduh bentuk jalan Tanzania dari DIVA-GIS dan memasukkannya ke direktori kerja saya saat ini. Untuk tugas yang akan datang, Anda akan membutuhkan tiga paket:
Akibatnya, baris pertama Anda dapat terlihat seperti ini:
Setelah itu, Anda perlu mengimpor data shapefile. Perhatikan bahwa DIVA-GIS shapefile didistribusikan dalam EPSG: 4326, jadi saya akan memproyeksikan shapefile ke EPSG: 21037 (UTM 37S) untuk menangani meter daripada derajat.
Untuk rasterisasi selanjutnya, Anda akan memerlukan templat raster yang mencakup batas spasial dari shapefile Anda. Templat raster terdiri dari 10 baris dan 10 kolom secara default, sehingga menghindari waktu komputasi yang terlalu luas.
Sekarang templat sudah diatur, loop melalui semua sel raster (yang saat ini hanya terdiri dari nilai-nilai NA). Dengan menetapkan nilai '1' ke sel saat ini dan kemudian mengeksekusi
rasterToPolygons
, shapefile yang dihasilkan 'tmp_shp' secara otomatis menampung luasnya piksel yang saat ini diproses.gIntersects
mendeteksi apakah tingkat ini tumpang tindih dengan jalan. Jika tidak, fungsi akan mengembalikan nilai '0'. Jika tidak, bentuk jalan dipotong oleh sel saat ini dan total panjang 'SpatialLines' dalam sel itu sedang dihitung menggunakangLength
.Terakhir, Anda dapat memasukkan panjang yang dihitung (yang dikonversi menjadi kilometer) ke dalam templat raster dan secara visual memverifikasi hasil Anda.
sumber
sapply()
kepbsapply()
dan digunakan argumen klastercl = detectCores()-1
. Sekarang saya dapat menjalankan contoh ini secara paralel!Di bawah ini dimodifikasi dari solusi Jeffrey Evans. Solusi ini jauh lebih cepat karena tidak menggunakan rasterize
sumber
raster::intersect()
sebelumnya, saya suka itu menggabungkan atribut fitur berpotongan, tidak sepertirgeos::gIntersection()
.Anda tidak perlu for for loop. Hanya memotong semuanya sekaligus dan kemudian menambahkan panjang baris ke segmen baris baru menggunakan fungsi "SpatialLinesLengths" di sp. Kemudian, menggunakan fungsi raster paket paket raster dengan argumen fun = sum Anda bisa membuat raster dengan jumlah panjang garis yang memotong setiap sel. Menggunakan jawaban di atas dan data terkait di sini adalah kode yang akan menghasilkan hasil yang sama.
sumber
SpatialLinesLengths
. Kira tidak ada kata terlambat untuk belajar, terima kasih (:rasterize
butuh waktu cukup lama, (7 kali lebih lama dari pendekatan teratas di mesin saya)rasterize()
fungsinya mencakup semua garis yang menyentuh sel tertentu. Ini menghasilkan panjang segmen garis yang dihitung dua kali dalam beberapa kasus: sekali di sel yang seharusnya dan di sel yang berdekatan yang disentuh titik akhir garis.Inilah pendekatan lain. Itu menyimpang dari yang sudah diberikan dengan menggunakan
spatstat
paket. Sejauh yang saya tahu, paket ini memiliki versi objek spasial sendiri (misalnyaim
vsraster
objek), tetapimaptools
paket ini memungkinkan konversi bolak-balik antaraspatstat
objek dan objek spasial standar.Pendekatan ini diambil dari pos R-sig-Geo ini .
Bit paling lambat adalah mengubah jalan dari
SpatialLines
ke Pola Segmen Garis (yaituspatstat::psp
). Setelah selesai, bagian penghitungan panjang sebenarnya cukup cepat, bahkan untuk resolusi yang jauh lebih tinggi. Misalnya, di MacBook 2009 lama saya:sumber
Biarkan saya hadir Anda paket vena dengan beberapa fungsi untuk bekerja garis spasial dan impor sf dan data.table
sumber
Ini mungkin terdengar agak naif tetapi jika itu adalah sistem jalan maka pilih jalan dan simpan ke papan klip kemudian lihat menemukan alat yang memungkinkan Anda untuk menambahkan buffer ke clipboard mengaturnya ke lebar jalan yang sah yaitu 3 meter +/- ingat bahwa penyangga adalah dari garis tengah ke tepi * 2 i untuk setiap sisi sehingga penyangga 3 meter sebenarnya adalah jalan 6 meter dari sisi ke sisi.
sumber