Ich möchte die Funktionalität des ArcGIS Kernel Density-Tools unbedingt wiederholen. Wie kann ich das tun?
Ich möchte Antworten auf einfach zu installierende freie und Open-Source-Software beschränken - dh QGIS lässt sich problemlos mit GRASS auf allen Plattformen installieren, sodass QGIS + GRASS in Ordnung wäre, SAGA jedoch nicht (leider, da es was kann) das ideale Werkzeug sein).
Ich versuche Dichtekarten von Wildtieren in geschützten Gebieten in QGIS zu erstellen. Die Dichtekarte im folgenden Beispiel wurde in ArcGIS anhand von Punktbeobachtungen von Wildtieren erstellt. Dabei wurden die Rohzahlen der Gruppengröße (ein Feld in der Vektordatei) verwendet, um die Dichte jeder Gitterzelle im Werkzeug "Kerneldichte" (SpatialAnalyst) zu gewichten Ein ausgewählter Suchradius und eine Rasterzellengröße:
In einer früheren Frage zur Dichte wurde vorgeschlagen, das Tool GRASS v.kernel zu verwenden, um das Tool ArcGIS Kernel Density nachzuahmen, aber v.kernel übernimmt nicht die gleiche Aufgabe . Nach einem Blick auf dem Handbuch und (erfolgreich) eine Dichtekarte produziert, so scheint es , dass die v.kernel Funktion funktioniert nur mit Punktdichte , und es gibt keine Möglichkeit , eine Variable für jeden Punkt (wie Rohzählungen), um jeden Punkt zu gewichten .
AKTUALISIEREN
Es scheint verschiedene *.surf.*
Tools in GRASS zu geben, mit denen sich eine Dichtefläche erstellen lässt - und diese akzeptieren eine Gewichtungsspalte oder einen Z-Wert oder werden mit Rastern ausgeführt. @underdark schlug v.surf.rst vor - und die 'zcolumn' wäre meine Gewichtungsvariable (count) - aber ich kann nicht herausfinden, wie ich das Tool auffordern soll, eine bestimmte Rastergröße zu erstellen oder einen bestimmten Radius zu verwenden.
Vorschläge zur Verwendung von v.surf.rst oder einer anderen Methode?
Beispieldaten
x,y,count
431250,8707500,0
418750,8707500,5
413750,8707500,3
411250,8707500,1
408750,8685000,0
411250,8685000,0
416250,8685000,0
416250,8682500,6
411250,8682500,3
418750,8680000,0
433750,8677500,3
421250,8677500,0
423750,8675000,1
431250,8672500,0
428750,8672500,2
426250,8672500,2
423750,8670000,0
Antworten:
Laut Handbuch funktioniert der GRASS-Befehl r.resamp.filter für Raster, die Punktdaten darstellen, genau so wie ArcGIS für Punkt-Layer : Verwenden Sie die
filter=box
Option für ein "einfaches" Raster und diefilter=gauss
Option für den anderen ArcGIS-Kernel. Verwenden Sie das-n
Flag, um die Weitergabe von Nullen zu vermeiden.Beachten Sie, dass Schätzungen der Kerneldichte (auch "Heatmaps" genannt) keine Interpolationen der Daten sind. Der Wert eines KDE an einem Ort x schätzt die Menge eines Wertes " Z " pro Flächeneinheit in der Nähe von x . (Der Radius oder die "Bandbreite" gibt an, was "nahe" bedeutet.) Die Werte von Z müssen nicht an jeder möglichen Stelle auf der Karte definiert werden. Beispielsweise könnte Z die Anwesenheit einer Person darstellen. In diesem Fall gibt KDE die Bevölkerungsdichte an . Die Werte von Z müssen auch nicht kontinuierlich über die Karte variieren. Für die Interpolation wird angenommen, dass Zist an allen Stellen definiert und die Daten sind Beobachtungen der Werte von Z an festgelegten Punkten. Der Interpolator versucht, die nicht beobachteten Werte von Z an allen anderen Punkten vorherzusagen . Dies wäre sinnvoll, wenn Z beispielsweise eine Temperatur oder ein Druck ist, ist jedoch normalerweise unsinnig, wenn Z das Vorhandensein von etwas aufzeichnet oder wenn die Daten eine vollständige Zählung sind. (Überlegen Sie sich im letzteren Fall, was eine Straßendichtekarte für eine Region bedeuten könnte und wie eine "Interpolation" von Straßen über Nichtstraßenbereiche sinnvoll sein könnte.)
quelle
SAGAs Modul 'Kernel Density Estimation' ist genau das, wonach Sie suchen.
Installieren Sie die SAGA-Modul-Schnittstelle in QGIS (im Menü: Plugins -> Python-Plugins abrufen ..) und verwenden Sie das Modul. Viel Glück!
quelle
Eine sehr vereinfachte Methode mit GRASS GIS, die in ArcMap der Punktdichte näher kommt als der Kerneldichte:
Importieren Sie die Punkte mit
r.in.xyz
method = sum in eine Rasterkarte mit einer festgelegten Rasterauflösung (festgelegt mitg.region
).Verwenden Sie
r.neighbors
diese Option, um die Karte mit method = average (Standardeinstellung) zu glätten, und verwenden Sie die Option size, um den Suchradius festzulegen.(Ich habe im Moment keinen Zugang zu GRASS, also habe ich das nicht wirklich ausprobiert!)
quelle
v.in.xyz
undv.neighbors
könnte auch funktionieren. Das Handbuch legt jedoch nicht fest, wie Sie festlegen, welches Attribut verwendet wirdv.neighbors
.Da Sie mehr Anleitung auf v.surf.rst angefordert haben, sind hier meine Eingaben
Zunächst zur Rastergröße - Sie können Plugin -> GRASS -> Aktuelle GRASS-Region bearbeiten und die Ausgabeauflösung einstellen. Ihre Ausgabe von v.surf.rst hat diese Auflösung.
Für den Radius scheint die Spannung der Parameter zu sein. Ich bin kein Experte für diesen Algorithmus, aber ich lese aus dem Handbuch, dies scheint das relevante Bit zu sein
Sie können den Spannungsparameter also ungefähr so verwenden wie den Radiusparameter.
Ausgehend von Ihren Beispieldaten sieht das Ergebnis von v.surf.rst wie folgt aus und erscheint angemessen, da die Zählungen als Gewichtungen für die Interpolation verwendet werden
quelle
Während ich es noch nicht getestet habe, gibt es im Repository von QGIS Contributors ein Plugin namens 'Home Range Estimation with R'. Dies beinhaltet Kernel (Dichte?) Berechnungen. Ich denke, wenn es funktioniert, wäre dies die beste Methode. R führt die reale statistische Methode zur Berechnung der Kerneldichte aus.
Wenn Sie R installiert haben, sollten Sie in der Lage sein, das Plugin zu installieren und es auszuprobieren.
quelle
Wenn Sie ein wenig Java-Programmierung außerhalb von QGIS akzeptieren, können Sie einfach diese Density Map Builder-Bibliothek verwenden .
Mit dem Konstruktor
HeatMapBuilder(int w, int h, int[][] pts, int[] weights)
ist es möglich, für jeden Punkt eine Gewichtung nach Bedarf festzulegen. Das Ausgabebild kann mit dergetImage()
Methode abgerufen und mit a auf Ihrer Festplatte gespeichert werdenImageIO.write("mymap.png")
.Hier ist ein Beispiel für die Ausgabe:
Es ist möglich, die Glättungsstärke und die Farbpalette zu ändern.
quelle