2015-08-15 3 views
0

Так что у меня этот питон программы, которая имеет вход longitudelatitude и destinationКак использовать API карт Bing для получения маршрутов?

longitude и latitude в настоящее время являются длинными и широтами пользователя и destination является строкой места, где они хотят идти.

Как использовать Bing Map API в моей программе python для генерации строки направлений?

Это вроде как это:

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 Blvd .... или что-то подобное

Может кто-нибудь дать мне какие-либо рекомендации? Поскольку API Карт Google не работал для меня, и мне нужно использовать 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 вместо пробелов. Это называется кодировкой 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

Чтобы проанализировать ответ, вам нужно будет импортировать библиотеку JSON для Python. После этого вы можете загрузить необработанные данные как объект 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"]) 
Смежные вопросы