r - 确定与 R 中的多边形相交的线
问题描述
我有一个数据集,其中包含 1,000 条线,我可以将这些线覆盖在剖面图(Sec、Township、Range)上。我需要识别并收集有哪些线穿过它们的部分的名称。
我能够在多边形中找到一个点,但不能找到一条线。该线可以穿过多个部分。我想我需要一个循环来做到这一点,但我遇到了麻烦。
我有一个例子可以帮助描述我想要实现的目标。
任何帮助将不胜感激!
解决方案
如果您有标准格式的多边形和线,则可以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
推荐阅读
- ruby-on-rails - 改进低效查询
- php - Laravel +存储过程:错误数据包乱序
- android - 错误:在片段中膨胀 TabLayout 时出现 java.lang.ClassNotFoundException
- hive - 为 presto 配置 Hive Metastore 并从 s3 和 apache kudu 查询数据
- amazon-web-services - 上传到amazon aws s3时如何获取本地文件?
- plotly - 如何在 plotly.js 图表中添加彩色背景条
- excel - 在遇到下一个单元格之前将空白单元格上方的数据复制到最后一个空白单元格包含
- eclipse - Eclipse Git 中的“Assume Unchanged”在后台运行什么实际的 git 命令?
- prolog - 为什么 Prolog 将一个自由变量统一到另一个自由变量?
- c - sed 错误地去除反斜杠