Клуб API Карт

поиск по карте

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

Помогите пожалуйста настроить поиск по карте для апи 2,не стандартным компонентом,а своим,потому что стандартный как то работает непонятно

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

 

$('#search_form').submit(function () {
var search_query = $('input:first').val();

ymaps.geocode(search_query, {results: 1}).then(function (res) {
res.geoObjects.options.set({
cursor: 'grab', // курсор на метках будет "рукой"
draggable: true // метку можно будет перемещать
}) ;
myCollection.removeAll();
myCollection = res.geoObjects;
myMap.geoObjects.add(myCollection);
});
return false;
});

но как получить координаты добавленой метки?
11 комментариев

 

myCollection.removeAll();
myCollection = res.geoObjects;
myMap.geoObjects.add(myCollection);

 

зачем при каждом поиске добавлять коллекцию?

если вам нужен первый объект из поиска, берите только его

myCollection.removeAll();

myCollection.add(res.geoObjects.get(0));

 

 

но как получить координаты добавленой метки?
res.geoObjects.get(0).geometry.getCoordinates();

 

спасибо,с помощью координат создаю метку отдельно,и коллеция не понадобилась,еще вопрос такой глупый,как сделать правильно обработчик события для перемещения по карте,есть вот такой код,но не работает,может там не драг нужно вставить а что то еще? для клика работает,для драга что то не хочет

 

myMap.events.add("drag", function(e) {
 alert("drag");
 });

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

вам скорее всего нужен boundschange

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

myMap.controls.add(new ymaps.control.ToolBar([
    new ymaps.control.Button({data : {image: 'blablabla.png'
    }})
]));

как для нее добавить клик?я так подразумиваю нужен ей какой то id,чтоли потому что будет еще например 2 кнопки

 

что мешает сохранить указатель на экземпляр ymaps.control.Button в переменной?

 

var button = new ymaps.control.Button({data : {image: 'blablabla.png'}});
myMap.controls.add(new ymaps.control.ToolBar([ button ]));
button.events.add('click', function (e) {
    ...
});

 

спасибо большое,очень помогли,и еще один вопрос,можно ли добавить текстбокс на карту?а то в документации про текстбокс не пишется ничего,а стандартный SearchControl подробно не описывается,у меня не получилось получить доступ к добавленой метке,координатам и сделать её подвижной,может это как то и возможно,но я не нашел как

что такое текстбокс?

SearchControl описан в документации достаточно подробно

Включить режим перетаскивания метки можно указав ей опцию draggable : true,

см. пример

draggable : true это понятно,но это если сам эту метку добавляю,но как получить доступ к метке из SearchControl,он же сам добавляет эту метку,а в нем описано в параметрах только noPlacemark добавлять эту метку или нет

 

ну типа текстовое поле 

 

        ymaps.ready(init);        function init() {            var map = new ymaps.Map("map", {                    center: [66.42, 94.26], // Центр России                    zoom: 3                }),                search = new ymaps.control.SearchControl();            map.controls.add(search);            // Получить все загруженные геообъекты            search.events.add('load', function (e) {                console.log(e.get('target').getResultsArray());            });            // Получить выбранный из списка геообъект            search.events.add("resultselect", function (result) {                console.log(search.getResultsArray()[result.get('resultIndex')]);            });        }

 

Добавить собственный контрол можно просто как обычное hrml-содержимое в контейнер контролов карты.

Получать контейнер следующим образом:

map.panes.get('controls').getElement()

все равно не понял как сюда запихнуть свой компонент из html

возвращается обычный DOM-элемент.

в него можно положить свое html-содержимое, например с помощью jQuery