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