Клуб API Карт

Отметка точки на карте

mr.postoev
3 июня 2012, 17:33

Есть необходимость дать пользователю возможность отметки точки на карте (указание раположения магазина) и переноса данных о координатах в какой нибудь <input type="hidden" /> (для последующего переноса в базу).

 

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

5 комментариев
Подписаться на комментарии к посту
Для API 1.1:

//Добавляем метку на карту
  point = new YMaps.Placemark(map.getCenter(), {
  draggable: true
  });
  map.addOverlay(point);
//Передаем координаты в input
  YMaps.Events.observe(point, point.Events.DragEnd, function (point) {
  var coord = point.getGeoPoint();
  YMaps.jQuery("#coordpoint").val(coord);
  });

<input id="coordpoint" type="text" disabled value="" />

Я подобную вещь вешаю на клик по карте и создаю метку в позиции клика

для API 2 

.....//создаем карту с именем  myMap

.......
myMap.events.add('click', function (e) {
var coords = e.get('coordPosition');
var myGeometry = {
type: 'Point',
coordinates: coords
},
myOptions = {
draggable: true,
preset: "twirl#redStretchyIcon" // красная иконка, растягивающаяся под контент
};
var myPlacemark = new ymaps.GeoObject({geometry: myGeometry}, myOptions);
myPlacemark.properties.set({ iconContent:"Самый лучший магазин",
balloonContent:"Здесь описание магазина"});
myMap.geoObjects.add(myPlacemark);
document.getElementById('XY').value='Координаты метки: ' + [coords[1].toPrecision(6), coords[0].toPrecision(6)].join(', ');

// ну или можно через  JQuery до поля ввода добираться, как в соседнем примере

});
......
 

Попробовал ваш метод, возникла одна проблема

Если человек будет по карте несколько раз кликать, то создается куча балунов.

Как от них избавиться так, чтобы выводился только последний балун?

откровенно говоря, такая проблема передо мной не вставала. У меня режим добавления меток включается отдельным переключателем. пока он включен - клик по карте вставляет метку. Если выключен - соотвественно - нет. предполагается, что пользователь при включенном режиме вставки щелкает по карте сознательно.

Ну, а кроме того, у меня предусмотрен режим редактирования объектов, который позволяет удалять, перемещать или менять свойства метки (вид иконки и надписи).

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

Могу предложить только опять же сделать какой-то переключатель - "создавать одну метку" и тогда при последующих щелчках не генерить новый объект, а менять координаты того, что был создан при первом клике (естественно, надо куда-то запомнить ссылку на него), и "создавать много меток" - тогда при каждом клике генерится новая метка

 

var iMovingPoint = null;

new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);

//клик мышью по карте
YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {
        if (iMovingPoint != null) { 

    }
    else
    {
        iMovingPoint = new YMaps.Placemark(pCenterMap, {style: "default#lightbluePoint", draggable: true, hasBalloon: false, hasHint: true});
         iMovingPoint.setIconContent('

что в балуне

');

        map.addOverlay(iMovingPoint);


         var OnMoveiMovingPoint = YMaps.Events.observe(iMovingPoint, [iMovingPoint.Events.Drag, MovingPoint.Events.PositionChange],

            function (p) {

                $("#idCoordVisible").attr({'value': p.getGeoPoint()});  //или если jQuery нет, то YMap.jQuery("#idCoordVisible").... 

            });

        }


         iMovingPoint.setGeoPoint(mEvent.getGeoPoint()); 

    });

 

На кнопке отмены установки точки висит такой код

 function HideAddNewPointForm() {

       map.removeOverlay(iMovingPoint);

       iMovingPoint = null;

    }