python - 如何使用 Bing map API 获取路线?

标签 python bing-maps

所以我有这个Python程序,它输入经度 纬度目的地

经度纬度是用户当前的经度和纬度,目的地是他们想要去的地方的字符串走吧。

如何在 python 程序中使用 Bing Map API 生成方向字符串?

有点像这样:

longitude = -122.019943
latitude = 37.285989
destination = "1427 Alderbrook Ln San Jose CA 95129"
# Some Bings Map API Magic that generates directions in a string
print directions

输出将是:在 East DeAnza Blvd 右转......或类似的东西

有人可以给我任何指导吗?由于 Google Maps API 不适合我,我需要使用 Bing Maps API。任何帮助将不胜感激。

最佳答案

首先,您需要使用 Bing map REST 路由服务:https://msdn.microsoft.com/en-us/library/ff701717.aspx

创建请求 URL 非常简单,并且无论您使用哪种编程语言都是相同的。对于您的示例,要计算您所在位置的行车路线,您将创建一个如下所示的路线请求 URL:

http://dev.virtualearth.net/REST/V1/Routes/Driving?wp.0=37.285989,-122.019943&wp.1=1427%20Alderbrook%20Ln%20San%20Jose%20CA%2095129&key=YOUR_BING_MAPS_KEY

请注意,街道地址用 %20 代替了空格。这称为 URL 编码,是最佳实践。这在 python 中很容易做到,但现在想指出这一点,以便您知道为什么它出现在下面的代码示例中。

以下代码示例对目标进行编码、创建 URL 并打印来自 Bing map 服务的响应。请注意,我使用的是 Python 3.4。根据您使用的 Python 版本,代码可能会略有不同。

import urllib.request

# Your Bing Maps Key 
bingMapsKey = "YOUR_BING_MAPS_KEY"

# input information
longitude = -122.019943
latitude = 37.285989
destination = "1427 Alderbrook Ln San Jose CA 95129"

encodedDest = urllib.parse.quote(destination, safe='')

routeUrl = "http://dev.virtualearth.net/REST/V1/Routes/Driving?wp.0=" + str(latitude) + "," + str(longitude) + "&wp.1=" + encodedDest + "&key=" + bingMapsKey

request = urllib.request.Request(routeUrl)
response = urllib.request.urlopen(request)
print (response.read())

现在,这会将服务的响应打印为一堆文本,实际上是一堆 JSON。我们需要解析 JSON,以便提取我们想要的信息。为此,您需要了解此处记录的 JSON 响应的结构:https://msdn.microsoft.com/en-us/library/gg636957.aspx

要解析响应,您需要导入 Python 的 JSON 库。完成此操作后,您可以将原始数据作为 JSON 对象加载,然后逐步浏览 JSON 对象树以获取所需的值。由于您仅计算两点之间的路线,因此响应中只会有 1 条路线。路线段包含一系列行程项目,其中包含路线步骤信息。以下是更新的代码示例,它循环遍历每个项目并逐行打印说明:

import urllib.request
import json

# Your Bing Maps Key 
bingMapsKey = "YOUR_BING_MAPS_KEY"

# input information
longitude = -122.019943
latitude = 37.285989
destination = "1427 Alderbrook Ln San Jose CA 95129"

encodedDest = urllib.parse.quote(destination, safe='')

routeUrl = "http://dev.virtualearth.net/REST/V1/Routes/Driving?wp.0=" + str(latitude) + "," + str(longitude) + "&wp.1=" + encodedDest + "&key=" + bingMapsKey

request = urllib.request.Request(routeUrl)
response = urllib.request.urlopen(request)

r = response.read().decode(encoding="utf-8")
result = json.loads(r)

itineraryItems = result["resourceSets"][0]["resources"][0]["routeLegs"][0]["itineraryItems"]

for item in itineraryItems:
    print(item["instruction"]["text"])

关于python - 如何使用 Bing map API 获取路线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32023462/

相关文章:

python - 编写一个函数,使另一个函数返回 List 而不是函数

python - 如何将键值元组列表转换为字典?

windows-phone-7 - 在 Windows Phone 8 中使用 Google map

python - 创建带条件的重叠数组 - Python

python - 如何测试一个列表是否包含另一个列表作为连续子序列?

python - 让 shogun ML 库与 python 一起工作

c# - 在 Windows Phone 8 Bing map 上设置图钉 (XAML C#)

c# - 将地址转换为坐标

silverlight - 如何检查某个位置是否在 Silverlight Bing map 控件中的 MapPolygon 内?

c# - 使用 C# 为独立应用程序进行 Google 或 Bing map 编程