百度API之路线规划

本文介绍了如何利用Python调用百度地图API来获取两个地点之间的最短路线距离和预计时长。首先,通过百度地理编码API将地址转换为经纬度坐标,然后使用路线规划API获取信息。在实现过程中需要注意处理可能出现的服务器错误和参数问题,并确保文件编码正确。最终,根据获取的数据进行可视化展示。
摘要由CSDN通过智能技术生成

近期参加一个课题,聊到路线规划问题,需要搜索两地点的最短线路距离以及最短用时等情况,然后就想着用借用百度API,做个参考

环境:

  python 3.6

主要问题:

1. 分析百度官方路线规划API了解到路线规划需要提供经纬度信息,于是借用百度地理编码是指将地址或地名等位置描述转换为经纬度坐标的过程。得到的坐标信息,可以用于制图或空间分析操作。(出于国家安全考虑,公布出来的坐标信息一般是经过加偏的。)http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
2. 根据经纬度信息,现有起点和终点坐标值(经纬度lng、lat),目的是通过百度地图开发者平台的路线规划功能获取起点终点路线规划距离和预估时长,百度地图开发者平台路线规划使用说明网址为:http://lbsyun.baidu.com/index.php?title=webapi/direction-api-abroad
3.爬取过程可能会由于服务器或者参数不满足要求导致爬虫中断,注意处理这个问题即可

4.一是注意源文件的数据格式要转utf-8;二是修改文件路径;三是AK需要自行去开发者平台申请。

代码如下(由于文件不方便上传,只需稍作修改,即可使用):

# -*- coding:utf-8 -*-
# ------------------------------
# @Time     :2019/5/9 13:32
# @Author   :jonie
# @Email    :
# @File     :code_get.py
# Description:
# ------------------------------
import csv
import json
import time
import requests
from bs4 import BeautifulSoup
from urllib.request import urlopen, quote
import json
import requests
# [113.63095213159264, 34.74830559988335]#
origin_path = 'data/赛点.csv'  # 原始数据文件路径
new_path = 'data/地址对应坐标.txt'  # 爬取数据文件保存路径

machine_data = csv.reader(open(origin_path, 'r', encoding='utf-8'))  # 读取原始文件数据


for addr in machine_data:  # 循环爬取每一条数据
    # print(addr[2])


    address = addr[1]
    ak = 'FA8atAaqd1wajikD56lPqtiaNCldeya'
    url = 'http://api.map.baidu.com/geocoder/v2/?address='
    output = 'json'
    # ak = '你的ak'#需填入自己申请应用后生成的ak
    add = quote(address)  # 本文城市变量为中文,为防止乱码,先用quote进行编码
    url2 = url + add + '&output=' + output + "&ak=" + ak
    req = urlopen(url2)
    res = req.read().decode()
    temp = json.loads(res)
    lng = temp['result']['location']['lng']  # 获取经度
    lat = temp['result']['location']['lat']  # 获取纬度
    lng = ("%.5f" % lng)
    lat = ("%.5f" % lat)


    list1 = [lng, lat,addr[0]]
    print('百度坐标为:', list1)
    with open(new_path, 'a', encoding='utf-8') as f:
        f.write(str(list1))
        f.write('\n')
        f.close()



    with open("data/赛点信息.csv", 'a', newline='',encoding='utf-8') as t:  # numline是来控制空的行数的
        writer = csv.writer(t)  # 这一步是创建一个csv的写入器(个人理解)
        writer.writerow(list1)  # 写入标签
        # writer.writerows(n)  # 写入样本数据
        t.close()

调用百度地图api获取起点终点路线规划距离和预估时长代码

  1 import csv
  2 import re
  3 import time
  4 import json
  5 from urllib.request import urlopen
  6 import urllib
  7 
  8 # 原数据文件格式csv: 起点纬度 + 起点经度 + 索引 + 终点纬度 + 终点经度
  9 origin_path = 'data/b.csv'  # 原始数据文件路径
 10 result_path = 'data/result122901.txt'  # 爬取数据文件保存路径
 11 
 12 # 百度地图提供的api服务网址
 13 url_drive = r"http://api.map.baidu.com/direction/v2/driving"  # 驾车(routematrix 批量算路)
 14 url_ride = r'http://api.map.baidu.com/routematrix/v2/riding?output=json'  # 骑行
 15 url_walk = r'http://api.map.baidu.com/routematrix/v2/walking?output=json'  # 步行
 16 url_bus = r'http://api.map.baidu.com/direction/v2/transit?output=json'  # bus(direction路线规划)
 17 cod = r"&coord_type=bd09ll"
 18 # 声明坐标格式,bd09ll(百度经纬度坐标);bd09mc(百度摩卡托坐标);gcj02(国测局加密坐标),wgs84(gps设备获取的坐标)
 19 # AK为从百度地图网站申请的秘钥,额度不够的时候直接在list后面新增AK就行
 20 AK = ['FA8atAaqd1wajikD56lPqtiasdfleCeyz']
 21 # 把变量名先写入文件
 22 colnames = '设备序列号 起点 终点 状态码  步行路程(米) 步行耗时(秒)'
 23 with open(result_path, 'a', encoding='utf-8') as f:
 24     f.write(colnames)
 25     f.write('\n')
 26     f.close()
 27 
 28 address = csv.reader(open(origin_path, 'r', encoding='utf-8'))  # 读取原始文件数据
 29 
 30 # for ad in address:
 31 #     # print(ad)
 32 #     print(ad[0])
 33 #     print(ad[1])
 34 #     print(ad[2])
 35 #     print(ad[3])
 36 #     print(ad[4])
 37 n = 0
 38 akn1 = 0
 39 akn2 = 0
 40 a = 0
 41 while<
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于百度地图API路线规划,你可以使用百度地图JavaScript API的DrivingRoute类来实现。具体步骤如下: 1. 引入百度地图JavaScript API库文件和DrivingRoute类库文件: ``` <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script> <script type="text/javascript" src="http://api.map.baidu.com/library/DrivingRoute/1.5/src/DrivingRoute_min.js"></script> ``` 其中,ak参数是你在百度地图开放平台申请的密钥。 2. 创建地图实例和DrivingRoute对象: ``` var map = new BMap.Map("map-container"); var driving = new BMap.DrivingRoute(map, {renderOptions:{map: map, autoViewport: true}}); ``` 其中,"map-container"是你的地图容器的ID。 3. 调用DrivingRoute的search方法进行路线规划: ``` driving.search("起点", "终点"); ``` 其中,起点和终点可以是地名、地址、坐标等。 4. 监听DrivingRoute的searchcomplete事件,获取路线规划结果: ``` driving.setSearchCompleteCallback(function(results){ if (driving.getStatus() == BMAP_STATUS_SUCCESS){ var plan = results.getPlan(0); var distance = plan.getDistance(false) / 1000; // 路线总距离(单位:公里) var duration = plan.getDuration(false) / 60; // 路线总时间(单位:分钟) var steps = plan.getRoute(0).getPath(); // 路线坐标点数组 // ... } }); ``` 其中,BMAP_STATUS_SUCCESS表示路线规划成功,getPlan(0)表示获取第一条路线方案,getDistance(false)和getDuration(false)分别表示获取路线总距离和总时间,getPath()表示获取路线的坐标点数组。 5. 在地图上绘制路线: ``` var polyline = new BMap.Polyline(steps, {strokeColor: "blue", strokeWeight: 5, strokeOpacity: 0.5}); map.addOverlay(polyline); ``` 其中,steps是路线的坐标点数组,可以使用BMap.Polyline类来绘制路线。 以上就是使用百度地图API进行路线规划的基本步骤。希望能对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值