Za jídlo, šaty a vzduch otročíme na programech z temných světů

VirtualGPS: GPS bez GPS

Smějou se vám ostatní děti, protože jejich hloupá Nokia má GPS a váš chytrý telefon nikoliv? Nebuďte smutní, je tu řešení.

KamLex Engineering Solutions totiž vytvořili VirtualGPS, která umí určit polohu telefonu i bez GPS. Orientuje se totiž podle toho, jaké BTS (GSM vysílače) vidí váš telefon.
Tento nápad jako první komerčně uvedly v život Google Maps zabudované v Apple iPhone. Pár měsíců poté se začala podpora objevovat i v ostatních telefonech a to přes rozšíření jednoho z AT příkazů, který v nové specifikaci umí vrátit i identifikátory BTS. Telefonů, které by ovšem tento příkaz v rozšířené verzi měly a uměly tudíž s Google Maps spolupracovat je zatím poskrovnu a tak jsem se zatím spíše setkal s tím, že funkce My Location nebyla podporována.

Rozhodně tento příkaz nemá moje SDA. Jak jsem ale záhy zjistil netřeba věšet hlavu. Procesor Texas Instruments OMAP 730, který na sobě integruje ARM jádro a DSP jádro zajišťující GSM komunikaci, má totiž mezi těmito procesory sdílenou část paměti a přímo z ní lze vyčíst všechny potřebné informace. KamLex si toto uvědomil a tak jeden z režimů podporovaných VirtualGPS je právě přímý přístup do paměti a přečtení hodnot z ní.

Jak to funguje prakticky? Pustíte VirtualGPS, ono se připojí na Internet a kontaktuje CellID databázi (Případně použije hodnoty v lokální cache, pokud je tam najde. KamLex nabízí editor souborů s CellID cache, takže je možné si přidat vlastní souřadnice BTS vysílačů.), zjistí z ní polohy BTS, které vidíte a podle toho vypočítá a vrátí vaše souřadnice na virtuálním COM portu v standardním NMEA protokolu. V Google Maps si posléze vyberete v nastaveních port, na kterém je GPS a Google Maps se k němu připojí. Tlačítko 0 v Google Maps pak na mapě ukáže vaší polohu. Prosté a jednoduché.
Udělal jsem po Praze několik pokusů a vesměs jsem byl spokojen. Určování polohy na tomto principu samozřejmě nelze použít na věci jako je Geocaching nebo navigace, ale pokud se potřebujete zorientovat na mapě, tak je příjemné, když nemusíte zadávat do vyhledávání vaši současnou polohu, protože ji (byť s nepřesností v řádech stovek metrů) máte. Podle následujících obrázků si můžete udělat sami představu, jak VirtualGPS funguje. Jsou složené ze tří obrázků – vlevo nahoře je vždy VirtualGPS, vpravo nahoře Google Maps a dole pak obrázek z Mapy.cz, kde je modře označené skutečné místo, kde jsem polohu zjišťoval a červeně poloha, kterou udala VirtualGPS.

VirtualGPS 1

První zjišťování polohy proběhlo při snídani v McDonnald’s na Václavském náměstí. Google Maps ukázaly, že se nacházím u Národního muzea, což je zhruba 100m odsud, prakticky stačí jen přejít silnici.

VirtualGPS 2

Podruhé jsem zkusil určit polohu cestou do práce. Tady už byla nepřesnost poměrně větší, zhruba půl kilometru. Zřejmě díky husté zástavbě vysokými činžáky telefon nepřijímal tolik BTS, kolik je třeba pro přesnější výpočet.

VirtualGPS 3

Potřetí jsem vybral samotný kraj Prahy – Kbely. Tady mně přesnost celkem překvapila, necelých 200metrů vedle.

VirtualGPS má dvě varianty – Lite, která je zdarma a umí určovat polohu pouze podle veřejné CellId databáze a pak Pro, která má přístup do placené databáze BTS, umí navíc ještě i triangulaci podle WiFi sítí a poskytuje systému intermediate driver, díky kterému může k GPS přistupovat více aplikací najednou. Lite verze je zdarma, Pro verze stojí 12USD.