#Python实例 计算外卖配送距离(基于经纬度的导航及直线距离)
一:X-MIND
二:计算两点经纬度之间的距离
经纬度是利用三维球面空间来描述地球上一个位置的坐标系统,每个经纬度坐标由经度 lng 和纬度 lat 两个分量组成。经纬度的有效范围为经度-180度到+180度,纬度大约-90度到+90度。
三:Geopy库,计算两点直线距离
如果遇到测算直线距离可以使用geopy这个包来进行计算,有两种模式选择,一个是测地线距离,一个是完美地球大圆距离。
3.1 测地线距离|geodesic
测地线距离定义为空间中两点的局域最短路径, 但是是沿着曲面进行计算的,与任何两个给定位置之间的最短曲线不相同。下面说明如何用纬度和经度数据计算测地线距离。
# 导入geopy包 from geopy.distance import geodesic as GD # pair数据格式,(latitude, longitude), 纬度和经度, 注意纬度和经度的取值范围 A =(24.854880,102.860170) B =(24.8635140,102.8667850) df = GD(A,B).m df
3.2 大圆距离|great_circle
大圆距离指的是从球面的一点A出发到达球面上另一点B,所经过的最短路径的长度。在此示例中,假定地球是一个完美的球体。下面说明如何用纬度和经度数据计算大圆距离。
大圆距离将两个点分为两个弧,任何两个位置之间的较短弧等于大圆距离。
# 导入相应的包 from geopy.distance import great_circle as GRC # pair对,纬度和经度 A=(9.072264 , 7.491302) B=(14.716677 , -17.467686) df = GRC(A,B).m df
四:百度API接口,计算导航距离
4.1 申请百度API AK
百度地图开放平台下方是网址,首次进入可能需要注册账号,跟着流程注册,即可。
进入百度地图开放平台后,登陆用户,点击上方的控制台,按照提示进行激活后创建服务端类型的应用,应用名任意设置,其中白名单校验不做任何限制可以填写0.0.0.0/0。创建成功后画面应如下图所示,其中访问应用(AK)即途中红色方框圈起来的部分一定要注意不要随意泄漏,后面需要使用到,这是后面访问需要用到的一串口令。
https://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5
4.2 代码应用
# 本次整体的源代码 AK = "你自己申请的百度API AK" import pandas as pd import requests import json def getDistance(start, end): url = "https://api.map.baidu.com/direction/v2/riding?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 getDistance("24.854880,102.860170","24.8635140,102.8667850")