【发布时间】:2015-06-30 21:15:12
【问题描述】:
我有两个 shapefile(我们称它们为 shp1.shp 和 shp2.shp),我想创建一个新的 shapefile,其中包含两者之间的重叠。
基本上,我正在尝试确定 shp1 中的哪些地理区域属于 shp2。大多数 shp1 多边形将包含 shp2 多边形,并且一些 shp2 多边形将落入多个 shp1 多边形中。
如果我从
开始library(sp)
large_list <- over(shp1,shp2, returnList = TRUE)
这让我得到了一个共享地理位置的大列表。但是如何获取该列表并使用它进行空间连接,并创建一个新的 shapefile?
我对 R 比较陌生(尤其是 GIS),如果有任何帮助,我将不胜感激。
【问题讨论】:
-
this 是您要找的吗? (请注意,尽管它是作为 raster 包的一部分分发的,
union()确实将两个SpatialPolygons*对象作为参数。) -
@JoshO'Brien 这样做时出现以下错误: RGEOSBinTopoFunc(spgeom1, spgeom2, byid, id, drop_lower_td, "rgeos_difference") 错误:TopologyException: Input geom 0 is invalid: Self -在-120.76777118577075 37.538496877470358 处或附近的交点 -120.76777118577075 37.538496877470358
-
您能否将问题领域归零到足以产生可与我们分享的最小可重复示例?否则,除非有人经历过完全相同的错误消息并记住导致它的原因,否则我们将无法提供帮助。 (我确实有预感,这可能是同一个问题导致我在对同一个链接问题的另一个(不接受)答案中引入了
eps参数)。 -
一定要查看
rgeospackage,并使用gIntersects进行基本测试,或者如果您需要两者之间的距离阈值,请使用gWithinDistance。我不知道为什么其他人建议union()。 -
他们是建议联盟,因为它直接解决了问题;虽然 raster::intersect 可能是 Aaron 在这里的目的(别担心,两者都在引擎盖下使用 rgeos)。错误消息说多边形无效,但不清楚这是在输入数据中还是在某些处理后发生。如果输入是有效的
gIsValid(spgeom, reason=TRUE),那么您应该编写 raster(和/或 rgeos)包维护者,因为这可能是一个错误。