Создание карт плотности / тепла, таких как SpatialKey - PullRequest
7 голосов
/ 05 февраля 2010

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

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

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 06 февраля 2010

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

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

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

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

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

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

0 голосов
/ 21 декабря 2010

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

...