Вопрос

У меня есть список значений, каждое из которых содержит широту и долготу.Я хочу создать полупрозрачное изображение тепловой карты для наложения на Карты 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, используя элемент холста, вот мой текущий результат:

http://gist.github.com/346165

Мне нужно исправить фильтр Гаусса и цветовое отображение, потому что в настоящее время это не дает хороших результатов.

Посмотрите этот проект, если вы ищете что-то, больше похожее на «телевизионные карты погоды»:

https://github.com/optimisme/javascript-temperatureMap

Более быстрый способ создания тепловой карты — использовать очередь:

Псевдокод:

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)
}

Это экономит массу итераций!

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