<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>

          地圖可視化必備:3種根據(jù)地址查詢經(jīng)緯度的方法

          共 3321字,需瀏覽 7分鐘

           ·

          2021-04-24 02:21


          大家好,歡迎來到 Crossin的編程教室 !
          我們做位置相關(guān)的數(shù)據(jù)可視化時,經(jīng)常會用到地圖可視化。對我來說,地圖可視化的優(yōu)點(diǎn)除了它可以展示海量的位置數(shù)據(jù),更重要的是它可以很酷很炫,給人一種賞心悅目的舒適感。如下是一個簡單的熱力圖:
          熱力地圖
          制作此類可視化地圖的前提是獲得海量的經(jīng)緯度數(shù)據(jù),數(shù)據(jù)從何而來?當(dāng)然是騰訊地圖、高德地圖和百度地圖這些大家耳熟能詳?shù)钠脚_。所以今天給大家分享用Python批量獲取經(jīng)緯度的三種方法,并順便測一下它們的速度如何。

          一、騰訊地圖

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

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

          獲得key以后,咱們就可以構(gòu)造API數(shù)據(jù)請求函數(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) #請求數(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é)校地址數(shù)據(jù)下載:
          https://pan.baidu.com/s/1g0Wkmd2b75e0KzkP_SLW7g  

          提取碼:fjg3

          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ì)時。
          import time
          time_start = time.time() #程序起始時間
          df1['經(jīng)緯度']=df1['address'].apply(tengxun) #調(diào)用函數(shù)
          time_end = time.time() #程序結(jié)束時間
          t = time_end-time_start #運(yùn)行時間
          print('共用時%s秒'%t)
          通過騰訊地圖批量解析500個地址獲取經(jīng)緯度數(shù)據(jù)共用時約52.40秒,平均1秒鐘可以獲取9個地址的經(jīng)緯度。
          共用時52.39904499053955

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

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

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


          二、高德地圖

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

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

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

          def gaode(addr):
          para = {
          'key':'你自己的', #高德地圖開放平臺申請的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('共用時%s秒'%t)
          通過高德地圖批量解析500個地址獲取經(jīng)緯度數(shù)據(jù)共用時約37.74秒,平均1秒鐘可以獲取13個地址的經(jīng)緯度,解析速度高于騰訊地圖。
          共用時37.740272998809814

          三、百度地圖

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

          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": "你自己的" #百度地圖開放平臺申請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('共用時%s秒'%t)
          通過百度地圖批量解析500個地址獲取經(jīng)緯度數(shù)據(jù)共用時約24.06秒,平均1秒鐘可以獲取20個地址的經(jīng)緯度,解析速度高于高德地圖和騰訊地圖。
          共用時24.0550799369812

          四、小結(jié)

          以上便是3種通過地址獲取經(jīng)緯度信息的方法,都可以滿足我們開發(fā)時的需求。僅從解析速度來看,百度地圖效率高于高德地圖,高德地圖高于騰訊地圖。當(dāng)然,解析速度還要考慮程序運(yùn)行時的網(wǎng)絡(luò)狀況、電腦自身配置等因素。另外,地址數(shù)據(jù)解析還要考慮準(zhǔn)確率,只有綜合考慮解析速度和準(zhǔn)確率,才能更加客觀地判斷哪一種方法最優(yōu)。
          如果文章對你有幫助,歡迎轉(zhuǎn)發(fā)/點(diǎn)贊/收藏~

          作者:J哥

          來源:菜J學(xué)Python


          _往期文章推薦_

          制作國際空間站實(shí)時跟蹤器




          如需了解付費(fèi)精品課程教學(xué)答疑服務(wù)
          請?jiān)?strong style="max-width: 100%;overflow-wrap: break-word !important;box-sizing: border-box !important;">Crossin的編程教室內(nèi)回復(fù): 666

          瀏覽 815
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  天堂网中文在线 | 大香蕉伊人网站 | 黄色激情在线观看小视频 | 一级a毛片免费观看久久精品 | 逼视频欧美 |