Ho due strati GIS - chiamiamoli Soils
e Parcels
- memorizzati come SpatialPolygonsDataFrame
s (SPDF
s), e mi piacerebbe "sovrapporli", in the sense described here.Come eseguire una sovrapposizione vettoriale di due oggetti SpatialPolygonsDataFrame?
Il risultato dell'operazione sovrapposizione dovrebbe essere una nuova SPDF in cui:
Il
SpatialPolygons
componente contiene poligoni formati dall'intersezione dei due strati. (Pensa a tutti i poligoni atomici formati sovrapponendo due mylar su una lavagna luminosa).Il componente
data.frame
registra gli attributi dei poligoniSoils
eParcels
all'interno dei quali cade ciascun poligono atomico.
La mia domanda (s): C'è una funzione di R esistente che fa questo? (Sarei anche felice di apprendere una funzione che ottiene il componente SpatialPolygons
giusto, calcolando i poligoni atomici formati dall'intersezione dei due strati.) Mi sento come rgeos dovrebbe avere una funzione che fa (1) almeno , ma sembra non ...
Ecco una figura che può aiutare a rendere più chiaro ciò che cerco, seguito dal codice che crea i livelli Soils
e Parcels
mostrato nella figura.
library(rgeos)
## Just a utility function to construct the example layers.
flattenSpatialPolygons <- function(SP) {
nm <- deparse(substitute(SP))
AA <- unlist(lapply([email protected], function(X) [email protected]))
SpatialPolygons(lapply(seq_along(AA),
function(X) Polygons(AA[X], ID=paste0(nm, X))))
}
## Example Soils layer
Soils <-
local({
A <- readWKT("MULTIPOLYGON(((3 .5,7 1,7 2,3 1.5,3 0.5), (3 1.5,7 2,7 3,3 2.5,3 1.5)))")
AA <- flattenSpatialPolygons(A)
SpatialPolygonsDataFrame(AA,
data.frame(soilType = paste0("Soil_", LETTERS[seq_along(AA)]),
row.names = getSpPPolygonsIDSlots(AA)))
})
## Example Parcels layer
Parcels <-
local({
B <- readWKT("MULTIPOLYGON(((0 0,2 0,2 3,0 3,0 0),(2 0,4 0,4 3,2 3,2 0)),((4 0,6 0,6 3,4 3,4 0)))")
BB <- flattenSpatialPolygons(B)
SpatialPolygonsDataFrame(BB,
data.frame(soilType = paste0("Parcel_", seq_along(BB)),
row.names = getSpPPolygonsIDSlots(BB)))
})
'% rispetto%' o 'overlay'? Vedi anche il cheat di gis.SE e @ Spacedman: http://www.maths.lancs.ac.uk/~rowlings/Teaching/UseR2012/cheatsheet.html –
@ AriB.Friedman - Grazie, ma no - over() 'non fa quello che sto cercando. Come ho detto, ho bisogno di una funzione che restituisca i singoli poligoni, non solo un indicatore della loro sovrapposizione. (Inoltre, anche se riesco a costruire i poligoni atomici 'over' et al. Non aiuta, perché contano poligoni che condividono un confine come" sopra "l'altro.' Rgeos :: gRelate() 'è migliore sotto questo aspetto .) –
gContains e gOverlaps quindi, seguito da gIntersection? –