Mam dwa zestawy danych punktów w ArcGIS, oba podane we współrzędnych WGS84 lat / lon, a punkty są rozmieszczone na całym świecie. Chciałbym znaleźć najbliższy punkt w zbiorze danych A do każdego punktu w zbiorze danych B i uzyskać odległość między nimi w kilometrach.
Wydaje się, że to doskonałe użycie narzędzia Near, ale daje mi to wyniki w układzie współrzędnych punktów wejściowych: stopnie dziesiętne. Wiem, że mógłbym ponownie rzutować dane, ale z tego pytania wynika, że trudno (jeśli nie niemożliwe) znaleźć projekcję, która da dokładne odległości na całym świecie.
Odpowiedzi na to pytanie sugerują użycie wzoru Haversine do obliczenia odległości przy użyciu współrzędnych szerokość-długość geograficzna bezpośrednio. Czy istnieje sposób, aby to zrobić i uzyskać wynik w km za pomocą ArcGIS? Jeśli nie, jaki jest najlepszy sposób na to?
źródło
To nie jest rozwiązanie ArcGIS, ale załatwianie modelu danych Round Earth w bazie danych przestrzennych. Obliczenie odległości do ziemi w bazie danych obsługującej to byłoby dość łatwe. Mogę zasugerować dwa czytania:
http://postgis.net/workshops/postgis-intro/geography.html
http://blog.safe.com/2012/08/round-earth-data-in-oracle-postgis-and-sql-server/
źródło
Potrzebujesz obliczenia odległości, które działa z Lat / Long. Vincenty jest tym, którego użyłbym (dokładność 0,5 mm). Grałem już wcześniej i nie jest to zbyt trudne w użyciu.
Kod jest nieco długi, ale działa. Biorąc pod uwagę dwa punkty w WGS, zwróci odległość w metrach.
Możesz użyć tego jako skryptu Python w ArcGIS lub owinąć go wokół innego skryptu, który po prostu iteruje dwa Point Shapefiles i tworzy dla ciebie macierz odległości. Lub, prawdopodobnie łatwiej jest podać wyniki GENERATE_NEAR_TABLE, znajdując 2-3 najbliższe cechy (aby uniknąć komplikacji krzywizny ziemi).
źródło
Podobne doświadczenia zrobiłem z małymi zestawami danych, korzystając z narzędzia Point Distance. W ten sposób nie możesz automatycznie znaleźć najbliższych punktów w zestawie danych A, ale przynajmniej uzyskać wynik tabeli z przydatnymi wynikami km lub m. W następnym kroku możesz wybrać najkrótszą odległość do każdego punktu zestawu danych B z tabeli.
Ale to podejście zależy od liczby punktów w twoich zestawach danych. Może nie działać poprawnie z dużymi zestawami danych.
źródło
Jeśli potrzebujesz precyzyjnych i solidnych pomiarów geodezyjnych, użyj GeographicLib , który jest natywnie napisany w kilku językach programowania, w tym C ++, Java, MATLAB, Python itp.
Zobacz literaturę CFF Karney (2013) „Algorytmy dla geodetyki” . Zauważ, że algorytmy te są bardziej niezawodne i dokładne niż algorytm Vincenta, na przykład w pobliżu antypodów.
Aby obliczyć odległość w metrach między dwoma punktami, pobierz
s12
atrybut odległości z odwrotnego rozwiązania geodezyjnego . Np. Z pakietem geograficznym dla PythonaLub wykonaj funkcję wygody, która konwertuje również z metrów na kilometry:
Teraz znajdź najbliższy punkt między listami,
A
aB
każda ze 100 punktami:źródło