Forum » Programiranje » GPS - branje pozicije
GPS - branje pozicije
boss-tech ::
GPS mi preko porta pošilja te podatke:
$GPRMC,140955.00,A,4610.15277,N,01504.99284,E,1.462,126.57,261208,,,A*60
$GPVTG,126.57,T,,M,1.462,N,2.710,K,A*3F
$GPGGA,140955.00,4610.15277,N,01504.99284,E,1,03,3.16,429.5,M,43.7,M,,*56
$GPGSA,A,2,19,03,32,,,,,,,,,,3.31,3.16,1.00*0D
$GPGSV,3,1,11,19,78,229,34,03,47,169,17,32,28,221,33,22,43,056,*74
$GPGSV,3,2,11,20,04,230,,28,12,325,,06,38,158,,06,38,158,*72
$GPGSV,3,3,11,14,39,114,,11,33,288,,18,10,051,*4C
$GPGLL,4610.15277,N,01504.99284,E,140955.00,A,A*6E
$GPZDA,140955.00,26,12,2008,00,00*67
1. Zanima me kaj katera stvar pomeni in kje dobim ven pozicijo?
2. Kako bi najlažje sprogramiral, da bi preko trenutne pozicije izračunal hitrost? Tako kot jo imajo gps programi
$GPRMC,140955.00,A,4610.15277,N,01504.99284,E,1.462,126.57,261208,,,A*60
$GPVTG,126.57,T,,M,1.462,N,2.710,K,A*3F
$GPGGA,140955.00,4610.15277,N,01504.99284,E,1,03,3.16,429.5,M,43.7,M,,*56
$GPGSA,A,2,19,03,32,,,,,,,,,,3.31,3.16,1.00*0D
$GPGSV,3,1,11,19,78,229,34,03,47,169,17,32,28,221,33,22,43,056,*74
$GPGSV,3,2,11,20,04,230,,28,12,325,,06,38,158,,06,38,158,*72
$GPGSV,3,3,11,14,39,114,,11,33,288,,18,10,051,*4C
$GPGLL,4610.15277,N,01504.99284,E,140955.00,A,A*6E
$GPZDA,140955.00,26,12,2008,00,00*67
1. Zanima me kaj katera stvar pomeni in kje dobim ven pozicijo?
2. Kako bi najlažje sprogramiral, da bi preko trenutne pozicije izračunal hitrost? Tako kot jo imajo gps programi
- spremenil: boss-tech ()
boss-tech ::
Fino. To sem iskal... zanima me še samo, kako bi sedaj recimo najlažje izračunal potovalno hitrost?
fiction ::
$GPRMC,140955.00,A,4610.15277,N,01504.99284,E,1.462,126.57,261208,,,A*60
$GPVTG,126.57,T,,M,1.462,N,2.710,K,A*3F
Si prebral tisto o NMEA?
Trenutna potovalna hitrost po povrsju zemlje je 1.462 vozla ali 2.710 km/h. GPS sprejemnik to nacara kolikor vem s pomocjo Dopplerjevega pojava. Podatek je precej natancen. Lahko pa uporabis tudi enostavno hitrost = sprememba poti / sprememba casa. Izracunas razdaljo med koordinatama dveh tock (npr. s pomocjo Haversine formule), razliko v casu, oboje skupaj delis pa imas hitrost. Seveda ni nujno, da to uporabis na dveh sosednjih tockah, lahko vzames prvo in zadnjo tocko potovanja pa imas povprecno hitrost.
$GPVTG,126.57,T,,M,1.462,N,2.710,K,A*3F
Si prebral tisto o NMEA?
Trenutna potovalna hitrost po povrsju zemlje je 1.462 vozla ali 2.710 km/h. GPS sprejemnik to nacara kolikor vem s pomocjo Dopplerjevega pojava. Podatek je precej natancen. Lahko pa uporabis tudi enostavno hitrost = sprememba poti / sprememba casa. Izracunas razdaljo med koordinatama dveh tock (npr. s pomocjo Haversine formule), razliko v casu, oboje skupaj delis pa imas hitrost. Seveda ni nujno, da to uporabis na dveh sosednjih tockah, lahko vzames prvo in zadnjo tocko potovanja pa imas povprecno hitrost.
_Dejan_ ::
Tudi sam sem se prišel ukvarjati z GPS programom in me zanima ima kdo kakšno kodo za C# ki vsebuje komunikacijo z Serijskim portom in dekodiranje NMEA GPS stringe(latitude, longitude, direction, speed, altitude)?
Hvala.
Lp, _Dejan_
Hvala.
Lp, _Dejan_
ASUS P5E3, INTEL Q6600(3000Mhz 333x9), ATI HD 2600XT,
A-Data 4x2GB PC3-10700H(9-9-9-24-2T),LSI 9260-8i,
4x OCZ Vertex Turbo 30GB(RAID10), 3x1TB (RAID1+Spare)
A-Data 4x2GB PC3-10700H(9-9-9-24-2T),LSI 9260-8i,
4x OCZ Vertex Turbo 30GB(RAID10), 3x1TB (RAID1+Spare)
_Dejan_ ::
Super hvala ti.
ASUS P5E3, INTEL Q6600(3000Mhz 333x9), ATI HD 2600XT,
A-Data 4x2GB PC3-10700H(9-9-9-24-2T),LSI 9260-8i,
4x OCZ Vertex Turbo 30GB(RAID10), 3x1TB (RAID1+Spare)
A-Data 4x2GB PC3-10700H(9-9-9-24-2T),LSI 9260-8i,
4x OCZ Vertex Turbo 30GB(RAID10), 3x1TB (RAID1+Spare)
_Dejan_ ::
Bolj kot samo dekodiranje me zanima del ki komunicira z serijskim portom...
Sedaj imam tako:
Vendar se dostikrat zgodi da strArr[i] ni cel niz kot bi moral biti ampak samo določen del... Kako to rešiti? Initialize() je metoda ki cel string npr:
GPGSV,3,1,12,20,00,000,,10,00,000,,31,00,000,,27,00,000,*7C
dekodira in iz njega izlušči potrebne podatke... timer ima interval 1000ms vendar ga bom v prihodnosti znižal na 200ms(5Hz GPS).
Nihče ne zna pomagati?
Sedaj imam tako:
protected void ReadSerialPortTimer_Tick(object sender, EventArgs e) { try { ReadSerialPortTimer.Stop(); if (GPSPort.IsOpen) { string data = GPSPort.ReadExisting(); string[] strArr = data.Split('$'); for (int i = 0; i < strArr.Length; i++) { Initialize(strArr[i]); } } else { OpenSerialPort(); } } catch (Exception errmsg) { WriteLog(errmsg.ToString()); } finally { ReadSerialPortTimer.Start(); } }
Vendar se dostikrat zgodi da strArr[i] ni cel niz kot bi moral biti ampak samo določen del... Kako to rešiti? Initialize() je metoda ki cel string npr:
GPGSV,3,1,12,20,00,000,,10,00,000,,31,00,000,,27,00,000,*7C
dekodira in iz njega izlušči potrebne podatke... timer ima interval 1000ms vendar ga bom v prihodnosti znižal na 200ms(5Hz GPS).
Nihče ne zna pomagati?
ASUS P5E3, INTEL Q6600(3000Mhz 333x9), ATI HD 2600XT,
A-Data 4x2GB PC3-10700H(9-9-9-24-2T),LSI 9260-8i,
4x OCZ Vertex Turbo 30GB(RAID10), 3x1TB (RAID1+Spare)
A-Data 4x2GB PC3-10700H(9-9-9-24-2T),LSI 9260-8i,
4x OCZ Vertex Turbo 30GB(RAID10), 3x1TB (RAID1+Spare)
Zgodovina sprememb…
- spremenil: _Dejan_ ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | GPS modul NEO-6M GPS in Arduino NanoOddelek: Elektrotehnika in elektronika | 797 (740) | llc |
» | C#, OBD2 in branje iz portaOddelek: Programiranje | 1585 (1202) | detroit |
» | Kako na linuxu (Raspberry PI) prepričati NTP, da bo uporabil podatke iz GPS-aOddelek: Operacijski sistemi | 2749 (2110) | misek |
» | [C++] NalogeOddelek: Programiranje | 4065 (2396) | LordiBoy |
» | [VB] Komunikacija s serijskimi napravamiOddelek: Programiranje | 2312 (1586) | mNeRo |