Python获取各大地图平台经纬度数据,哪家的数据最准确?

python

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于菜J学Python ,作者J哥

 

前言

不知道大家会在什么场合使用地图可视化,对我来说地图可视化的优点除了它可以展示海量的位置数据,更重要的是它可以很酷很炫,给人一种赏心悦目的舒适感。如下是J哥做的一个简单热力图:

 

热力地图

制作此类可视化地图的前提是获得海量的经纬度数据,数据从何而来?当然是腾讯地图、高德地图和百度地图这些大家耳熟能详的平台。所以今天给大家分享用Python批量获取经纬度的三种方法,并分别评测它们的效率。

 

一、腾讯地图

首先,咱们需要在腾讯位置服务平台注册并获得一个key,作为位置数据调用的密匙。步骤如下:

 

腾讯地图开放平台

1、构造函数

获得key以后,咱们就可以构造API数据请求函数tengxun(),将json格式数据中的经纬度解析出来即可,Python代码如下:

import requests

def tengxun(addr):

url = "https://apis.map.qq.com/jsapi?"#腾讯地图API接口

para = {

"qt": "geoc",

"addr":addr, #传入地址参数

"output": "json",

"key": "D7EBZ-NHYKX-UAH4A-74TW4-6M2JE-UHFLY", #即腾讯地图API的key

"pf":"jsapi",

"ref":"jsapi"

}

req = requests.get(url,para) #请求数据

req = req.json() #转为json格式

#print(req)

m = req["detail"]

g = f"{m["pointx"]},{m["pointy"]}"#解析到经纬度数据

print(g)

return g

tengxun(addr="深圳市")

传入自变量“深圳市”,运行Python代码,即可获得深圳市的经纬度数据:

"113.883080,22.553290"

2、读取数据

函数构造好以后,导入准备好的excel文件,文件包含广州500所学校的地址数据。可在「菜J学Python」公众后台回复学校自动获取。

import pandas as pd

df1 = pd.read_excel("gz_school.xlsx")

df1.head()

数据预览:

 

3、应用函数

将学校数据中的地址列应用于前文构造的函数,批量获取500所学校的经纬度数据并进行程序计时。

import time

time_start = time.time() #程序起始时间

df1["经纬度"]=df1["address"].apply(tengxun) #调用函数

time_end = time.time() #程序结束时间

t = time_end-time_start #运行时间

print("共用时%s秒"%t)

通过腾讯地图批量解析500个地址获取经纬度数据共用时约52.40秒,平均1秒钟可以获取9个地址的经纬度。

共用时52.39904499053955秒

4、保存数据

获取到经纬度数据后,保存为excel文件。

df1.head()

df1.to_excel("result.xlsx",index = False)

数据预览:

 

二、高德地图

同样的,高德也需要提前在高德开放平台注册并创建应用,获取你的专属key。

 

高德地图开放平台

1、构造函数

import pandas as pd

import requests

import time

import csv

import json

def gaode(addr):

para = {

"key":"你自己的", #高德地图开放平台申请的key

"address":addr #传入地址参数

}

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、应用函数

df2 = pd.read_excel("gz_school.xlsx") #读取地址数据

time_start = time.time()

df2["经纬度"] = df2["address"].apply(gaode) #调用函数

time_end = time.time()

t = time_end-time_start

print("共用时%s秒"%t)

通过高德地图批量解析500个地址获取经纬度数据共用时约37.74秒,平均1秒钟可以获取13个地址的经纬度,解析速度高于腾讯地图。

共用时37.740272998809814秒

三、百度地图

百度地图批量获取经纬度方法与高德地图一致。

 

百度地图开放平台

1、构造函数

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, #传入地址参数

"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、应用函数

df3 = pd.read_excel("gz_school.xlsx")

time_start = time.time()

df3["经纬度"] = df3["address"].apply(baidu)

time_end = time.time()

t = time_end-time_start

print("共用时%s秒"%t)

通过百度地图批量解析500个地址获取经纬度数据共用时约24.06秒,平均1秒钟可以获取20个地址的经纬度,解析速度高于高德地图和腾讯地图。

共用时24.0550799369812秒

四、小结

仅从解析速度来看,百度地图效率高于高德地图,高德地图高于腾讯地图。当然,解析速度还要考虑程序运行时的网络状况、电脑自身配置等因素。另外,地址数据解析还要考虑准确率,只有综合考虑解析速度和准确率,才能更加客观地判断哪一种方法最优,准确率方面的评测将在以后的文章中进行分享。

以上是 Python获取各大地图平台经纬度数据,哪家的数据最准确? 的全部内容, 来源链接: utcz.com/z/531216.html

回到顶部