Dado um objeto espacial em R, como recorte todos os seus elementos para ficarem dentro de uma caixa delimitadora?
Há duas coisas que eu gostaria de fazer (idealmente, eu sei como fazer as duas coisas, mas também é uma solução aceitável para o meu problema atual - restringir um arquivo de forma de polígono aos EUA continentais).
Solte cada elemento não totalmente dentro da caixa delimitadora. Parece que esse
bbox()<-
seria o caminho lógico, mas não existe esse método.Faça uma verdadeira operação de clipe, de modo que elementos não-infinitesimais (por exemplo, polígonos, linhas) sejam cortados no limite .
sp::bbox
como não possui um método de atribuição, a única maneira que eu inventei seria usarover
ougContains
/gCrosses
em conjunto com um objeto SpatialPolygons contendo uma caixa com as novas coordenadas da caixa delimitadora. Então, ao recortar um objeto de polígono, você terá que descobrir quais estão contidos versus cruzados e alterar as coordenadas desses polígonos para que não excedam a caixa. Ou algo assimgIntersection
. Mas certamente há uma maneira mais simples?
Embora eu saiba que existem muitos problemas com caixas delimitadoras e que uma sobreposição espacial de um polígono que define a região de interesse é geralmente preferível, em muitas situações, as caixas delimitadoras funcionam bem e são mais simples.
gIntersection
e crieiError in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, "rgeos_intersection") : TopologyException: no outgoing dirEdge found at 3 2.5
Sem tempo para depurar hoje; escreveu uma versão desleixada e será corrigida no futuro.Respostas:
Criei uma pequena função para esse fim e foi usada por outras pessoas com boas críticas!
Isso deve resolver seu problema. Mais explicações estão aqui: http://robinlovelace.net/r/2014/07/29/clipping-with-r.html
O polígono fictício
b_poly
criado não possui uma seqüência de proj4, o que resulta em " Aviso: spgeom1 e spgeom2 possuem seqüências de proj4 diferentes ", mas isso é inofensivo.fonte
sp
,maptools
,rgdal
, ergeos
carregado.Error in .class1(object) : could not find function "extent"
Talvez eu receba um problema de versão do R / pacote?library(raster)
no meu tutorial: robinlovelace.net/r/2014/07/29/clipping-with-r.html deixe-nos saber como você se sai! Felicidades.Aqui está uma versão limite desleixada (suficiente para atender às minhas necessidades a tempo do mini-prazo amanhã :-)):
Se você precisar da caixa delimitadora para projetar, a versão aqui adiciona um
interpolate
argumento, para que a caixa projetada resultante seja curvada.fonte