交通态势-高德交通态势数据爬取及可视化

使用高德交通态势查询API实时获取交通态势,并使用geopandas进行绘图。

高德交通态势查询API: 交通态势查询-高级 API 文档-开发指南-Web服务 API | 高德地图API

查询方式有以下几种:

  • 指定线路交通态势查询
  • 圆形区域内交通态势查询
  • 矩形区域内交通态势查询

本文主要使用矩形区域内交通态势查询API。使用该接口前,先去高德开发者平台申请Key。

注意:要查询的矩形区域的对角线长度不能超过10公里。

1、获取矩形左下右上顶点坐标对

使用矩形区域查询时,需要给出矩形左下角和右上角的经纬度坐标对,使用高德坐标拾取器(坐标拾取器 | 高德地图API)选取坐标。

构建API接口,如下,

BASE_URL = 'https://restapi.amap.com/v3/traffic/status/rectangle?rectangle=104.052056,30.651679;104.081754,30.677741&output=json&extensions=all&key=你的key'

2、爬取数据及可视化

使用如下代码进行数据爬取及可视化

import requests
import geopandas as gpd
from shapely.geometry import LineString
import matplotlib.pyplot as plt
import contextily as ctx
import warnings

warnings.filterwarnings('ignore')

# 解决中文乱码问题,并设置字体
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.family'] = ['SimHei']
plt.rcParams['font.sans-serif'] = ['SimHei']


def get_status_data(sub_rectangle):
    """获取态势数据"""
    data = {'name': [],
            'status': [],
            'geometry': []}

    BASE_URL = ('https://restapi.amap.com/v3/traffic/status/rectangle?rectangle={'
                '}&output=json&extensions=all&key=你的key')

    res = requests.get(BASE_URL.format(sub_rectangle)).json()
    if res['status'] == '1':
        for road in res['trafficinfo']['roads']:
            polylines = [(float(y[0]), float(y[1])) for y in
                         [x.split(',') for x in [i for i in road['polyline'].split(';')]]]
            data['geometry'].append(LineString(polylines))
            data['name'].append(road['name'])
            data['status'].append(road['status'])
    return gpd.GeoDataFrame(data, geometry='geometry', crs=4326)


def plot_status(data, base_map=False):
    """绘制态势图"""
    fig, ax = plt.subplots(figsize=(10, 8), dpi=300)
    # 定义每个类别的颜色
    colors = {'3': 'red', '2': 'orange', '1': 'green', '0': 'grey'}
    # 定义每个类别的线条宽度
    linewidths = {'3': 1.0, '2': 0.7, '1': 0.4, '0': 0.2}

    data.plot(column='status', figsize=(10, 8), ax=ax, color=data['status'].map(colors),
              linewidth=data['status'].map(linewidths))
    if base_map:
        # 添加高德底图
        ctx.add_basemap(ax,
                        source=r"http://wprd04.is.autonavi.com/appmaptile?lang=zh_cn&size=1&style=7&x={x}&y={y}&z={z}",
                        reset_extent=False, crs='epsg:4326', alpha=1)
    ax.axis('off')
    plt.tight_layout()
    plt.show()


if __name__ == "__main__":
    # 所选取矩形的左下角;右上角坐标对
    rectangle = '104.052056,30.651679;104.081754,30.677741'
    plot_status(get_status_data(sub_rectangle=rectangle), base_map=True)

输出结果如下,

无底图:

有底图:

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

煮雨小筑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值