Wie erstelle ich eine Heat- oder Choropleth-Karte, die in QGis Polygone verwendet?

12

Ich habe mit dem Heatmap-Plugin für QGIS herumgespielt und mich gefragt, ob es möglich ist, mit einem ähnlichen Plugin / Tool, das sowohl Polygone als auch Punkte verwendet, eine Heatmap zu erstellen.

Ich möchte eine Darstellung der Datendichte ähnlich wie das Heatmap-Plugin für Punkte erhalten.

Das folgende Bild ist eine grobe Skizze meines gewünschten Ergebnisses:

Bildbeschreibung hier eingeben

NWT Adam
quelle
3
Haben Sie darüber nachgedacht, Zentroide für Ihre Polygone zu generieren und daraus die Heatmap zu erstellen?
Andytilia
1
Einige weitere Details zu Ihren Daten würden helfen. Was bedeuten die Polygone und wie sind sie verteilt? Können Sie ein Beispielbild posten?
Andytilia
@andytilia: Centroids geben die Abdeckung der Polygone nicht genau wieder. Die Polygone repräsentieren die Ressourcennutzung auf einer Fläche von 1200 m2. Einige Polygone sind winzig und repräsentieren ein gutes Beerenfeld, andere sind riesig und bedecken die Lebensräume von Karibu und Elch. Ich habe versucht, ein hexagonales Gitter zu binning und dann Überlappungen zu zählen ... aber ich bin so ziemlich ein Neuling, also habe ich kein gutes Tutorial gefunden, das ich zu diesem Thema verstehen kann.
NWT Adam
1
siehe QGIS-Heatmap-Plugin qgis.spatialthoughts.com/2012/07/…
rkm
Haben die numerischen Werte eine Bedeutung für Sie oder suchen Sie nur eine hübsche / klare Visualisierung?
underdark

Antworten:

5

Vielleicht können Sie eine Reihe von zufälligen Punkten in Ihren Polygonen erzeugen, es gibt ein QGIS-Tool dafür ? Wenn Sie überlappende Polygone haben, haben Sie eine höhere Dichte in diesem Bereich. Verwenden Sie dann die Heatmap für die Punkte. Sie müssten mehrere Runden laufen, um die optimale Anzahl von Punkten zu finden, da das Ergebnis davon abhängt.

Wenn Ihre Daten die Verteilung einiger ohnehin unscharfer Lebensräume anzeigen, kann dies der realen Situation am nächsten kommen, in der ein Punkt ungefähr ein Exemplar widerspiegelt.

JaakL
quelle
1
+1 Tolle Idee. Das Einzige, was ich hinzufügen würde, ist, am Standort mit den Punktdaten und hexagonalen Polys zu verbinden, nicht übereinstimmende Features zu entfernen und dann Punkte zu generieren, damit Ihre einzelnen Punkte nicht unter allen anderen Punkten ertrinken.
RomaH
Dies scheint das bestaussehendste Ergebnis zu liefern. Vielen Dank an alle, die Lösungen angeboten haben. Ich fühle mich irgendwie schlecht, wenn ich das Kopfgeld nur einer Person gebe, da es eine Reihe guter Lösungen zu geben scheint!
NWT Adam
6

Wenn ich Ihre Frage richtig verstehe, habe ich zuvor etwas Ähnliches getan. musste mich nur erinnern, was ich getan habe.

Dies funktioniert, wenn sich Ihre Polys überlappen UND nicht dieselbe Ebene haben. Wenn sie sich auf derselben Ebene befinden und es möglich ist, sie in separate Ebenen zu verschieben, übernimmt die Zielebene nur einen der Werte.

Der Schlüsselprozess zur Verwendung ist die Join - Attribute von Position unter dem Vector> Daten Mangement - Menü. Geben Sie hier Ihr hexagonales Feld als Zielebene und die Verknüpfungsebene als eines Ihrer Polygone an. Benennen Sie die resultierende Ebene und aktivieren Sie das Optionsfeld Alle Datensätze beibehalten .

Die resultierende Ebene sollte eine Kopie Ihrer hexgonalen Ebene mit allen Zellen sein, die sich mit Ihrer polygonalen Ebene überschnitten haben. Verwenden Sie jetzt für die Interaktion Ihre letzte resultierende Ebene als Zielebene und fügen Sie die nächste Polygonebene hinzu. Nehmen Sie den resultierenden Lasyer und verbinden Sie Ihre nächste Ebene, bis Sie alle Ihre Ebenen verbunden haben.

Ihre letzte Ebene sollte alle Attributfelder der vorherigen Ebenen geerbt haben, und ein Großteil davon könnte NULL lauten.

Hier müssen wir einige der Eingeweide eines Shapefiles spielen. Wenn Sie die Ebene also nicht als Shapefile gespeichert haben, tun Sie dies jetzt. Entfernen Sie die Ebene aus Ihrem Arbeitsbereich in QGIS.

Öffnen Sie die * .dbf-Dateien des Shapefiles in OpenOffice Calc. Verwenden Sie NICHT Excel. Es wird die Datei kaputt machen und es nützt nichts, das hat man auf die harte Tour gelernt. Ordnen Sie die Daten nicht neu an, da dies auch sehr spezifisch für die Reihenfolge der Zeilen in der Datei ist. Stellen Sie sicher, dass die NULL-Werte jetzt Null sind, wenn dies nicht der Fall ist. Ersetzen Sie sie sorgfältig.

Fügen Sie nun das Shapefile in QGIS ein und öffnen Sie die Attributtabelle . Es sollte jetzt Nullen anstelle von NULL anzeigen. Verwenden Sie den Feldrechner und addieren Sie die Felder, die Ihrer Arbeit zugeordnet sind, in einer neuen Spalte.

Jetzt haben Sie ein summiertes Feld, in dem die Werte aller Objektgruppen, die das Zielfeld überlappen, mit einem gewissen Grad an Genauigkeit angezeigt werden sollen. Sie können die Symbologiefunktion verwenden, um Ihre Polygone basierend auf dem Wert Ihres summierten Feldes für eine schöne Choroplethen-Karte einzufärben.

Wenn Sie alle nicht verwendeten Felder in der Datei entfernen möchten. Öffnen Sie einfach die DBF-Datei erneut in Calc und löschen Sie die unerwünschten Spalten nach Belieben. Persönlich würde ich empfehlen, zu lernen, wie ich es oft mache, um es mir bequem zu machen, in ein Shapefile zu gehen.

RomaH
quelle
Leider überlappen sich Hunderte von Polygonen in derselben Ebene. Können Sie einen Weg finden, dies zu umgehen, ohne diese in ein paar hundert Schichten aufzuteilen?
NWT Adam
1
Sie können mit PostGIS ein Polygon-Overlay erstellen (falls Sie es verwenden), das Ihre überlappenden Polys aufteilt. gis.stackexchange.com/questions/83/… Prehaps jemand mit besserem SQL-fu kann uns hier helfen und wie man die resultierenden Polys dazu bringt, ihre Werte zu erben, ich bin nicht so gut darin.
RomaH
1
Eine andere Option, die ich ebenfalls sehr empfehlen möchte, ist vielleicht, dass es Zeit ist, Ihre genaue Herangehensweise an Ihr Problem zu überdenken. Welche Daten versuchen Sie abzubilden? Gibt es einen Grund für die Annahme, dass der Wert in allen Polygonen homogen ist? Würden sich überlappende Polygone akkumulativ wirken? Sofern Sie keine guten Beweise haben, um diese Dinge vorzuschlagen, könnte die Verwendung dieser Karte für jede Art von Vorhersagemodell auf wackeligem Boden sein. Denken Sie nur gründlich darüber nach, ob Sie vielleicht die richtige Lösung haben, aber vielleicht einen besseren Weg finden, sie zu modellieren oder abzubilden.
RomaH
1
Danke für den PostGIS-Vorschlag. Ich werde es mir ansehen, aber ich lerne gerade, wie man PostGIS benutzt. Was die Neubewertung der Frage angeht ... Ich verstehe, was Sie meinen, bin mir aber nicht sicher, wie ich mir sonst vorstellen könnte, was wir auszudrücken versuchen. Unsere Daten repräsentieren alle Bereiche, die die Ältesten der Gemeinschaft und die Benutzer von Ressourcen aus kultureller Sicht als produktiv oder wichtig erachten. Wir verstehen, dass die Wertekarte nicht im gesamten Polygon homogen ist, aber nah genug an dem Punkt, den wir mit der Karte ausdrücken möchten.
NWT Adam
1
Daumen runter auf alles manuelle in QGIS - besonders wenn Sie anfangen, sich mit // Tonnen // Shapefiles zu beschäftigen, könnten Sie in eine wirklich frustrierende Position geraten. Sie werden es nicht bereuen, Ihr SQL-fu verwendet zu haben, sei es mit dem PostGIS-Plugin oder dem GRASS-Plugin (siehe meine Antwort unten: gis.stackexchange.com/a/42188/7689 ).
Egbutter
4

Dies ist ein allgemeiner Workflow mit Rastern. Ich kenne die Einzelheiten nicht, um dies in QGIS zu erreichen.

  1. Verwenden Sie das Schnittwerkzeug, um eine neue Vektorebene der Bereiche mit Polygonüberlappung zu erstellen
  2. Konvertieren Sie Ihre Vektorebenen, einschließlich der Überlappungsebene, in Raster
  3. Verwenden Sie Rasterarithmetik (wahrscheinlich Addition), um die Raster zu kombinieren
  4. Das Ergebnis sollte ein Raster sein, das wie eine Heatmap aussieht

Mit Alpha / Null-Werten und / oder Ebenentransparenz können Sie das Raster auf einer beliebigen Grundkarte überlagern.


quelle
Nachdem ich diesen Arbeitsablauf durchlaufen habe, verbleibt ein großer grauer Block, der die Ausdehnung des neuen Rasters abdeckt. Wie kann ich das wie eine Heatmap aussehen lassen?
NWT Adam
1
Sind den Pixeln im endgültigen Raster unterschiedliche Werte zugewiesen? Ein paar Gedanken: Möglicherweise müssen Sie beim Erstellen der Raster eine feinere Auflösung (mehr Pixel) angeben. Die Raster sollten die gleiche Größe und Auflösung haben. Möglicherweise müssen Sie die Farbzuordnung des resultierenden Rasters strecken oder ändern, um hellere Farben für größere Werte anzuzeigen.
Okay, ich habe die Farbkarte eingerichtet, aber ich bekomme nur zwei Farben: Blau (Wert 0) und Rot (Wert 2). Der Rotwert deckt den Bereich meiner Vektor-Originalebenen und meiner Überlappungsebene ab. Ich vermute, dass die Ebenen beim Rastern einen Wert von 1 und nicht von jedem Polygon erhalten haben. Dann, als die Raster hinzugefügt wurden, war der Gesamtwert gleich 2. Wie werden die Werte auf der Polygonebene und nicht auf der Ebenenebene beibehalten / hinzugefügt?
NWT Adam
das Raster mit der feineren Auflösung sollte helfen
Wie erstelle ich ein Raster mit einer feineren Auflösung?
NWT Adam
4

Versuchen Sie dies stattdessen. Wenn es Ihren Anforderungen entspricht, ist es keine rechnerische Lösung für das Dataset. Wenn Sie jedoch nach einer einfachen Infografik-Lösung suchen, können Sie dies stattdessen versuchen.

Verknüpfen Sie Attribute nach Position, wobei Ihre x-Eckzellen als Ziel und Ihre Punktdaten als Verknüpfung dienen. Wählen Sie diese Option, um alle Funktionen beizubehalten. Setzen Sie die Symbologie auf die Zellen mit dem geerbten Wert auf die gewünschte Farbe und setzen Sie die Transparenz auf etwa 50%.

Stellen Sie dann auf Ihrer Ebene mit den Kreis-Polys die Symbologie auf die gleiche Farbe und Transparenz ein. Platzieren Sie das Kreispoly vor dem Zellenpoly. Dies wird die Illusion einer erhöhten Sättigung erzeugen, wenn der Wert zunimmt.

Wenn Sie möchten, können Sie auch die Linien aller Polys und der darüber liegenden Überlagerung extrahieren, damit die Konturen der Unterebenen nicht von den anderen Ebenen überfärbt werden.

Sie müssen mit den Farben und der Transparenz spielen, um die beste Lösung zu finden. Ich finde, die gleichen Farben sehen am besten aus, aber experimentieren.

RomaH
quelle
4

Ich schlage vor, dass Sie das GRASS-Plugin verwenden - QGIS hat eine ziemlich eingeschränkte Funktionalität (und warum das Rad in Python neu erfinden, wenn es bereits Software wie GRASS gibt?):

v.in.ogr.qgis

[Je nachdem, ob Ihre Polygone bereits einen Wert haben, sind möglicherweise die nächsten zwei Zeilen erforderlich.]

v.db.addcol 
v.db.update_const 

Hier addieren wir die Überlappung in den Polygonen und erstellen dann das Raster basierend auf diesen Spalten

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

v.out.ogr [r.out.ogr]
Egbutter
quelle
3

Bei einfachem QGIS kann es schwierig sein, benutzerdefinierte Skripte zu erstellen oder eine räumliche Datenbank wie PostGIS oder Spatialite zu verwenden. Ich würde mit PostGIS regelmäßige Punktraster erstellen oder als CSV-Textdatei generieren und diese importieren. Zeichnen Sie dann mit st_buffer einen Kreis um jeden Punkt oder mit ST_MakeEnvelope Rechtecke und zählen Sie alle überlappenden Bereiche jedes Puffers. Dann möchten Sie wahrscheinlich alle 0-Werte entfernen, wenn dies "keine Daten" bedeutet. Schließlich können Sie eine Heatmap für das Raster erstellen, indem Sie den Zähler als Gewichtungsfeld verwenden.

Sie müssen mit verschiedenen Rasterauflösungen experimentieren, um eine optimale zu finden. Im Wesentlichen ist es dem von Kevin vorgeschlagenen Raster-Ansatz sehr ähnlich, nur in der Vektorwelt zu bleiben.

JaakL
quelle