用Python玩玩OSMnx包獲取道路數據并可視化分析
今天我們來玩玩街道道路數據的獲取,簡化和可視化分析。
今天每個人都離不開導航,除了開車用導航外,其實走路、騎車、公交都可以導航,選址和找餐廳、酒店也需要,如果一個城市能夠標注所以公交廁所也是很有必要的。
當然,實現這一切都需要我們擁有道路數據,標示道路交叉路口、死胡同、紅路燈燈,并能夠計算道路長度,最短路徑和規劃線路。
今天實現這一切都依賴地圖公司的API接口和SDK,導航APP應用,利用這一切并不新鮮很是方便。比如如果你開發的APP需要具備這些功能可以直接利用百度LBS的API接口即可實現。
但如果我們需要進行分析型的道路分析和城市規劃應用,就需要有更好的辦法獲取道路數據,并能夠進行計算和建模,特別是網絡分析的建模和度量指標,在結合區塊區域Ploygon,興趣點POI等進行匹配分析,從而實現選址、整體布局、設施評價等帶來大數據分析的建模思想。
恰好前段時間看到一篇Geoff Boeing的博客提供了OSMnx的Python包,OSM是Open Street Map開源地圖數據庫,可以部分解決這個想法,非常棒,我們一起來玩玩!
我的環境是Mac系統安裝了Anaconda的Python環境,用Conda Install OSMnx包(說明:windows操作系統下安裝比較麻煩)
首先我們加載osmnx包
假如我們希望得到北京市朝陽區的交通道路數據,我們先熟悉一下朝陽區的區塊Polygon
選擇朝陽區后,可以得到朝陽的行政區塊數據
我們在看看能否得到更細致的區塊數據:北京大學校園占地區域
北京大學未名湖的Polygon數據
這樣我們大概可以了解,理論上我們可以得到OSM地圖上,全球范圍內的所有國家、地區、城市、區縣、小區、單位、建筑等,甚至是每一棟樓的區塊數據。當然前提是OSM地圖有這個Place標記。
下面我們看看如何獲得道路數據:
我們先以北京市的道路數據看看(數據量比較大,需要一定的等待時間)
北京市行政區域道路數據:
根據道路的距離可視化:距離越長顯示紅色,越短顯示黃色
根據道路的單行線標示顏色,紅色是oneway道路
我們也可以同樣得到朝陽區的道路數據,這里需要注意我們可以指定得到道路數據的類型:drive=駕駛,walk=步行,bike=自行車,包括指定公共道路和私家道路。
朝陽區內道路:walk類型
接下來,我們可以任意給定一個坐標點(經緯度坐標,lan-long),設定距離distance多遠,獲取坐標點距離多少的道路數據。
我以中國傳媒大學的俺家為中心點,距離2000米范圍,得到道路數據:
從圖中我們可以看到這些道路的打點數據,某些點數據有標示:交叉路口、紅路燈位置、死胡同等標示。
我們可以把獲得的道路數據保存下來,存儲成為:Shapefiles、GarphML和SVG格式文件。
這樣可以將存儲的node點數據和edge邊數據用Tableau或Alteryx,或者Folium進行可視化。
我們也可以根據數據類型對道路數據進行簡化,比如去掉一些點僅保留交叉路口點(有嚴格和非嚴格方式);
上面的紅色點將可以被簡化掉。
也可以顯示不同線路長度的可視化
我們獲得傳媒大學隔壁的二外道路數據:bike類型
然后我們統計這部分道路的統計量
看看betweenness-centrality的點在哪里?
這個紅點應該是二外的中介最高的交叉點。
有些同學可能不知道我們想分析或計算的坐標點,其實有很多種方法獲取特定位置的經緯度坐標,比如:你可以導入Folium可視化地圖包,點擊地圖就可以彈出經緯度坐標數據:
下面我們看看天安門,我選國旗位置點1500米范圍的道路數據:walk類型
獲得兩個點的最短路徑線路數據
也可以指定_起點:Origin_Point,終點:Destination_Point計算兩點的路徑和規劃線路節點
從這些功能和計算上我們可以看到:導航是如何實現的,當然我這里就是玩玩,并沒用具體的意義,至少同學們學習后可以知道基于地圖數據的線路規劃是啥意思,一般的原理!
其實這些算法的前景還是很廣泛的,可能能夠評測一家餐廳的道路方便性是重要的指標,選址和城市規劃也是。
最近好像共享自行車比較火,如果能夠獲得人們的騎行線路,分析的思路應該有幫助!
當然,最終的地理空間數據是大數據的重要組成部分,如果根據多邊形Ploygon和POI興趣點進行數據匹配和測算,從分析型挖掘的角度應用前景廣泛。后面我將繼續介紹些應用算法。
推廣思路上,我們可以想象地鐵線路、公交線路等等道理相似。未來的車聯網、道路傳感器都需要這些數據的支持!