小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

利用百度地圖API制作城市中心交通時空圈

 燕子地理圖書館 2019-11-02
城市森林有話說

      彈指一揮間,ArcGIS筆記已經(jīng)很久沒有更新了。這里先給大家道個歉,由于前段時間趕項目,加之錄python視頻,因此耽擱了很久。這里需要說明的是,我們公眾號會持續(xù)更新下去,希望大家多多支持。

      我們知道,城市的中心一般是商業(yè)、商務(wù)高度發(fā)達(dá),公共服務(wù)較為集中的區(qū)域。從市中心外圍前往市中心享受各類公共服務(wù)是市民的重要權(quán)利之一。但受城市交通條件的影響,各區(qū)域前往市中心的交通狀況差異較大。有效識別各區(qū)域前往市中心的交通時間,一方面有助于我們認(rèn)識各區(qū)域交通狀況,從而有針對性的進行區(qū)域交通條件改進;另一方面,有助于我們進行用地優(yōu)化,從而實現(xiàn)交通與用地的協(xié)調(diào)。當(dāng)然,前往市中心休閑、購物是我們年輕人最為重要的假日活動,在房價高漲的當(dāng)下,選擇交通條件優(yōu)越、房價相對較低的區(qū)域是我們擇居的原則之一,故研究城市中心交通時空圈也具有重要意義。本期應(yīng)網(wǎng)友要求,帶來城市中心交通時空圈的技術(shù)方法講解。

1案例選擇

      本次案例城市選擇成都市。首先,成都是我的家鄉(xiāng),我對成都有著深厚的感情(要整就整成都);其次,成都中心城區(qū)受自然條件影響相對較少,不像南京有紫金山,武漢有東湖、長江等自然條件的限制,網(wǎng)格之間可實現(xiàn)無差別的比較;最后,也是最為重要的,成都是環(huán)形放射網(wǎng)狀的路網(wǎng)格局,不同方位的交通狀況差異性并不十分明顯,并且市中心正好位于幾何中心,在交通條件差異不大的情況下,其交通通達(dá)績效究竟如何?

2方法步驟

      第一步,我們需要獲取研究區(qū)域的范圍,以成都為例,我們獲取了中心城區(qū),包括天府新區(qū)的規(guī)劃范圍線。第二步,我們要將規(guī)劃范圍生成面,并生成網(wǎng)格(這里我們生成1000mX1000m的網(wǎng)格);第三步,我們要獲取各網(wǎng)格中心坐標(biāo)和市中心坐標(biāo)(市中心選擇天府廣場中心);第四步,運用百度API獲取各網(wǎng)格中心坐標(biāo)至市中心坐標(biāo)的時間(http://lbsyun.baidu.com/index.php?title=webapi/direction-api,不再具體解釋,自己看參數(shù))。第五步,空間可視化后進行相關(guān)分析,即可獲得城市中心交通時空圈。

3方法實施

      在對方法進行具體實施前,我想感謝網(wǎng)友web攻城獅之路。他編寫了Python代碼用于抓取路線時間,具體見http://blog.csdn.net/taijiedi13/article/details/51279959。我在其基礎(chǔ)上結(jié)合規(guī)劃師的思維邏輯對代碼進行優(yōu)化。主要的優(yōu)化部分是運用arcpy來實現(xiàn)數(shù)據(jù)的自動更新。我猜想該網(wǎng)友并不是城市規(guī)劃專業(yè)的,因此可能未接觸過面向ArcGIS的arcpy,具體代碼調(diào)整后面講具體方法時會提到。為了讓大家更清楚的了解流程方法,因此很多地方我是直接運用ArcGIS來實現(xiàn),并未完全采用python。如果網(wǎng)友感興趣,可以自己編寫Python代碼,來實現(xiàn)全過程的自動化。

第一步:獲取范圍。

      這個不做過多介紹,你要研究,好歹有個基礎(chǔ)的CAD范圍線啊。別問我怎么找,發(fā)揮自己聰明頭腦。找不到,自己拿豆腐撞頭。

第二步:生成網(wǎng)格。

      將線生成面后,對面進行坐標(biāo)調(diào)整,調(diào)整為百度十進制經(jīng)緯度坐標(biāo)系。由于我們的研究范圍大,因此位置大致準(zhǔn)就行。建議在百度地圖中找好參照點后,運用空間校正來實現(xiàn)??臻g坐標(biāo)準(zhǔn)確后,用創(chuàng)建漁網(wǎng)工具來生成1000mX1000m的漁網(wǎng)。生成的文件有點與線兩個要素,并將線生成面。最終,我們有了網(wǎng)格中心點與網(wǎng)格面兩個我們需要的文件(圖1)。


圖1

第三步:獲取坐標(biāo)。

      先講下獲取城市中心(天府廣場)坐標(biāo)。運用百度獲取坐標(biāo)系統(tǒng)工具(http://api.map.baidu.com/lbsapi/getpoint/index.html)可以輕松獲?。▓D2)。


圖2

      接下來,講下獲取各網(wǎng)格中心點的坐標(biāo)。打開點要素表,添加經(jīng)度、緯度、時間3個字段(圖3,時間字段為后續(xù)記錄時間),并用計算幾何命令分別計算中心點的坐標(biāo),計算是要選擇十進制,X坐標(biāo)為經(jīng)度,Y坐標(biāo)為緯度(圖4)。

      這樣,我們就獲取了起點(N各網(wǎng)格中心),終點(天府廣場)的坐標(biāo)。


圖3


圖4

 第四步:獲取時間

      這一步驟為重點。在這個程序中獲取百度API的時間函數(shù)get_time()為直接來自網(wǎng)友web攻城獅之路,這些代碼我不做介紹,我只給大家講下我調(diào)整的代碼(圖5)。我將他的run()去掉,用數(shù)據(jù)訪問模塊的UpdateCursor來實現(xiàn)數(shù)據(jù)的自動更新。在網(wǎng)友web攻城獅之路的代碼中,需要將點坐標(biāo)統(tǒng)一封裝到excel文件中,然后再讀取每一個坐標(biāo),最終還要將獲取的時間再寫入excel文件。而且最終生成的時間數(shù)據(jù)還要導(dǎo)入ArcGIS進行空間可視化。過程過于復(fù)雜,而且比較繁瑣,這一步驟完全可以運用Arcpy中的UpdateCursor來高效實現(xiàn)。

圖5

      考慮到百度起點坐標(biāo)的引用規(guī)則(緯度在前,經(jīng)度在后),我們用變量coord來存儲每一個坐標(biāo)數(shù)據(jù),并調(diào)用get_time()來獲取時間數(shù)據(jù)。由于獲取的時間為秒,而我最后想用分鐘來表示,所以代碼53將秒數(shù)據(jù)改為分鐘數(shù)據(jù)。在代碼測試過程中,我遇到了JSON數(shù)據(jù)報錯,這是由于百度JSON數(shù)據(jù)規(guī)范性所產(chǎn)生的。因此,我加入了try命令進行錯誤調(diào)試,如果出現(xiàn)錯誤,則時間為0,便于我們后續(xù)檢查數(shù)據(jù)。最后,將獲取的時間數(shù)據(jù)寫入點文件。

 第五步:空間可視化

      用空間鏈接,可將點要素中的時間數(shù)據(jù)記錄入面要素中,并進行空間可視化,實現(xiàn)城市中心交通時空圈圖的最終生成(圖6、圖7)。我獲取的時間是10月1日晚11時,由于假期外出車輛較多,故總體交通條件較優(yōu)。大家可以測試下高峰時期,估計時間會有所增加。結(jié)論大家自己總結(jié)吧!


圖6

圖7

4總結(jié)

全代碼如下。


# -*- coding:utf-8 -*-

import arcpy

import requests  

import json

fc = r'G:\2016tuto\baidur2.gdb\cd_dotuse_final'

fields = ['OID','lng','lat','dur']

def get_time(coordinate,mode,city,api_key):  

    api_addr='http://api.map.baidu.com/direction/v1?mode='+mode+'&origin='+coordinate+'&destination=30.663467,104.072247&origin_region='+city+'&destination_region='+city+'&output=json&coord_type=wgs84&ak=' + api_key

    req=requests.get(api_addr)  

    content=req.content  

    sjson=json.loads(content)  

    if sjson.has_key('result'):  

        #print sjson['status']  

        if sjson['status']==0:  

            if mode=='transit':  

                if sjson['result'].has_key('routes'):  

                    if sjson['result']['routes'][0].has_key('scheme'):  

                        time=sjson['result']['routes'][0]['scheme'][0]['duration']  

                    else:  

                        time=sjson['result']['routes'][0]['duration']  

                else:  

                    time=0  

            else:  

                if sjson['result'].has_key('routes'):  

                    if sjson['result']['routes']==None:  

                        time=0  

                    else:  

                        time=sjson['result']['routes'][0]['duration']  

                else:  

                    time=0  

        else:  

            time=0  

    else:  

        time=0  

    print '點'+coordinate+ '至市中心需要'+str(time) +'秒' +'。時間已寫入!'

    return time

#30.267552,104.303822

if __name__ == '__main__':

    mode = 'driving'

    city = u'成都'

    api_key = ''

    print '開始錄入數(shù)據(jù),請稍等...'

    with arcpy.da.UpdateCursor(fc, fields) as cursor:

        for row in cursor:

            coord = str(row[2])+','+str(row[1])

            try:

                time =  get_time(coord,mode,city,api_key) 

                row[3] = time/60

            except:

                row[3] = 0

            cursor.updateRow(row)

    print '全部數(shù)據(jù)錄入!'

      最后,我想說下,網(wǎng)絡(luò)上的數(shù)據(jù)實在是太豐富了,我們要善于去利用。時值國慶節(jié)期間,游山玩水期間發(fā)表此文,時間倉促,未講清楚的地方請各位看官提出。

      祝大家國慶快樂,吃好玩好!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多