#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")
posted @ 2023-03-15 13:08  simone331  阅读(275)  评论(0编辑  收藏  举报