OSRM
OSRM(OpenStreetMap Routeing Machine)可用於路線規划。作為高性能的路線規划引擎,OSRM使用C++14編寫,基於開源的OpenStreetMap數據實現。
官網:http://project-osrm.org/
Github:https://github.com/Project-OSRM/osrm-backend
安裝
使用docker安裝
首先需要安裝docker:
curl -fsSL https://get.docker.com/ | sh
# daocloud.io 國內鏡像
curl -sSL https://get.daocloud.io/docker | sh
詳細請閱讀:Docker學習筆記。
OSRM依賴OpenStreetMap的數據。可以在 http://download.geofabrik.de 下載。選擇pbf即可。示例:
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
安裝 Server 端並運行在5000端口:
docker run -t -v $(pwd):/data osrm/osrm-backend osrm-extract -p /opt/car.lua /data/berlin-latest.osm.pbf
docker run -t -v $(pwd):/data osrm/osrm-backend osrm-contract /data/berlin-latest.osrm
docker run -t -i -p 5000:5000 -v $(pwd):/data osrm/osrm-backend osrm-routed /data/berlin-latest.osrm
如果順利的話,osrm-backend已經安裝好了。發送請求示例:
curl "http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true"
安裝web端用於顯示地圖,運行在 9966 端口:
docker run -p 9966:9966 osrm/osrm-frontend
打開瀏覽器,訪問 http://127.0.0.1:9966 即可。
從源碼編譯安裝
這里以 Ubuntu 16.04 為例。
安裝依賴:
sudo apt install build-essential git cmake pkg-config \
libbz2-dev libstxxl-dev libstxxl1v5 libxml2-dev \
libzip-dev libboost-all-dev lua5.2 liblua5.2-dev libtbb-dev
編譯和安裝 OSRM 二進制文件:
mkdir -p build
cd build
cmake ..
cmake --build .
sudo cmake --build . --target install
從 Geofabrik 或者 Mapzen's Metro Extracts 下載一個.osm.pbf
文件:
wget http://download.geofabrik.de/europe/germany/berlin-latest.osm.pbf
解壓地圖數據並啟動 Server:
osrm-extract berlin-latest.osm.pbf -p profiles/car.lua
osrm-contract berlin-latest.osrm
osrm-routed berlin-latest.osrm
請求示例:
curl http://127.0.0.1:5000/route/v1/driving/13.388860,52.517037;13.385983,52.496891?steps=true
相關資料
OpenStreetMap
OpenStreetMap(簡稱OSM)是一個網上地圖協作計划,目標是創造一個內容自由且能讓所有人編輯的世界地圖。
OSM是一款由網絡大眾共同打造的免費開源、可編輯的地圖服務。OpenStreetMap它是利用公眾集體的力量和無償的貢獻來改善地圖相關的地理數據。OSM是非營利性的,它將數據回饋給社區重新用於其它的產品與服務。而其他地圖則是將大多數的地圖數據出售給第三方。
OSM的地圖由用戶根據手提GPS裝置、航空攝影照片、其他自由內容甚至單靠地方智慧繪制。網站里的地圖圖像及向量數據皆以共享創意姓名標示-相同方式分享2.0授權。
官網:http://www.openstreetmap.org/
Leaflet
Leaflet 是一個為建設移動設備友好的互動地圖,而開發的現代的、開源的 JavaScript 庫。它是由 Vladimir Agafonkin 帶領一個專業貢獻者團隊開發,雖然代碼僅有 33 KB,但它具有開發人員開發在線地圖的大部分功能。
Leaflet設計堅持簡便、高性能和可用性好的思想,在所有主要桌面和移動平台能高效運作,在現代瀏覽器上會利用HTML5和CSS3的優勢,同時也支持舊的瀏覽器訪問。支持插件擴展,有一個友好、易於使用的API文檔和一個簡單的、可讀的源代碼。
拓展
1、如何用Go實現一款類似滴滴優步的網絡約車軟件(含源碼)
https://mp.weixin.qq.com/s/FnrnytO2-nybdWSE3jTkUQ