Comment créer une carte de chaleur ou de choroplèth qui utilise des polygones dans QGis?


12

J'ai joué avec le plugin heatmap pour QGIS et je me demande s'il est possible de faire du heatmap avec un plugin / outil similaire qui utilise des polygones ainsi que des points?

Je voudrais obtenir une représentation de la densité des données de la même manière que le plugin heatmap le fait avec des points.

L'image suivante est un croquis approximatif de mon résultat souhaité:

entrez la description de l'image ici


3
Avez-vous pensé à générer des centroïdes pour vos polygones et à construire la carte thermique à partir de ceux-ci?
andytilia

1
Quelques détails supplémentaires sur vos données pourraient vous aider. Que représentent les polygones et comment sont-ils distribués? Pouvez-vous poster un exemple de photo?
andytilia

@andytilia: les centroïdes ne représentent pas exactement la couverture des polygones. Les polygones représentent l'utilisation des ressources dans une zone de 1200 m2. Certains polygones sont minuscules représentant une bonne parcelle de baies et d'autres sont énormes couvrant les habitats du caribou et de l'orignal. J'ai cherché à regrouper une grille hexagonale, puis à compter les chevauchements ... mais je suis à peu près un noob, donc je n'ai pas pu trouver un bon tutoriel que je puisse comprendre à ce sujet.
NWT Adam,

1
voir le plugin QGIS heatmap qgis.spatialoughtts.com/2012/07/…
rkm

Les valeurs numériques ont-elles une signification pour vous ou cherchez-vous simplement une visualisation jolie / claire?
underdark

Réponses:


5

Peut-être que vous pouvez générer un ensemble de points aléatoires dans vos polygones, il existe un outil QGIS pour cela ? Si vous avez des polygones qui se chevauchent, vous en avez une densité plus élevée dans cette zone. Utilisez ensuite une carte thermique pour les points. Vous devrez exécuter plusieurs tours pour trouver le nombre optimal de points, car le résultat en dépend.

Si vos données montrent la distribution de certains habitats, qui est de toute façon floue, cela pourrait être le plus proche de la situation réelle où un point reflète environ un spécimen.


1
+1 Excellente idée. La seule chose que j'ajouterais est de se joindre à l'emplacement avec les données de points et les polys hexagonaux, de se débarrasser de toutes les fonctionnalités qui ne correspondent pas, puis de générer des points en cela, afin que vos points uniques ne se noient pas parmi tous les autres points.
RomaH

Cela semble donner le meilleur résultat. Merci à toutes les personnes qui ont proposé des solutions. Je me sens un peu mal de donner la prime à une seule personne car il semble y avoir un certain nombre de bonnes solutions!
NWT Adam

6

Si je comprends bien votre question, j'ai déjà fait quelque chose de similaire; je n'avais qu'à me rappeler ce que j'avais fait.

Cela fonctionnera si vos polys se chevauchent ET pas la même couche. S'ils se trouvent sur le même calque et que c'est possible, déplacez-les vers des calques séparés, si vous ne le faites pas, le calque cible héritera simplement d'une des valeurs.

Le processus clé à utiliser est les attributs de jointure par emplacement dans le menu Vector> Data Mangement . Spécifiez ici votre champ hexagonal comme couche cible et la couche de jointure comme l'un de vos polygones. Nommez votre couche résultante et cochez la case d'option pour Conserver tous les enregistrements .

La couche résultante doit être une copie de votre couche hexgonale avec toutes les cellules qui ont intersecté votre couche polygonale. Maintenant, pour l'interaction, utilisez votre dernière couche résultante comme couche cible et joignez la couche de polygones suivante. Prenez le laser résultant et rejoignez votre couche suivante jusqu'à ce que vous ayez rejoint toutes vos couches.

Votre couche finale devrait avoir hérité de tous les champs d'attributs des couches précédentes et une grande partie peut indiquer NULL.

C'est là que nous devons jouer dans certains des entrailles d'un fichier de formes, donc si vous n'avez pas enregistré le calque en tant que fichier de formes, faites-le maintenant. Et supprimez la couche de votre espace de travail dans QGIS.

Ouvrez les fichiers * .dbf du fichier de formes dans OpenOffice Calc, N'utilisez PAS Excel. Il va fausser le fichier et il est inutile, a appris que la dure. Et ne réorganisez pas les données, elles sont également très spécifiques dans l'ordre des lignes du fichier. Vérifiez que les NULL sont maintenant des zéros s'ils ne le sont pas, remplacez-les soigneusement.

Insérez maintenant le fichier de formes dans QGIS et ouvrez la table d'attributs . Il devrait maintenant afficher des zéros au lieu de NULL. Utilisez le calculateur de champs et additionnez les champs qui sont affectés à votre travail dans une nouvelle colonne.

Vous disposez maintenant d'un champ additionné qui devrait afficher avec un degré de précision les valeurs de toutes les collections d'entités chevauchant le champ cible. Vous pouvez utiliser la fonction Symbologie pour colorer vos polygones en fonction de la valeur de votre champ additionné pour une belle carte choroplèth.

Si vous souhaitez supprimer tous les champs inutilisés du fichier. Il suffit d'ouvrir à nouveau le fichier dbf dans Calc et de supprimer les colonnes indésirables à volonté. Personnellement, je conseillerais d'apprendre à me familiariser avec un fichier de formes comme je le fais souvent.


Malheureusement, j'ai des centaines de polygones qui se chevauchent dans la même couche. Pouvez-vous voir un moyen de contourner cela sans les séparer en quelques centaines de couches?
NWT Adam

1
Vous pouvez créer une superposition de polygones avec PostGIS (si vous l'utilisez) qui décompose vos polys superposés. gis.stackexchange.com/questions/83/… Peut-être que quelqu'un avec un meilleur SQL-fu peut nous aider ici et comment faire en sorte que les polys résultants héritent de leurs valeurs, je ne suis pas trop bon dans ce domaine.
RomaH

1
Une autre option, que je suggérerais fortement également, est peut-être qu'il est temps de repenser votre approche exacte de votre problème. Quelles données essayez-vous de cartographier? Y a-t-il une raison de supposer que la valeur serait homogène dans tous les polygones? Le polygone qui se chevaucher aurait-il réellement des effets cumulatifs? Sauf si vous avez de bonnes preuves pour suggérer ces choses, l'utilisation de cette carte pour tout type de modélisation prédictive peut être sur un terrain instable. Réfléchissez bien, vous pourriez avoir la bonne solution mais vous pourriez découvrir une meilleure façon de la modéliser ou de la cartographier.
RomaH

1
Merci pour la suggestion PostGIS. Je vais y jeter un coup d'œil, mais je commence juste à savoir comment utiliser PostGIS. Quant à réévaluer la question ... Je vois ce que vous voulez dire, mais je ne sais pas comment autrement je pourrais visualiser ce que nous essayons d'exprimer. Nos données représentent tous les domaines que les aînés de la communauté et les utilisateurs des ressources considèrent comme productifs ou importants d'un point de vue culturel. Nous comprenons que la carte de valeur ne soit pas homogène dans tout le polygone, mais elle est suffisamment proche pour le point que nous voulons exprimer avec la carte.
NWT Adam

1
Thumbs down à quoi que ce soit manuel dans qgis - en particulier une fois que vous commencez à traiter avec // tonnes // de fichiers de formes, vous pourriez vous retrouver dans une position vraiment frustrante. Vous ne regretterez pas d'utiliser votre SQL-fu, que ce soit avec le plugin postGIS ou le plugin GRASS (voir ma réponse ci-dessous: gis.stackexchange.com/a/42188/7689 ).
egbutter

4

Il s'agit d'un flux de travail général utilisant des rasters. Je ne connais pas les détails pour l'accomplir dans QGIS.

  1. Utilisez l'outil d'intersection pour créer une nouvelle couche vectorielle des zones de chevauchement des polygones
  2. Convertissez vos calques vectoriels, y compris le calque de chevauchement, en rasters
  3. Utilisez l'arithmétique raster (probablement en plus) pour combiner les rasters
  4. Le résultat doit être un raster qui ressemble à une carte thermique

Les valeurs alpha / nulles et / ou la transparence des couches vous permettraient de superposer le raster sur n'importe quel fond de carte.


Après avoir parcouru ce flux de travail, il me reste un grand bloc gris couvrant l'étendue du nouveau raster. Comment puis-je obtenir ceci pour ressembler à une carte thermique?
NWT Adam

1
Y a-t-il des valeurs différentes attribuées aux pixels dans le raster final? Quelques réflexions: Vous devrez peut-être spécifier une résolution plus fine (plus de pixels) lors de la création des rasters; les rasters doivent avoir la même taille et la même résolution; vous devrez peut-être étirer ou modifier la palette de couleurs du raster résultant pour afficher des couleurs plus lumineuses pour des valeurs plus grandes.

D'accord, j'ai configuré la palette de couleurs, mais je n'obtiens que deux couleurs bleu (valeur 0) et rouge (2), la valeur rouge couvre la zone de mes calques vectoriels d'origine et mon calque de chevauchement. Je suppose que chacune des couches a reçu une valeur de 1 plutôt que chaque polygone lors de leur tramage. Puis, lorsque les rasters ont été ajoutés, la valeur totale était égale à 2. Comment obtenir / maintenir les valeurs au niveau du polygone plutôt qu'au niveau de la couche?
NWT Adam

le raster de résolution plus fine devrait aider

Comment créer un raster à résolution plus fine?
NWT Adam

4

Essayez-le à la place, s'il correspond à vos besoins, ce n'est pas une solution de calcul pour l'ensemble de données, mais si vous cherchez simplement une solution infographique, vous pouvez l'essayer à la place.

Joignez les attributs par emplacement, avec vos cellules hexagonales comme cible et vos données de point comme jointure. Choisissez de conserver toutes les fonctionnalités. Définissez la symbologie des cellules avec la valeur héritée sur la couleur souhaitée et définissez la transparence sur quelque chose comme 50%.

Ensuite, sur votre calque avec les polys de cercle, définissez leur symbologie sur la même couleur et la même transparence. Placez le cercle poly devant le poly cellule. Cela donnera l'illusion d'une saturation accrue à mesure que la valeur augmente.

Si vous le souhaitez, vous pouvez également extraire les lignes de tous les polys et superposer sur le dessus afin que les contours des sous-couches ne semblent pas être colorés par les autres couches.

Vous devrez jouer avec les couleurs et la transparence pour trouver la meilleure solution. Je trouve que les mêmes couleurs sont plus belles mais expérimentées.


4

Je vous suggère d'utiliser le plugin GRASS - QGIS a des fonctionnalités assez limitées (et pourquoi réinventer la roue en python alors qu'un logiciel comme GRASS existe déjà?):

v.in.ogr.qgis

[les deux lignes suivantes peuvent être nécessaires, selon que vos polygones ont déjà une valeur]

v.db.addcol 
v.db.update_const 

c'est là que nous additionnons le chevauchement dans les polygones puis faisons le raster en fonction de ces colonnes

v.to.db ... qcolumns=sum(col_with_polygon_value)
v.to.rast.attr

v.out.ogr [r.out.ogr]

3

Avec QGIS ordinaire, cela pourrait être délicat, vous pourriez avoir besoin de scripts personnalisés ou utiliser une base de données spatiale comme PostGIS ou Spatialite. Je voudrais créer une grille de points régulière avec PostGIS ou générer en tant que fichier texte CSV et l'importer. Ensuite, dessinez un cercle autour de chaque point avec st_buffer ou des rectangles avec ST_MakeEnvelope et comptez toutes les zones qui se chevauchent de chaque tampon. Ensuite, vous voudrez probablement supprimer toutes les valeurs 0, si cela signifie "pas de données". Enfin, vous pouvez faire une carte thermique pour la grille, en utilisant le compteur comme champ de poids.

Vous devez expérimenter différentes résolutions de grille pour en trouver une optimale. En substance, il est très similaire à l'approche raster suggérée par Kevin, restant simplement dans le monde vectoriel.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.