6
votes

Générer une chaleur KML à partir de l'ensemble de données donnée [lat, lon, densité]

Je cherche à construire un fichier statique KML (Google Earth Markup) qui affiche un rendu de type HeatMap de quelques ensembles de données donnés sous la forme de tuples [lat, lon, densité].

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

Mes exigences sont:

  • doit être capable de nourrir des données pour une LAT donnée, LON
  • doit être capable de spécifier la densité des données à ce lat, lon
  • doit exporter vers KML

    Les exigences sont la langue agnostique pour ce projet, car je produirai ces fichiers hors ligne afin de construire le KML utilisé ailleurs.

    J'ai examiné quelques projets, notamment heatmap.py , qui est un port de GHeat en python avec l'exportation KML. J'ai frappé un mur de briques dans le sens où les projets que j'ai trouvés à ce jour comptent tout en s'appuyant sur la construction de la chaleur de la densité des points [lat, lon] introduits dans l'algorithme.

    Si je manque un moyen évident d'adapter mes données définies pour se nourrir uniquement des tuples [LAT, LON], mais également ajuster comment je les nourris à l'aide des valeurs de densité que j'ai, j'aimerais savoir!


0 commentaires

3 Réponses :


1
votes

Je pense à une façon de le faire consiste à créer une liste (plus grande) de tuples avec chaque point répété en fonction de la densité à ce point. Un point avec une densité élevée est représenté par de nombreux points de haut en bas, tandis qu'un point avec une faible densité comporte peu de points. Donc 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 jeu de données assez terne).

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

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


0 commentaires

5
votes

hey will, heatmap.py est moi. Votre demande est une solution assez courante et est sur ma liste de choses à traiter. Je ne suis pas vraiment sûr de la façon de le faire de manière générale; Dans Heatmap.py Parlance, il serait simple d'avoir un PAR-POINT au lieu d'un point de départ global tel qu'il est maintenant, mais je ne suis pas sûr que cela réponde au vrai besoin. Je vis pour une version d'été 2010, mais vous pourriez probablement faire ce mod vous-même.

Vous pouvez essayer de rechercher Gey-href="http://en.wikipedia.org/wiki/kernel_density_estimation" Rel="noreferrer"> estimateur de densité de noyau outils; C'est ce que les statisticiens appellent HeatMaps. R a de bons outils intégrés que vous pouvez utiliser qui pourrait satisfaire votre besoin plus rapidement.

bonne chance!


1 commentaires

J'ai découvert que le zoom 0-9 devrait avoir le sol de plancher, zoom 15-19 ont un plafond et une échelle entre les deux. J'ai trouvé à 0-9, seuls les points de 1 pixels sont viables et à 15-19 ans, il n'a pas de sens d'être plus de 64px. Voyez-vous un moyen d'intégrer cette gamme dans votre méthodologie KML?



2
votes

J'ai mis à jour le script heatmap.py afin que vous puissiez spécifier une densité pour chaque point. Je Téléchargé mes modifications sur mon blog . Je ne sais pas si ça va faire exactement ce que vous voulez!

acclamations, Alex

Mise à jour [13 nov. 2020] J'ai archivé mon blog un moment de retour, de sorte que le lien ne fonctionne plus, alors de référence ici sont les modifications suivantes:

Le fichier diff: xxx

et Un script de démonstration: xxx


0 commentaires