Клуб API Карт

Определить нажатие на метку

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

Всем привет. Подгружаю метки аяксом из БД. При любой смене позиции карты, происходит запрос в БД и в ответ возвращаются координаты меток. С этим всё хорошо, проблем нет. Проблемы начинаются, когда жму на метку, чтобы увидеть её описание и если она находится где-то сбоку, то чтобы она была читабельна, карта сама двигается, и в этот момент происходит запрос меток из БД, и соответственно нажатая метка тут же скрывается (т.к. произошла смена координат и улетел запрос в БД).

Внимание, вопрос: как определить нажатие метки, чтобы карта двигалась, но координаты при этом не отсылались.

Пример моей проблемы здесь: http://rapida.ru/private/payment-points/

Вроде бы объяснил всё хорошо, надеюсь на взаимопомощь!

p.s. Используется пока первая версия я.карт

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

можно слушать клики на метке

 

Как советовали выше, применить Click, пытаюсь найти рабочие примеры - пока не получается...

YMaps.Events.observe(myPlacemark, myPlacemark.Events.Click, function () {

....

});

Димитрий Мокров
28 января 2016, 03:21

Огромное спасибо! Получилось!))

можно ответить себе на вопрос "а зачем я стираю метку ДО того как получу новую порцию данных"

Вдруг эта метка там уже есть и ничего с ней делать не надо.

Сдвинули карту, запросили данные. Новые метки добавили, тех что больше нет - удалили. Те что как были так и есть - не трогаем.

 

Димитрий Мокров
28 января 2016, 03:21

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

Как советовали выше, применить Click, пытаюсь найти рабочие примеры - пока не получается... Проблема оказалась сложнее, чем я думал...))

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

отсутствие возможности кеширования запросов, и загрузка одних и тех же данных при сдвиге карты даже на 1пиксель

Нет проблемы с отслеживанием клика.

Проблему создали вы своим механизмом загрузки данных.

Измените его, сделайте немного нормальнее. И не будет проблемы.

Димитрий Мокров
28 января 2016, 03:21

Да, метод выбрал не из самых лучших. Но я руководствовался одной целью, поэксперементировать с нагрузками на сервер, т.е. в реальных обстоятельствах проверять запросы, модернизировать их и изменять структуру БД. Просто читал статью, где приводили пример загрузки 10000 точек, после чего уже всё без подгрузки бы шло. Но выбрал такой метод, т.к. собираюсь использовать в проекте, где будет от 100 тысяч точек... Лучше поставить отдельный сервак, который будет возвращать ответы на любое движение карты, чем заставлять людей, ждать, пока загрузятся эти 100 тысяч точек, и это только на старте проекта, дальше-больше.

Итакс, во первых я ранее не подвергал критике ваш способ загрузки данных.

Я говорил что о способе обработки ответов. Что ОЧЕНЬ просто сделать так чтобы ваша "проблема" решилась.

нажатая метка тут же скрывается (т.к. произошла смена координат и улетел запрос в БД).

Нажатая метка должна скрываться только если в прилетевшем ответе из БД ее больше нет.

 

Во вторых что ваша загрузка, по границам, что загрузка всего скопом - это не правильные варианты, особенно для ваших 100 тысяч точек.

 

Я этом конечно виноват я - два раза выступал с описанием проблемы и вариантами решения.

Второй раз даже немного в гитхабе выложил.

А первый раз вообще году так в 2008 на хабр писал.

Но не догоняют люди. Жаль.

 

Особую "ущербность" вашего метода можно заметить сдвинув карту на один пиксель.

Сейчас как-то не важно что пошол запрос и сервер будет жаловаться.

Важно что на экране полностью меняется картина, метки что были пропали, добавились новые.

Все пляшет, прыгает и мигает. Неужели не напрягает?

Димитрий Мокров
28 января 2016, 03:21

Лично у меня ничего не прыгает)) Подгрузка происходит моментально, даже нет промаргивания... Возможно потом это проявится..