Создание карт плотности/тепловых карт, таких как SpatialKey

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

Вопрос

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

Тепловая карта SpatialKey http://img697.imageshack.us/img697/7964/solvedays508x17550.jpg

Мы знаем, что они используют Flash, и насколько мы можем судить, тепловые карты являются интерактивными, а не визуализируются с тайлового сервера.Наше первое предположение о том, как это реализовано, состоит в том, что сервер предоставляет своему Flash-клиенту сетку — каждая ячейка имеет счетчик, вычисленный сервером.Затем клиент Flash выполняет некоторую интерполяцию на основе значений ячеек в сетке, чтобы получить красивый результат, который вы видите выше.

На данном этапе меня просто интересует, как они могли бы эффективно генерировать сетку на стороне сервера (если наше предположение об их реализации вообще верно).Кажется, это будет включать в себя:

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

Если вы сделаете это с несколькими уровнями масштабирования и разумным разрешением сетки, то, похоже, вам понадобится собственный пространственный индекс, чтобы сделать это эффективным.

Есть желающие объяснить альтернативный маршрут?Если это имеет значение, мы привыкли хранить наши данные в PostgreSQL с PostGIS для пространственного индекса, но я готов попробовать что угодно.

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

Решение

Я предполагаю, что они реализовали библиотеку ГИС во Flash на стороне клиента и используют ее для проецирования координат широты и долготы в пиксельное пространство.Затем они объединяются по пикселям, чтобы определить «высоту» каждого пикселя и визуализировать его так же, как вы визуализируете круг, но с использованием градиентной заливки с прозрачностью, причем начальный и конечный цвета градиентной заливки определяются высотой пиксель.Несколько кругов, наложенных друг на друга, создадут более яркие пиксели.

Альтернативой может быть сделать это в оттенках серого, а затем сопоставить значение яркости с цветовой шкалой.Это может быть наиболее эффективно.

Мы продаем более традиционные тепловые карты древовидных карт для использования в приложениях визуальной аналитики (например:тепловая карта SDK), и теперь у нас есть географические тепловые карты, которые раскрашивают области.Мы читаем стандартные карты шейп-файлов ESRI и выполняем все проецирование и рендеринг на стороне клиента (на Java, а не на Flash, но та же концепция).Я думаю, что SpatialKey делает то же самое, поскольку они поддерживают рендеринг с заполнением областей, что на самом деле невозможно сделать, если вы используете сервер тайлов, такой как Google Maps.

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

SpatialKey только что написал хороший пост о различиях между тепловыми картами с заполнением областей (т.е.:тематические карты) и тепловые карты плотности.Вы можете проверить это на http://blog.spatialkey.com/2010/02/comparing-thematic-maps-with-density-heatmaps/.

Если вы найдете хороший способ создания тепловых карт плотности, мне будет интересно узнать, как вы это сделали, поскольку это станет ценным дополнением к нашему SDK визуальной аналитики.Удачи.

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

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

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