Étant donné un objet spatial dans R, comment puis-je découper tous ses éléments pour qu'ils se trouvent dans un cadre de sélection?
Il y a deux choses que j'aimerais faire (idéalement, je saurais faire les deux, mais l'une ou l'autre est une solution acceptable à mon problème actuel - restreindre un fichier de formes polygonales aux États-Unis continentaux).
Déposez chaque élément pas complètement dans le cadre de sélection. Cela semble
bbox()<-
être la voie logique, mais aucune telle méthode n'existe.Effectuez une véritable opération de découpage, de sorte que les éléments non infinitésimaux (par exemple les polygones, les lignes) soient coupés à la frontière .
sp::bbox
ne dispose pas d'une méthode d'affectation, donc la seule façon dont je suis venu serait d'utiliserover
ougContains
/gCrosses
en conjonction avec un objet SpatialPolygons contenant une boîte avec les coordonnées de la nouvelle boîte englobante. Ensuite, lors de la découpe d'un objet polygone, vous devez déterminer ceux qui sont contenus par rapport à la croix et modifier les coordonnées de ces polygones afin qu'ils ne dépassent pas la zone. Ou quelque chose comme çagIntersection
. Mais il y a sûrement un moyen plus simple?
Bien que je sache qu'il existe de nombreux problèmes avec les boîtes englobantes et qu'une superposition spatiale à un polygone qui définit la région d'intérêt est généralement préférable, dans de nombreuses situations, les boîtes englobantes fonctionnent bien et sont plus simples.
gIntersection
et j'ai trouvéError in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, "rgeos_intersection") : TopologyException: no outgoing dirEdge found at 3 2.5
Pas de temps pour déboguer aujourd'hui; a écrit une version bâclée et corrigera dans le futur.Réponses:
J'ai créé une petite fonction à cet effet et elle a été utilisée par d'autres avec de bonnes critiques!
Cela devrait résoudre votre problème. De plus amples explications sont disponibles ici: http://robinlovelace.net/r/2014/07/29/clipping-with-r.html
Le polygone factice
b_poly
qui est créé n'a pas de chaîne proj4, ce qui entraîne « Avertissement: spgeom1 et spgeom2 ont des chaînes proj4 différentes », mais cela est inoffensif.la source
sp
,maptools
,rgdal
etrgeos
chargé. Je reçoisError in .class1(object) : could not find function "extent"
problème version R / paquet peut-être?library(raster)
dans mon tutoriel: robinlovelace.net/r/2014/07/29/clipping-with-r.html faites-nous savoir comment vous vous débrouillez! À votre santé.Voici une version limite bâclée (suffisante pour répondre à mes besoins à temps pour le mini-délai de demain :-)):
Si vous avez besoin de la boîte englobante pour projeter, la version ajoute ici un
interpolate
argument, de sorte que la boîte projetée résultante soit courbée.la source