#algorithm #google-maps #heatmap
#алгоритм #google-карты #тепловая карта
Вопрос:
Я ищу некоторую документацию по алгоритму тепловой карты. Я нашел несколько реализаций, но они не вычисляют градиент так, как я ищу. Вместо вычисления по «совпадениям» я хочу связать точки данных со значением.
Единственным источником, который я нашел, является исходный код изopenheatmap.com . Это отличная штука, но я хочу создавать градиенты «на лету», а не на основе набора исторических данных.
Я хочу создать тепловую карту в реальном времени, похожую на мир твитов.
Ответ №1:
Из полученных ответов я сделал свой собственный вывод, пожалуйста, прокомментируйте его точность.
Итак, для тепловой карты, основанной на «попаданиях», у вас есть матрица пикселей со значением 0:
[ 0 0 0 ]
[ 0 0 0 ]
[ 0 0 0 ]
При попадании вы увеличиваете соответствующий элемент.
[ 1 3 2 ]
[ 4 1 2 ]
[ 0 3 5 ]
Если у вас есть значения, хотя вместо совпадений вы добавляете значение в матрицу. Например, давайте использовать суммы в долларах, которые дают этот пример матрицы:
[ $20.34 $42.42 $55.23 ]
[ $45.87 $00.87 $03.75 ]
[ $08.99 $32.05 $88.65 ]
Затем мы нормализуем данные. Это дает:
[ .897 .973 .984 ]
[ .977 .087 .351 ]
[ .669 .959 .994 ]
Теперь вы можете растянуть или размыть это изображение, используя выбранный вами алгоритм. Как размытие по Гауссу.
Затем вы можете применить к этим значениям любой градиент, который вы хотите.
Комментарии:
1. Можете ли вы поделиться какими-либо примерами результата, полученного при выполнении этого?
Ответ №2:
Хм, если вы хотите экстраполировать «тепловую карту» (регулярную сетку значений пикселей) из разброса «попаданий» (как в World of Tweets), очевидный способ сделать это — сначала просто посчитать для каждого пикселя количество попаданий в этот точный пиксель (т. Е. квантовать местоположения попадания в сетке) и применить фильтр свертки, например, фильтр Гаусса, к данным, чтобы «смешать» их. See http://en.wikipedia.org/wiki/Gaussian_blur.
Комментарии:
1. Я не хочу выполнять квантование по совпадениям, хотя я хочу по значению. В области может быть много «совпадений», но с низкими значениями, в то время как в другой области может быть мало «совпадений», но с высокими значениями, поэтому тепловая карта будет отображаться не только по точке местоположения, но и по значению, связанному с этой точкой.
2. Кроме того, я ссылался на World of Tweets для функциональности в реальном времени, а не для реализации.
3. Хм, тогда вы просто складываете значения вместе в пикселе, а затем запускаете фильтр свертки 🙂
Ответ №3:
Если вы можете прочитать / преобразовать шейдер фрагмента OpenGL — вот он. В режиме реального времени просто означает, что вы должны пересчитывать значения тепловой карты на лету.
привет!
Ответ №4:
Я просто взглянул на мир твитов. Похоже, что каждый твит добавляет некоторую ценность местоположению, и все местоположения уменьшаются — вероятно, экспоненциально с течением времени. Это позволит добавлять данные нерегулярно, отображая при этом то, что выглядит как среднее значение. Итак, для каждого пикселя на карте выполните:
Через фиксированный интервал времени: вывод = output * 0.99
Когда происходит отрыжка: вывод = value_of_burp
Они должны применяться отдельно для каждого пикселя на вашей карте. Вы можете распределить значение по пикселям, используя любое размытие, которое вы хотите, — даже применить то же значение по кругу. Конечно, 0,99 следует регулировать вручную, пока вы не получите то, что вам нравится.
Экспоненциальный спад означает, что даже очень активные пиксели будут иметь конечный результат — другими словами, он стабилен.