2017-05-31 82 views
2

我想拥有带离线功能的openstreetmap。具体来说,我想知道是否有可能(我认为是这样)在不使用API​​的情况下对某个地址进行地理编码。原因很简单,如果我有成千上万的地址进行地理编码,它将会持续下去。我已经有了形状文件,我知道你可以下载OSM后端,但是我不知道如何“制造”R叫OSM的离线版本...离线OSM和R

任何帮助,将不胜感激。

+0

请记住,“OSM”只是简单的数据。如果您需要地理编码器,则不需要“脱机版OSM”,而是需要使用基于离线OSM的地理编码器。尝试了解其中的差异。 OSM是原始地图数据,而地理编码器,路由器等是一种软件。有很多基于OSM的软件可用,但OSM仍然只是数据而没有软件本身。 – scai

回答

0

我找到了解决我的问题,主要工作在R:

首先,你需要克隆https://github.com/Project-OSRM/osrm-backend。然后,你将需要安装并启动泊坞窗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)文件大小可能会很大,码头工人只会分配1000Mb作为默认值,您将需要根据您的要求进行更改。

3)获得的最终结果需要使用正则表达式进行格式化才能得到所需的结果。

1

对于离线OSM地理编码器,您可以使用install Nominatim或其他OSM-based search engines之一,具体取决于您的R软件包使用的地理编码器。

+0

感谢您的帮助,我对此很新,所以如果我下载nominatim,如何“连接”R和Nominatim? –

+0

另外,如果我安装了Nominatim,如何“链接”我下载的Nominatim形状文件? –

+0

理论上你只需要改变URL来指向你当地的Nominatim instace。我不知道在哪里设置这个配置,因为我不是R用户。 Nominatim不适用于形状文件,它需要通常是XML或PBF的OSM数据。请参阅https://wiki.openstreetmap.org/wiki/Nominatim/Installation#Import_and_index_OSM_data – scai