Ich habe zwei Polygone. Eines enthält Felder (X, Y, Z) und das andere enthält Bodentypen (A, B, C, D). Ich möchte wissen, in welchem Gebiet jedes Feldes sich welcher Bodentyp befindet. Ich habe folgendes versucht:
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
und gute Ergebnisse damit erzielt, mir mitzuteilen, welches Feld welchen Bodentyp enthält. Wie bekomme ich stattdessen die Fläche?
Antworten:
Diese Methode verwendet die
intersect()
Funktion aus demraster
Paket. Die Beispieldaten, die ich verwendet habe, sind nicht ideal (zum einen sind sie in nicht projizierten Koordinaten), aber ich denke, sie vermitteln die Idee.Ergebnisse:
quelle
raster::intersect
es,rgeos::gIntersection
weil ersteres die Attributdaten der beidenSpatialPolgonsDataFrame
Objekte verknüpft, während letzteres die Attributdaten zu löschen scheint.gIntersection
; Die Eingabe-Feature-IDs werden jedoch nicht direkt bereitgestellt, sondern verkettet und in der Feature-ID der Ausgabe gespeichert. Dies bedeutet die zusätzlichen Schritte zum Parsen der IDs und anschließenden Verknüpfen der Attribute. Ich möchteraster::intersect
diese Eingabe-IDs als zusätzliche Attribute in die Ausgabe aufnehmen.Hier ist ein alternativer Ansatz mit dem neuen
sf
Paket, das ersetzt werden sollsp
. Alles ist viel sauberer und pfeifenfreundlicher:quelle