我最近一直在玩OSRM路由库.它似乎在解决最短路径问题方面非常有效.但是,我没有看到如何用它计算单源最短路径.更确切地说,给定固定的起始点,计算到达给定距离限制内可达到的所有位置的最短距离(例如,可在30分钟内到达).
OSRM在内部使用收缩层次结构.根据我的理解,当计算真实世界数据中两个位置之间的距离时,这种技术优于Dijkstra算法.但是,对于我的问题,Dijkstra的算法似乎更合适,不是吗?
OSRM是否提供API来计算单源最短路径问题(距离限制)?是否有其他免费路由库更适合此类问题?最好是对OpenStreetMap数据有良好支持的.
我正在使用OSRM(OpenStreetMap路由机)的实例来评估来自不同点的距离和时间.使用API,我可以检索我想要的信息,尤其是作为折线的真实路线.
直到今天,我已经在起点和终点之间绘制了直线.
segments(
lon_patient,lat_patient,lon_lieu,lat_lieu,col = transp_time,lwd = 3
)
Run Code Online (Sandbox Code Playgroud)
现在我想绘制折线.但它是编码的(https://github.com/Project-OSRM/osrm-backend/wiki/Server-api#response-2).我怎么画它?
谢谢!
我已成功设法使用此示例帖子在R中重新创建驱动时间多边形
上面的帖子只涉及一个带有等时线的单个多边形
问题 - 我想在5个不同的地图点上绘制多个驾驶时间多边形
通过创建5个单独的等时线,然后在我的Leaflet Map中添加5个多边形,我设法以非常费力的方式完成了这项工作.
#Preparing multiple dependancies----
packages <- c("readxl","dplyr","leaflet","htmltools", "sp", "osrm")
install.packages(packages)
lapply(packages, library,character.only=TRUE)
###
#Loading in Locations----
Location <- read_excel("filepath.xlsx", sheet=1)
###
#Extract Lon and Lat and create spatial dataframe
xy <- Location[, c(3,4)]
spatialdf <- SpatialPointsDataFrame(coords = xy, data = Location, proj4string = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"))
class(spatialdf)
#Create Isochrone points
iso1 <- osrmIsochrone(loc = c(-2.3827439,53.425705), breaks = seq(from = 0, to = 60, by = 5))
iso2 <- osrmIsochrone(loc = c(-0.85074928,51.325871), …Run Code Online (Sandbox Code Playgroud) 我将先说我是新手。
尽管如此,我正在尝试使用 Docker 运行 OSRM。我尝试运行他们在 github 上列出的第一个 OSRM 后端 docker 命令:
docker run -t -v "${PWD}:/data" osrm/osrm-backend osrm-extract -p /opt/car.lua /data/berlin-latest.osm.pbf
需要注意的是,我将 OSRM 后端中的原始命令“${PWD}”更改为“%cd%”,因为我在 Windows 10 上运行 docker,而不是 Linux。
我还使用了丹麦的 Geofabrik 剪纸而不是柏林(他们在 Github 上的演示版本中使用了它)。
这是我在命令提示符下运行的内容:
docker run -t -v "%cd%":/data osrm/osrm-backend osrm-extract -p /opt/foot.lua /data/denmark-latest.osm.pbf
正如您在所附照片中看到的,它开始拉动“osrm/osrm-backend:最新”。但我收到错误消息:“[error] 输入文件 /data/denmark-latest.osm.pbf 未找到!”这很奇怪,因为我将 denmark-latest.osm.pbf 存储在 c -->docker --> 中data 以及我桌面上名为 osrm-backend-master 的文件夹中的副本,其中配置文件位于(我的情况下为 foot.lua),并且在名为“data”的文件夹中我存储了 denmark-latest.osm.pbf。
有几篇文章提到“共享驱动器”选项作为我的问题的解决方案,但在我的设置中,我没有“共享驱动器”选项 - 我认为这是因为我在 WSL 2 上运行(尽管我不确定该选项) )。
CMD提示符图片:
你们谁能看出我做错了什么吗?
我正在尝试通过项目 osrm 获取两个地理位置之间的距离。通过蟒蛇。
import requests
source_coordinates = '18.21231,42.50830;'
dest_coordinates = '18.20971,42.50075'
url = 'http://router.project-osrm.org/route/v1/driving/'+source_coordinates+dest_coordinates
payload = {"steps":"true","geometries":"geojson"}
response = requests.get(url,params=payload)
data = response.json()
print(data)
`
{
"routes": [
{
"geometry": "oksbGmvonB??",
"legs": [
{
"summary": "",
"weight": 0,
"duration": 0,
"steps": [],
"distance": 0
}
],
"weight_name": "routability",
"weight": 0,
"duration": 0,
"distance": 0
"code": "Ok"
}
`
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我得到的距离为 0 作为响应。
但是当我在网站上输入相同的坐标时。
http://map.project-osrm.org/ 并输入相同的坐标,我得到2.5 公里和 6 分钟。
我能否知道为什么会发生这种情况,还有没有其他方法(开源)来获得两个地方之间的距离和时间。
提前致谢
我已经设法使用 Maptiler API (OSMNames) 为表单输入提供自动完成功能(因为我发现 Google Maps API 更令人困惑)。
所以实际的问题来了,我想借助我创建的两个输入中的自动完成功能来获取我输入的两个地点之间的行驶距离。
我正在尝试使用OSRM(开源路由机) API来做到这一点
这是我当前的脚本:
<!--AUTOCOMPLETE-->
<script>
var autocomplete = new kt.OsmNamesAutocomplete(
'search1', 'https://geocoder.tilehosting.com/', '#My_Maptiler_API_Code');
</script>
<script>
var autocomplete = new kt.OsmNamesAutocomplete(
'search2', 'https://geocoder.tilehosting.com/', '#My_Maptiler_API_Code');
</script>
<!--GET INFO-->
<script>
function loadXMLDoc() {
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("result").innerHTML =
this.responseText;
}
if (this.readyState == 4 && this.status == 429) {
document.getElementById("result").innerHTML =
"Server overloaded, please try again later." …Run Code Online (Sandbox Code Playgroud) 我喜欢在地图上的多个位置绘制等时线,这样我就可以直观地找到从任意城镇到最近位置的旅行时间。它应该看起来像一个核密度二维图:
library(purrr)
library(ggmap)
locations <- tibble::tribble(
~city, ~lon, ~lat,
"Hamburg", 9.992246, 53.550354,
"Berlin", 13.408163, 52.518527,
"Rostock", 12.140776, 54.088581
)
data <- map2_dfr(locations$lon, locations$lat, ~ data.frame(lon = rnorm(10000, .x, 0.8),
lat = rnorm(10000, .y, 0.7)))
ger <- c(left = min(locations$lon) - 1, bottom = min(locations$lat) - 1,
right = max(locations$lon) + 1, top = max(locations$lat) + 1)
get_stamenmap(ger, zoom = 7, maptype = "toner-lite") %>%
ggmap() +
stat_density_2d(data = data, aes(x= lon, y = lat, fill = ..level.., alpha = …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Docker 设置 OSRM 后端服务器。主机是配备 32GB RAM、运行 OS 10.14 (Mojave) 的 MacBook Pro。
下载了 england-latest.osm.pbf 文件后,我尝试使用以下命令启动该过程。
docker run -t -v $(pwd):/data osrm/osrm-backend osrm-extract -p /opt/car.lua /data/england-latest.osm.pbf
Run Code Online (Sandbox Code Playgroud)
输出如下:
[info] Parsed 0 location-dependent features with 0 GeoJSON polygons
[info] Using script /opt/car.lua
[info] Input file: england-latest.osm.pbf
[info] Profile: car.lua
[info] Threads: 6
[info] Parsing in progress..
[info] input file generated by osmium/1.8.0
[info] timestamp: 2018-11-02T21:15:02Z
[info] Using profile api version 4
[info] Found 3 turn restriction tags:
[info] motorcar
[info] motor_vehicle
[info] …Run Code Online (Sandbox Code Playgroud) annotations=true overview=full在使用和进行匹配调用时,我一直试图协调匹配几何体返回的坐标和每条腿中的节点geometries=geojson。
我想了解如何将节点 ID 与坐标几何的纬度/经度对齐。
我的理解是坐标和腿部的节点之间存在1:1的映射。
我尝试通过执行以下操作来“简化”注释中返回的节点 ID:
将第一条腿注释附加到您的结果中。
对每条额外的腿重复以下操作:
A。修剪从下一条腿注释开始处开始的前两个节点以追加
b. 将修剪后的腿部注释附加到结果中
然后,我从几何图形中的坐标中删除路点返回的位置。之后,我尝试将简化的节点 ID 与剩余的坐标对齐。然而,这种方法最终会产生一些(有时是一些)额外的点,我们无法解释或弄清楚如何过滤掉这些点。
有人有更可靠的方法来解决这个问题吗?感谢所有的帮助。谢谢!
我正在尝试提取 OSRM 数据但遇到麻烦。在上一个问题(尝试提取 osrm 数据时 lua error)中,我遇到了错误。所以除了 Docker 之外,我不会尝试做同样的事情。我正在使用带有硅芯片的较新 Mac。我首先安装了 Docker(https://docs.docker.com/desktop/install/mac-install/;然后在终端中docker pull osrm/osrm-backend)。我从https://download.geofabrik.de/north-america.html下载北美数据。我为实例分配了 50GB 内存以及几个核心。如果在终端中运行,docker run -t -v /Users/[name]/osrm-backend/docker:/data osrm/osrm-backend osrm-extract -p /opt/car.lua /data/north-america-latest.osm.pbf我会得到:
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
[info] Parsed 0 location-dependent features with 0 GeoJSON polygons
[info] Using script /opt/car.lua
[info] Input file: north-america-latest.osm.pbf
[info] Profile: car.lua
[info] Threads: 5
[info] Parsing in …Run Code Online (Sandbox Code Playgroud)