Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Obliczanie odległości na podstawie GPS.
zaajcu
post 28.12.2012, 15:36:13
Post #1





Grupa: Zarejestrowani
Postów: 206
Pomógł: 3
Dołączył: 18.08.2011
Skąd: Chrzanów

Ostrzeżenie: (0%)
-----


Cześć wszystkim.
Mam mały problem z obliczeniem odległości między 2 pkt na podstawie danych z GPS.

Znalazłem jak to policzyć http://www.elektronikjk.republika.pl/f7.html ale mam mały problem mianowicie:

szerokość jak i długość geograficzną podajemy z kierunkiem świata (W S E N ) a to co jest tam podane nie bierze tego pod uwagę.

np GPS 5° 12' 59" E lub 5° 12' 59" W jak to zamienimy na stopnie to mamy dokładnie ten sam wynik a odległość miedzy tymi wsp z taką samą szerokością da nam rożne wyniki.
Może ktoś z was spotkał jakąś funkcje którą rozwiązuje ten problem lub jakąś klasę?

Będę wdzięczny za pomoc wink.gif

Pozdrawiam
Go to the top of the page
+Quote Post
abort
post 28.12.2012, 16:07:46
Post #2





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


Masz wzory, podstawiasz i działa. Nie zagłębiałem się w poprawność wzorów (zakładam, że są poprawne). Co do samej metodyki, to chyba o jednym zapomniałeś. Masz punkt A1 o współrzędnych 5° 12' 59" E, i masz punkt A2 o współrzędnych 5° 12' 59" W. I twierdzisz, że dla DOWOLNEGO punktu B licząc odległość A1--B i A2--B otrzymujesz takie same wartości? No to robisz to źle. Dlaczego?

1. Wejdź sobie na google maps, oddal się maksymalnie tak, aby zobaczyć jak najwięcej ziemi na obrazku.
2. Wyrysuj sobie (w sensie wyobraź) układ współrzędnych, taki zwykły, kartezjański, którego oś X pokrywa się z równikiem, a oś Y pokrywa się z południkiem 0 (tym od Greenwich)
3. Spróbuj zaznaczyć punkty A1 i A2 - a potem zrób ich odzwierciedlenie w tym wyimaginowanym układzie współrzędnych. Są takie same? Odpowiedź: tak i nie. Takie same co do wartości - owszem. Ale co do znaku - już nie.

Masz więc odpowiedź, gdzie się walnąłeś - połówka zachodnia ma mieć wartości ujemne, wschodnia ma mieć wartości dodatnie. Może być i odwrotnie, byle konsekwentnie. Aha, z połówkami północną i południowa będzie identycznie.

P.S.
A wzory na pewno są uproszczone, bo zakładają kulistość Ziemi. Co nie do końca jest prawdą, bo Ziemia to elipsoida.
Go to the top of the page
+Quote Post
zaajcu
post 28.12.2012, 19:00:06
Post #3





Grupa: Zarejestrowani
Postów: 206
Pomógł: 3
Dołączył: 18.08.2011
Skąd: Chrzanów

Ostrzeżenie: (0%)
-----


Tak wiem że wzór jest uproszczony. Jak pisałem tego posta to właśnie mi brakowało tego minusa o którym wspomniałeś. Dzięki za pomoc pozdrawiam.
Go to the top of the page
+Quote Post
waldemi
post 29.12.2012, 15:06:39
Post #4





Grupa: Zarejestrowani
Postów: 58
Pomógł: 0
Dołączył: 5.03.2007
Skąd: Leszno

Ostrzeżenie: (0%)
-----


Do obliczania odległości między dwoma punktami używam wzoru
  1. $dystans = round (rad2deg(acos(sin(deg2rad($szgeo1)) * sin(deg2rad($szgeo2)) + cos(deg2rad($szgeo1)) * cos(deg2rad($szgeo2)) * cos(deg2rad($dlgeo1 - $dlgeo2)))) * 111.18957696);

gdzie
$szgeo1, $dlgeo1 to współrzędne pierwszego punktu
$szgeo2, $dlgeo2 to współrzędne drugiego punktu

Współzędne muszą być oczywiście w formacie dziesiętnym.
Go to the top of the page
+Quote Post
L00zak
post 29.12.2012, 21:25:57
Post #5





Grupa: Zarejestrowani
Postów: 58
Pomógł: 5
Dołączył: 2.05.2006

Ostrzeżenie: (0%)
-----


Panowie, działa to fajnie jeśli chodzi o liczenie odległości w linii prostej (ulice można zamienić na kody pocztowe).

Lecz jak to zmodyfikować, aby google api wyznaczyło trasę i pokazało ilość km do przebycia?

  1. <?
  2. $addressG = 'http://maps.google.com/maps/geo?output=json&oe=utf-8';
  3. $addressG.='&q='.urlencode('mickiewicza, katowice, Poland');
  4. $page = file_get_contents($addressG);
  5. $ar = json_decode($page,true);
  6. //print_r($ar);
  7. $addressG = 'http://maps.google.com/maps/geo?output=json&oe=utf-8';
  8. $addressG.='&q='.urlencode('mickiewicza, poznań, Poland');
  9. $page = file_get_contents($addressG);
  10. $ap = json_decode($page,true);
  11. // print_r($ar);
  12. $szgeo1=$ar['Placemark'][0]['Point']['coordinates'][1];
  13. $dlgeo1=$ar['Placemark'][0]['Point']['coordinates'][0];
  14. $szgeo2=$ap['Placemark'][0]['Point']['coordinates'][1];
  15. $dlgeo2=$ap['Placemark'][0]['Point']['coordinates'][0];
  16. $dystans = round (rad2deg(acos(sin(deg2rad($szgeo1)) * sin(deg2rad($szgeo2)) + cos(deg2rad($szgeo1)) * cos(deg2rad($szgeo2)) * cos(deg2rad($dlgeo1 - $dlgeo2)))) * 111.18957696);
  17. //echo $ar['Placemark'][0]['Point']['coordinates'][0];
  18.  
  19. echo $dystans;
  20. ?>


se sobie poradziłem:) dla potomności:

http://maps.googleapis.com/maps/api/distan...on?origins=Łódź, Kongresowa 3&destinations=Łódź, Piotrkowska 120&language=pl-PL&sensor=false

Ten post edytował L00zak 29.12.2012, 20:36:37
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2025 - 09:40