Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obliczanie odległości na podstawie GPS.
Forum PHP.pl > Forum > PHP
zaajcu
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
abort
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.
zaajcu
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.
waldemi
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.
L00zak
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.