python调用百度地图API批量查询全国高速收费站点经纬度

写在前面

大家好,我是饭都吃不起的南南

昨天帮朋友爬了全国的高速站点收费站这里下载

【http://www.bestunion.cn/gaosu/p_4/sfzlist.html】

由于该网站并没有西藏和海南省的高速收费站,所以并没有获取到,爬取这个挺简单的,我就不说了.(说多了容易戴上银手镯,我怂)

数据如下

图片

调用百度API批量拾取坐标

接下来需要调用百度API批量拾取坐标,不会python的同学也没关系,可以打开**【https://maplocation.sjfkai.com/】**这个网站批量转,但是要注意,在地址前面加上所在地区,不然就会QAQ!!!

图片

下面开始写代码【复制粘贴】

pandas读取excel数据存为列表
import pandas as pd

def excel_one_line_to_list():
    df = pd.read_excel(r"C:\Users\Administrator\Desktop\收费站\2021-8-27-10-13-41-4442610865300-【陕西高速收费站一览表】.xlsx", usecols=[0],
                       names=None)  # 读取项目名称列,不要列名
    df_li = df.values.tolist()
    result = []
    for s_li in df_li:
        result.append(s_li[0])
    #print(result)
    return result#return返回结果值
if __name__ == '__main__':
        result = excel_one_line_to_list()#接收结果

地址转换为经纬度所以选择的是地理编码,如果要搞别的事情的话,可以去查帮助文档。

import requests
import json

def getUrl(*address):
    '''
    调用地图API获取待查询地址专属url
    最高查询次数30w/天,最大并发量160/秒
    '''
    ak = '你的key'
    if len(address) < 1:
        return None
    else:
        for add in address:   
            url = 'http://api.map.baidu.com/geocoding/v3/?address={inputAddress}&output=json&ak={myAk}'.format(inputAddress=add,myAk=ak)  
            yield url

key未认证的用户每天调用api的次数限制为0.6w,认证后为3w

def getPosition(url):
    '''返回经纬度信息'''
    res = requests.get(url)
    json_data = json.loads(res.text)

    if json_data['status'] == 0:
        lat = json_data['result']['location']['lat'] #纬度
        lng = json_data['result']['location']['lng'] #经度
    else:
        print("Error output!")
        return json_data['status']
    return lat,lng

if __name__ == "__main__":
    address = result
    for add in address:
        add_url = list(getUrl(add))[0]
        print(add_url)
        try:
            lat,lng = getPosition(add_url)
            print("{0}|经度:{1}|纬度:{2}.".format(add,lng,lat))
        except Error as e:
            print(e)
返回结果如下
http://api.map.baidu.com/geocoding/v3/?address=禹门口收费站&output=json&ak=yvc2TW9lD5rMiubbR0or57iVuDQiFcNU
禹门口收费站|经度:110.63335672712498|纬度:35.66392482522151.
http://api.map.baidu.com/geocoding/v3/?address=龙门收费站&output=json&ak=yvc2TW9lD5rMiubbR0or57iVuDQiFcNU
龙门收费站|经度:114.31678129149563|纬度:23.676445987337065.
http://api.map.baidu.com/geocoding/v3/?address=韩城收费站&output=json&ak=yvc2TW9lD5rMiubbR0or57iVuDQiFcNU
韩城收费站|经度:110.47940351187505|纬度:35.48304612715598.
http://api.map.baidu.com/geocoding/v3/?address=芝川收费站&output=json&ak=yvc2TW9lD5rMiubbR0or57iVuDQiFcNU
芝川收费站|经度:110.41152009160538|纬度:35.38365354048929.
http://api.map.baidu.com/geocoding/v3/?address=合阳收费站&output=json&ak=yvc2TW9lD5rMiubbR0or57iVuDQiFcNU
合阳收费站|经度:110.1669576741416|纬度:35.218007273465126.
http://api.map.baidu.com/geocoding/v3/?address=澄城收费站&output=json&ak=yvc2TW9lD5rMiubbR0or57iVuDQiFcNU
澄城收费站|经度:109.94180943535946|纬度:35.00705384279941.
http://api.map.baidu.com/geocoding/v3/?address=孙镇收费站&output=json&ak=yvc2TW9lD5rMiubbR0or57iVuDQiFcNU
孙镇收费站|经度:117.70541929687147|纬度:37.037346543797625.
http://api.map.baidu.com/geocoding/v3/?address=蒲城收费站&output=json&ak=yvc2TW9lD5rMiubbR0or57iVuDQiFcNU
蒲城收费站|经度:109.61161649430977|纬度:34.913113042128124.
......

python真香!源码这里下载

图片

图片

好的,我了解了你的问题。首先,你需要使用百度地图API来获取轨迹经纬度信息,然后使用Python的Matplotlib库来绘制轨迹图。 以下是一个简单的步骤: 1. 在百度地图开放平台上创建一个应用,获取到对应的AK(Access Key)。 2. 使用百度地图API的“轨迹纠偏”功能,将原始轨迹转换为经纬度坐标,并保存到本地文件中。 3. 使用Python的Matplotlib库,读取保存的经纬度坐标,绘制轨迹图。 下面是一个简单的代码示例: ```python import requests import json import matplotlib.pyplot as plt # 设置AK ak = 'your_access_key' # 获取轨迹 url = 'http://api.map.baidu.com/rectify/v1/track?ak={}'.format(ak) data = { "entity_name": "your_entity_name", "start_time": "your_start_time", "end_time": "your_end_time", "is_processed": "1" } response = requests.post(url, data=json.dumps(data)) points = response.json()['points'] # 保存轨迹到本地文件 with open('points.txt', 'w') as f: for point in points: f.write('{} {}\n'.format(point['x'], point['y'])) # 绘制轨迹图 x = [] y = [] with open('points.txt', 'r') as f: for line in f.readlines(): point = line.strip().split(' ') x.append(float(point[0])) y.append(float(point[1])) plt.plot(x, y) plt.show() ``` 在上述代码中,你需要替换AK、entity_name、start_time和end_time参数为你自己的值。同时,你也可以根据需要自定义轨迹图的样式。 希望这可以帮助到你!
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈南GISer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值