首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应该很简单: R中沿一条线的距离?

应该很简单: R中沿一条线的距离?
EN

Stack Overflow用户
提问于 2015-03-08 03:53:43
回答 1查看 1.8K关注 0票数 5

我有莫桑比克铁路的形状文件,并使用下面的代码生成了铁路沿线的100个随机点。

我的问题很简单,但我找不到答案:你如何计算铁路沿线各点之间的距离?

我不想要欧几里德距离,我要A点到B点的距离,沿着铁轨。

提前感谢!

代码语言:javascript
复制
library(sp)
library(rgdal)
library(spgrass6)
library(maptools)
library(igraph)
library(fields)

railroads <- readShapeLines("MOZ_rails.shp")

#Generate 100 random points, and put them on a matrix:
RandomPoints<-spsample(railroads, 100, type="random")
EN

回答 1

Stack Overflow用户

发布于 2019-11-01 19:45:19

使用stplanr包可以计算路由网络上的最短路径。我在荷兰的整个铁路网中使用了一个shapefile。此shapefile可从以下站点获得:

https://mapcruzin.com/free-netherlands-arcgis-maps-shapefiles.htm

代码语言:javascript
复制
library(sf)
library(ggplot2)
library(stplanr)

# Read shapefile
nl_rails_sf <- sf::st_read("~/netherlands-railways-shape/railways.shp")

# Generate 100 random points
set.seed(12345)
RandomPoints <- sf::st_sample(nl_rails_sf, 100, type = "random", exact = TRUE)
X <- st_coordinates(RandomPoints)[,1]
Y <- st_coordinates(RandomPoints)[,2]

# Find shortest route
slnetwork <- SpatialLinesNetwork(nl_rails_sf) 
find_nodes <- find_network_nodes(sln = slnetwork, x = X, y = Y, maxdist = 2e6)
route_dhdb_df <- expand.grid(start = find_nodes, end = find_nodes) %>% 
    mutate(id_route = 1:nrow(.))
route_dhdb_sf <- sum_network_links(sln = slnetwork, routedata = route_dhdb_df)

# Route length
route_dhdb_sf %>% 
    group_by(id_route) %>% 
    summarize(length = sum(length))

# Plot results
ggplot(nl_rails_sf) +
   geom_sf() +
   theme_void() +
   geom_sf(data = RandomPoints, color = "red") +
   geom_sf(data = route_dhdb_sf, color = "red")

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28922874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档