Как проверить, есть ли какие-либо маркеры в области просмотра Google Maps?

Каков наиболее эффективный подход к проверке наличия маркеров в окне просмотра?

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


person Michał Pękała    schedule 01.06.2010    source источник


Ответы (2)


Лучшее решение, которое я придумал, это

  • при запуске приложения создать массив с привязкой к маркерам - отсортированный по 1 координате, т.е. широте
  • получить границы области просмотра с помощью GMap2.getBounds() (как предложил paullb)
  • возьмите более низкую широту границ области просмотра и найдите ее в массиве (быстрее всего достигается с помощью двоичного поиска)
  • проверьте, помещается ли каждый следующий маркер в область просмотра (до широты маркера ‹= верхняя широта области просмотра).
person Michał Pękała    schedule 21.07.2010

Используйте GMap2.getBounds(), чтобы найти ограничивающую рамку. Используйте GLatLngBounds.containsLatLng() для проверки каждого маркера, чтобы увидеть, виден ли он.

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

person paullb    schedule 01.06.2010
comment
Спасибо за ответ. Для 3-5 маркеров это будет работать хорошо, но при увеличении числа до сотен/тысяч (это мой случай) это будет не оптимально. - person Michał Pękała; 02.06.2010
comment
Я бы подумал, что кластер маркеров разбивается на 1000 маркеров. Я попробовал это, и это было довольно медленно. - person paullb; 03.06.2010
comment
Я мог бы привыкнуть к громким словам. На данный момент я протестировал ti с c.a. 1000 маркеров, и это работает как шарм, поэтому я думаю, что это хорошо масштабируется, по крайней мере, до пары тысяч. - person Michał Pękała; 04.06.2010