To jest pytanie uzupełniające do mojego poprzedniego. Czy możesz zasugerować dobrze napisane teksty wprowadzające na temat rzutów układu współrzędnych?
Załóżmy, że pracuję z projekcją mapy CH1903, która, o ile wiem, jest zgodna, ale nie w równej odległości. Znaczenie, kąty (kształt) zostały zachowane, ale nie obszary, odległości ani skala. (Przynajmniej nie zostały dokładnie zachowane ). Na razie w porządku.
Zastanawiam się, jakie obliczenia wykonuje ArcGIS, gdy chcę teraz obliczyć odległość między dwoma punktami. W ArcObjects mógłbym używać IProximityOperator
interfejsu w następujący sposób:
IPoint a = ...,
b = ...;
double distance = ((IProximityOperator)a).ReturnDistance(b);
Pytanie: Kiedy pracuję z układem odniesienia, który nie zachowuje dokładnie odległości, co ArcGIS zrobiłby, gdybym zapytał go o odległość między dwoma punktami (jak pokazano powyżej)?
Czy po prostu wykonuje niektóre matematykę pitagorejską (a 2 + b 2 = c 2 ), aby uzyskać odległość, co oznacza, że zwrócona odległość będzie tak dokładna, jak pozwala na to rzutowanie?
A może zrobi coś bardziej skomplikowanego, na przykład jakąś formę ponownej projekcji, aby uzyskać dokładniejszy dystans?
( To samo pytanie, ale bardziej ogólnie: po projekcji geometrii, czy ArcGIS wykonuje wszystkie obliczenia po prostu w przestrzeni euklidesowej, czy też zastosowana projekcja mapy nadal wpływa na obliczenia odległości, kątów, obszarów itp.?)
Odpowiedzi:
Jeśli chcesz mieć stabilną metodę obliczania odległości geodezyjnych, polecam owijkę Richiego Carmichaela do silnika projekcyjnego ESRI .
Aktualizacja: Właśnie wypróbowałem kod Richiego z ArcGIS 10.0 na Vista64 i otrzymałem wyjątek po wywołaniu
LoadLibrary
. Zajmę się tym później.Na razie jednak oto kod w odpowiedzi na pytania w komentarzach do innej odpowiedzi.
Kod porównuje IProximityOperator dla punktów z odniesieniami przestrzennymi i bez nich. Następnie pokazuje, jak użyć azymutalnej projekcji równoodległej (gdzie pierwszy punkt jest punktem styczności), aby znaleźć wielką odległość okręgu.
Oto wynik:
Myślę, że byłoby interesujące przetestować to w stosunku do biblioteki dll silnika projekcyjnego (pe.dll). Opublikuje wyniki, jeśli kiedykolwiek uda mi się uruchomić kod Richiego.
Aktualizacja: po zmianie kodu Richiesa na kompilację dla x86 uruchomiłem go. Ciekawe ... odległość, jaką daje mi wielki okrąg, to 1960273.80162999 - znacząca różnica od tej zwróconej z powyższej metody azymutalnej w równej odległości.
źródło
W ArcGIS 10 sprawdź IGeometryServer2, który ma teraz GetDistanceGeodesic (odległość geodezyjna między dwiema geometriami), GetLengthsGeodesic (zwróć długości geodezyjne każdej polilinii) i DensifyGeodesic (zagęszczenie polilinii poprzez wykreślenie punktów wzdłuż linii geodezyjnych łączących wierzchołki, używa IPolycurve4: : GeodesicDensify).
Jak wspomniano w innych odpowiedziach, ArcGIS nadal wykorzystuje głównie obliczenia płaskie.
Melita Kennedy
Trochę komentarza do innych odpowiedzi (jeszcze za mało powtórzeń, aby komentować bezpośrednio!).
Azymutalna projekcja azymutalna w równej odległości obsługuje elipsoidy. Kod GreatCircleDist tworzy PCS, który wykorzystuje GCS oparty na elipsoidzie / sferoidie, dlatego odległości od środka / punktu początkowego będą odległościami geodezyjnymi, a nie dużymi odległościami od okręgu. Można to również uprościć. Znamy rzutowane współrzędne pierwszego punktu, ponieważ jest to środek rzutu: 0,0. Tak więc tylko drugi punkt musi zostać wyświetlony. Można wtedy zastosować uproszczoną funkcję EuclidianDistance.
Sprawdziłem wyniki pod kątem funkcji geodezyjnych pe.dll i pasowało. Wygląda na to, że aplikacja Richiego używa kuli, więc zwraca duże odległości / współrzędne okręgu w swojej aplikacji testowej. Właśnie dlatego wyniki się nie zgadzają. Nie rozpoznałem wartości promienia; Myślę, że muszę z nim o tym porozmawiać!
źródło
Dokładność każdej odpowiedzi na temat ArcGIS może ulec zmianie w dowolnym momencie - o ile wiemy, nowe procedury zostaną wprowadzone w kolejnym pakiecie serwisowym bez ostrzeżenia i dokumentacji. To powiedziawszy, oprogramowanie ESRI od dawna używa obliczeń euklidesowych ( np . Pitagorasa dla odległości), ilekroć używane są współrzędne rzutowane. Często w obliczeniach takich jak ten, który ilustrujesz, oprogramowanie nie ma nawet dostępu do informacji o projekcji, więc co jeszcze można zrobić?
Twoje pytanie wydaje się sugerować, że obliczenia euklidesowe odległości dla projekcji w jednakowej odległości są prawidłowe. Nic nie może być dalej od prawdy. W przypadku jednopunktowego rzutu równoodległego odległość euklidesowa do punktu bazowego jest równa odległości geodezyjnej; w przypadku projekcji dwupunktowej w jednakowej odległości odległość euklidesowa do każdego punktu bazowego jest równa odległości geodezyjnej. W zamian za te gwarancje zniekształcenie metryczne między wszystkimi innymi parami punktów jest zwykle znacznie zwiększone w porównaniu do innych rzutów, które można wybrać.
źródło