Клуб API Карт

И еще раз про SuggestView и SearchControl

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

Здравствуйте. уважаемое сообщество!

Есть задача. хочу реализовать расчет стоимости с тарифными зонами из точки А в точку Б. 

В блогах есть отличный пример http://ymapsapi.ya.ru/replies.xml?item_no=1165

Но хочу его изменить под свою задачу, нужно получить что-то вот такое

То есть поиск начальной и конечной точки не по клику на карте, а по результатам поиска полей формы с автокомплитом адресов находящихся за пределами карты.

Вот тут возникают вопросы. в примерах есть также вариант когда для это цели используется API Кладр в облаке, но он не подходит. так как автокомплит работает только для города, а улицы и адреса уже не подтягивает, даже если изменить параметр contentType

Другой вариант это SuggestView который появился в API 2.1. но почитав документацию и темы связанные с этим параметром. я так понял что нет нативного способа повесить поиск по карте на события SuggestView. Тем более кроме поиска интересует возможность подстановки заготовленных адресов из выпадающего списка. Которые я думал передавать в SearchControl. 

Поэтому прошу подсказать. может я просто уже запутался и что-то не так понимаю? Но есть ли какой-то не костыльный способ передачи данных формы полученных за пределами карты в SearchControl ? Так как пока в голову лезут только страшные костыли

9 комментариев

В 2.1 в SearchControl есть свой саггест, SuggestView сделан для внешней формы

мне и нужна внешняя форма. ведь если я все верно понял в документации SearchControl не может быть за пределами карты?

Я не понял зачем вы хотите задавать адреса из внешней формы в SearchControl

Вероятно я не так понял принцип работы. С API работаю впервые и почитав документацию решил что для поиска по карте из внешней формы, результаты поиска внешенй формы нужно передавать в SearchControl. 

Получается что для поиска по карте результатов поиска из внешенй формы с SuggestView нужно писать свою функцию, слушающую событие selectи И соответственно запускать поиск? А то у меня какая-то путаница возникла, пытаюсь разобраться.

Да, искать надо самому, вызывая ymaps.geocode,

SuggestView дает только список подсказок

Попробовал перепилить под свои нужды столкнулся с некоторыми сложностями, если позволите еще пара вопросов

в map-view.js в функции _onSearchResultSelected есть такая строчка

 

result = e.get('target').getResultsArray()[index];

 

но метод getResultsArray() не доступен для SuggestView. Написал свою функцию для того чтобы получать объект geometry, но что-то никак не могу победить асинхронность...Понимаю что вопрос скорее по JS чем по API, но все же, может хотя бы натолкнете на мысль. А то уже много времени бьюсь над этим.

Вот сюда выложил код https://jsfiddle.net/2xjky17g/ оригинальный код закомментировал, моя функция для получения объекта называется getGeometry.

 

И сразу же второй вопрос с которым возникают сложности, как создать два SuggestView? Создать для начальной точки копию функции _createSearch ?

Сейчас используется отсчет от фиксированной точки. а мне нужно между двумя введенными адресами.

 

Заранее благодарю и надеюсь на помощь.

https://dadata.ru/suggestions/ посмотрите, это то?

Выгрузил проект в сеть, чтобы было понятнее что хочу получить.

Не могу понять почему абсолютно идентичный вызов функции (_getCoordsByName). за тем лишь исключением что он возвращает уже координаты срабатывает корректно, а функция для возврата объекта geometry нивкакую не хочет...

Здравствуйте, хотел бы конкретнее получить мануал, как сделать в расчете стоимости доставки поле ввода конечной точки вне карты. Все перерыл, не могу найти.