如何使用Bing Maps API获取路线?

时间:2015-08-15 09:38:36

标签: python bing-maps

所以我有这个python程序输入longitude latitudedestination

longitudelatitude是用户的当前长和纬度,而destination是他们想去的地方的字符串。

如何在我的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。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

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

创建请求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 Maps服务的响应。请注意,我使用的是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对象树以获取所需的值。由于您只计算两点之间的路线,因此响应中只有一条路线支路。路线支柱包含一系列行程项目,其中包含路线步骤信息。这是一个更新的代码示例,它循环遍历每个项目并逐行打印说明:

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"])