pyqt5 窗口调用网页高德地图kpi,进行实时地图导航

作为主项目功能的一部分,这部分我想单独记录下来

一,注册高德kpi【进行实名认证】

高德开放平台 | 高德地图API (amap.com)

二,申请Key

三,进入路径规划-API文档-开发指南-Web服务 API|高德地图API (amap.com)

 找到你需要的路径规划的文档,我选的是“驾车路径规划”

这一部分也便是获取数据的关键了

对应的代码如下:

首先将官方给的url,进行添加,我加入了,起始地点,终止地点,以及starategy【选择不同的策略】,以及key【刚才申请的key】

def get_route(start, end, mode, amap_key):
    # 这里的url中选择是步行,公交还是驾车路径,本文中driving?表示驾车,具体介绍见:https://lbs.amap.com/api/webservice/guide/api/direction
    url = f'https://restapi.amap.com/v3/direction/driving?origin={start}&destination={end}&strategy={mode}&key={amap_key}'
    response = requests.get(url)
    data = response.json()

    if data['status'] == '1':
        route = data['route']['paths'][0]['steps']
        # print(route)
        time = data['route']['paths'][0]['duration']       # 当前的行驶时间
        print(time)
        return route
    else:
        print('请求失败,请检查输入参数。')
        return None

 底下获取route路线和time时间的两行代码,写法是:

依次类推,相当于就是先找到这个大类,再去找小类,其次,就是“[0]”,代表的是第一条路径的对应的属性,如果你不想也可以改为[1]......

def exchange_route(route):
    if route:
        for i, step in enumerate(route):
            list_latlon.append(step["polyline"])

    else:
        print('无法获取路线规划。')

    # 获取街道地图
    for item in list_latlon:
        points = item.split(';')
        for point in points:
            coords = point.split(',')
            Lon.append(float(coords[0]))
            Lat.append(float(coords[1]))


def PlotLineOnMap(Lat, Lon, filename):
    # 给出的坐标系为GCJ-02,如果需要测试google地图,需要进行坐标转换

    tri = np.array(list(zip(Lat, Lon)))

    san_map = folium.Map(
        location=[34.155709, 108.904262],
        zoom_start=13,
        # 高德街道图
        # tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}',
        tiles='https://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=16&scale=1&style=8&x={x}&y={y}&z={z}',
        # 高德卫星图
        attr='default')

    folium.PolyLine(tri, color='#3388ff', fill=False).add_to(san_map)
    marker_cluster = plugins.MarkerCluster().add_to(san_map)
    for lat, lon in zip(Lat, Lon):
        folium.Marker([lat, lon], color='red').add_to(marker_cluster)
    file_path = f"{filename}.html"
    san_map.save(file_path)

代码分析:

exchange_route(route)
接收一个路线参数,然后提取其中每个步骤的经纬度坐标信息,并存储在list_latlon列表中
def updated_maps(ending_location, user_id):

将给定的经纬度坐标存放在一个列表当中,然后调用folium获取从起点开始,借助多个经纬度坐标点绘制路线图,同时进行标签,然后生成html文件,保存

    san_map = folium.Map(
        location=[34.155709, 108.904262],
        zoom_start=13,
        # 高德街道图
        # tiles='http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}',
        tiles='https://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=16&scale=1&style=8&x={x}&y={y}&z={z}',
        # 高德卫星图
        attr='default')

zoom_start :是当前地图的放大倍数

tiles是瓦片服务   这是我找到的一个宝藏地址         :https://www.cnblogs.com/HandyLi/p/11137367.html

 四,地图显示:

使用qwebengine控件去显示网页

    def show_path(self, user_id):
        self.qwebengine.setFixedSize(700, 400)
        self.grid_layout.addWidget(self.qwebengine, 3, 1, 1, 1)
        # path = "file:\\" + os.getcwd() + "\\showpoint.html"
        path = "file:\\" + os.getcwd() + f"\\map_{user_id}.html"
        path = path.replace('\\', '/')
        self.qwebengine.load(QUrl(path))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夜路难行々

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

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

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

打赏作者

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

抵扣说明:

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

余额充值