Есть карта Москвы, есть больше 5 000 меток на ней. Разумеется их не нужно выводить одним сплошным мессивом, а надо при определённом масштабе объединять соседние метки в одну с цифрой. Как сделать через клиентскую сторону — я знаю, есть библиотеки, а в Google Maps это даже входит в стандартную часть.
А как сделать это на серверной стороне? Есть БД с 5 000 метками, у каждой из которых есть долгота и широта. Как на сервере объединить соседние точки, чтобы не вываливать 5 000 меток клиенту и уже там их объединять?
В Гугл смотрел, по запросу «серверная кластеризация геометок» вываливается результаты совсем другой тематики
У масштабной сетки есть два недостатка:
1) карта может смотреться как панельная многоэтажка — в каждой ячейке по агрегирующему маркеру;
2) при скопление маркеров на стыке ячеек может получится два агрегирующих маркера в непосредственной близости друг от друга вместо одного, который бы там ожидался;
Поэтому для своей задачи я использовал один из видов иерархической кластеризации.
Вот как это выглядит
Вот небольшое описание метода
Взять все точки и поделить нацело на длину ячейки масштабной сетки. Полученные точки занести в хеш-таблицу и закешировать. Для каждого масштаба хранить свою таблицу. При обновлении данные вносить изменения в каждую таблицу. При запросах доставать данные из таблицы в зависимости от масштаба. В качестве хранилища я бы использовал MongoDB (Geospatial Indexing)