Tengo dos polígonos Uno contiene campos (X, Y, Z) y el otro contiene tipos de suelo (A, B, C, D). Quiero saber qué área de cada campo contiene qué tipo de suelo. Intenté lo siguiente:
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
y logré buenos resultados diciéndome qué campo contiene qué tipo de suelo. Sin embargo, ¿cómo obtengo el área en su lugar?
Respuestas:
Este método usa la
intersect()
función delraster
paquete. Los datos de ejemplo que he usado no son ideales (por un lado, están en coordenadas no proyectadas), pero creo que hace que la idea se transmita.Resultados:
fuente
raster::intersect
hacerlorgeos::gIntersection
porque el primero se une a los datos de los atributos de los dosSpatialPolgonsDataFrame
objetos, mientras que el segundo parece descartar los datos de los atributos.gIntersection
; sin embargo, las ID de funciones de entrada no se proporcionan directamente, se concatenan y almacenan en la ID de función de la salida. Esto significa los pasos adicionales de analizar las ID y luego unir los atributos. Desearíaraster::intersect
incluir estas ID de entrada como atributos adicionales en la salida.Aquí hay un enfoque alternativo que usa el nuevo
sf
paquete, que está destinado a reemplazarsp
. Todo es mucho más limpio y fácil de usar:fuente