Oktell и Яндекс.Карты — различия между версиями
(Новая страница: « == Спрашиваем у Яндекс.Карт примерное время проезда от точки "А" до "Б" с учетом пробок. == Ка...») |
|||
Строка 1: | Строка 1: | ||
− | |||
== Спрашиваем у Яндекс.Карт примерное время проезда от точки "А" до "Б" с учетом пробок. == | == Спрашиваем у Яндекс.Карт примерное время проезда от точки "А" до "Б" с учетом пробок. == | ||
Строка 7: | Строка 6: | ||
Итак, главное, что нам понадобится, это координаты адреса "А" и адреса "B". Получить их легко с помощью API все того же Яндекса. Делаем GET-запрос c помощью компонента web-запрос 'http://geocode-maps.yandex.ru/1.x/?geocode='+[A] , где переменная А это адрес точки "А". Запрос нам вернет xml, в котором тег <pos> имеет значение отвечающее за координаты адреса точки "А". Думаю не надо объяснять, что точно такой же запрос надо сделать и для того, чтобы найти координаты точки "В". | Итак, главное, что нам понадобится, это координаты адреса "А" и адреса "B". Получить их легко с помощью API все того же Яндекса. Делаем GET-запрос c помощью компонента web-запрос 'http://geocode-maps.yandex.ru/1.x/?geocode='+[A] , где переменная А это адрес точки "А". Запрос нам вернет xml, в котором тег <pos> имеет значение отвечающее за координаты адреса точки "А". Думаю не надо объяснять, что точно такой же запрос надо сделать и для того, чтобы найти координаты точки "В". | ||
− | [[Файл:yandexkarti_1.png]] | + | [[Файл:yandexkarti_1.png |center]] |
С помощью парсера в обоих случаях извлекаем из полученных xml значение тега <pos> | С помощью парсера в обоих случаях извлекаем из полученных xml значение тега <pos> | ||
Строка 13: | Строка 12: | ||
У меня же это выглядит так (я получаю координаты в параметрах запускающего сценарий http-запроса): | У меня же это выглядит так (я получаю координаты в параметрах запускающего сценарий http-запроса): | ||
− | [[Файл:yandexkarti_2.png]] | + | [[Файл:yandexkarti_2.png |center]] |
Далее приводим координаты к нужному формату, чтобы дальше было легче с ними работать: | Далее приводим координаты к нужному формату, чтобы дальше было легче с ними работать: | ||
− | [[Файл:yandexkarti_3.png]] | + | [[Файл:yandexkarti_3.png |center]] |
Теперь у нас есть все необходимые данные для того, чтобы определить среднее время пути автомобиля из "А" в "В" с учетом пробок, главное тут сформировать запрос и найти нужное нам значение. Запрос выглядит так: 'http://api-maps.yandex.ru/services/route/1.0/route.xml?callback=id_1&rll='+[Apos]+'~'+[Bpos]+'&lang=ru-RU' , где Apos и Bpos - координаты полученные ранее. В итоге получаем определенный текст, в котором мы можем извлечь примерное время , как за весь путь, так и за каждый его участок (нас интересует общее). | Теперь у нас есть все необходимые данные для того, чтобы определить среднее время пути автомобиля из "А" в "В" с учетом пробок, главное тут сформировать запрос и найти нужное нам значение. Запрос выглядит так: 'http://api-maps.yandex.ru/services/route/1.0/route.xml?callback=id_1&rll='+[Apos]+'~'+[Bpos]+'&lang=ru-RU' , где Apos и Bpos - координаты полученные ранее. В итоге получаем определенный текст, в котором мы можем извлечь примерное время , как за весь путь, так и за каждый его участок (нас интересует общее). | ||
− | [[Файл:yandexkarti_4.png]] | + | [[Файл:yandexkarti_4.png |center]] |
Дальше с помощью компонента "присвоение значения переменной" извлекаем нужное нам время в минутах : ''Ceil(Num(substr(Remove([text], 0, IndexOf( [text], '"JamsTime":{"value":"' )+21),0,IndexOf(Remove([text], 0, IndexOf( [text], '"JamsTime":{"value":"' )+21),'"')))/60)'' | Дальше с помощью компонента "присвоение значения переменной" извлекаем нужное нам время в минутах : ''Ceil(Num(substr(Remove([text], 0, IndexOf( [text], '"JamsTime":{"value":"' )+21),0,IndexOf(Remove([text], 0, IndexOf( [text], '"JamsTime":{"value":"' )+21),'"')))/60)'' | ||
Строка 27: | Строка 26: | ||
Сценарий выглядит просто: | Сценарий выглядит просто: | ||
− | [[Файл:yandexkarti_5.png]] | + | [[Файл:yandexkarti_5.png |center]] |
+ | |||
[http://yadi.sk/d/VpvOKnNt20Ke9 Скачать] | [http://yadi.sk/d/VpvOKnNt20Ke9 Скачать] |
Версия 10:44, 4 июня 2013
Спрашиваем у Яндекс.Карт примерное время проезда от точки "А" до "Б" с учетом пробок.
Как мы все с вами знаем сервис Яндекс.Карты позволяет нам с учетом пробок прогнозировать с высокой долей вероятности время, за которое автомобиль сможет добраться из точки А в точку В с учетом пробок, что резко облегчает работу диспетчера в крупных городах, где пробки привычное дело. Вот один из коллег как раз заговорил об этом, а я тут же подумал о возможности создания такой же плюшки в Октелле. Реализация оказалась очень простой. Пригодится данный инструмент сможет не только в службе такси, но и в других сферах деятельности, где важно знать хотя бы примерное время проезда транспорта из "А" в "B" с учетом пробок или разводных мостов. Итак, главное, что нам понадобится, это координаты адреса "А" и адреса "B". Получить их легко с помощью API все того же Яндекса. Делаем GET-запрос c помощью компонента web-запрос 'http://geocode-maps.yandex.ru/1.x/?geocode='+[A] , где переменная А это адрес точки "А". Запрос нам вернет xml, в котором тег <pos> имеет значение отвечающее за координаты адреса точки "А". Думаю не надо объяснять, что точно такой же запрос надо сделать и для того, чтобы найти координаты точки "В".
С помощью парсера в обоих случаях извлекаем из полученных xml значение тега <pos>
У меня же это выглядит так (я получаю координаты в параметрах запускающего сценарий http-запроса):
Далее приводим координаты к нужному формату, чтобы дальше было легче с ними работать:
Теперь у нас есть все необходимые данные для того, чтобы определить среднее время пути автомобиля из "А" в "В" с учетом пробок, главное тут сформировать запрос и найти нужное нам значение. Запрос выглядит так: 'http://api-maps.yandex.ru/services/route/1.0/route.xml?callback=id_1&rll='+[Apos]+'~'+[Bpos]+'&lang=ru-RU' , где Apos и Bpos - координаты полученные ранее. В итоге получаем определенный текст, в котором мы можем извлечь примерное время , как за весь путь, так и за каждый его участок (нас интересует общее).
Дальше с помощью компонента "присвоение значения переменной" извлекаем нужное нам время в минутах : Ceil(Num(substr(Remove([text], 0, IndexOf( [text], '"JamsTime":{"value":"' )+21),0,IndexOf(Remove([text], 0, IndexOf( [text], '"JamsTime":{"value":"' )+21),'"')))/60) С полученным значением можем поступать, как душе заблагорассудится. Сценарий выглядит просто: