zoukankan      html  css  js  c++  java
  • 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.实现思路

    1. 坐标对数据集(Y.txt)中获取坐标对;----->(x1,y1/x2,y2) ----->
      30.552413,114.267227/30.564768,114.235462/4758
    2. 日志记录(logo.txt)记录抓取过的记录序号(开始默认为-1,其后不再更改记录),用于断点续爬;----->(-1、0、1.....)
    3. 结果集(save.txt)用于记录数据;----->(x1,y1/x2,y2/s)----->
      30.552413,114.267227/30.564768,114.235462/4758
    4. 文件目录结构如下图:

      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("
    ").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('
    ')
    70     fo.close()# 关闭打开的文件
    71 
    72 if __name__ == "__main__":
    73     read_File('Y.txt')
    py代码

      

  • 相关阅读:
    Javascript DMO 编程艺术
    PHPExcel
    MYSQL
    AJAX全接触
    正则表达式
    常用知识
    PHP 常用函数
    thinkphp5 公共函数的使用与调用
    thinkphp 使用phpExcel 导入和导出
    php 判断是pc端还是移动端
  • 原文地址:https://www.cnblogs.com/giserjobs/p/12354932.html
Copyright © 2011-2022 走看看