RONUA
ROmanian .NET User Association --- Asociaţia Romană a Utilizatorilor .NET
Comunitatea dezvoltatorilor software pe .NET Framework
Windows Mobile GPS apps Cookbook

GPS una din cele mai sexy aplicatii pe Windows Mobile.
Hai sa aflam cum se face asa ceva, in stilul crash course.

Sa incepem cu informatii minime de background. Da sistemul GPS are treaba cu sateliti in numar de, cu ora etc si o tona de matematica 3D, dar pentru povestea noastra nu e relavant prea mult si in plus de asta exista si Wikipedia (http://en.wikipedia.org/wiki/GPS). Un detaliu ar trebui totusi notat ora GPS e corecta dar nu corectata, adica sistemul GPS a ramas la ora anilor 80, intre timp pamintul s-a grabit/lenevit putin si pe pamint noi am corectat ora cu ceva secunde. Deci nu va bazati orbeste pe ora GPS...

OK aveam o cutie neagra care va sti pozitia, cum si ce protocol folosesc pentru comunicare. Normal un standard deja existent pentru aparatura de navigatie (NMEA 0183) care conform Wikipedia (http://en.wikipedia.org/wiki/NMEA_0183) este:
NMEA 0183 (NMEA for short) is a combined electrical and data specification for communication between marine electronic devices such as echo sounder, sonars, anemometer, gyrocompass, autopilot, GPS receivers and many other. It has been defined by, and is controlled by, the U.S.-based National Marine Electronics Association. The standard uses a simple ASCII, serial communications protocol that defines how data is transmitted in a "sentence" from one "talker" to one "listener" at a time. 
Nota: inca vorbim de NMEA 0183 nu de NMEA 2000 (exista dar inca nu e asa de raspindit).

O chestie sare in ochi este comunicatie seriala. O mare problema la Windows Mobile e ca nu permite acces shared la porturi => doar o plicatie poate folosi GPS la un moment dat. Si in plus hard GPS e divers si poate ar fi bine sa fie putin "abstractizat"   . Si Microsoft a venit cu o solutie, GPS Intermediate Driver (http://msdn.microsoft.com/en-us/library/ms850332.aspx). Beneficiu direct e ca acuma oricte aplicatii pot lua date GPS, GPS Intermediate Driver e conectat la portul fizic si ceilalti la el. Mai aduce si alte beneficii interesante dar vorbim de ele mai tirziu. 
Nota: este posibil dar nerecomandat sa nu se foloseasca acest driver, principalul motiv ca nu ma port frumos cu alte aplicatii potential interesate in date GPS (si acuma pina si aplicatiile de IM vor date GPS).

Sa facem o aplicatie GPS aware. E foarte simplu avem un sample folosibil (care cred ca e baza a a buna parte din aplicatiile GPS existente Smile).
Deci out of the box and ready to use: C:\Program Files\Windows Mobile 6 SDK\Samples\PocketPC\CS\GPS.
In folderul GPSSample se afla aplicatia ce afiseaza datele citite, destul de simpla si clara.
Clasele care fac treaba sint prezentate mai jos, normal ele trebuie incluse in aplicatia noastra .

GPS Sample Classes (http://msdn.microsoft.com/en-us/library/ms881362.aspx) :

  • Gps: The interface to the managed GPS API. Use this class to open, close, and query the device state, and to query the position data from your GPS hardware.
  • GpsPosition: Contains the GPS position data received from the GPS hardware.
  • GpsDevice: Contains the GPS device state data received from the GPS hardware.
  • Utils: Native memory allocation utilities.

Toate aceste clase pot fi modificate dupa cum vrem noi, refactorizate combinate si asa cu exceptia lui GPSPosition care e mai speciala. Mai speciala in sensul ca nu va permite adaugarea de membrii (adica se compileaza dar nu va mai vedea datele GPS). Si pentru cod sample Microsoft respecta surpinzator de mult standardele lor de codare Smile.

OK am sample se compileaza, il rulez si nu arata nimic... Solutii ma mut in gradina si imi iau un device fizic pe care fac debug. Sau o antena GPS cu un cablu de 10 metri. Bune idei nu? Smile
Din fericire se pare ca la Redmond nu e gradina si deci avem si o solutie de debug pentru emulator. GPS Intermediate Driver permite citirea unui fisier in loc de un port. Da deja va ginditi la aplicatii la care ati putea folosi asta si nu la debug. Si deci si in emulator si in lumea reala puteti folosi un fisier NMEA inregistrat de altceva alcineva sau chiar facut de mina (e ASCII) sau chiar folosind o aplicatie (vezi FakeGps Helper http://www.codeplex.com/fakegpshelper).
Ca fie folosit ar trebui modificate setarile in registry a GPS Intermediate Driver http://msdn.microsoft.com/en-us/library/ms889974.aspx. E help de la Microsoft totul clar nu? Aici e o versiune mai mura in gura a setarilor http://www.bbits.co.uk/blog/archive/2006/07/14/12027.aspx.
Dupa cum se vede setarile astea in registry sint destul de imbirligat de facut, si Microsoft a venit cu tool (in SDK WM 6 dar cred ca merge si pe WM 5) numit FakeGPS  care sa le faca (si mai mura in gura Smile), ce poate fi instalat pe emulator sau pe device. Aici sint instructiunile de instalare http://msdn.microsoft.com/en-us/library/bb158722.aspx. Da vedeti ca nu e specificat  path complet la fisierele NMEA, le cauta in urmatoarea locatie pe device \Program Files\FakeGPS\GPSFiles.

Eu zic ca am acoperit subiectul, cred ca atita informatie e suficienta pentru a dezvolta aplicatiile voastre GPS aware si care sa fie si de calitate.
Bine matematica nu am acoperit-o dar dpv practic cred ca nici nu conteaza.
Si un ultim pont (il intelegeti numa dupa ce ati aruncat un ochi in clasele GPS), in Romania solutia de 7 sateliti e cea mai mica care da date acceptabile. Parerea mea Smile.


Posted Wed, Nov 11 2009 1:44 AM by MrSmersh
Filed under: ,

Comments

ignatandrei wrote re: Windows Mobile GPS apps Cookbook
on Wed, Nov 11 2009 9:57 AM

Cit ar costa acei 7 sateliti ? Cu cine trebuie sa luam legatura?

MrSmersh wrote re: Windows Mobile GPS apps Cookbook
on Wed, Nov 11 2009 11:34 AM

Cost il vedem in timp de conectare. Sa explic ce e solutia asa din avion. E numarul de sateliti utilizati pentru a calcula pozitia. Da, cine stie din matematica 3D a GPS o sa zica ca 3 ajung, adevarat dar avem eroare mare in acest caz.

Dezavantaj numarul mare de sateliti face ca obtinerea primei poziti (si a pozitiei in general)i sa dureze relativ mult, si nici A GPS nu rezolva complet problema.

Deci trebuie gasita o solutie de compromis intre numarul de sateliti in solutie (precizia) si timpul de obtinere a ei.

Si la cost sistemele de pozitionare GPS (si GLONASS cind va fi activ pe tot globul) sint gratis.Utilizarea civila este un bonus, sistemele au ca "raison d'etre" scopuri militiare.

Aurelian wrote re: Windows Mobile GPS apps Cookbook
on Wed, Nov 11 2009 3:33 PM

Daca acxeste facilitati civile sunt bonus imi imaginez ce facilitary "military" exista peste aceste sisteme...

Cred imi vad aia si matreata dintre firele de par de acolo de sus...

Eu personal as dori si niste printscreen-uri ca sa vad ce faci si cum se vede. Se poate?

(Felicitari pentru limba ta scrisa care devine din ce in ce mai romana)

MrSmersh wrote re: Windows Mobile GPS apps Cookbook
on Thu, Nov 12 2009 11:55 AM

La posturile bazate pe sample MS, cam evit sa fac printscreen, dar o sa fie cind se preteaza. Iar informatia aditionala in general nu e grafica. O sa ma gindesc poate fac totusi si printscreens, dar ca problema emulatorul factor de forma "normal" de 6.5 dupa cit s-a vazut nici nu imi incape pe ecran.

Si mediul de delivery targetat cind am facut primele notite pe subiect a fost offline sau webcast, sample ar face usor audientiei sa reproduca efectul, iar notitele ar fi relativ scurte si din hand ons.

Asta cu limba romana, multumesc!

Sa fie ca imi mai cistig ceva piine din trainings?

(c) RONUA 2004-2009
Powered by Community Server (Commercial Edition), by Telligent Systems