Współrzędne z azymutu i odległości

to głównie miejsce przeznaczone dla Was...

Moderator: Moderatorzy

Awatar użytkownika
Pawel brasia
Forumator
Posty: 1814
Rejestracja: sobota 23 sierpnia 2008, 19:06
Podziękował;: 262 razy
Otrzymał podziękowań: 333 razy

Współrzędne z azymutu i odległości

Post autor: Pawel brasia »

W jaki sposób można policzyć współrzędne punktu B, jeśli mamy dane współrzędne punktu A, odległość A-B i azymut w stopniach ?
Proszę o podanie sposobu obliczenia zrozumiałego dla laika, bez długiej teorii.
W drugą stronę jest prościej - programem ściągniętym stąd:
http://zadorski.loonar.pl/gps/index.htm#odleglosc
ObrazekObrazekObrazekObrazek ObrazekObrazek
Krzychu Blues
Stały bywalec
Posty: 101
Rejestracja: środa 20 sierpnia 2008, 16:58
Podziękował;: 3 razy
Otrzymał podziękowań: 7 razy

Post autor: Krzychu Blues »

Np. w Colorado/Oregon opcją "Project waypoint" podajesz namiar i odległość i otrzymujesz nową pozycję waypointa, która jest własnie tym, czego szukasz. Pozdrawiam Krzysztof
60CSx, Colorado, FS Loox N560 <> "soko" na Garniaku
[url=http://geokrety.org/mypage.php?userid=1294][img]http://geokrety.org/statpics/1294.png[/img][/url] [url=http://www.opencaching.pl/viewprofile.php?userid=5446][img]http://www.opencaching.pl/statpics/5446.jpg[/img][/url]
Awatar użytkownika
trojmiasto
Administrator
Posty: 1945
Rejestracja: poniedziałek 12 maja 2008, 20:45
Podziękował;: 14 razy
Otrzymał podziękowań: 88 razy

Post autor: trojmiasto »

Kod: Zaznacz cały

function calcLatLong($long, $lat, $distance, $bearing) {
 $EARTH_RADIUS_EQUATOR = 6378140.0;
 $RADIAN = 180 / pi();
 $b = $bearing / $RADIAN;
 $long = $long / $RADIAN;
 $lat = $lat / $RADIAN;
 $f = 1/298.257;
 $e = 0.08181922;
	
 $R = $EARTH_RADIUS_EQUATOR * (1 - $e * $e) / pow( (1 - $e*$e * pow(sin($lat),2)), 1.5);	
 $psi = $distance/$R;
 $phi = pi()/2 - $lat;
 $arccos = cos($psi) * cos($phi) + sin($psi) * sin($phi) * cos($b);
 $latA = (pi()/2 - acos($arccos)) * $RADIAN;

 $arcsin = sin($b) * sin($psi) / sin($phi);
 $longA = ($long - asin($arcsin)) * $RADIAN;
 return array('longitude' => $longA, 'latitude' => $latA);
}
Czy taki zapis jest zrozumiały, czy mam coś tłumaczyć?
Wejście:
$long = długość geograficzna,
$lat = szerokość geograficzna,
$distance = odległość w metrach,
$bearing = azymut w stopniach.

Zapis pow(x,y) oznacza x^y. W razie wątpliwości pytaj.
Jest co prawda gorzej niż było, ale za to lepiej niż będzie.
Awatar użytkownika
Pawel brasia
Forumator
Posty: 1814
Rejestracja: sobota 23 sierpnia 2008, 19:06
Podziękował;: 262 razy
Otrzymał podziękowań: 333 razy

Post autor: Pawel brasia »

trojmiasto pisze: [...]
Czy taki zapis jest zrozumiały, czy mam coś tłumaczyć?
Wejście:
$long = długość geograficzna,
$lat = szerokość geograficzna,
[...]
Dzięki zapis zrozumiały :) , rozumiem, że długość i szerokość w formacie XX.XXXX ?
ObrazekObrazekObrazekObrazek ObrazekObrazek
Awatar użytkownika
trojmiasto
Administrator
Posty: 1945
Rejestracja: poniedziałek 12 maja 2008, 20:45
Podziękował;: 14 razy
Otrzymał podziękowań: 88 razy

Post autor: trojmiasto »

brasia pisze:
trojmiasto pisze: [...]
Czy taki zapis jest zrozumiały, czy mam coś tłumaczyć?
Wejście:
$long = długość geograficzna,
$lat = szerokość geograficzna,
[...]
Dzięki zapis zrozumiały :) , rozumiem, że długość i szerokość w formacie XX.XXXX ?
dokładnie tak.
Jest co prawda gorzej niż było, ale za to lepiej niż będzie.
Awatar użytkownika
Pawel brasia
Forumator
Posty: 1814
Rejestracja: sobota 23 sierpnia 2008, 19:06
Podziękował;: 262 razy
Otrzymał podziękowań: 333 razy

Post autor: Pawel brasia »

To jeszcze pytanie:
po co liczona jest zmienna $f, jeśli później nie jest wykorzystywana ?
A może gdzieś tkwi błąd, bo mam już to zrobione w arkuszu kalkulacyjnym i wyniki nie są takie jak być powinny (oczywiście możliwe, że ja mam błąd, którego nie zauważam).
ObrazekObrazekObrazekObrazek ObrazekObrazek
Awatar użytkownika
trojmiasto
Administrator
Posty: 1945
Rejestracja: poniedziałek 12 maja 2008, 20:45
Podziękował;: 14 razy
Otrzymał podziękowań: 88 razy

Post autor: trojmiasto »

$f jest niepotrzebna. Podeślij mi proszę ten arkusz kalkulacyjny (PW), może wpadnie mi coś w oko :). Funkcja, którą Ci podałem będzie używana już niedługo w opencaching.pl i u mnie działa, więc jest szansa, że:
a. masz coś skopsane w formule,
b. są krzaki dla jakichś dużych odległości (>1500km).
Jest co prawda gorzej niż było, ale za to lepiej niż będzie.
Awatar użytkownika
futrzak
Bywalec
Posty: 74
Rejestracja: wtorek 06 stycznia 2009, 14:47
Podziękował;: 4 razy
Otrzymał podziękowań: 10 razy
Kontakt:

Post autor: futrzak »

Natknąłem się na bardzo przyjemny kalkulator. http://www.mrsoft.fi/ohj02en.htm Wiem, że nie pomaga zrozumieć problemu, ale wylicza bardzo skutecznie.

PS: Brasia zagubiły Ci się notatki? :twisted:
ObrazekObrazekObrazek
Awatar użytkownika
Pawel brasia
Forumator
Posty: 1814
Rejestracja: sobota 23 sierpnia 2008, 19:06
Podziękował;: 262 razy
Otrzymał podziękowań: 333 razy

Post autor: Pawel brasia »

Natknąłem się na bardzo przyjemny kalkulator. http://www.mrsoft.fi/ohj02en.htm Wiem, że nie pomaga zrozumieć problemu, ale wylicza bardzo skutecznie.
[/quote]
Fajnie, dzięki to rozwiązuje problem :-D Nie chodziło o teorię.

futrzak pisze: PS: Brasia zagubiły Ci się notatki? :twisted:
Nie to w celu rozpracowania kilku skrzynek, a wiedzy geodezyjno-mapowej wiele nie posiadam
ObrazekObrazekObrazekObrazek ObrazekObrazek
Awatar użytkownika
futrzak
Bywalec
Posty: 74
Rejestracja: wtorek 06 stycznia 2009, 14:47
Podziękował;: 4 razy
Otrzymał podziękowań: 10 razy
Kontakt:

Post autor: futrzak »

Trojmiasto zamiast pi() i pi()/2 lepiej użyć stałych, które są zdefiniowane w php czyli odpowiednio M_PI i M_PI_2. Złożoność obliczeniowa się zmniejsza.

Druga sprawa to zmienna $e W kodzie jest użyta dwukrotnie i zawsze w kwadracie - po co mnożyć ją 2 razy przez siebie skoro można by to zrobić już przy definicji? Nie wygląda mi ona na żadną 'stałą matematyczną'.

Pozdrawiam
ObrazekObrazekObrazek
Awatar użytkownika
Hern
Forumator
Posty: 1022
Rejestracja: wtorek 15 lipca 2008, 01:34
Podziękował;: 38 razy
Otrzymał podziękowań: 40 razy

Post autor: Hern »

futrzak pisze:Trojmiasto zamiast pi() i pi()/2 lepiej użyć stałych, które są zdefiniowane w php czyli odpowiednio M_PI i M_PI_2. Złożoność obliczeniowa się zmniejsza.

Druga sprawa to zmienna $e W kodzie jest użyta dwukrotnie i zawsze w kwadracie - po co mnożyć ją 2 razy przez siebie skoro można by to zrobić już przy definicji? Nie wygląda mi ona na żadną 'stałą matematyczną'.

Pozdrawiam
Myślę, że chodziło tu bardziej o przedstawienie algorytmu. Optymalizacja którą podałeś oczywiście przyspiesza obliczenia, ale zaciera nieco zrozumiałość samego algorytmu :)
ObrazekObrazekObrazek
NIE wyhaczam, NIE zaliczam, po prostu znajduję. A reszta o drzewo ...
Awatar użytkownika
futrzak
Bywalec
Posty: 74
Rejestracja: wtorek 06 stycznia 2009, 14:47
Podziękował;: 4 razy
Otrzymał podziękowań: 10 razy
Kontakt:

Post autor: futrzak »

Zgadzam się z Tobą, ale Trojmiasto pisze, że ten skrypt będzie wkrótce działał w opencaching.pl, a w obliczu obecnych problemów z wydajnością serwera podejście 'optymalizacyjne' jest jak najbardziej pożądane :D

Pozdrawiam
ObrazekObrazekObrazek
Awatar użytkownika
Limak
Stały bywalec
Posty: 106
Rejestracja: niedziela 16 sierpnia 2009, 22:25
Podziękował;: 5 razy
Otrzymał podziękowań: 9 razy

Post autor: Limak »

futrzak pisze:Zgadzam się z Tobą, ale Trojmiasto pisze, że ten skrypt będzie wkrótce działał w opencaching.pl, a w obliczu obecnych problemów z wydajnością serwera podejście 'optymalizacyjne' jest jak najbardziej pożądane :D

Pozdrawiam
to jeśli optymalizacja ma tutaj aż tak duże znaczenie, to ja proponuje napisać to w C korzystając z Zend API i potem załadować do PHP na serwerze OC.pl.
ODPOWIEDZ