GPS lark - jak pobrać pozycję(położenie) z GPSa

0

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)

1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1