Je voudrais faire un vrai clip SIG dans R de polygones de sols en utilisant une série de polygones à frontière unique, mais je ne trouve pas de fonction R pour le faire correctement. Cela devrait fonctionner exactement comme la clip
fonction d'ArcMap d'ESRI. J'ai essayé la over
méthode dans le sp
paquet mais cela ne semble pas fonctionner pour les polys sur polys.
Une suggestion a été d'utiliser le package gIntersection
in rgeos
comme un clip en utilisant le code suivant:
#------------------------------------
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)
#-----------------------------------
Cela prend 5 minutes à exécuter (beaucoup trop lent) et des erreurs avec ceci:
Erreur dans RGEOSBinTopoFunc (spgeom1, spgeom2, byid, id, drop_not_poly, "rgeos_intersection"): TopologyException: aucun dirEdge sortant trouvé à -721459.77681285271 2009506.5980877089
J'ai également essayé ce code pour vérifier le chevauchement:
gIntersects(Clipper_Tile_poly, Soils_poly)
et le résultat était VRAI. clip
dans ESRI ArcMap fonctionne très bien pour ces données.
Quelqu'un connaît une fonction R pour faire correctement un clip sur des polygones spatiaux en utilisant des polygones spatiaux?
Réponses:
L'astuce fournie par @mdsummer d'utiliser les
byid=TRUE
œuvres avec précision.Voir l'exemple reproductible ci-dessous:
la source
Vous pouvez également utiliser le package raster
raster::intersect(spdf1, spdf2)
. Il a l'avantage de conserver les attributs au cas où vous auriez un SpatialPolygonsDataFrame.Merci à cette question de le signaler et pour un exemple de code.
la source