Вопрос
У меня есть список значений, каждое из которых содержит широту и долготу.Я хочу создать полупрозрачное изображение тепловой карты для наложения на Карты Google.Я знаю, что уже существуют серверные и флэш-решения, но я хочу построить их на JavaScript, используя тег Canvas.
Однако мне не удалось найти краткое описание алгоритма, используемого для преобразования координат и значений в тепловую карту.Может ли кто-нибудь предоставить или дать ссылку на него?
Спасибо.
Нет правильного решения
Другие советы
Основная идея заключалась бы в том, чтобы создать сетку и спроецировать каждую широту и длину на эту сетку.Я бы использовал двумерный массив целых чисел.
Псевдокод будет таким:
for each coord
cell = coord projected to grid
increment cell value
end
for 0 to # of passes
for each row
for each col
if grid[row,col] > 0 then
grid[row,col] += 1
increment_adjacent_cells(row, col)
end
end
end
end
Итак, идея состоит в том, что чем выше значение int, тем горячее ячейка.crere_adjacent_cells должен увеличивать значения во всех 8 соседних ячейках.
Я попытался решить эту проблему в javascript, используя элемент холста, вот мой текущий результат:
Мне нужно исправить фильтр Гаусса и цветовое отображение, потому что в настоящее время это не дает хороших результатов.
Посмотрите этот проект, если вы ищете что-то, больше похожее на «телевизионные карты погоды»:
Более быстрый способ создания тепловой карты — использовать очередь:
Псевдокод:
Add an element to queue (first in heatmap(x,y, val))
While (!queue.isEmpty())
{
elem = queue.pop()
queue.push(elem.x + 1, elem.y, val-1)
queue.push(elem.x - 1, elem.y, val-1)
queue.push(elem.x, elem.y + 1, val-1)
queue.push(elem.x, elem.y - 1, val-1)
}
Это экономит массу итераций!