我找到了解决问题的方法,主要在 R 中工作:
首先,您需要克隆https://github.com/Project-OSRM/osrm-backend。然后你需要安装并启动 docker https://www.docker.com/community-edition
country <- "germany"
# Download new maps - NOTE, this is a large download (more than 3GB)
download.file(url = paste0("http://download.geofabrik.de/europe/", country, "-latest.osm.pbf"),
destfile = paste0("./Data/POIs/", country, "/latest.osm.pbf"))
# Download dictionary
download.file(url = "https://raw.githubusercontent.com/MorbZ/OsmPoisPbf/master/doc/poi_types.csv",
destfile = paste0("./Data/POIs/", country, "/poi_types_dict.csv"))
pois_dict <- read.csv(paste0("./Data/POIs/", country, "/poi_types_dict.csv", sep = ","))
pois_dict <- pois_dict[!is.na(pois_dict$CODE), ]
# Create local version of search engine car + foot
cmd1 <- paste0("cd ",getwd(),"/Data/POIs/", country)
cmd2 <- paste0("docker run -t -v $(pwd):/data osrm/osrm-backend osrm-extract -p /opt/car.lua /data/latest.osm.pbf")
cmd3 <- paste0("docker run -t -v $(pwd):/data osrm/osrm-backend osrm-contract /data/latest.osrm")
cmd4 <- paste0("docker run -t -i -p 5000:5000 -v $(pwd):/data osrm/osrm-backend osrm-routed /data/latest.osrm")
system(paste(cmd1, cmd2, cmd3, cmd4, sep = "; "))
然后你就可以调用下面这行了(根据需要更新经度纬度)
txt <- getURL("http://127.0.0.1:5000/route/v1/driving/13.388860,53.517037;13.385983,52.496891?overview=false")
一些额外的说明:
1) 这显然适用于 OSRM,但类似的技术也可用于 OSM。
2) 文件大小可能会很大,docker 默认只分配 1000Mb,你需要根据你的需要改变这个。
3) 需要对得到的最终结果进行格式化(用正则表达式)才能得到你所需要的。