如何计算R中一条线上两点之间的地理距离?

时间:2018-04-10 17:50:59

标签: r distance shapefile sp rgdal

输入

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

使用止损绘制给定路线如下所示。

A Bus route with stops

示例数据

link包含两个shapefile,可以下载为带有两个路径示例的zip。

:定位

我的目标是计算每对停靠点之间的地理距离(以米为单位):在底层公交线路的长度上停止1到停止2,停止2到停止3等。

我发现的大多数方法都是计算欧氏距离,或者是“乌鸦蝇”;这在这里不起作用。

This post提到PBSmapping calcLength具有riverdist功能,可以很好地计算路线的总距离,但我无法找到方法将其与停止对情况,我也找不到通过其属性实际对shapefile进行子集化的方法。

2018-04-10T16:17:25.752663+00:00 heroku[web.1]: State changed from crashed to starting 2018-04-10T16:17:27.555672+00:00 heroku[web.1]: Starting process with command `npm start` 2018-04-10T16:17:29.455213+00:00 heroku[web.1]: State changed from starting to crashed 2018-04-10T16:17:29.437370+00:00 heroku[web.1]: Process exited with status 1 2018-04-10T16:17:29.378111+00:00 app[web.1]: npm ERR! missing script: start 包同样有趣,但针对河流进行了高度优化,我无法找到应用它的方法。

1 个答案:

答案 0 :(得分:1)

gProject包中尝试rgeos

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)

plot

# 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