Генерируя KML heatmap от набора определенных данных [lat, lon, плотность]

Я надеюсь создавать статический KML (разметка Google Earth) файл, который отображает рендеринг heatmap-стиля нескольких наборов определенных данных в форме [lat, lon, плотность] кортежи.

Очень простой набор данных, который я имею, для плотности населения.

Мои требования:

  • Должен смочь питаться в данных для данного lat, lon
  • Должен смочь указать плотность данных в этом lat, lon
  • Должен экспортировать в KML

Требования являются агностиком языка для этого проекта, поскольку я буду генерировать эти файлы офлайн для создания KML, используемого в другом месте.

Я посмотрел на несколько проектов, прежде всего heatmap.py, который является портом gheat в Python с экспортом KML. Я врезался в кирпичную стену в том смысле, что проекты, я нашел до настоящего времени всех, полагаются на создание heatmap от плотности [lat, lon] точки, питаемые в алгоритм.

Если я пропускаю очевидный способ адаптировать мой набор данных для питания в просто [lat, lon] кортежи, но корректировка, как я подаю их использующий значения плотности, которые я имею, я хотел бы знать!

5
задан Jason Sundram 26 April 2011 в 15:13
поделиться

2 ответа

Привет, Уилл, heatmap.py - это я. Ваш запрос является достаточно распространенным и находится в моем списке, к которому нужно обратиться. Я еще не совсем уверен, как это сделать в целом; в тепловой карте.py, было бы просто иметь размер точки dotsize вместо глобального dotsize, как сейчас, но я не уверен, что это удовлетворит истинную потребность. Я планирую выпустить его летом 2010 года, но вы, вероятно, сможете сделать этот мод самостоятельно.

Вы можете попробовать поискать инструменты Kernel Density Estimator ; это то, что статистики называют тепловыми картами. R имеет несколько хороших встроенных инструментов, которые вы можете использовать, которые могут удовлетворить ваши потребности быстрее.

удачи!

4
ответ дан 14 December 2019 в 13:33
поделиться

Я думаю, что один из способов сделать это - создать (больший) список кортежей, каждая точка которого повторяется в соответствии с плотностью в этой точке. Точка с высокой плотностью представлена ​​множеством точек друг над другом, а точка с низкой плотностью - несколькими точками. Поэтому вместо: [(120.7, 82.5, 2), (130.6, 81.5, 1)] вы должны использовать [(120.7, 82.5), (120.7, 82.5), (130.6, 81.5 )] (довольно скучный набор данных).

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

def dens2points (dens_tups):
    min_dens = dens_tups[0][2]
    for tup in dens_tups:
        if (min_dens > tup[2]):
           min_dens = tup[2]
    print min_dens

    result = []
    for tup in dens_tups:
        for i in range(int(tup[2]/min_dens)):
            result.append((tup[0],tup[1]))
    return result

if __name__ == "__main__":
    input = [(10, 10, 20.0),(5, 5, 10.0),(10,10,0.9)]
    output = dens2points(input)
    print input
    print output

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

1
ответ дан 14 December 2019 в 13:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: