【问题标题】:How to calculate geographic distance between two points along a line in R?如何计算R中沿线的两点之间的地理距离?
【发布时间】:2018-09-20 10:52:09
【问题描述】:

输入

我有两个 shapefile 导入到 R 中,所以我最终得到了。 包含公交路线的空间线数据框。 包含公交车站的空间点数据框。

绘制带有停靠点的给定路线如下所示。

样本数据

这个link 包含两个shapefile,以zip 格式下载,并带有两个路径示例。

目标

我的目标是计算每对站点之间的地理距离(以米为单位):站点 1 到站点 2、站点 2 到站点 3 等。

我发现的大多数方法都是计算欧几里得距离,或者“乌鸦飞”;这在这里行不通。

This post 提到了PBSmapping,它有一个calcLength 函数,可以很好地计算路线的总距离,但我找不到一种方法来匹配停靠点的情况,也不能我找到了一种通过属性实际对 shapefile 进行子集化的方法。

riverdist 包同样有趣,但针对河流进行了高度优化,我无法找到应用它的方法。

【问题讨论】:

  • 你能以某种方式提供样本数据吗?这在sfst_length 中应该是可行的,但具体如何取决于行和停止的格式。
  • @CalumYou 嗨,感谢您回来。是的,我刚刚推送了一个带有示例数据的链接。

标签: r distance shapefile sp rgdal


【解决方案1】:

rgeos 包中尝试gProject

library("rgdal")
library("rgeos")

# read shapefile and transfrom to UTM zone 36N (distances in m)
route <- spTransform(readOGR(".", "Trips"), CRS("+init=epsg:32636"))
stops <- spTransform(readOGR(".", "Stops"), CRS("+init=epsg:32636"))

l <- subset(route, route_id==1137)
p <- subset(stops, grepl("^1137_", UID))

plot(l, axes=TRUE, col="orange")
plot(p, add=TRUE, pch=19, cex=0.1)
text(p)

# distance along route
d <- sort(gProject(l, p))
d
# [1]     0  3051  3057  7221 10379 15657 20326 20326 22141 24262

# distance between stops
diff(d)
#[1] 3050.9166    5.9720 4164.2480 3157.7702 5278.5812 4668.1810    0.5878
#[8] 1814.9612 2120.8470

【讨论】:

    猜你喜欢
    • 2018-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2022-01-08
    • 2021-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多