Клуб API Карт

Динамическое добавление меток на карту

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

На карте есть кнопка "Добавить метку". При клике на карту, если кнопка нажата, в этом месте добавляется Маркер, координаты беру так event.get('coords').

Проблема в том, что при перемещение карты начинает сдвигаться иконка маркера. Если масштаб большой, то Маркер добавляется не в то место.

 

Подскажите как правильно взять координаты на карте!

 

16 комментариев
Sergey Konstantinov
28 января 2016, 02:06
Вообще говоря, не надо ставить метки на карту, если карта в этот момент движется. Зачем вам такой функционал?
Диман Миронов
28 января 2016, 02:06

Наверное, я не совсем понятно объяснил. Карта в этот момент не движется.

 

Проблема 1. Создаем метку по клику на карте, центр определяем как event.get('coords'), метка ставтся не в то место, куда мы нажали. (Чем больше масштаб, тем больше разница).

Проблема 2. Создаем метку как в 1 проблеме, немного перетаскиваем карту. При этом метка движется вместе с картой.

 

Все эти проблемы изчезают при обновление страницы (координаты добавляются в базу, при обновление происходит НЕ динамическое добавление Маркеров)

Sergey Konstantinov
28 января 2016, 02:06
Вы описываете что-то очень странное. Покажите, пожалуйста, страницу с примером.
Диман Миронов
28 января 2016, 02:06

Надеюсь не будет рекламой https://vk.com/app3654648

Нужно нажать кнопку "Добавить площадку", кликнуть по карте, заполнить форму и попробовать дальше работать с картой.

Sergey Konstantinov
28 января 2016, 02:06
Кажется, это артефакт вставки карты в iframe, если открыть отдельно URL iframe-а, то метки стоят правильно.
Попробуем что-нибудь сделать в следующем релизе.
Диман Миронов
28 января 2016, 02:06

Очень жаль, спасибо!

Диман Миронов
28 января 2016, 02:06

За правкой этого артефакта можно как-то проследить? Что бы знать, когда это поправится.

 

Sergey Konstantinov
28 января 2016, 02:06
Пока ничего не могу сказать.
Всеволод Шмыров
28 января 2016, 02:06

Ошибка актуальная? Я подебажил ваш код - в e.get('coords') нормальные данные, далее они сохраняются в два скрытых input. От туда видимо раньше попадали непосредственно в геообъект, но сейчас создается массив position из значений этих input и вызывается обновление страницы. Данные в position тоже корректные. Можете скинуть код, который был вместо обновления страницы - непосредственно создание геообъекта.

Диман Миронов
28 января 2016, 02:06

Данные нормальные, это было понятно. Пришлось делать через обновление, для устранения катаклизмов.

 

Код был следующий, это функция добавления новой метки

getMarkForNotValidPlayground: function(playground) {

    return new ymaps.Placemark(

        [playground.latitude, playground.longitude], {

            balloonContent: 'Площадка №' + playground.id + ' ожидает проверки'

         }, {

             preset: 'twirl#orangeDotIcon'

         });

 

параметр playground приходил из базы, после сохранения данных

Что то больше сейчас уже сложно будет раскопать.


P.S. Эта функция так же используется для создания меток (желтых) при обновление страницы.

Всеволод Шмыров
28 января 2016, 02:06
>> параметр playground приходил из базы, после сохранения данных
А данные корректно возвращаются ? Ну просто я проследил координаты по сути до отправки на сервер.
Диман Миронов
28 января 2016, 02:06

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

Аналогичная проблема. Создаю приложение для такси, где на карте должны быть видны метки(заказы). В режиме реального времени заказы, то есть метки, некоторые пропадают(заказ взят или удален), и могут появляться новые - новый заказ. Работает через ajax. Если писать код:

myPlacemark[arr[i]] = new ymaps.Placemark([arr3[i]], {balloonContentBody: arr2[i]});

myMap.geoObjects.add(myPlacemark[arr[i]]);

то точка создается ровно в середине экрана, а не по тем координатам что передаются, и при смещении карты точка смещается в середину экрана. А вот интересный момент: Узнаю содержимое arr[i], допустим оно равно 55.696352,37.800631

Меняю чуток код:

myPlacemark[arr[i]] = new ymaps.Placemark([55.696352,37.800631], {balloonContentBody: arr2[i]});

myMap.geoObjects.add(myPlacemark[arr[i]]);

И вот оно - все работает как надо. То есть получается - если координаты писать статические - все норм, если передавать в переменной - то эта проблема выскакивает. Второй день уже мучаюсь.... :(

Помогите плиз, если кто сталкивался с данной проблемой и решил ее....

а есть ссылка на ваш проект с этим кодом?

Решил проблему))))

Дело вот в чем.... Код был приблизительно такой:

coords = "11.11, 22.22";

myPlacemark = new ymaps.Placemark([coords], {balloonContentBody: "Коммент"});

И не работало..... Стало работать когда переписал код таким образом:

coords = [11.11, 22.22];

myPlacemark = new ymaps.Placemark(coords, {balloonContentBody: "Коммент"});

Но как только вписал весто 11.11, 22.22 координаты, полученные ajaxom - опятьперестало работать.

Проблему решил так: Полученные ajaxом коры разбил, разделив широту от долготы, оба значения умножил на 1, чтоб стали float, и уже потом собрал переменную coords = [x, y];

И все заработало.

Спасибо за попытку помочь :)

Валентин Изместьев
3 декабря 2019, 20:50
taxi.carina,
К сожалению перевод строчного значения координат в числовое ни к чему не приводит.  Маркеры продолжают плясать по карте при ее прокрутке.