作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题:我想从 shapefile 中提取两个车站之间的铁路网络沿线的路线,并且仅绘制该特定路线,而不是整个网络。
这是我到目前为止所拥有的:
我有一个包含英国整个铁路网络的形状文件,绘制如下:
library(maptools)
rail <- readShapeSpatial("railnetworkLine.shp")
我还有一个包含东向和北向的电台列表,例如:
1) ABDARE 300400 202800
2) DEIGHTN 416490 419140
我可以将它们添加到 map 中,如下所示:
plot(rail)
plot(spdf.station, add=TRUE, col="red", pch=20)
所以我不知道的是,我如何提取它们之间的路线并绘制该路线 - 信息显然在 shapefile 中,我有车站的坐标,但我不明白如何提取它。
我设法用以下代码计算它们之间的距离:
SpacingInMetres <- 10000
require(secrlinear)
network <- read.linearmask(data=rail, spacing=SpacingInMetres)
distance <- (networkdistance (stations[1,], stations[2,], network))/1000
# Confirm distance:
distance
>311.7893
我发现您可以使用 Google map 和 ggmaps
获取道路沿线路线(请参阅 here )。但是,当您使用 shapefile 而不是 Google map 作为网络输入时,该怎么办呢?
我认为“shp2graph”+“igraph”包可能很有用,但我就是不明白。有什么想法吗?
最佳答案
可以使用 stplanr 包计算路线网络上的最短路径。我使用了包含荷兰整个铁路网络的 shapefile。该形状文件可从以下位置获得:
https://mapcruzin.com/free-netherlands-arcgis-maps-shapefiles.htm
library(sf)
library(ggplot2)
library(stplanr)
# Read shapefile
nl_rails_sf <- sf::st_read("~/netherlands-railways-shape/railways.shp")
# Data frame with station locations
stations_df <- data.frame(station = c("Den Haag", "Den Bosch"),
lat = c(52.080276, 51.690556),
lon = c(4.325, 5.293611))
# Create sf object
stations_sf <- sf::st_as_sf(stations_df, coords = c("lon", "lat"), crs = 4326)
# Find shortest route
slnetwork <- SpatialLinesNetwork(nl_rails_sf)
find_nodes <- find_network_nodes(sln = slnetwork,
x = stations_df$lon,
y = stations_df$lat,
maxdist = 2e5)
route_dhdb_df <- data.frame(start = find_nodes[1], end = find_nodes[2])
route_dhdb_sf <- sum_network_links(sln = slnetwork, routedata = route_dhdb_df)
# Distance route in meters
distance_m <- sum(route_dhdb_sf$length) # 112189.5 [m]
# Plot results
ggplot(nl_rails_sf) +
geom_sf() +
theme_void() +
geom_sf(data = stations_sf, color = "red") +
geom_sf(data = route_dhdb_sf, color = "red")
关于r - 从铁路网络 shapefile 中提取车站之间的路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34886094/
我是一名优秀的程序员,十分优秀!