ruskar
@ruskar
Conflict Intelligence Team

Серверная кластеризация геометок карты?

Есть карта Москвы, есть больше 5 000 меток на ней. Разумеется их не нужно выводить одним сплошным мессивом, а надо при определённом масштабе объединять соседние метки в одну с цифрой. Как сделать через клиентскую сторону — я знаю, есть библиотеки, а в Google Maps это даже входит в стандартную часть.


А как сделать это на серверной стороне? Есть БД с 5 000 метками, у каждой из которых есть долгота и широта. Как на сервере объединить соседние точки, чтобы не вываливать 5 000 меток клиенту и уже там их объединять?


В Гугл смотрел, по запросу «серверная кластеризация геометок» вываливается результаты совсем другой тематики
  • Вопрос задан
  • 4683 просмотра
Пригласить эксперта
Ответы на вопрос 2
@avrelian
У масштабной сетки есть два недостатка:
1) карта может смотреться как панельная многоэтажка — в каждой ячейке по агрегирующему маркеру;
2) при скопление маркеров на стыке ячеек может получится два агрегирующих маркера в непосредственной близости друг от друга вместо одного, который бы там ожидался;

Поэтому для своей задачи я использовал один из видов иерархической кластеризации.
Вот как это выглядит
Вот небольшое описание метода
Ответ написан
Комментировать
Stdit
@Stdit
Взять все точки и поделить нацело на длину ячейки масштабной сетки. Полученные точки занести в хеш-таблицу и закешировать. Для каждого масштаба хранить свою таблицу. При обновлении данные вносить изменения в каждую таблицу. При запросах доставать данные из таблицы в зависимости от масштаба. В качестве хранилища я бы использовал MongoDB (Geospatial Indexing)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы