2017-05-31 94 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