Ich habe zwei Punktdatensätze in ArcGIS, die beide in WGS84-Lat / Lon-Koordinaten angegeben sind und die Punkte auf der ganzen Welt verteilt sind. Ich möchte den nächstgelegenen Punkt in Datensatz A zu jedem Punkt in Datensatz B finden und die Entfernung zwischen ihnen in Kilometern ermitteln.
Dies scheint eine perfekte Verwendung des Near-Werkzeugs zu sein, aber das gibt mir Ergebnisse im Koordinatensystem der Eingabepunkte: dh Dezimalgrade. Ich weiß, dass ich die Daten neu projizieren könnte, aber ich stelle ( aus dieser Frage ) fest, dass es schwierig (wenn nicht unmöglich) ist, eine Projektion zu finden, die genaue Entfernungen auf der ganzen Welt liefert.
Die Antworten auf diese Frage legen nahe, die Haversine-Formel zu verwenden, um Entfernungen direkt anhand der Längen- und Breitengradkoordinaten zu berechnen. Gibt es eine Möglichkeit, mit ArcGIS ein Ergebnis in km zu erzielen? Wenn nicht, wie geht man das am besten an?
quelle
Es ist keine ArcGIS-Lösung, aber die Verwendung eines Round Earth-Datenmodells in einer räumlichen Datenbank würde den Trick tun. Die Berechnung der Erdentfernung in einer Datenbank, die dies unterstützt, wäre ziemlich einfach. Ich kann Ihnen zwei Lesungen vorschlagen:
http://postgis.net/workshops/postgis-intro/geography.html
http://blog.safe.com/2012/08/round-earth-data-in-oracle-postgis-and-sql-server/
quelle
Sie benötigen eine Entfernungsberechnung, die mit Lat / Long funktioniert. Vincenty ist derjenige, den ich verwenden würde (0,5 mm Genauigkeit). Ich habe schon einmal damit gespielt und es ist nicht zu schwer zu benutzen.
Der Code ist etwas lang, funktioniert aber. Bei zwei Punkten in WGS wird eine Entfernung in Metern zurückgegeben.
Sie können dies als Python-Skript in ArcGIS verwenden oder es um ein anderes Skript wickeln, das einfach die beiden Punktformdateien durchläuft und eine Distanzmatrix für Sie erstellt. Oder es ist wahrscheinlich einfacher, die Ergebnisse von GENERATE_NEAR_TABLE mit der Suche nach den 2-3 nächstgelegenen Merkmalen zu versorgen (um Komplikationen der Erdkrümmung zu vermeiden).
quelle
Ähnliche Erfahrungen habe ich mit kleinen Datensätzen mit dem Punktabstandstool gemacht. Auf diese Weise können Sie nicht automatisch die nächstgelegenen Punkte in Ihrem Datensatz A finden, sondern erhalten zumindest eine Tabellenausgabe mit nützlichen km- oder m-Ergebnissen. In einem nächsten Schritt können Sie den kürzesten Abstand zu jedem Punkt von Datensatz B aus der Tabelle auswählen.
Dieser Ansatz hängt jedoch von der Anzahl der Punkte in Ihren Datensätzen ab. Bei großen Datenmengen funktioniert dies möglicherweise nicht ordnungsgemäß.
quelle
Wenn Sie hochpräzise und robuste geodätische Messungen benötigen, verwenden Sie GeographicLib , das nativ in mehreren Programmiersprachen geschrieben ist, darunter C ++, Java, MATLAB, Python usw.
Siehe CFF Karney (2013) "Algorithmen für Geodäten" für eine literarische Referenz. Beachten Sie, dass diese Algorithmen robuster und genauer sind als der Algorithmus von Vincenty, beispielsweise in der Nähe von Antipoden.
Um die Entfernung in Metern zwischen zwei Punkten zu berechnen, rufen Sie das
s12
Entfernungsattribut aus der inversen geodätischen Lösung ab . Zum Beispiel mit dem geographiclib- Paket für PythonOder machen Sie eine Komfortfunktion, die auch von Metern in Kilometer umrechnet:
Finden Sie nun den nächstgelegenen Punkt zwischen Listen
A
undB
mit jeweils 100 Punkten:quelle