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 delrasterpaquete. 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::intersecthacerlorgeos::gIntersectionporque el primero se une a los datos de los atributos de los dosSpatialPolgonsDataFrameobjetos, 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::intersectincluir estas ID de entrada como atributos adicionales en la salida.Aquí hay un enfoque alternativo que usa el nuevo
sfpaquete, que está destinado a reemplazarsp. Todo es mucho más limpio y fácil de usar:fuente