Ich habe zwei Ebenen in ArcGIS: Eine ist ein Vektorpunkt und die andere ist eine Rasterebene. Ich möchte den Wert des Rasterdatengitters an den Vektorpunkt anhängen. Das Problem ist, dass der Vektorpunkt von allen vorhandenen Rastergittern mit Wert entfernt ist, sodass der Befehl "Beispiel" keinen Wert für diesen Vektorpunkt zurückgibt.
Meine Frage lautet also: Wie kann ich die nächste Rasterzelle mit einem Vektorpunkt finden und den Wert aus der Zelle extrahieren?
Eigentlich muss ich zwei Dinge tun:
- Identifizieren Sie den Outliner innerhalb eines Waldläufers (normalerweise 1-2 Zellen von meinem vorhandenen Raster entfernt).
- Weisen Sie ihnen einen Wert aus dem nächstgelegenen Raster zu, wenn sie sich in einem Bereich befinden
Bearbeitet: Ich habe ungefähr 3000 Vektorpunkte und mein Problem ist folgendes:
Ich muss den Rasterwert basierend auf den Positionen an die Vektorpunkte anhängen. Ich habe das Tool "Sample" verwendet und es funktioniert für die meisten Punkte gut.
Es gibt jedoch eine solche Situation
Der rechte Punkt kann den Wert aus dem Raster abrufen ("Beispiel" funktioniert), der linke Punkt jedoch aufgrund von Ausrichtungsproblemen nicht.
Raster zu Polygon funktioniert nicht, da die Fehlermeldung angezeigt wird, dass ich sie nicht in Vektoren umwandeln kann, da sie sich außerhalb der Domäne befinden. Auch ich habe solche Punkte
Diese oberen Punkte sollten keine Werte erhalten, da sie zu weit vom Raster entfernt sind.
Ich dachte an Möglichkeiten, um das Problem zu umgehen:
Schritt 1. Machen Sie zuerst die "Probe"
Schritt 2. Wählen Sie den Nullwert nach den "Beispiel" -Operationen aus
Schritt 3. Erstellen Sie Pufferzonen (innerhalb von 1 Dezimalgrad) basierend auf den Nullpunkten
Schritt 4. Zonenstatistik verwenden? ? oder andere Werkzeuge, um alle Rasterzellen im Puffer zu durchlaufen, die nächste zu finden, ihren Wert zu extrahieren und in den Vektorpunkt zu setzen.
Ich stecke in Schritt 4 fest. Ich weiß nicht, mit welchem Tool in ArcSDK ich diese Funktion ausführen kann.
Oder sonst ... Hast du eine bessere Idee, damit umzugehen?
Ich habe 20 Rasterebenen wie diese und möchte sie automatisch erstellen (mit Model Builder und ArcObject).
quelle
Sample
Werkzeugs keine Werte erhalten .Antworten:
Ein Rasterumriss nimmt ein Rechteck ein, das unten links vom Ursprung begrenzt wird und Koordinaten (z. B.) (x0, y0) und oben rechts von (x1, y1) aufweist. Dies sind Eigenschaften, die von jedem Raster leicht entdeckt werden können. Mit diesen Informationen können Sie Punkte außerhalb der Rasterausdehnung auf den nächstgelegenen Punkt an der Rastergrenze verschieben und die Rasterwerte an den neuen Positionen extrahieren.
Aufgaben wie diese lassen sich oft unter Berücksichtigung geringerer Abmessungen leicht lösen . Die Ausdehnung eines eindimensionalen Rasters ist nur ein Intervall von Zahlen, beispielsweise von x0 bis x1> x0, konventionell geschrieben [x0, x1]. Angenommen, Sie möchten den nächstgelegenen Punkt in diesem Intervall zu einer bestimmten Zahl x finden. Es gibt drei Fälle: x <x0 (x ist links), x0 <= x <= x1 (x ist im Intervall) und x1 <x (x ist rechts). Offensichtlich sind die nächsten Punkte x0, x bzw. x1. Eine Formel für dieses Ergebnis lautet
x -> min (max (x, x0), x1),
Wie Sie sehen können, betrachten Sie jeden der drei Fälle separat.
Da die Ausdehnung eines Rasters das kartesische Produkt zweier Intervalle ist, [x0, x1] * [y0, y1], funktioniert dieselbe Formel in zwei Dimensionen. Wenden Sie es einfach auf jedes Intervall an. Somit können die Koordinaten des projizierten Punktes (beispielsweise in einem Feldrechner) als berechnet werden
(x, y) -> (min (max (x, x0), x1), min (max (y, y0), y1).
Hier ist diese Formel in Aktion mit 100 Punkten, die zufällig um und innerhalb der Ausdehnung eines Gitters platziert werden:
Die gestrichelten Linien ordnen visuell Punkte außerhalb der Ausdehnung den Orten zu, an denen sie verschoben werden.
Erstellen Sie aus diesen berechneten Koordinaten eine Punktebene und wenden Sie das
Sample
Werkzeug an, um die Rasterwerte zu extrahieren. Verbinden Sie die Ergebnisse wieder mit der ursprünglichen Punktebene.Als eine praktische Sache , um Probleme mit der Gleitkommarundung zu vermeiden , dass die neuen Punkte aus, die innerhalb des Rasters Ausmaß halten könnte, wäre es klug x0 und y0 etwas größer als die wahre Herkunft zu machen sein (Sie die Hälfte der Zellengröße zu ihnen hinzufügen möchte ) und in ähnlicher Weise x1 und y1 etwas kleiner machen.
Zusammenfassend besteht der Workflow aus der Berechnung von zwei Feldern (den neuen Koordinaten) in der Tabelle der ursprünglichen Punktebene, der Erstellung einer Punktereignisebene aus diesen neuen Koordinaten, der Ausführung des
Sample
Tools und der Durchführung einer Datenbankverknüpfung (keine räumliche Verknüpfung).Wenn Sie viel mehr Vektorpunkte haben als Zellen im Raster , sollten Sie die Lösung von @celenius bevorzugen (der vorschlägt, das Raster in Punkte zu konvertieren und eine räumliche Verknüpfung zu verwenden). Normalerweise haben Raster jedoch viele Zellen - Millionen bis Milliarden - und die Konvertierung in Punkte ist so zeit- und festplattenintensiv, dass mit Vorsicht vorgegangen werden sollte.
Alternativ können Sie die Celenius-Lösung beschleunigen, indem Sie mithilfe einer Rasterberechnung ein ganzzahliges Raster mit Werten nur entlang seiner Grenze erstellen . Konvertieren , dass bis zu einem Punkt Schicht ist schnell und einfach , weil es einige Punkte hat. Nennen wir dies die "Grenzschicht". Probieren Sie das Gitter an den Grenzschichtpunkten aus und kopieren Sie dabei die Gitterwerte in die Attributtabelle der Grenzschicht.
Sample
Entfernen Sie nach dem Ausführen mit der ursprünglichen Punktebene alle Punkte, an denen eine Probe erfolgreich erhalten wurde. Verbinden Sie die Grenzschicht räumlich mit den verbleibenden Punkten, um den Probenahmevorgang abzuschließen.(Eine Möglichkeit , ein Raster mit Werten nur entlang seiner Grenze zu erstellen, besteht darin, eine fokale Nachbarschaftsoperation anzuwenden, die entlang der Grenze fehlschlägt. Beispiele hierfür sind das Auffinden von Steigungen, Hillshading und 3 x 3 Fokusstatistiken für die Nachbarschaft. Dicker Ring von NoData um seinen Rand. Wenn Sie IsNull und SetNull verwenden, um NoData-Zellen zu erkennen und zwischen NoData und Datenzellen zu konvertieren, wird ein Raster voller NoData-Werte erzeugt, außer um die Grenze herum.)
quelle
Sie können das Raster in Punkte konvertieren ( ref ) und dann eine räumliche Verknüpfung der Punkte (von den Rastern) zum Punkt vornehmen.
(Ich habe gerade erfahren, dass hier gestern Punkte räumlich verbunden werden können )
quelle
Sie können die Rasterebene mit dem Werkzeug Raster in Polygon in ein Polygon konvertieren und entweder eine räumliche Verknüpfung ausführen (klicken Sie mit der rechten Maustaste auf die Punktebene und wählen Sie Verknüpfungen und Verknüpfungen - Verknüpfung aus. Wählen Sie im ersten Dropdown-Menü die Option räumliche Verknüpfung aus und wählen Sie die Option aus, die am nächsten liegt Option auf der Readio-Schaltfläche) oder verwenden Sie das Near-Tool.
quelle