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