<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用Python評(píng)測(cè)三種批量查詢經(jīng)緯度的方法,你pick哪一種?

          共 3271字,需瀏覽 7分鐘

           ·

          2020-10-30 23:28

          不知道大家會(huì)在什么場(chǎng)合使用地圖可視化,對(duì)我來說地圖可視化的優(yōu)點(diǎn)除了它可以展示海量的位置數(shù)據(jù),更重要的是它可以很酷很炫,給人一種賞心悅目的舒適感。如下是J哥做的一個(gè)簡(jiǎn)單熱力圖:
          熱力地圖
          制作此類可視化地圖的前提是獲得海量的經(jīng)緯度數(shù)據(jù),數(shù)據(jù)從何而來?當(dāng)然是騰訊地圖、高德地圖和百度地圖這些大家耳熟能詳?shù)钠脚_(tái)。所以今天給大家分享用Python批量獲取經(jīng)緯度的三種方法,并分別評(píng)測(cè)它們的效率。

          一、騰訊地圖

          首先,咱們需要在騰訊位置服務(wù)平臺(tái)注冊(cè)并獲得一個(gè)key,作為位置數(shù)據(jù)調(diào)用的密匙。步驟如下:
          騰訊地圖開放平臺(tái)

          1、構(gòu)造函數(shù)

          獲得key以后,咱們就可以構(gòu)造API數(shù)據(jù)請(qǐng)求函數(shù)tengxun(),將json格式數(shù)據(jù)中的經(jīng)緯度解析出來即可,Python代碼如下:
          import requests

          def tengxun(addr):
          url = "https://apis.map.qq.com/jsapi?" #騰訊地圖API接口
          para = {
          "qt": "geoc",
          "addr":addr, #傳入地址參數(shù)
          "output": "json",
          "key": "D7EBZ-NHYKX-UAH4A-74TW4-6M2JE-UHFLY", #即騰訊地圖API的key
          "pf":"jsapi",
          "ref":"jsapi"
          }
          req = requests.get(url,para) #請(qǐng)求數(shù)據(jù)
          req = req.json() #轉(zhuǎn)為json格式
          #print(req)
          m = req["detail"]
          g = f"{m['pointx']},{m['pointy']}" #解析到經(jīng)緯度數(shù)據(jù)
          print(g)
          return g
          tengxun(addr="深圳市")
          傳入自變量“深圳市”,運(yùn)行Python代碼,即可獲得深圳市的經(jīng)緯度數(shù)據(jù):
          '113.883080,22.553290'

          2、讀取數(shù)據(jù)

          函數(shù)構(gòu)造好以后,導(dǎo)入準(zhǔn)備好的excel文件,文件包含廣州500所學(xué)校的地址數(shù)據(jù)??稍凇覆薐學(xué)Python」公眾后臺(tái)回復(fù)學(xué)校自動(dòng)獲取。
          import pandas as pd
          df1 = pd.read_excel("gz_school.xlsx")
          df1.head()
          數(shù)據(jù)預(yù)覽:
          3、應(yīng)用函數(shù)
          將學(xué)校數(shù)據(jù)中的地址列應(yīng)用于前文構(gòu)造的函數(shù),批量獲取500所學(xué)校的經(jīng)緯度數(shù)據(jù)并進(jìn)行程序計(jì)時(shí)。
          import time
          time_start = time.time() #程序起始時(shí)間
          df1['經(jīng)緯度']=df1['address'].apply(tengxun) #調(diào)用函數(shù)
          time_end = time.time() #程序結(jié)束時(shí)間
          t = time_end-time_start #運(yùn)行時(shí)間
          print('共用時(shí)%s秒'%t)
          通過騰訊地圖批量解析500個(gè)地址獲取經(jīng)緯度數(shù)據(jù)共用時(shí)約52.40秒,平均1秒鐘可以獲取9個(gè)地址的經(jīng)緯度。
          共用時(shí)52.39904499053955

          4、保存數(shù)據(jù)

          獲取到經(jīng)緯度數(shù)據(jù)后,保存為excel文件。
          df1.head()
          df1.to_excel('result.xlsx',index = False)

          數(shù)據(jù)預(yù)覽:

          二、高德地圖

          同樣的,高德也需要提前在高德開放平臺(tái)注冊(cè)并創(chuàng)建應(yīng)用,獲取你的專屬key。
          高德地圖開放平臺(tái)

          1、構(gòu)造函數(shù)

          import pandas as pd
          import requests
          import time
          import csv
          import json

          def gaode(addr):
          para = {
          'key':'你自己的', #高德地圖開放平臺(tái)申請(qǐng)的key
          'address':addr #傳入地址參數(shù)
          }
          url = 'https://restapi.amap.com/v3/geocode/geo?' #高德地圖API接口
          req = requests.get(url,para)
          req = req.json()
          print('-' * 30)
          m = req['geocodes'][0]['location']
          print(m)
          return m
          gaode(addr="深圳")

          2、應(yīng)用函數(shù)

          df2 = pd.read_excel('gz_school.xlsx') #讀取地址數(shù)據(jù)
          time_start = time.time()
          df2['經(jīng)緯度'] = df2['address'].apply(gaode) #調(diào)用函數(shù)
          time_end = time.time()
          t = time_end-time_start
          print('共用時(shí)%s秒'%t)
          通過高德地圖批量解析500個(gè)地址獲取經(jīng)緯度數(shù)據(jù)共用時(shí)約37.74秒,平均1秒鐘可以獲取13個(gè)地址的經(jīng)緯度,解析速度高于騰訊地圖。
          共用時(shí)37.740272998809814

          三、百度地圖

          百度地圖批量獲取經(jīng)緯度方法與高德地圖一致。
          百度地圖開放平臺(tái)

          1、構(gòu)造函數(shù)

          import pandas as pd
          import requests
          import time
          import csv
          import json

          def baidu(addr):
          url = "http://api.map.baidu.com/geocoding/v3/?" #百度地圖API接口
          para = {
          "address": addr, #傳入地址參數(shù)
          "output": "json",
          "ak": "你自己的" #百度地圖開放平臺(tái)申請(qǐng)ak
          }
          req = requests.get(url,para)
          req = req.json()
          #print(req)
          print('-' * 30)
          m = req["result"]["location"]
          g = f"{m['lng']},{m['lat']}"
          print(g)
          return g
          baidu(addr="深圳")

          2、應(yīng)用函數(shù)

          df3 = pd.read_excel('gz_school.xlsx')
          time_start = time.time()
          df3['經(jīng)緯度'] = df3['address'].apply(baidu)
          time_end = time.time()
          t = time_end-time_start
          print('共用時(shí)%s秒'%t)
          通過百度地圖批量解析500個(gè)地址獲取經(jīng)緯度數(shù)據(jù)共用時(shí)約24.06秒,平均1秒鐘可以獲取20個(gè)地址的經(jīng)緯度,解析速度高于高德地圖和騰訊地圖。
          共用時(shí)24.0550799369812

          四、小結(jié)

          僅從解析速度來看,百度地圖效率高于高德地圖,高德地圖高于騰訊地圖。當(dāng)然,解析速度還要考慮程序運(yùn)行時(shí)的網(wǎng)絡(luò)狀況、電腦自身配置等因素。另外,地址數(shù)據(jù)解析還要考慮準(zhǔn)確率,只有綜合考慮解析速度和準(zhǔn)確率,才能更加客觀地判斷哪一種方法最優(yōu),準(zhǔn)確率方面的評(píng)測(cè)將在以后的文章中進(jìn)行分享。


          由于微信平臺(tái)算法改版,公號(hào)內(nèi)容將不再以時(shí)間排序展示,如果大家想第一時(shí)間看到我們的推送,強(qiáng)烈建議星標(biāo)我們和給我們多點(diǎn)點(diǎn)【在看】。星標(biāo)具體步驟為:


          (1)點(diǎn)擊頁(yè)面最上方“小詹學(xué)Python”,進(jìn)入公眾號(hào)主頁(yè)。


          (2)點(diǎn)擊右上角的小點(diǎn)點(diǎn),在彈出頁(yè)面點(diǎn)擊“設(shè)為星標(biāo)”,就可以啦。


          感謝支持,比心。

          瀏覽 79
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美白丰满老太AAA片 | 色婷婷4| 国产成人三级在线视频 | 婷婷激情视频在线播放 | 日韩无码一区二 |