Eu tenho dois polígonos. Um contém campos (X, Y, Z) e o outro contém tipos de solo (A, B, C, D). Quero saber qual área de cada campo contém qual tipo de solo. Eu tentei o seguinte:
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
e obteve bons resultados dizendo-me qual campo contém qual tipo de solo. No entanto, como faço para obter a área?
Respostas:
Este método usa a
intersect()
função doraster
pacote. Os dados de exemplo que usei não são ideais (por um lado, eles estão em coordenadas não projetadas), mas acho que transmite a ideia.Resultados:
fonte
raster::intersect
maisrgeos::gIntersection
porque o ex-junta os dados de atributos dos doisSpatialPolgonsDataFrame
objetos, enquanto o último parece soltar os dados de atributo.gIntersection
; no entanto, os IDs do recurso de entrada não são fornecidos diretamente, são concatenados e armazenados no ID do recurso da saída. Isso significa as etapas extras de análise dos IDs e associação dos atributos. Desejoraster::intersect
incluir esses IDs de entrada como atributos adicionais na saída.Aqui está uma abordagem alternativa usando o novo
sf
pacote, que deve substituirsp
. Tudo é muito mais limpo e fácil de usar:fonte