Клуб API Карт

Как с помощью формы поиска установить свою метку?

SlimSavernake
5 июня 2017, 14:39

Следующим ниже кодом устанавливаю метку с возможностью перетаскивания (взял из примеров). Также на карте есть форма поиска, которая тоже ставит метку. И если я уже поставил свою метку мышкой , а потом решил поставить метку с  помощью формы поиска, то установится новая метка, и того на карте будет уже две метки. Но мне нужно чтобы при поиске через форму устанавливалась моя метка, а если она уже установлена то просто бы перемещалась на адрес найденый через поиск. Т.е. всего на карте должна быть максимум одна метка. Подскажите, пожалуйста, как тут быть?

ymaps.ready(init);
var myMap, 
    myPlacemark;

function init(){     
    myMap = new ymaps.Map("map", {
        center: [55.76, 37.64],
        zoom: 16,
        controls: ['zoomControl', 'fullscreenControl', 'typeSelector', 'rulerControl', 'searchControl']        
    });
    
    myMap.events.add('click', function (e) {
        var coords = e.get('coords');

        // Если метка уже создана – просто передвигаем ее.
        if (myPlacemark) {
            myPlacemark.geometry.setCoordinates(coords);
        }
        // Если нет – создаем.
        else {
            myPlacemark = createPlacemark(coords);
            myMap.geoObjects.add(myPlacemark);
            // Слушаем событие окончания перетаскивания на метке.
            myPlacemark.events.add('dragend', function () {
                myPlacemark.geometry.getCoordinates();
            });
        }
    });

    // Создание метки.
    function createPlacemark(coords) {
        return new ymaps.Placemark(coords, {
            iconCaption: 'метка...'
        }, {
            preset: 'islands#violetDotIconWithCaption',
            draggable: true
        });
    }
    
    
}

9 комментариев
Соберите работающий пример своего кода с формой на jsfiddle, я помогу поправить
dimik,
https://jsfiddle.net/e4kfyzbe/
если установить метку кликом, а потом в поиск ввести "москва армянский переулок 11", то появится вторая метка, а я хотел бы чтобы на место новой метки перемещалась моя первая метка, установленная кликом по карте.
SlimSavernake,
https://jsfiddle.net/e4kfyzbe/1/
dimik,
ох спасибо большое!
dimik,
Здравствуйте. Подскажите, пожалуйста, почему не работает следующий код:


myPlacemark.events.add('dragend', function (e) {
  alert(e.get('target'));
});  


https://jsfiddle.net/e4kfyzbe/2/





Нужно отобразить в алерте координаты метки после перетаскивания.
SlimSavernake,
потому, что там где вы вешаете обработчик, метки еще нет (myPlacemark === undefined)
dimik,
Подскажите правильный вариант, пожалуйста.


myPlacemark.events.add('dragend', function (e) {
 alert(myPlacemark.geometry.getCoordinates());
}); 


Я думал, если мы кликаем, то myPlacemark заполняется значением.
А теперь как быть - не понимаю. Может при объявлении переменной создавать метку сразу?
SlimSavernake,
ну вы перенесите этот код туда, где вы метку создаете.
https://jsfiddle.net/e4kfyzbe/3/
dimik,
Благодарю!