Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pozycja GPS do układu kartezjańskiego
#luq
post 26.11.2010, 00:25:27
Post #1





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


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ź ;>


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
thek
post 26.11.2010, 11:12:32
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
mike
post 26.11.2010, 11:20:14
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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.
Go to the top of the page
+Quote Post
thek
post 26.11.2010, 14:34:48
Post #4





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
#luq
post 26.11.2010, 17:49:49
Post #5





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


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 ; ))

Ten post edytował #luq 26.11.2010, 17:52:35


--------------------
Moja gra - scraby.io
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: 3.05.2024 - 01:37