Клуб API Карт

Проблемы при встроенном в маршруты геокодировании

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

Добрый день.. Проблема в следующем:

1) Если я пытаюсь найти маршрут между точками ['бирюлево', 'веерная'] генерируется событие RouteError

В первом случае, если я ввожу в начало маршрута "прафсаюзная", то мне выдается ошибка геокодирования.

2) Если я делаю так: waypoints = ["Москва,  " + from, "Москва, " + to], где from = "бирюлево", to = "веерная", то всё находит идеально, но, если я ввожу в начало маршрута "прафсоюзная", он ищет маршрут от точки "Москва, прафсоюзная", геокодируя её как "Россия, Москва", а не выдавая ошибку GeocodeError как ожидается.


Вопрос: как избежать этих проблем? Хочется, и что б районы и места Москвы правильно распознавало (как в пункте 2), но в тоже время, хочется, что б в случае ошибки не в центр Москвы кидало, а выдавало как обычно GeocodeError.


На всякий случай код вызова конструктора:

var router = new YMaps.Router(waypoints, [], {viewAutoApply: 1});

 

Заранее спасибо!

9 комментариев
советую пользоватся картами гугли
Рассмотрим Ваш пример. var router = new YMaps.Router(['Москва, прафсоюзная', 'Москва, веерная'], [], {viewAutoApply: 1}); 

Навесим обработчик на событие Success:
YMaps.Events.observe(router, router.Events.Success, function (obj, e) {
                var precision = router.getWayPoint(0).precision;
            });

Если геокодирование прошло верно (в случае, если указать 'Москва, профсоюзная'), то precision будет равен street, т.е. точность до улицы. А если задать 'Москва, прафсоюзная', то precision = other.

Также стоит обратить внимание на поле kind. Думаю, что оно тоже Вам пригодится.

Если Вам не подходит то решение, что я предложил, то можно попробовать придумать еще что-нибудь ;)
Спасибо. Метод, видимо, рабочий. Попробую сегодня. А возможно ли указать построителю маршрутов квадрат, где, к примеру, нужно искать в первую очередь?
Bounds как у объекта YMaps.Geocoder задать нельзя, однако Вы можете прописывать более подробный почтовый адрес до объекта:
Страна, города, улица, дом. Это поможет соориентироваться геокодеру ;)
Ясно, спасибо. Если не секрет, а планируется?
Яндекс традиционно не раскрывает своих планов. Следите за анонсами в клубе.
Ясно, внимательно слежу :)
Метод отказался не совсем рабочим. Пример: вешняки - kind: district, precision: other. Т.е., отсеивать по равенству параметра precision строке 'other', не получится. Если же запросить маршрут от "Москва" + "Видное" до "Москва" + "Вешняки", то Видное распознается правильно, но при этом kind: locality; precision: other, т.е. в точности те же самые значения, что и у "Москва" + "прафсаязная". Т.е. параметры precision и kind не помогают.

По сути отсеять неверные результаты не удастся, если, конечно, не сравнивать результат геокодирования с "Россия, Москва", а по характеру запроса пытаться понять, а не москву ли они на самом деле хотели?

Было бы всё-таки очень удобно задавать те самые Bounds, иначе возникают подобные неопределённости.
Вы можете воспользоваться геокодером, а в конструктор роутера передавать только координаты.