Кластеризация маркеров Google на стороне сервера - Python / Django - PullRequest
7 голосов
/ 30 апреля 2009

Поэкспериментировав с клиентским подходом к кластеризации большого количества маркеров Google, я решил, что это будет невозможно для моего проекта (социальная сеть с более чем 28 000 пользователей).

Есть ли примеры кластеризации координат на стороне сервера - желательно в Python / Django?

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

Другими словами, когда новый пользователь регистрируется, он / она автоматически присваивается определенной «группе» маркеров, которые расположены близко друг к другу, таким образом увеличивая счетчик «группы». На сервер отправляется лишь небольшое количество «групп». Только когда уровень масштабирования / масштаб карты равен 1: 1 - реальные пользователи отображаются на карте.

Таким образом, клиентской стороне придется иметь дело только с 10-50 маркерами на уровень запроса / масштабирования.

Ответы [ 6 ]

2 голосов
/ 30 апреля 2009

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

Обновление: В этом руководстве демонстрируется базовая функция кластеризации на стороне сервера. Он написан на PHP для API статических карт, но вы можете использовать его в качестве отправной точки.

1 голос
/ 15 августа 2010

Возможно, вы захотите взглянуть на страницы DBSCAN и OPTICS в Википедии, они очень удобны для кластеризации мест на карте. Также есть страница о Cluster Analysis , которая показывает все возможные алгоритмы, которые вы можете использовать, большинство из которых было бы тривиально реализовать на выбранном вами языке.

С 28k + баллами вы можете пропустить django и просто перейти непосредственно на C / C ++ и, конечно же, не ожидать, что это будет вычислено в реальном времени в ответ на веб-запросы.

0 голосов
/ 20 марта 2013

Вы можете попробовать мое приложение django для кластеризации на стороне сервера:

https://github.com/biodiv/anycluster

Это обеспечивает kmeans и кластер сетки.

0 голосов
/ 26 октября 2009

Я использую Django и Python для кластеризации списков недвижимости и аренды, а источник можно найти здесь .

Надеюсь, это поможет!

0 голосов
/ 08 мая 2009

Вы можете просто отбрасывать десятичные дроби в зависимости от уровня масштабирования. Будет ли это работать для вас?

Наши географические индексы основаны на числах демонов: http://www.rooftopsolutions.nl/article/231 (бесстыдная самореклама).

Если вам нужна более высокая точность, чем у 10-базовой системы, то число минометов позволит вам увеличить уровень масштабирования в 2-базовой системе счисления, просто сделав что-то вроде:

GROUP BY (Мортон XOR (-точность))

Чем выше точность, тем больше элементов будет сгруппировано.

0 голосов
/ 30 апреля 2009

Один из способов сделать это - определить сетку с размером единицы на основе уровня масштабирования. Таким образом, вы собираете все элементы в сетке по широте, долготе до одного десятичного знака. Пример 42,2x73,4. Таким образом, точка в 42.2003x73.4021 попадает в эту ячейку сетки. Эта ячейка ограничена 42,2х73,3 и 42,2х73,5.

Если в ячейке сетки есть одна или несколько точек, вы помещаете маркер в центр этой сетки.

Затем вы подключаете событие zoomend и соответственно меняете размер сетки и перерисовываете маркеры.

http://code.google.com/apis/maps/documentation/reference.html#GMap2.zoomend

...