2016-04-18 8 views
0

Ein sehr verbreitetes Verfahren ist Linien und Ränder in SpatialPolygons Objekte aus dem sp Paket mit den Polygon Funktionen zu transformieren. Aber ist es möglich, andere Objektklassen in SpatialPolygons umzuwandeln? Ich verwende die Funktion circles von dismo, um einen Umkreis mit einem bestimmten Radius Abstand von einem bekannten räumlichen Punkt zu erstellen. Diese Funktion gibt ein Objekt der Klasse CirclesRange zurück.Trans CircleRange in SpatialPolygon in R

circ<-circles(spcoords,d=100000) 

class(circ) 
[1] "CirclesRange" 
attr(,"package") 
[1] "dismo" 

Wenn ich versuche, das CirclesRange Objekt in SpatialPolygons zu konvertieren, der folgenden Fehler auftritt:

Error: is.integer(pO) is not TRUE 

Dann habe ich andere Wege gesucht um dieses Objekt zu transformieren, aber ich habe nicht erfolgreich gewesen. Ich denke, dass es zuerst notwendig ist, "circ" in eine andere Klasse umzuwandeln und dann zu versuchen, es in SpatialPolygons umzuwandeln, aber ich kann keine Information darüber finden.

Antwort

2

Schauen Sie sich str(circ) an, das gewünschte SpatialPolygons Objekt ist bereits Teil des erstellten Objekts. Sie müssen einfach [email protected] ausführen, um das Polygon zu extrahieren. Hier ist ein Beispielcode basierend auf dem Datensatz meuse.

## sample data 
data(meuse) 
coordinates(meuse) <- ~ x + y 
proj4string(meuse) <- CRS("+init=epsg:28992") 

## circle around the first 'meuse' feature (top-right corner) 
circ <- circles(meuse[1, ], d = 1000, lonlat = FALSE) 

poly <- [email protected] 
proj4string(poly) <- proj4string(meuse) 

## display data 
library(latticeExtra) 

spplot(meuse, "elev", scales = list(draw = TRUE), 
     col.regions = topo.colors(100), key.space = "right") + 
    as.layer(spplot(poly, fill = "transparent", lwd = 2)) 

spplot

+2

fdetsch ist richtig! Wenn es Ihnen aber nichts ausmacht, ein anderes Paket zu verwenden, tut die Funktion 'gBuffer' aus der' library (rgeos) 'das gleiche wie' library (dismo) ', gibt aber ein Objekt der Klasse' SpatialPolygons' zurück. Mit 'data (meuse)' wie von @fdetsch vorgeschlagen wäre es: 'poly <- gBuffer (meuse [1,], width = 1000)' –