Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pozycja GPS do układu kartezjańskiego
Forum PHP.pl > Inne > Hydepark
#luq
Dziwny temat co? winksmiley.jpg

Słuchajcie, muszę wygenerować obrazek z mapą Polski gdzie zaznaczonych jest ~150 miast. Powiedzmy, że coś takiego - http://www.trasy.com.pl/mapa.php. Ręczne pozycjonowanie tego byłoby katorgią więc pytanie brzmi jak to zrobić wykorzystując pozycję gps? Jak wiadomo szerokość i wysokość geog. jest wyznaczana na elipsoidach a nie na prostych, a więc jak to przekonwertować? Jakaś podpowiedź ;>
thek
W układzie kartezjańskim nie zrobisz tego idealnie. Najbliższym odwzorowaniem byłoby konwertowanie konwertowanie pomiędzy układem współrzędnych sferycznych i układem kartezjańskim. Są do tego wzorki... Jakby co zapytaj Wikipedię o Układ współrzędnych sferycznych, ale nie wiem czy Ci się spodoba i czy umiesz trygonometrię z zakresu arcusów... W razie czego zapoznaj się z funkcjami atan i atan2 przy czym ta druga chyba Ci bardziej się nada winksmiley.jpg
mike
Kiedyś uczestniczyłem w projekcie, którego jedną z funkcji było prezentowanie obiektów na mapie na podstawie ich pozycji GPS.
Wtedy użyliśmy odwzorowania Merkatora (Odwzorowanie walcowe równokątne) ponieważ z naszego przeglądu tematu wydawało się nam najpopularniejsze i najlepsze do tego celu.
thek
Owszem, to będzie najwygodniejsze chyba rozwiązanie i jedno z najmniej trudnych obliczeniowo jeśli mówimy o płaszczyźnie. Nie byłem pewien jak widzi to autor tematu. Ja zaproponowałem przejście na 3D i wtedy prawidłowe byłoby bawienie się we wzorki podane, ale i tak potem należało by przeliczyć na płaszczyznę., czyli kolejny narzut obliczeniowy. Jako że rozwiązanie mike'a jest jednostopniowe, to jego podejście wydaje mi się właściwsze.
#luq
Pomogliście, dzięki! winksmiley.jpg

Prosty wzór ale w sumie to miałem/mam z nim problem. Wychodzą mi jakieś cuda wianki. To co mi wychodzi mnożę sobie przez jakieś procenty i tak +/- jest okej. Zresztą napisałem sobie generator gdzie klikamy na punkt i możemy poprawić jego ustawienie na mapie a następnie zapisać.. (i tak to będzie potrzebne więc ogólnie jest okej)

Natomiast już tak w ramach mojej ciekawości, co tu jest źle?
  1. $data = array(
  2. 'Warszawa' => array( 'n' => 52.259, 'e' => 21.020 ),
  3. 'Wrocław' => array( 'n' => 51.110, 'e' => 17.030 ),
  4. 'Jelenia Góra' => array( 'n' => 50.909, 'e' => 15.729 ),
  5. 'Łódź' => array( 'n' => 51.770, 'e' => 19.459 ),
  6. 'Gdańsk' => array( 'n' => 54.360, 'e' => 18.639 ),
  7. 'Częstochowa' => array( 'n' => 50.810, 'e' => 19.129 ),
  8. 'Bielsko Biała' => array( 'n' => 49.819, 'e' => 19.049 ),
  9. );
  10.  
  11. $res = array();
  12. foreach( $data as $k => $v ){
  13. $scaleConst = 600; // brane na oko...
  14.  
  15. // rozumiem ze maja byc radiany a nie stopnie
  16. $e0 = ( 18.5 * pi() ) / 180; // południk 18.5 przechodzi przez srodek mapy
  17. $e = ( $v['e'] * pi() ) / 180;
  18. $n = ( $v['n'] * pi() ) / 180;
  19.  
  20. $x = $scaleConst * ( $e - $e0 );
  21. $y = $scaleConst * log( tan( (pi()/4)+($n/2) ) );
  22.  
  23.  
  24. $res[$k]['left'] = round( $x );
  25. $res[$k]['top'] = round( $y );
  26. }


@edit: Oczywiście być może ja czegoś kompletnie nie zrozumiałem, jeśli tak to proszę nie śmiać się za głośno ; ))
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.