91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python?繪制北上廣深的地鐵路線動態圖

發布時間:2021-12-09 13:17:15 來源:億速云 閱讀:239 作者:柒染 欄目:開發技術

今天就跟大家聊聊有關怎么用Python 繪制北上廣深的地鐵路線動態圖,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

    今天教大家用python制作北上廣深——地鐵線路動態圖。

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    坐標點的采集

    小五之前做過類似的地理可視化,不過都是使用網絡上收集到的json數據。但很多數據其實是過時的,甚至是錯誤/不全的。所以我們最好還是要自己動手,豐衣足食(爬蟲大法好)。打開高德地圖的地鐵網頁

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    可以輕松得到北京地鐵數據的接口,同理也把其他三個城市的url復制出來。有了api,解析json即可獲得數據

    url = 'http://map.amap.com/service/subway?_1615466846985&srhdata=1100_drw_beijing.json'
    response = requests.get(url)
    result = json.loads(response.text)
    stations = []
    for i in result['l']:
        station = []
        for a in i['st']:
            station.append([float(b) for b in a['sl'].split(',')])
        stations.append(station)
    pprint.pprint(stations)

    pprint格式化打印結果,方便預覽

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    坐標系的轉換

    其實我之前有看到類似地理可視化文章,結果自己一試發現縮小看還行,一放大就會發現坐標點飄出二里地了????正好拿上文獲取的坐標點給大家演示一下,看看同樣的經緯度在不同地圖里的地理位置

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    可以看到該經緯度在高德地圖里指的是金安橋地鐵站,然而在百度地圖里,地理位置則指向了幾公里外的某大廈。為什么會出現這個問題呢?其實是不同地圖產品的地理坐標系導致的。

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    下面說一下常見的地理坐標系:地球坐標系是國際通用坐標系,比較適合國際地圖可視化。不過在我國范圍內,一般不會直接使用它,而是使用由國家測繪局在其基礎上加密的火星坐標系。另外還有公司會在火星坐標系上進行二次加密,比如百度坐標系、搜狗坐標系等。我網上找到了一張圖:

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    上圖可以作為參考,具體原因我們就不細究了。重點是什么,如何利用python轉換坐標系?例如在本文中,我們是在高德地圖中獲得的坐標點集合,那么也就是使用的是GCJ-02坐標系。而下文可視化中會調用百度地圖的接口,也就是需要在BD-09坐標系中進行可視化。幸好我在網上搜到了GCJ-02轉BD-09的公式,并用python實現此公式:

    #需要的兩個常量先設置好
    pi = 3.1415926535897932384 #π
    r_pi = pi * 3000.0/180.0
     
    def gcj02_bd09(lon_gcj02,lat_gcj02):
        b = math.sqrt(lon_gcj02 * lon_gcj02 + lat_gcj02 * lat_gcj02) + 0.00002 * math.sin(lat_gcj02 * r_pi)
        o = math.atan2(lat_gcj02 , lon_gcj02) + 0.000003 * math.cos(lon_gcj02 * r_pi)
        lon_bd09 = b * math.cos(o) + 0.0065
        lat_bd09 = b * math.sin(o) + 0.006
        return [lon_bd09,lat_bd09]

    這樣我們就寫好了一個python將GCJ-02坐標系轉成BD-09的函數,調用這個函數,就可以將高德地圖獲取的坐標點集合統統轉換成百度坐標系。

    result = []
    for station in stations:
        result.append([gcj02_bd09(*point) for point in station])

    以其中一個坐標點為例:

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    到此,我們的前期數據工作終于準備齊了。當然,如果我們一開始獲取的數據就是BD_09(百度地圖)坐標系的,轉換這步就可以直接省略嘍~

    地理可視化

    接下來就要利用pyecharts中的BMap來可視化了,不過需要先獲取百度開放平臺的密鑰。百度地圖開放平臺

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    復制上圖中的訪問應用(AK),保存好,這在后續的可視化中將要用到。我們使用pyecharts中的BMap,先導入模塊

    from pyecharts.charts import BMap 
    from pyecharts import options as opts 
    from pyecharts.globals import BMapType, ChartType

    在導入數據(也就是上文轉換后的經緯度數據result)后,可以調整一下參數以及增添一些控件。關鍵參數都做了注釋,方便大家查看(其中百度appkey記得替換成自己的)

    map_b = (
        BMap(init_opts = opts.InitOpts(width = "800px", height = "600px"))
        .add_schema(
            baidu_ak = '****************', #百度地圖開發應用appkey
            center = [116.403963, 39.915119], #當前視角的中心點
            zoom = 10, #當前視角的縮放比例
            is_roam = True, #開啟鼠標縮放和平移漫游
        )
        .add(
            series_name = "",
            type_ = ChartType.LINES, #設置Geo圖類型
            data_pair = result, #數據項
            is_polyline = True, #是否是多段線,在畫lines圖情況下#
            linestyle_opts = opts.LineStyleOpts(color = "blue", opacity = 0.5, width = 1), # 線樣式配置項
        )
        .add_control_panel(
            maptype_control_opts = opts.BMapTypeControlOpts(type_ = BMapType.MAPTYPE_CONTROL_DROPDOWN), #切換地圖類型的控件
            scale_control_opts = opts.BMapScaleControlOpts(), #比例尺控件
            overview_map_opts = opts.BMapOverviewMapControlOpts(is_open = True), #添加縮略地圖
            navigation_control_opts = opts.BMapNavigationControlOpts() #地圖的平移縮放控件
        )
    )
     
    map_b.render(path = 'subway_beijing.html')

    注:因為是北京地圖,所以設置天安門的經緯度[116.403963, 39.915119]為視角中心。

    讓我們看一下可視化的結果吧:

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    上圖中的四個角都有控件,這是我們在代碼中添加了控件參數,它們分別為:地圖的平移縮放控件、切換地圖類型的控件、縮略地圖、以及比例尺控件。是不是還闊以

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    其他效果展示

    上文已經基本實現了用python制作地鐵線路動態圖。不過大家都用同一種顏色背景制作動態圖的話,就顯得就太單調了。正好我們還要繪制其他三個城市的地鐵圖,那就調整一些參數,看看能獲得什么效果吧?

    上海-變色

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    上海的數據接口是:

    http://map.amap.com/service/subway?_1615467204533&srhdata=3100_drw_shanghai.json

    上海市的地鐵圖我們改一下line的顏色,可在參數linestyle_opts中修改color。下圖中的線條顏色是lilac——淺紫色

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    廣州-衛星圖

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    廣州的數據接口是:

    http://map.amap.com/service/subway?_1615494419554&srhdata=4401_drw_guangzhou.json

    其實我們還可以調整可視化背景為衛星圖。不過這一操作并不需要額外寫代碼,因為剛剛上文提到我在調整參數時添加了4個控件,其中右上角的就可以直接切換地圖類型,具體操作見下圖。

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    深圳-個性化配色

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    深圳的數據接口是:

    http://map.amap.com/service/subway?_1615494473615&srhdata=4403_drw_shenzhen.json

    如果不滿意百度地圖設置好的地圖背景,我們還可以個性化設置mapStyle,調整自己的配色styleJson。

    怎么用Python?繪制北上廣深的地鐵路線動態圖

    小結

    今天帶大家學習了如何利用python繪制一線城市的地鐵線路動圖。主要分為四個部分:坐標點的采集、坐標系的轉換、利用pyecharts地理可視化、其他效果展示。

     怎么用Python?繪制北上廣深的地鐵路線動態圖

    看完上述內容,你們對怎么用Python 繪制北上廣深的地鐵路線動態圖有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    香格里拉县| 长岭县| 忻城县| 台山市| 林西县| 汽车| 璧山县| 德兴市| 麻阳| 开平市| 元氏县| 四会市| 特克斯县| 邻水| 丰县| 南宁市| 共和县| 五大连池市| 阜城县| 瑞安市| 海阳市| 邹平县| 天门市| 宁远县| 都江堰市| 湄潭县| 南澳县| 吴忠市| 微博| 吕梁市| 泸溪县| 义乌市| 石河子市| 冕宁县| 保德县| 新闻| 四川省| 盘山县| 赤城县| 信宜市| 台南县|