Кластеры координат на стороне сервера в зависимости от уровня масштабирования

StackOverflow https://stackoverflow.com/questions/1487704

Вопрос

Благодаря этому ответ Мне удалось найти временное решение моей проблемы.

Однако список из 6000 пунктов, который растет с каждым днем, становится все медленнее и медленнее.

Я не могу воспользоваться сторонним сервисом *, поэтому мне нужно придумать свое собственное решение.

Вот мои требования:

  1. Кластеризация координат необходима для работы с любым уровнем масштабирования карты.

  2. Все кластеры должны быть кэшированы

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

До сих пор я реализовал quadtree, которое возвращает четыре границы моей карты и возвращает любые координаты, находящиеся в пределах видимой части карты.

Что мне нужно, и я знаю, что это непросто, так это иметь кластеры точек, возвращаемых из базы данных (postgres).

Это было полезно?

Решение

В настоящее время я выполняю динамическую кластеризацию на стороне сервера примерно из 2000 маркеров, но она выполняется довольно быстро до 20 000.Вы можете ознакомиться с обсуждением моего алгоритма здесь:

Алгоритм Кластеризации карты

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

Я не кэширую кластеры, потому что маркеры можно динамически фильтровать и выполнять поиск, но если бы они были предварительно сгруппированы, это было бы очень быстро!

Другие советы

Я не понимаю, почему вы должны "группироваться" на лету.Подведите итог по каждому уровню масштабирования с тем разрешением, которое вас устраивает.

Имейте простую структуру из X, Y, # ссылок.Когда кто-то добавляет ссылку, вы вставляете реальные местоположения (максимальный уровень масштабирования или что-то еще), а затем начинаете всплывать оттуда.

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

Расчет тривиален, и вам нужно сделать это только один раз.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top