python实现基于百度路径规划接口的坐标对获取两点驾车距离的计算
Posted 红领巾1994
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python实现基于百度路径规划接口的坐标对获取两点驾车距离的计算相关的知识,希望对你有一定的参考价值。
今天为大家介绍一种通过python实现坐标对间距离数据的获取方法。接口采用百度开发的路径规划接口。
1.调用接口:
接口:(传入起点坐标串,结束坐标串;ak值需要注册百度开发者) 接口详细说明
http://api.map.baidu.com/direction/v2/driving?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=您的AK //GET请求
2.AK值获取:
注册成为开发者后需要添加应用,添加服务端应用勾选路径规划选项,其ak值才能调取该接口,不然将出现‘204,app拒绝服务’。
3.实现思路
- 坐标对数据集(Y.txt)中获取坐标对;----->(x1,y1/x2,y2) ----->
30.552413,114.267227/30.564768,114.235462/4758
- 日志记录(logo.txt)记录抓取过的记录序号(开始默认为-1,其后不再更改记录),用于断点续爬;----->(-1、0、1.....)
- 结果集(save.txt)用于记录数据;----->(x1,y1/x2,y2/s)----->
30.552413,114.267227/30.564768,114.235462/4758
- 文件目录结构如下图:
4.源代码
1 # coding=utf-8 2 import requests 3 import re 4 import os 5 from time import sleep 6 #访问url,返回数据JSON 7 def get_JSON(startStr,endStr,key): 8 sleep(0.5) 9 url=\'http://api.map.baidu.com/direction/v2/driving?origin=\'+startStr+\'&destination=\'+endStr+\'&ak=\'+key 10 # print (url) 11 headers = { 12 \'User-Agent\':\'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36\', 13 \'referer\':"http://www.baidu.com",#伪造一个访问来源 14 } 15 poi_JSON = requests.get(url, headers=headers).json() 16 return poi_JSON 17 18 19 #发送请求获取json数据 20 def jiexi_Json(resJSON): 21 status=resJSON[\'status\'] 22 if status==0:# 请求到数据 23 # print(\'数据请求成功\') 24 distance=resJSON[\'result\'][\'routes\'][0][\'distance\'] 25 print(\'路径计算完成\',distance) 26 return distance 27 else: 28 if status==1: 29 print(\'服务内部错误\') 30 elif status==2: 31 print(\'参数无效\') 32 elif status==2001: 33 print(\'无骑行路线\') 34 elif status==240: 35 print(\'ak值注册不正确,未包含路径规划服务\') 36 else:# 额度没有了 37 print(\'额度不够了!\') 38 39 # 读取坐标对 40 def read_File(filePath): 41 file = open(filePath) 42 logoFilePath=\'logo.txt\' 43 logoFile=open(logoFilePath) 44 for oldIndex in logoFile:# 读取日志 45 for index, coorItemStr in enumerate(file): # 读取坐标对 46 if index>int(oldIndex): 47 print(\'正在请求第\',str(index+1),\'条数据\') 48 coorArr=coorItemStr.rstrip("\\n").split(\'/\') 49 startStr=coorArr[0].split(\',\')[1]+\',\'+coorArr[0].split(\',\')[0] 50 endStr=coorArr[1].split(\',\')[1]+\',\'+coorArr[1].split(\',\')[0] 51 key=\'你自己的百度密钥\' # 百度密钥 52 #发送距离量算请求 53 poi_JSON = get_JSON(startStr,endStr,key) 54 distance=jiexi_Json(poi_JSON) 55 saveStr=startStr+\'/\'+endStr+\'/\'+str(distance) 56 saveText(\'saveY.txt\',saveStr,\'a+\')# 记录结果 57 saveText(logoFilePath,str(index),\'w\')# 记录数据请求日志 58 else: 59 print(\'第\',str(index+1),\'条数据已经请求完成\') 60 print(\'数据转换已完成!\') 61 62 63 # 以txt文件格式存储 64 def saveText(filePath,str,type): 65 type=(type if type else "a+") 66 # 打开一个文件 67 fo = open(filePath,type) 68 fo.write(str); #内容写入 69 fo.write(\'\\n\') 70 fo.close()# 关闭打开的文件 71 72 if __name__ == "__main__": 73 read_File(\'Y.txt\')
以上是关于python实现基于百度路径规划接口的坐标对获取两点驾车距离的计算的主要内容,如果未能解决你的问题,请参考以下文章