r - 从 R 中的坐标列表在简单特征中创建多条线
问题描述
我试图检测成对的物体(树木)是被道路隔开还是位于它们的同一侧。我已经下载了我的路网,并认为我或多或少地了解如何使用st_intersects
. 所以我所缺少的是我正在考虑的两棵树之间的线段,以便测试与道路的交叉点。
但是,我似乎无法弄清楚如何在我的对象之间创建线条。我有很多对(300K+),所以必须能够以编程方式执行此操作,而我发现的所有示例似乎都是“手工编码”。
假设以下两个矩阵,包含每对的“起点”和“终点”坐标。
orig = matrix(runif(20),ncol=2)
dest = matrix(runif(20),ncol=2)
在这个例子中,我需要创建 10 行:一条在orig[1,]
and之间dest[1,]
,另一条(不同的)在orig[2,]
and之间dest[2,]
,等等。我的理解是我应该使用st_multilinestring
,但我不知道如何制定调用。通常,我要么以“XYZM”点结束,要么以多段线开始并在通过所有其他坐标后orig[1,]
终止。dest[10,]
当它不是这些结果之一时,它就是一大堆错误。
是st_multilinestring
我应该使用的,如果是这样,如何做到这一点?谢谢!!
解决方案
这是一种使用sfc
/构造sf
对象的方法library(sfheaders)
library(sf)
library(sfheaders)
## If you add a pseudo-id column
orig <- cbind( orig, 1:nrow( orig ) )
dest <- cbind( dest, 1:nrow( dest ) )
## you can bind these matrices together
m <- rbind( orig, dest )
## set the order by the 'id' column
m <- m[ order( m[,3] ), ]
## then use `sfheaders` to create your linestrings
sfc <- sfheaders::sfc_linestring(
obj = m
, linestring_id = 3 ## 3rd column
)
sfc
# Geometry set for 10 features
# geometry type: LINESTRING
# dimension: XY
# bbox: xmin: 0.01952919 ymin: 0.04603703 xmax: 0.9172785 ymax: 0.9516615
# epsg (SRID): NA
# proj4string: NA
# First 5 geometries:
# LINESTRING (0.7636528 0.2465392, 0.05899529 0.7...
# LINESTRING (0.6435893 0.9158161, 0.01952919 0.1...
# LINESTRING (0.05632407 0.3106372, 0.03306822 0....
# LINESTRING (0.1978259 0.07432209, 0.2907429 0.0...
# LINESTRING (0.1658199 0.6436758, 0.1407145 0.75...
推荐阅读
- laravel - Laravel whereHas Filter 子关系
- r - 你好!有没有办法对数据框中特定列的行求和(添加)(请参见附图)?其他列如何受到影响?
- python - 两个列表中所有可能的值组合的 Pandas 数据框
- javascript - 我在 java 脚本中有这个错误:TypeError: db.run is not a function
- angular - 如何在Angular中为表格着色?
- ios - 当我运行这个 NPX POD-INSTALL 时,它给了我这个项目不支持这个 COCOAPODS #ReactNative
- javascript - Cypress - 在 BeforeEach Hook 中调用自定义命令
- angular - 如何使用引导程序将元素一一放置在具有不透明度的网格系统中
- vue.js - How to integer an oembed javascript tag inside a VueJs component?
- django - (DJANGO) 如何在 django Templete 的一页上显示类别和相关产品的列表?