Python 如何使用Bing地图API获取方向?

Python 如何使用Bing地图API获取方向?,python,bing-maps,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 dir

因此,我有一个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
输出是:在东迪安扎大道右转。。。。或者类似的


有人能给我一些指导吗?因为谷歌地图API不适合我,我需要使用Bing地图API。非常感谢您的帮助。

首先,您需要使用Bing地图REST路由服务:

创建请求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地图服务的响应。请注意,我使用的是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响应的结构,这里有文档记录:

要解析响应,需要导入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"])

首先,您需要使用Bing地图REST路由服务:

创建请求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地图服务的响应。请注意,我使用的是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响应的结构,这里有文档记录:

要解析响应,需要导入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"])

有没有办法从中获取路线距离?您可以这样做:结果[“资源集”][0][“资源”][0][“旅行距离”]有没有办法从中获取路线距离?您可以这样做:结果[“资源集”][0][“资源”][0][“旅行距离”]