Witam,
chciałbym pobrać pozycję z GPS, jak to zrobić? (gdzie można znaleźć o tym informacje)
Aplikacja pisana pod lark 43.1 (Windows CE 5)
Witam,
chciałbym pobrać pozycję z GPS, jak to zrobić? (gdzie można znaleźć o tym informacje)
Aplikacja pisana pod lark 43.1 (Windows CE 5)
O prosze tutaj :P Opisze jak to wygląda w C#
Odbiornik GPS zazwyczaj oparte są na standardach więc zacznij od stworzenia klasy odpowiadającej za odczyt danych z GPS, odbywa się to za pomocą klasy SerialPort , przykład (z dobrymi ustawieniami, jesli będzie działać to nie zmieniaj :P)
SerialPort port = new SerialPort("PORT_NAME",4800,Parity.None,8,StopBits.One);
- prędkość – 4800 bodów,
- 8 bitów danych,
- brak kontroli parzystości,
- 1 bit stopu.
Pierwszy argument to PORT_NAME, czasami jest to COM1, COM2, COM3 itd, bardzo często zdarza się, że port zapisany jest w rejestrze, możesz go wyciągnąć w taki sposób (jeśli się uda to ok, jeśli nie to dokumentacja, ew próba otwarcia każdego po kolei i czekać aż napłyną jakieś dane)
RegistryKey reg = Registry.LocalMachine.OpenSubKey(@"System\CurrentControlSet\GPS Intermediate Driver\Multiplexer", false);
return (string)reg.GetValue("DriverInterface");
Nie wiem czy dobrze pamiętam, ale SerialPort w C# ma taką metodę jak ReadExist(), nie używaj jej, nie wiem czemu mi często zwracała błąd, użyj zwykłej READ przekazując buffor do funkcji , a potem konwertuj go na text -- bo właśnie to zwracan odbiornik GPS. Teraz troche podstaw : odbiorni zwraca Ci dane jako text w standardzie NMEA, do danych które potrzebujesz, dobierasz się poprzez operacje na stringach takich jak m.in Split()
Częstotliwość sczytywania danych zależy od odbiornika, w nowszych są co 1 sek, czasami częściej, taki "pewniak" to sczytywanie danych co 2 sek.
przykładowe dane napływające do urządzenia :
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
$GPGSA,A,3,04,05,,09,12,,,24,,,,,2.5,1.3,2.1*39
Każdy nawet najstarszy odbiornik zawsze** NADAJE** RMC . Tutaj masz krótki opis co która linia zawiera :
$GPRMC,123519,A,4807.038,N,01131.000,E,022.4,084.4,230394,003.1,W*6A
RMC – nagłówek,
123519 – Godzina, 12:35:19 w UTC
A – status : A – ok ; V – nieaktywny
4807.038,N – szer. geograficzna
01131.000,E – dł. geograficzna
022.4 – prędkość (w węzłach = 1.852 Km/h),
084.4 – kąt śledzeniaobiektu (w stopniach)
230394 – data 23.03.94,
003.1,W – odchylenie magnetyczne ziemi,
*6A – suma kontrolna.
$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47
GGA – nagłówek
123519 – godzina(jak wyżej)
4807.038,N – szer. geograficzna
01131.000,E – dł. geograficzna
1 – jakość pomiaru,
08 – ilość satelit z którymi mamy łączność,
0.9 – horyzontalna dokładność - HDOP
545.4,M – wysokość w m n.p.m
46.9,M – wysokość geoid (powyżej elipsoidy WGS84),
(puste) – czas od czasu ostatniego uaktualnienia DGPS,
(puste) – numer ID stacji DGPS,
*47 – suma kontrolna.
$GPGSA,A,3,04,05,,09,12,,,24,,,,,2.5,1.3,2.1*39
GSA – nagłówek,
A – automatyczny wybór pozycji, M – manualny,
3 – pozycja 3D. Możliwe wartości to:
1 – brak pozycji ,
2 – pozycja 2D,
3 – pozycja 3D,
04,05... – numery satelit (do 12 satelit),
2.5 – precyzja wyznaczonej pozycji,
1.3 – HDOP (opisana wyżej)
2.1 – VDOP – precyzja wyznaczania wysokości,
*39 – suma kontrolna.
Czasami będziesz potrzebował stwierdzić które dane są prawidłowe, czy sygnał jest OK, czy może nie, czy masz tzn FIXA. To Ci pomoże :
(gga) ilość satelit, niezbędnym minimum do uzyskania pozycji 2d są 3 satelity , do 3d - 4 satelity
Nawigacje zazwyczaj przyjmują również , że wartości :
(gsa) jakośc wyznaczonej pozycji (DOP) <= 6 , inaczej odrzucają pomiar
To tyle :D