Génération d'une carte thermique de KML ensemble de données de [lat, lon, la densité]

StackOverflow https://stackoverflow.com/questions/2389623

  •  24-09-2019
  •  | 
  •  

Question

Je cherche à construire un fichier KML statique (Google balisage de la Terre) qui affiche un rendu de style heatmap de quelques ensembles de données données sous la forme de [latitude, longitude, densité] tuples.

Un ensemble de données très simple que j'ai est la densité de population.

Mes exigences sont les suivantes:

  • Doit être capable de nourrir des données pour une donnée lat, lon
  • Doit être en mesure de préciser la densité des données à cette latitude, LON
  • Doit exporter vers KML

Les exigences sont la langue agnostique pour ce projet que je vais générer ces fichiers hors connexion afin de construire le KML utilisé ailleurs.

Je l'ai regardé quelques projets, notamment heatmap.py , qui est un port de < a href = "http://code.google.com/p/gheat/" rel = "nofollow noreferrer"> gheat en Python avec export KML. Je l'ai frappé un mur de briques dans le sens que les projets que j'ai trouvé à ce jour reposent tous sur la construction du heatmap de la densité des points [lat, introduits dans] lon l'algorithme.

Si je manque une façon évidente d'adapter mes ensemble de données pour alimenter en seulement les tuples mais ajuster la façon dont je les flux en utilisant les valeurs de densité [lat, lon] Je, j'aimerais savoir!

Était-ce utile?

La solution

Hey Will, heatmap.py est moi. Votre demande est un assez-commun et est sur ma liste de choses à aborder. Je ne suis pas encore tout à fait sûr de savoir comment le faire d'une façon générale; dans le langage heatmap.py, il serait facile d'avoir un dotsize par point au lieu d'un dotsize global comme il est maintenant, mais je ne suis pas certain que cela va répondre à la véritable nécessité. Je vise un communiqué de l'été 2010, mais vous pourriez probablement faire vous-même mod.

Vous pouvez essayer la recherche de noyau Densité estimateur des outils ; c'est ce que les statisticiens appellent heatmaps. R a quelques bons outils intégrés que vous pouvez utiliser qui pourrait satisfaire votre besoin plus rapidement.

bonne chance!

Autres conseils

Je pense qu'une façon de le faire est de créer une (plus grande) la liste des tuples avec chaque point répété en fonction de la densité en ce point. Un point avec une haute densité est représentée par un bon nombre de points sur le dessus de l'autre tout en un point avec une faible densité a peu de points. Ainsi, au lieu de: [(120.7, 82.5, 2), (130.6, 81.5, 1)] vous utiliseriez [(120.7, 82.5), (120.7, 82.5), (130.6, 81.5)] (un ensemble de données assez terne).

Un problème possible est que vos densités peuvent bien être flotteurs, pas entiers, vous devez donc normaliser et autour des données. Une façon de faire la conversion est quelque chose comme ceci:

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

(ce qui est très pythonique, mais semble fonctionner pour le simple cas de test). Ce sous-programme doit convertir vos données en une forme qui est acceptée par heatmap.py. Avec un peu d'effort, je pense que le sous-programme peut être réduit à deux lignes.

Je mis à jour le script heatmap.py de sorte que vous pouvez spécifier une densité pour chaque point. Je téléchargé mes modifications à mon blog . Je ne sais pas si ça va faire exactement ce que vous voulez bien!

Cordialement, Alex

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top