Клуб API Карт

Получить координаты точек на карте

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

Стоит такая задча. Пользователь устонавливает некое колличество точек на карте. При добавлении точек ее координаты пишуться в инпут, а координаты прошлых сохраняються в другом инпуте. (от куда пишуться в БД). Проблема появилась когда решили сделать возможность перетаскивания меток. Как можно получить координаты точек, которые уже отмечены на карте?

 

пока:

-при клике по карте создаёться новая точка, её координаты пишуться в инпут

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

 

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

myMap.events.add("click",function(e) {

  if ( $("#YNewPoint").hasClass("disable") ) {       

  myCollection = creat_collection_points(post_points);         //создаём коллекцию из прошлых (сохраннёных) точек

  $('#edit-field-koord-0-value').val(e.get("coordPosition"));           //выводим координаты новой точки в отдельное поле

  var k = $('#edit-field-koord-0-value').val().split(/[,]/);

    myCollection.add(new_point(k[0],k[1]));               // Добавляем в коллекцию новую точку с полученными координатами

       myMap.geoObjects.add(myCollection);

    } 

  });

 

function new_point(x,y) {   

   myPlacemark = new ymaps.Placemark(

        [x, y], {

         balloonContent: 'Новая метка'

     }, {

     draggable: true,

     hideIconOnBallon: false,

   iconImageHref: '/sites/all/themes/aurumsvadba/images/ya_point.png', // картинка иконки

        });

        myPlacemark.events.add('dragend', function (e) { 

            $('#edit-field-koord-0-value').val(myPlacemark.geometry.getCoordinates());

        }); 

   return myPlacemark;

 }

 

 

function creat_collection_points(koord) {

 myCollection.removeAll(); 

 var cords = [];

//получаем координаты сохранёных точек 

 var cordinati = koord.split(/[,]/);

 var dlinna = cordinati.length;

 kol_point = 0; 

 

 for (j=1; j<dlinna; j++) { 

   //      Разбиваем координаты попарно и создаём точки из полученных координат

   if (j % 2 == 1) {

     cords[0] = cordinati[j];

   }

   else {

     cords[1] = cordinati[j];

     objectsMap[kol_point] = cords[0]+','+cords[1];

     kol_point = kol_point + 1;

     var myPlacemark = new ymaps.Placemark(

        [cords[0], cords[1]], {

            balloonContent: 'Метка №'+kol_point

            }, {

            draggable: true,

            hideIconOnBallon: false

      });

 

      myCollection.add(myPlacemark);

}

 return myCollection;

}

 

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

Координаты у метки можно получить вызовом placemark.geometry.getCoordinates()

Также у геообъекта есть событие geometrychange, которое вы можете слушать и по нему обновлять свои записи.

а можно ли этим событием слушать коллекцию точек?

У коллекции есть событие geometrychange, но оно не связано с соответствующими событиями элементов коллекции, т.к. у коллекции может быть своя собственная геометрия, как у обычного геообъекта.

Вам нужно у каждой точки слушать  geometrychange

а не подскажите как получить интификатор точки?) мне бы это очень помогло...

Уникальных идентификаторов у геообъектов нет, но у геообъектов есть properties, куда вы можете писать любые данные, ассоциированные с геообъектом.

Вы можете сами идентифицировать свои метки и записывать идентификаторы например в поле id

placemark.properties.set("id", uid);

Огромное спасибо;-) проблема решена >:-)