文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python如何利用百度地图获取两地距离

2023-06-20 15:24

关注

这篇文章主要介绍“Python如何利用百度地图获取两地距离”,在日常操作中,相信很多人在Python如何利用百度地图获取两地距离问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何利用百度地图获取两地距离”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

目录

百度地图开放平台

进入百度地图开放平台后,登陆用户,点击上方的控制台,按照提示进行激活后创建服务端类型的应用,应用名任意设置,其中白名单校验不做任何限制可以填写0.0.0.0/0。创建成功后画面应如下图所示,其中访问应用AK)即途中红色方框圈起来的部分一定要注意不要随意泄漏,后面需要使用到,这是后面访问需要用到的一串口令。

Python如何利用百度地图获取两地距离

介绍需要用到的API

本项目中所有使用的API均为Web服务API,官方开发文档。

地点检索服务

地点检索服务(又名Place API)是一类Web API接口服务;
服务提供多种场景的地点(POI)检索功能,包括城市检索、圆形区域检索、矩形区域检索。开发者可通过接口获取地点(POI)基础或详细地理信息。

我们利用这个API来获取指定地点的经纬度(lat, lng)两个参数。

批量算路服务

批量算路服务(又名RouteMatrix API)是一套以HTTP/HTTPS形式提供的轻量级批量算路接口,用户可通过该服务,根据起点和终点坐标计算路线规划距离和行驶时间,RouteMatrix API V2.0支持中国大陆地区。

我们利用这个API来获取两个地点(用经纬度来给出)之间的路线规划距离。

编写Python程序

0.需要用到的模块

1.获取对应地点的经纬度

将传入的address通过地点检索服务得到其经纬度,返回值为经纬度对应的字符串值,中间以逗号隔开,之后跟一个查询返回状态,如果查询失败,状态值不为0。

注意将代码中的AK换成一开始截图中的AK码。

def getPosition(address):    url = r"http://api.map.baidu.com/place/v2/search?query={}&region=全国&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("[ERROR] Can not find {}.".format(address))        return "0,0", json_data["status"]    return str(lat) + "," + str(lng), json_data["status"]

2.获取两地之间的距离

将传入的两个地点(以经纬度描述)通过批量算路服务得到之间的路线规划距离。本范例是以驾车行驶(对应参数为'driving')的方式来进行计算的。

同样注意将代码中的AK换成一开始截图中的AK码。

def getDistance(start, end):    url = "http://api.map.baidu.com/routematrix/v2/driving?output=json&origins={}&destinations={}&ak={}".format(        start,        end,        AK  # 这里是一开始截图用红色圈起来的部分    )    res = requests.get(url)    content = res.content    jsonv = json.loads(str(content, "utf-8"))    dist = jsonv["result"][0]["distance"]["value"]    return dist

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.进行简单的功能测试

运行代码输出北京成都之间的距离,其单位为米。

Python如何利用百度地图获取两地距离

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文件的内容为:

Python如何利用百度地图获取两地距离

对应的输出result.xlsx文件内容如下:

Python如何利用百度地图获取两地距离

附录

# 本次整体的源代码AK = "修改为你自己的AK码即可使用"import pandas as pdimport requestsimport jsondef getPosition(address):    url = r"http://api.map.baidu.com/place/v2/search?query={}&region=全国&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("[ERROR] Can not find {}.".format(address))        return "0,0", json_data["status"]    return str(lat) + "," + str(lng), json_data["status"]def getDistance(start, end):    url = "http://api.map.baidu.com/routematrix/v2/driving?output=json&origins={}&destinations={}&ak={}".format(        start,        end,        AK  # 这里是一开始截图用红色圈起来的部分    )    res = requests.get(url)    content = res.content    jsonv = json.loads(str(content, "utf-8"))    dist = jsonv["result"][0]["distance"]["value"]    return distdef 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(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"    )

到此,关于“Python如何利用百度地图获取两地距离”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯