Клуб API Карт

YMaps.Metro.Closest по HTTP-протоколу

Пост в архиве.

Здравствуйте!

Можно ли получить список ближайших станций метро по http протоколу аналогично геокодеру (http://api.yandex.ru/maps/geocoder/examples/) ?

 

UPD

Поковырявшись в скриптах Яндекс карт нашел ответ самостоятельно. Может кому пригодится - GET по этому урлу отдает список ближайших станций метро в формате JSONP

 

string url = "http://api-maps.yandex.ru/modules/1.1/metro/src/xml/closest.xml?key=" + YandexKey +

 

                "&rgeocode=" + Latitude + "," + Longitude +

                "&spn=0.1,0.1&results=3";

 

11 комментариев
Михаил Королев
28 января 2016, 07:31

баян!


вам же уже ответили

http://clubs.ya.ru/mapsapi/replies.xml?item_no=10091

Это разные вопросы. Там список всех станций метро в городе. Здесь - список ближайших к заданной точке. И ответы соотв. тоже разные.
Михаил Королев
28 января 2016, 07:31

ответ, imho один - закэшируйте к себе списки станций метро, в ту-же базу нужно поместить координаты выходов - сложно, но единожды.

Далее простейшим вычитанием координат можно будет определять ближайшие станции к любому месту.

Алексей Исаенко
28 января 2016, 07:31

Ну вы Михаил и скажете... а если в разных городах надо определять, вы все закешируете? А если там новых станций понастроят?

В АПИ в данные момент нет возмозжности обратится к YMaps.Metro.Closest по http протоколу. Так же возможность которую вы нашли является внутренней технической ручкой. Она конечно же работает, вот только ее неизменность мы не гарантируем, учитывайте это пожалуйста.
Не совсем ясно, зачем прятать формат http запросов к сервисам под js-скриптами? Для геокодера показали, а для остальных - молчок, нигде не слова. А если пользователю не удобен js-интерфейс и он хочет использовать другой, почему ему это не позволить?

На счет внутренней технической ручки вы явно лукавите, все равно внутри все сервисы работают через http запросы.
Спасибо за ваше пожелание. Мы его обязательно учтем.
rodlex,
есть такая задача (научно-исследовательская). Каждый изучаемый объект имеет две геоточки (старт, стоп), через которые нужно посторить маршрут. При этом разумно сделать это один раз для всей базы и сохранить полученные результаты, чтобы потом не напрягать гео-сервисы (объектов много). Так вот вытаскивание этой информации из js-интерфейса крайне мучительно! Да, в конце-концов что-то придумаю, но проще было бы иметь возможность напрямую забросить сервис маршрутизатора, как я догадываюсь, должно быть что-то вроде
"http://api-maps.yandex.ru/modules/1.1/router/src/xml/somesciptname.xml?key=" + YandexKey +

                "&rgeocode_start=" + Latitude + "," + Longitude +


                &rgeocode_stop=" + Latitude + "," + Longitude + ...


Так вот большая просьба, не подскажете точный формат запроса? (лично не смог выковырять из API-исходников, не хватает уровня знания js). Можно на мыло, если есть политика не светить служебный вход :)
Или подскажите, как лучше закэшировать трэки средствами стандартного интерфейса, не прибегая к изврату выковыривание js-переменных через java, php и т.п.

Заранее спасибо,
Юрий
Вы понимаете, что я не могу вам советовать что-то в использовании технических ручек ;)

Поэтому посоветую официальное решение.
1. Разбиваете ваши маршруты на пачки, например, по 100 штук.
2. Передаете эти данные на клиент в виде json или javascript (как удобнее).
3. Для каждой пары геоточек строите маршрут.
4. По событию Success получаете все точки построенного маршрута. Переводите в нужный формат (например, тот же json) и отправляете на сервер для сохранения (ajax).

Готов подробнее пояснить по каждому пункту.
rodlex,
спасибо большое за ответ! В общем, так я и планирую сделать, в плане подробностей интересуют два момента:
1) как конвертировать YMapsML-объект в стринговую json-строку (фактически, оригинальный xml-ответ сервера) для передачи на сохранение, например, тот же ответ роутера, потому как обычное присвоение дает [Object object], по крайней мере, в файерфоксе.
2) как передавать на сервер через ajax? Сейчас я реализовал передачу данных через редирект POST-формы на php-скрипт, но это как-то не изящно, по рабоче-крестьянскому :), с учетом того, что нужно будет организовать цикл по нескольким маршрутам, получается циклический редирект map->php->map->php...

Еще раз спасибо за ответ и удачи,
Юра.
1. Конвертировать так просто не получится. Объект, созданный с помощью YMaps.YMapsML, представляет собой группу. Нужно пройтись по всем элементам группы и сформировать нужный JSON.

2. YMaps.jQuery.ajax
см. документацию jQuery.