2015-08-15 84 views
0

所以我有一個具有輸入longitudelatitudedestination如何使用Bing Maps API獲取路線?

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 

和輸出將是:東DeAnza大道右轉....或者類似的東西

誰能給我任何指導?由於Google Maps API不適合我,因此我需要使用Bing Maps API。任何幫助將不勝感激。

回答

1

首先你將要使用Bing Maps 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%。這被稱爲網址編碼,是最佳做法。這在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響應的結構: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"])