Saya punya dua poligon. Satu berisi bidang (X, Y, Z) dan yang lainnya berisi jenis tanah (A, B, C, D). Saya ingin tahu area mana dari setiap bidang yang berisi jenis tanah apa. Saya mencoba yang berikut ini:
library(rgdal)
library(rgeos)
Field<-readOGR("./","Field")
Soil<-readOGR("./","Soil")
Results<-gIntersects(Soil,Field,byid=TRUE)
rownames(Results)<-Field@data$FieldName
colnames(Results)<-Soil@data$SoilType
> Results
A B C D
Z TRUE FALSE FALSE FALSE
Y FALSE TRUE TRUE FALSE
X TRUE TRUE TRUE TRUE
dan mencapai hasil yang baik dengan itu memberi tahu saya bidang mana yang berisi jenis tanah mana. Namun, bagaimana cara mendapatkan area itu?
Jawaban:
Metode ini menggunakan
intersect()
fungsi dariraster
paket. Contoh data yang saya gunakan tidak ideal (untuk satu hal mereka berada dalam koordinat yang tidak diproyeksikan), tapi saya pikir ini akan membawa ide.Hasil:
sumber
raster::intersect
lebihrgeos::gIntersection
karena mantan bergabung data atribut dari duaSpatialPolgonsDataFrame
objek, sedangkan yang kedua tampaknya menjatuhkan data atribut.gIntersection
; Namun, ID fitur input tidak langsung disediakan, mereka digabungkan dan disimpan dalam ID fitur output. Ini berarti langkah-langkah tambahan untuk mem-parsing ID, kemudian bergabung dalam atribut. Saya inginraster::intersect
memasukkan ID input ini sebagai atribut tambahan dalam output.Berikut ini pendekatan alternatif menggunakan
sf
paket baru , yang dimaksudkan untuk menggantikansp
. Semuanya jauh lebih bersih, dan ramah pipa:sumber