Кластеризация геоданных для тепловой карты - PullRequest
3 голосов
/ 02 февраля 2012

У меня есть список твитов с их географическим местоположением. Они будут отображаться в изображении тепловой карты, прозрачно размещенном над Google Map. Хитрость заключается в том, чтобы найти группы мест, находящихся рядом друг с другом, и отобразить они как один круг / фигура тепловой карты определенного тепла / цвета в зависимости от размера кластера.

Есть ли какая-нибудь библиотека, готовая для группировки местоположений на карте в кластеры? Или мне лучше выбрать параметры кластеризации и создать собственный алгоритм?

Ответы [ 6 ]

2 голосов
/ 03 февраля 2012

Я не знаю, есть ли «библиотека, готовая к группированию местоположений на карте в кластеры», возможно, это так, а может, и нет. В любом случае, я не рекомендую вам создавать собственный алгоритм кластеризации, поскольку для этого уже реализовано много библиотек.

@ recursive отправил вам ссылку с php-кодом для k-средних (один алгоритм кластеризации). Существует также огромная библиотека Java с другими технологиями ( Java-ML ), в том числе и k-средних, иерархическая кластеризация, k-средних ++ (для выбора центроидов) и т. Д.

Наконец, я хотел бы сказать вам, что кластеризация - это неконтролируемый алгоритм, который означает, что эффективно он даст вам набор кластеров с данными внутри них, но на первый взгляд вы не знать, как алгоритм кластеризовал ваши данные . Я имею в виду, что он может быть сгруппирован по местам так, как вы хотите, но он может быть сгруппирован и по другой характеристике, которая вам не нужна, поэтому все дело в игре с параметрами алгоритма и настройкой ваших решений. 1011 *

Меня интересует окончательное решение, которое вы могли бы найти для этой проблемы :) Может быть, вы можете поделиться им в комментарии, когда вы закончите этот проект!

2 голосов
/ 02 февраля 2012

K означает кластеризацию - метод, часто используемый для таких задач

Основная идея такова:

Учитывая начальный набор k, означает m 1 ,…, m k , Алгоритм продолжается чередованием двух шагов:

  1. Шаг назначения: назначьте каждое наблюдение кластеру с ближайшим средним значением

  2. Шаг обновления: вычислите новое среднее значение для центра тяжести наблюдений в кластере.

Здесь - пример кода для php.

1 голос
/ 03 февраля 2012

heatmap.js - это библиотека HTML5 для рендеринга тепловых карт, в которой есть пример для выполнения этого поверх API Карт Google. Это довольно надежно, но работает только в браузерах, которые поддерживают canvas:

Библиотека heatmap.js в настоящее время поддерживается в Firefox 3.6+, Chrome. 10, Safari 5, Opera 11 и IE 9 +.

0 голосов
/ 19 марта 2015

Одна простая альтернатива для тепловых карт - это просто округлить широту / долготу до нескольких десятичных знаков и сгруппировать по ним.

См. это объяснение о точности по широте / долготе.

  • 1 десятичный знак - 11 км
  • 2 десятичных знака - 1,1 км
  • 3 десятичных знака - 110 м

и т.д.

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

0 голосов
/ 26 апреля 2013

Это не проблема кластеризации. Карты голов не работают, создавая кластеры. Вместо этого они сворачивают данные с гауссовым ядром. Если вы не знакомы с обработкой изображений, подумайте об этом как об использовании обычного или гауссовского «штампа» и отметки над каждой точкой. Поскольку наложения штампа будут накладываться друг на друга, области с высокой плотностью будут иметь более высокие значения.

0 голосов
/ 03 февраля 2012

Вы можете попробовать мою кривую Гильберта класса php на phpclasses.org. Это кривая монстра, которая уменьшает 2-мерную сложность до 1-й сложности. Я использую quadkey для адресации координаты, и он имеет 21 уровень масштабирования, как карты Google.

...