Я надеюсь создавать статический KML (разметка Google Earth) файл, который отображает рендеринг heatmap-стиля нескольких наборов определенных данных в форме [lat, lon, плотность] кортежи.
Очень простой набор данных, который я имею, для плотности населения.
Мои требования:
Требования являются агностиком языка для этого проекта, поскольку я буду генерировать эти файлы офлайн для создания KML, используемого в другом месте.
Я посмотрел на несколько проектов, прежде всего heatmap.py, который является портом gheat в Python с экспортом KML. Я врезался в кирпичную стену в том смысле, что проекты, я нашел до настоящего времени всех, полагаются на создание heatmap от плотности [lat, lon] точки, питаемые в алгоритм.
Если я пропускаю очевидный способ адаптировать мой набор данных для питания в просто [lat, lon] кортежи, но корректировка, как я подаю их использующий значения плотности, которые я имею, я хотел бы знать!
Привет, Уилл, heatmap.py - это я. Ваш запрос является достаточно распространенным и находится в моем списке, к которому нужно обратиться. Я еще не совсем уверен, как это сделать в целом; в тепловой карте.py, было бы просто иметь размер точки dotsize
вместо глобального dotsize, как сейчас, но я не уверен, что это удовлетворит истинную потребность. Я планирую выпустить его летом 2010 года, но вы, вероятно, сможете сделать этот мод самостоятельно.
Вы можете попробовать поискать инструменты Kernel Density Estimator ; это то, что статистики называют тепловыми картами. R имеет несколько хороших встроенных инструментов, которые вы можете использовать, которые могут удовлетворить ваши потребности быстрее.
удачи!
Я думаю, что один из способов сделать это - создать (больший) список кортежей, каждая точка которого повторяется в соответствии с плотностью в этой точке. Точка с высокой плотностью представлена множеством точек друг над другом, а точка с низкой плотностью - несколькими точками. Поэтому вместо: [(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. Приложив немного усилий, я думаю, что подпрограмму можно свести к двум строкам.