【问题标题】:Determine lines that intersect a polygon in R确定与 R 中的多边形相交的线
【发布时间】:2020-08-25 11:09:02
【问题描述】:

我有一个数据集,其中包含 1,000 条线,我可以将这些线叠加在部分土地地图(Sec、Township、Range)上。我需要识别并收集有哪些线穿过它们的部分的名称。

我能够在多边形中找到一个点,但不能找到一条线。该线可以穿过多个部分。我想我需要一个循环来做到这一点,但我遇到了麻烦。

我有一个例子可以帮助描述我想要实现的目标。

任何帮助将不胜感激!

【问题讨论】:

  • 你好,mfarr。你能告诉我们更多吗?你有多边形的周边线吗?
  • 嗨艾伦,非常好的问题。不完全确定,但我相信。
  • 如果你有周界线,那么你可以检查你的其他线是否在算术上与它们相交。
  • 好的,谢谢你的建议。我会检查你是否拥有它们并继续努力。

标签: r polygon spatial


【解决方案1】:

如果你有标准格式的多边形和线,你可以使用st_intersects 来自sf 包。以下是使用北卡罗来纳州的三个县作为示例 多边形。

加载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

【讨论】:

  • 感谢您的解决方案。正是我想要的。
  • 伟大的@mfarr。您可能希望通过单击复选标记来接受答案,因此它会变为绿色并显示为已解决以供将来搜索。
猜你喜欢
  • 1970-01-01
  • 2015-09-21
  • 2019-08-02
  • 2014-07-28
  • 2013-10-16
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多