Клуб API Карт

Получить координаты найденного места.

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

Используя control.SearchControl, я вывожу поле поиска, в котором можно найти точку по адресу. После чего ставится метка...так вот я не нашел как мне работать с этой меткой (включить перетаскивание) и получить её координаты?

PS. С API работаю всего час, так что прошу примеры кода и желательно пополнее. По сути надо лишь узнать координаты метки и забить её в 2 поля - все.

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

Всё есть в документации

Я конечно могу написать все за Вас, чтобы Вы сделали Ctrl+C, Ctrl+V,

но тогда врятли у Вас чтото отложится в голове.

Вот примерный алгоритм реализации:

1. подписываетесь на нужное событие (поле "events") на контроле (видимо "resultselect")

2. получаете из объекта-события индекс выбранного результата "resultIndex"

3. включаете выбранному геообъекту перетаскивание, получаете у его геометрии координаты

 

Попробуйте, не получится, покажите как пробовали и что не получилось.

Олег Карнаухов
28 января 2016, 02:14
Спасибо. Примерно такой ответ хотел услышать, правда с евентами могут быть проблемы (не так часто юзаю их в js) но разберусь думаю.

Все просто, смотришь в документации какой интерфейс предоставляет тот или иной класс и используешь его.

С событиями будет примерно так:

 

mySearchControl.events.add("resultselect", function (e) {    console.log(mySearchControl.getResultsArray()[e.get('resultIndex')]);});
включение перетаскивания через опции
myGeoObject.options.set('draggable', true);
Олег Карнаухов
28 января 2016, 02:14
    ymaps.ready(init);
    var myMap,GeoObject;

    function init(){     
        map = new ymaps.Map ("map", {
            center: [55.76, 37.64],
            zoom: 10,
        }),searchControl = new ymaps.control.SearchControl({ provider: \'yandex#publicMap\' });
        map.behaviors.enable(\'drag\');
        map.behaviors.enable(\'scrollZoom\');
        map.behaviors.enable(\'dblClickZoom\');
   
        map.controls.add(searchControl, { left: \'40px\', top: \'10px\' });
        searchControl.events.add("resultselect", function (e) {
        GeoObject=searchControl.getResultsArray()[e.get(\'resultIndex\')];
        GeoObject.options.set(\'draggable\', true);
        setLatLng(GeoObject.geometry.getCoordinates());

        GeoObject.events.add("dragend", function (e) {
            setLatLng(GeoObject.geometry.getCoordinates());
        });

        });


    }


Сделал ;) Были проблемы правда с GeoObject.geometry.getCoordinates()
setLatLng это уже моя функция.
Для поисковиков - yandex api maps получение координат поиск по адресу

только наверное надо снимать обработчик dragend при новом поиске,

а то у тебя память течет...

Олег Карнаухов
28 января 2016, 02:14

Уверен? Вообще поиск как я понимаю сам встроен в апи. Т.е я же сам не задаю как обрабатывать выбор адреса и т.д. этот апи сам убирает пред метку и ставит новую, логично предположить, что оно будет очищено? Да и при новом инициализации карты (в другом объекте) у меня перезаписывается объект, а значит и очищается память. Верно?

ты сам же создаешь ссылку

GeoObject=

АПИ ее не сможет удалить.

и заботится о тех обработчиках что ты навесил нужно самому.

 

Если человек не может найти в документации, значит у вас документация херовая. Берите пример с Google Maps. Там у меня еще ни одного вопроса не возникло, потому что там точно 

Всё есть в документации
FlamesoFF7,
искренне поддерживаю! курить вредно, но иногда приходится "курить доки апи Я"

Еще и отвечаете не точно:

get

 

{Object} get(name)

 

Возвращает значение поля из originalEvent. originalEvent всегда имеет следующие поля:
  • type - строковый тип события;
  • target - ссылка на объект, породивший событие.

Возвращает значение.

Получается нужно вызывать get('tagret') на объекте-событии.