Python利用百度地图获取两地距离 最详细过程和源代码
百度地图开放平台
介绍需要用到的API
本项目中所有使用的API均为Web服务API,官方开发文档。
1.地点检索服务
地点检索服务(又名Place API)是一类Web API接口服务;
服务提供多种场景的地点(POI)检索功能,包括城市检索、圆形区域检索、矩形区域检索。开发者可通过接口获取地点(POI)基础或详细地理信息。
我们利用这个API来获取指定地点的经纬度(lat, lng)两个参数。
2.轻量级路线规划服务
轻量级路线规划服务(又名DirectionLite API )是一套REST风格的Web服务API,以HTTP/HTTPS形式提供了路线规划服务。相较于Direction API,DirectionLite API更注重服务的高性能和接口的轻便简洁,满足基础的路线规划需求,并不具备Direciton API中的驾车多路线/未来出行和公交跨城规划等高级功能。DirectionLite API支持驾车、骑行、步行、公交路线规划,支持中国大陆地区。
我们利用这个API来获取两个地点(用经纬度来给出)之间的路线规划距离。
编写Python程序
0.需要用到的模块
- requests
- json
- pandas
1.获取对应地点的经纬度
将传入的address
通过地点检索服务得到其经纬度,返回值为经纬度对应的字符串值,中间以逗号隔开,之后跟一个查询返回状态,如果查询失败,状态值不为0。
def getPosition(address):url = r"http://api.map.baidu.com/place/v2/search?query={}®ion=全国&output=json&ak={}".format(address,AK # 自动调用,不用修改)res = requests.get(url)json_data = json.loads(res.text)if json_data["status"] == 0:lat = json_data["results"][0]["location"]["lat"] # 纬度lng = json_data["results"][0]["location"]["lng"] # 经度else:print(json_data["message"])return "0,0", json_data["status"]return str(lat) + "," + str(lng), json_data["status"]
2.获取两地之间的距离
将传入的两个地点(以经纬度描述)通过轻量级路线规划服务得到之间的路线规划距离。本范例是以驾车行驶(对应参数为’driving’)的方式来进行计算的。
def getDistance(start, end):url = "https://api.map.baidu.com/directionlite/v1/driving?origin={}&destination={}&ak={}".format(start,end,AK # 自动调用,不用修改)res = requests.get(url)json_data = json.loads(res.text)if json_data["status"] == 0:return json_data["result"]["routes"][0]["distance"]else:print(json_data["message"])return -1
3.合并函数调用
传入两个地点名,返回两地点距离,当某个地点查询不到时,返回结果设置为-1。
def calcDistance(startName, endName):start, status1 = getPosition(startName)end, status2 = getPosition(endName)if status1 == 0 and status2 == 0:return getDistance(start, end)else:return -1
4.进行简单的功能测试
运行代码输出北京和上海之间的距离,其单位为米。
5.对Excel中的批量地点计算距离
将data.xlsx
文件中的地点全部读取并计算出距离,将结果保存到本地的result.xlsx
文件中,其中我们将距离的单位设置为千米。主模块代码如下:
if __name__ == "__main__":data = pd.read_excel("data.xlsx")res = []for i in range(0, len(data)):startName = data.iloc[i, 0]endName = data.iloc[i, 1]dist = calcDistance(startName, endName)res.append([startName, endName, dist / 1000])pd.DataFrame(res).to_excel("result.xlsx",header=["起点", "终点", "距离"],index=None,encoding="utf-8")
其中data.xlsx
文件的内容为:
对应的输出result.xlsx
文件内容如下:
联系方式
Email:gavinsun0921@foxmail.com
附录
# 本次整体的源代码
AK = "修改为你自己的AK码即可使用"import pandas as pd
import requests
import jsondef getPosition(address):url = r"http://api.map.baidu.com/place/v2/search?query={}®ion=全国&output=json&ak={}".format(address,AK # 这里是一开始截图用红色圈起来的部分,无需修改)res = requests.get(url)json_data = json.loads(res.text)if json_data["status"] == 0:lat = json_data["results"][0]["location"]["lat"] # 纬度lng = json_data["results"][0]["location"]["lng"] # 经度else:print(json_data["message"])return "0,0", json_data["status"]return str(lat) + "," + str(lng), json_data["status"]def getDistance(start, end):url = "https://api.map.baidu.com/directionlite/v1/driving?origin={}&destination={}&ak={}".format(start,end,AK # 这里是一开始截图用红色圈起来的部分,无需修改)res = requests.get(url)json_data = json.loads(res.text)if json_data["status"] == 0:return json_data["result"]["routes"][0]["distance"]else:print(json_data["message"])return -1def calcDistance(startName, endName):start, status1 = getPosition(startName)end, status2 = getPosition(endName)if status1 == 0 and status2 == 0:return getDistance(start, end)else:return -1if __name__ == "__main__":data = pd.read_excel("data.xlsx")res = []for i in range(len(data)):startName = data.iloc[i, 0]endName = data.iloc[i, 1]dist = calcDistance(startName, endName)res.append([startName, endName, dist / 1000]) # 以千米为单位pd.DataFrame(res).to_excel("result.xlsx",header=["起点", "终点", "距离(千米)"],index=None,encoding="utf-8")
Python利用百度地图获取两地距离 最详细过程和源代码相关推荐
- 【python】python利用百度地图API:获取经纬度、地图撒点
本文目的: python通过百度地图API,获取所给地址的经纬度,并且在百度地图上进行撒点. 另:百度地图API功能强大,如: GPS功能(单个点沿线运动). 信息窗口示例(添加纯文字的信息窗口). ...
- 利用百度地图获取地市镇区边界
返回多个点的经纬度 访问百度地图开放平台文档 http://lbsyun.baidu.com/jsdemo.htm#c1_10 直接把区域改成你需要的,然后把结果输出即可
- html5经纬度定位 源码_利用HTML5定位功能获取经纬度,在根据经纬度利用百度地图获取位置信息...
一.引入相关js 二.js代码 // 单次位置请求执行的函数 function getLocation(){ navigator.geolocation.getCurrentPosition(mapI ...
- python获取某地铁站经纬度_python基于百度地图获取指定的经纬度信息
在实际做项目的时候经常会遇上需要使用到某个位置经纬度的情况,这个位置的经纬度经常又是没有的,那么就需要基于公开的数据去获取了,这里基于百度地图提供的API来完成指定位置经纬度数据的获取,实现很简单,主 ...
- 根据php经纬度百度地图打点,PHP使用百度地图获取指定地址坐标:经纬度(图文+视频)...
本篇文章主要给大家介绍PHP使用百度地图获取指定地址坐标之经纬度的实现方法. 在之前的文章[PHP使用百度地图获取指定地址坐标:创建AK]中,已经给大家介绍了如何在百度地图开放平台中创建AK(api ...
- JS 通过百度地图获取详细地址及经纬度
下方代码可以通过百度地图获取到经纬度和详细位置地址 注意: <script type ="text / javascript"src ="http://api.ma ...
- python批量爬取小网格区域坐标系_Python爬虫实例_利用百度地图API批量获取城市所有的POI点...
上篇关于爬虫的文章,我们讲解了如何运用Python的requests及BeautifuiSoup模块来完成静态网页的爬取,总结过程,网页爬虫本质就两步: 1.设置请求参数(url,headers,co ...
- python 实现对地图的点击_利用python和百度地图API实现数据地图标注的方法
如题,先上效果图: 主要分为两大步骤 使用python语句,通过百度地图API,对已知的地名抓取经纬度 使用百度地图API官网的html例程,修改数据部分,实现呈现效果 一.使用python语句,通过 ...
- 百度地图利用位置提供服务器,利用百度地图API获取当前位置信息的实例
利用百度地图API可以做很多事情,个人感觉最核心也是最基础的就是定位功能了.这里分享一个制作的JS可以实现登录网页后定位: var map; var gpsPoint; var baiduPoint; ...
最新文章
- 摄像头ISP系统原理(上)
- 不插电的计算机科学读心术,科学“读心术”,当脑电波扫描图遇到人工智能
- Mac下使用svn命令
- python魔力手册-小白入门宝典:Python快速入门魔力手册 PDF 超清版
- 如何开始学习编程?这 3 步很重要
- 中国金融出版社出版的2016版《个人贷款》
- DOM-8 【兼容】冒泡捕获流、事件与事件源对象、事件委托
- vs传值接收页面怎么直接打开_VS2003传值
- 开设计算机应用基础这门学科意义,计算机应用基础与专业课程整合思考.doc
- 今天的春天到了的p2psearcher
- PAT乙级(1011 A+B 和 C)
- java8 lamada表达式
- android开发app初始化,Android 的 Application 初始化
- 响应式编程在Android 中的一些探索
- hadoop2.2.0 MapReduce求和并排序
- How to build .apk file from command line
- 传统IO与NIO的区别
- mysql插入图片_如何向MySQL中插入图片文件
- 小米手机第三方卡刷软件_小米手机刷机工具官方下载
- 近距离传感器(proximity sensor)
热门文章
- HTML制作注册页面
- 树莓派 与Pi仪表盘安装
- 【BZOJ 1934】 [Shoi2007]Vote 善意的投票
- ElasticSearch某个节点与集群失联这个过程会发生什么?
- 基于51单片机的PWM控制马达电机调速正反转(仿真+源码+全套资料)
- 618商战大片谢幕,销量冠军竟然有两个?
- RabbitMQ——背景
- wifi分析仪怎么看哪个信道好_无线路由器选择哪个信道上网更快以获得最佳WIFI体验...
- 说说显示器接口那点事!VGA、DVI、HDMI,DP
- java 爬取评论,Java基于WebMagic爬取某豆瓣电影评论的实现