在R语言中确定与多边形相交的线。

3
我有一个数据集,里面有数千行数据,可以在一块土地地图(Sec、Township、Range)上叠加。我需要确定并收集这些线路穿过哪些区域,并获取它们的名称。
我能够找到多边形中的单个点,但无法找到线路。该线路可能穿越多个区域。我认为我需要使用循环来完成此操作,但我遇到了麻烦。
我有一个示例,可能有助于描述我想要实现的内容。
非常感谢您的帮助!

enter image description here


嗨mfarr。你能告诉我们更多一点吗?你有多边形的周长线吗? - undefined
嗨,艾伦,问题很好。我不完全确定,但我相信是这样的。 - undefined
如果你有周长线,那么你可以通过数学运算来检查其他线是否与其相交。 - undefined
好的,谢谢你的建议。我会检查一下是否有这些,并且开始处理。 - undefined
1个回答

4
如果您的多边形和线条采用标准格式,您可以使用sf包中的st_intersects函数。以下是一个示例,使用北卡罗来纳州的三个县作为多边形。

加载sf

library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.2, PROJ 6.2.1

制作多边形数据(免责声明:为了快速说明地理经度,纬度坐标在这里被使用,但实际上应该使用平面投影坐标):

nc <- st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE)
n <- 3
poly_dat <- st_sf(poly_id = LETTERS[1:n], nc$geometry[1:n])

创建线条数据:
line1 <- st_linestring(rbind(c(-81.8,36.5),c(-80.5,36.5)))
line2 <- st_linestring(rbind(c(-81,36.3),c(-80.5,36.3)))
line_dat <- st_sf(linename = c("1", "2"), geometry = st_sfc(line1, line2, crs = st_crs(poly_dat)))

剧情:

plot(poly_dat, reset = FALSE)
plot(line_dat, add = TRUE, col = 1:2, lty = 2)
legend("topright", legend = paste("Line", 1:2), col = 1:2, lty = 2)

查找交集:

st_intersects(line_dat, poly_dat)
#> although coordinates are longitude/latitude, st_intersects assumes that they are planar
#> Sparse geometry binary predicate list of length 2, where the predicate was `intersects'
#>  1: 1, 2, 3
#>  2: 3

感谢您的解决方案,正是我所需要的。 - undefined
非常好,@mfarr。你可能想点击勾号来接受答案,这样它就会变绿并在将来的搜索中被标记为已解决。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接