Mam zestaw współrzędnych w lon / lat. Zawsze są co najmniej 3 uporządkowane współrzędne, które tworzą poli (jeśli były rzutowane na płasko). Jak obliczyć minimalne granice dla tych współrzędnych jako zestawu prawidłowych zakresów długości i szerokości geograficznej? („prawidłowy” mam na myśli zakresy, które jednoznacznie uwzględniają antimeridian). Trudno mi wyjaśnić, czego szukam, więc mam zdjęcie.
Przypadek na zdjęciu jest trywialny; po prostu znajdziesz absolutne minimum i maksimum dla wszystkich punktów. Nie działa to jednak we wszystkich przypadkach. Czy istnieje ogólne rozwiązanie?
Edycja: Aby wyjaśnić, co mam na myśli przez „prawidłowy”, powiedzmy, że miałem trzy wartości długości geograficznej w moim zbiorze danych: -76, -135 i 164. Wartości przekraczają antimeridian i chciałbym, aby wynikowe zakresy zostały podzielone: -76 do -180 ORAZ od 164 do 180.
Więcej wyjaśnień. Punkty tworzą wielokąt, więc w niektórych przypadkach wymagany zakres może wynosić od -180 do +180 (tj. Pełne 360 stopni):
Zdjęcie po lewej pokazuje długość czterech współrzędnych, które występują na jednej „połowie” Ziemi. Wyobraź to sobie tak, jakbyś patrzył w dół na biegun północny (czarna kropka). Kolor różowy pokazuje minimalny zakres wzdłużny obejmujący wielokąt (wielokąt jest pokazany między czterema punktami na fioletowo). Przypadek po lewej stronie miałby dwa zakresy podłużne: [-180 do -120] i [135 do 180] (tylko wizualnie ją szacując)
Zdjęcie po prawej pokazuje inny przypadek, w którym punkty biegną dookoła Ziemi. Ten zakres wynosiłby [-180 do 180].
źródło
Odpowiedzi:
Mam nadzieję, że rozumiem pytanie poprawnie ...
Możemy rozwiązać problem długości i szerokości geograficznej osobno, więc wezmę twój przykład z długościami geograficznymi: -76, -135 i 164.
Najpierw zamówiłbym je:
Następnie dodałbym ponownie lewą współrzędną najbardziej po prawej: -135 + 360 = 225
Teraz możemy obliczyć odstępy między współrzędnymi:
Największa szczelina (240) musi być granicą minimalnej ramki ograniczającej, która nie należy do ramki. Linia przerywana to największa część koła, którą możemy oszczędzić. W naszym przykładzie oznacza to, że obwiednia zaczyna się od 164, zawiera -135, a kończy na -76.
źródło
Jest to naprawdę łatwe w JavaScript w interfejsie API Map Google. Oto jak zrobiłbyś to po stronie klienta z tym interfejsem API:
źródło
Myślę, że mogłem znaleźć sposób, aby to zrobić. Moja wstępna implementacja działa, ale nie jestem pewien, czy są jakieś przypadkowe przypadki, które przegapiłem. Jeśli coś jest nie tak z tym rozwiązaniem, proszę to zaznaczyć.
Biorąc pod uwagę, że martwię się o uzyskanie zasięgów lon / lat dla wielokąta, a nie tylko o punkty, które się w nim składają, jednym ze sposobów rozwiązania problemu jest faktyczne „przejście” wzdłuż zestawu uporządkowanych współrzędnych od początku do końca. Śledzisz, jak daleko podróżowałeś zgodnie z ruchem wskazówek zegara i przeciwnie do ruchu wskazówek zegara w stosunku do środka Ziemi, biorąc pod uwagę punkt początkowy, i idź dalej, aż do ukończenia wielokąta:
Możesz uzyskać zakres odległości CW i CCW od punktu początkowego ... daje to wystarczającą ilość informacji, aby uzyskać prawidłowe granice w normalnym przypadku (po lewej na obrazku). W przypadku, gdy wielokąt obróci się całkowicie lub przecina środek, zwrócony kąt podróży wyniesie 360 stopni.
Ta metoda działa również wtedy, gdy wielokąt „tuli się” do powierzchni Ziemi, a nie przecina ją. Więc jeśli masz wielokąt przedstawiający kogoś podróżującego po powierzchni Ziemi od Toronto (lon: -79) do Londynu (lon: -5) do Tokio (lon: 139) iz powrotem (w tej samej kolejności), będziesz uzyskać zasięg [-79 do 139].
Jeśli wielokąt przecina środek (wyobraź sobie dwa sąsiednie punkty na +90 i -90), uważam, że jest to pełny zakres (360 stopni), chociaż możesz pójść w obie strony.
źródło