给定R中的Spatial对象,我如何裁剪其所有元素以使其位于边界框中?
我想做两件事(理想情况下,我会做这两种事情,但是对我当前的问题来说,这都是可以接受的解决方案-将多边形shapefile限制在美国本土)。
将每个元素都未完全放入边界框中。 这似乎
bbox()<-
是合乎逻辑的方法,但是不存在这种方法。进行真正的裁剪操作,以使非无限小元素(例如,多边形,直线)在边界处被切除。
sp::bbox
缺少赋值方法,所以我想出的唯一方法是将over
或gContains
/gCrosses
与包含带有新边界框坐标的框的SpatialPolygons对象结合使用。然后,在剪切多边形对象时,您必须找出包含的对象与交叉对象,并更改这些多边形的坐标,以使其不会超出框。或类似的东西gIntersection
。但是肯定有更简单的方法吗?
虽然我知道边界框存在很多问题,并且通常最好在定义感兴趣区域的多边形上进行空间覆盖,但在许多情况下,边界框可以正常工作并且更简单。
只是要清楚一点,如果扩展了Spatial对象(多边形或线),您想对其进行切割,使其仅返回给定范围内的一部分?我认为没有更简单的方法。
—
Spacedman
@Spacedman阐明我对这两者都感兴趣,但较简单的版本足以解决当前问题。
—
Ari B. Friedman
您是否已经使用rgeos实现了(2)的解决方案?听起来您至少已尝试过。您能否给我们提供解决方案和示例,以便至少我们可以将“简单性”与之进行比较?因为,老实说,这似乎很简单。
—
Spacedman
@Spacedman一切都很简单;只是花时间.... :-)我尝试了一下,
—
Ari B. Friedman 2013年
gIntersection
并想出了Error in RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, "rgeos_intersection") : TopologyException: no outgoing dirEdge found at 3 2.5
今天没有时间进行调试;写了一个草率的版本,将来会修复。