Карты Google — кластеризация на основе сетки

на этой странице https://developers.google.com/maps/articles/toomanymarkers

в нем говорится, что это самая простая возможная кластеризация, но я не могу найти для этого решения на стороне клиента. Кто-нибудь знает бесплатное клиентское решение с открытым исходным кодом для кластеризации на основе сетки для маркеров карт Google? мне не нужен MarkerClusterer.

Я не нашел его, поэтому я пошел и начал кодировать свое собственное решение. Первый очевидный запрос заключается в том, что он должен быть быстрым, по крайней мере, до 1000 маркеров, загруженных на карту. Каждое уменьшение, перемещение и так далее будет повторять процедуру/функцию кластеризации. Блоки сетки настраиваются, значение по умолчанию 50*50 пикселей.

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

У меня проблема с алгоритмом, теперь все, что я могу придумать, чтобы добиться этого, - это перебрать все маркеры для каждой сетки и спросить, находится ли она внутри границ, а затем увеличить массив сетки ++. Очевидно, что так делать нельзя. Должен быть какой-то хэш или что-то такое, что потребуется всего одна итерация по всем маркерам, и я буду знать, к какой сетке принадлежит конкретный маркер.

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


person displayName    schedule 04.07.2012    source источник
comment
Проблема с кластеризацией на стороне клиента заключается в том, что она противоречит цели кластеризации. При кластеризации на стороне клиента вам по-прежнему необходимо передавать информацию о каждом маркере клиенту (в браузер), и клиент должен усердно работать, чтобы выполнить всю обработку чисел. Если у вас нет веских причин для выполнения кластеризации на клиенте, я бы предположил, что кластеризация на стороне сервера намного эффективнее. Если вы выполняете кластеризацию на сервере, а затем передаете только минимально возможный объем данных клиенту, он должен загружается быстро в любом браузере, даже в IE. :-)   -  person Marcelo    schedule 06.07.2012
comment
Я хочу сделать плагин, как MarkerClusterer. [ссылка]google-maps-utility -library-v3.googlecode.com/svn/trunk/ MarkerClusterer полностью на стороне клиента и работает очень быстро для 1000 маркеров. Идея должна быть той же, просто пройтись один раз по массиву маркеров. Файл JS с 5000 определенными маркерами имеет размер около 100 КБ, что не так уж и много, чтобы быть проблемой.   -  person displayName    schedule 07.07.2012
comment
1000 маркеров - мелочь. :-) см. отдельное решение с 40 000 маркеров здесь: maps.forum.nu/server_side_clusterer и здесь: maps.forum.nu/server_side_clusterer/index2.php   -  person Marcelo    schedule 07.07.2012
comment
это приятно. но все, что я хочу, это кластеризатор сетки на стороне клиента для 1000 маркеров. просто... для меня это сложно сделать без какого-нибудь умного совета по алгоритму.   -  person displayName    schedule 08.07.2012


Ответы (2)


Похоже, что geohash - это ответ на вашу проблему, вы даже намекаете на это решение в своем вопросе. Это хорошо объяснено здесь:

http://blog.trifork.com/2013/08/01/server-side-clustering-of-geo-points-on-a-map-using-elasticsearch/

На самом деле я изучаю разработку аналогичного алгоритма кластеризации для Google Maps API v3. Я опубликую больше, если я действительно добьюсь чего-нибудь с этим.

person Apollo Data    schedule 19.12.2013
comment
На самом деле, MarkerClusterer делает то, что мне нужно, с помощью недокументированной (ну, задокументированной в коде, но не на страницах документации) опции: показан счет *. - person Apollo Data; 20.12.2013

Вы можете использовать геохэш или кривую заполнения пространства, чтобы уменьшить размер, изменить порядок и хешировать маркер. На стороне сервера вы можете использовать структуру данных точки и пространственного индекса, но вы также можете вычислить геохэш вручную. Ищите комикс xkcd Internet Map и кривую Гильберта, чтобы увидеть, как это работает.

person Gigamegs    schedule 09.08.2012