0

0

使用 Bing Maps 路由 API 正确构建驾驶距离请求的完整指南

心靈之曲

心靈之曲

发布时间:2026-03-11 13:03:01

|

834人浏览过

|

来源于php中文网

原创

使用 Bing Maps 路由 API 正确构建驾驶距离请求的完整指南

本文详解如何正确调用 Bing Maps REST Routing API 获取两点间驾驶距离,重点修正 URL 参数格式错误(如 wp,0 → wp.0、mp.1 误用)、添加异常处理与健壮解析逻辑,并提供可直接运行的 Python 示例代码。

本文详解如何正确调用 bing maps rest routing api 获取两点间驾驶距离,重点修正 url 参数格式错误(如 `wp,0` → `wp.0`、`mp.1` 误用)、添加异常处理与健壮解析逻辑,并提供可直接运行的 python 示例代码。

在使用 Bing Maps(原 Virtual Earth)REST Routing API 计算驾驶距离时,一个常见却极易被忽略的问题是 URL 查询参数的语法规范。原始代码中存在多处关键错误:

  • 错误使用 wp,0(逗号)代替标准参数 wp.0(点号);
  • 混淆了 mp.1(无效参数)与正确的 wp.1(第二路径点);
  • URL 末尾多余 /&key=... 导致路径截断;
  • 未对地址进行 URL 编码,直接拼接 CEP(邮政编码)或城市名将导致 400 错误;
  • 缺乏 HTTP 状态校验与 JSON 结构容错,一旦 API 返回空响应或结构变更即抛出 KeyError。

✅ 正确的参数格式必须遵循 Bing Maps 官方文档规范:

  • 起点与途经点统一使用 wp.N(waypoint 的缩写),N 从 0 开始递增;
  • 所有地址需进行 urllib.parse.quote() 编码(例如 "São Paulo, SP" → "S%C3%A3o%20Paulo%2C%20SP");
  • 推荐显式添加 &avoid=minimizeTolls 或 &optimize=time 等策略参数提升稳定性;
  • 必须使用 HTTPS(当前 http://dev.virtualearth.net 已重定向至 HTTPS,但建议直接使用 https)。

以下是经过生产环境验证的完整实现:

皮卡智能
皮卡智能

AI驱动高效视觉设计平台

下载
import requests
import pandas as pd
from urllib.parse import quote

# ✅ 替换为你的有效 Bing Maps API Key(申请地址:https://www.bingmapsportal.com)
chave_IPA = "Aqa9_KZFeRDAiAsJwyxVLQJh5tfZYeMyGHtUXEVd7PGm13xT1evy3vwA5MCcscqd"

# ✅ 替换为你的真实数据(支持 CEP、城市名、完整地址)
lista_cep = ["01310-100", "22421-020"]          # 示例:圣保罗、里约热内卢中心邮编
lista_cidade = ["São Paulo, SP", "Rio de Janeiro, RJ"]

distancia_matrix = []

for origem in lista_cep:
    linha = []
    for destino in lista_cidade:
        # ? 关键:正确构造 wp.0 和 wp.1,且对地址做 URL 编码
        encoded_origem = quote(origem)
        encoded_destino = quote(destino)
        rota = (
            f"https://dev.virtualearth.net/REST/V1/Routes/Driving?"
            f"wp.0={encoded_origem}&wp.1={encoded_destino}"
            f"&avoid=minimizeTolls&key={chave_IPA}"
        )

        try:
            r = requests.get(rota, timeout=15)
            r.raise_for_status()  # 抛出 4xx/5xx 异常

            data = r.json()

            # ?️ 健壮解析:逐层 .get() 避免 KeyError
            resources = data.get("resourceSets", [{}])[0].get("resources", [{}])
            if not resources:
                linha.append("Error: No route resources")
                continue

            route = resources[0]
            distancia = route.get("travelDistance")  # 单位:公里(km)

            if distancia is None:
                linha.append("Error: travelDistance missing")
            else:
                linha.append(round(distancia, 3))  # 保留三位小数提升可读性

        except requests.exceptions.Timeout:
            linha.append("Error: Timeout")
        except requests.exceptions.ConnectionError:
            linha.append("Error: Connection failed")
        except requests.exceptions.HTTPError as e:
            linha.append(f"HTTP Error: {r.status_code}")
        except Exception as e:
            linha.append(f"Unexpected error: {str(e)}")

    distancia_matrix.append(linha)

# ✅ 构建带行列标签的 DataFrame,便于分析与导出
matrix = pd.DataFrame(
    distancia_matrix,
    columns=lista_cidade,
    index=lista_cep
)

# 可选:优化显示设置
pd.set_option('display.float_format', '{:.3f}'.format)
print("? 驾驶距离矩阵(单位:公里):")
print(matrix)

? 重要注意事项

  • API Key 安全:切勿将 chave_IPA 硬编码于公开代码中,应使用环境变量(os.getenv("BING_MAPS_KEY"))或配置文件管理;
  • 地理精度:CEP 在巴西可能无法精确定位到街道级,建议优先使用完整地址(如 "Avenida Paulista, 1000, São Paulo");
  • 配额与计费:Bing Maps 免费层级含每月 125,000 次事务(Transaction),每次 Routes/Driving 调用计为 1 次事务,请监控用量;
  • 错误响应调试:若返回 401 Unauthorized,检查 Key 是否过期或未启用 Routing 服务;若返回 400 Bad Request,用 Bing Maps Dev Center 的 API 测试工具 验证 URL;
  • 批量优化:上述双循环为 N×M 次独立请求,若数据量大(>50 对),建议改用 Bing Maps 的 Matrix Routing API 实现单次批量计算。

掌握这些要点后,你将能稳定、高效、安全地集成 Bing Maps 路由能力到物流调度、区域分析或客户地理画像等业务场景中。

路由优化大师
路由优化大师

路由优化大师是一款及简单的路由器设置管理软件,其主要功能是一键设置优化路由、屏广告、防蹭网、路由器全面检测及高级设置等,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

455

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

334

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

495

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

449

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

3502

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2903

2024.08.16

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号