Ich möchte einen echten GIS-Clip in R von Bodenpolygonen mit einer Reihe von Polygonen mit nur einer Begrenzung erstellen, finde jedoch keine R-Funktion, um dies ordnungsgemäß durchzuführen. Es sollte genau wie die clip
Funktion in ArcMap von ESRI funktionieren. Ich habe die over
Methode in sp
package ausprobiert , aber es scheint nicht für polys over polys zu funktionieren.
Ein Vorschlag war, das gIntersection
in- rgeos
Paket mit dem folgenden Code als Clip zu verwenden:
#------------------------------------
library(rgeos)
library(maptools)
#Read layers as SpatialPolygonsDataFrame (both the same Albers projection)
Soils_poly = readShapePoly("Soils_polygons") #Note - Has 400 polygons
clipper_poly = readShapePoly("clipper_polygon") #Note - Has 1 polygon
#Try gintersection as clip
Clipped_polys = gIntersection(Clipper_Tile_poly, Soils_poly)
#-----------------------------------
Dies dauert 5 Minuten (viel zu langsam) und es treten folgende Fehler auf:
Fehler in RGEOSBinTopoFunc (spgeom1, spgeom2, byid, id, drop_not_poly, "rgeos_intersection"): TopologyException: kein ausgehendes dirEdge gefunden bei -721459.77681285271 2009506.5980877089
Ich habe auch versucht, diesen Code auf Überlappungen zu überprüfen:
gIntersects(Clipper_Tile_poly, Soils_poly)
und das Ergebnis war WAHR. clip
Funktion in ESRI ArcMap funktioniert gut für diese Daten.
Kennt jemand eine R-Funktion, um einen Clip auf räumlichen Polygonen mit räumlichen Polygonen richtig zu machen?
Antworten:
Der von @mdsummer zur Verfügung gestellte Hinweis zur Verwendung
byid=TRUE
funktioniert korrekt.Siehe das reproduzierbare Beispiel unten:
quelle
Sie können auch das Rasterpaket verwenden
raster::intersect(spdf1, spdf2)
. Es hat den Vorteil, dass die Attribute für den Fall beibehalten werden, dass Sie über einen SpatialPolygonsDataFrame verfügen.Dank dieser Frage an den Hinweis und für den Beispielcode.
quelle