21
pro 07

GPS navigace svépomocí - 1. část - "hackování" mapového serveru

IT

Aktualizováno - Už mě nebaví brát si s sebou na výlety obrovské papírové trhací mapy a u každé křižovatky je rozbalovat. Tak mě napadlo, že si vytvořím vlastní navigační systém. Hardware na to mám (GP2X), teď jen stačí spustit vývojové prostředí a v C++ něco vytvořit.

První problém je sehnání map, aby ta moje navigace měla co chroustat. Nehodlám nic kupovat a potom pro to vytvářet nějaký parser, který mi to zobrazí na displeji, a tak jsem sáhnul po zdroji map zdarma – internetu. Váhal jsem, co použít, ale nakonec vyhrál Seznam, protože na serveru www.mapy.cz kromě normálních map nabízí i satelitní snímky. To (myslím) žádný jiný český mapserver nenabízí.

A jak ty mapy z něj získat? Klikáním na mapu pravým tlačítkem a mačkat na Uložit obrázek jako... je strašná práce. Musí se na to trochu jinak. Po krátkém zkoumání jsem zjistil, že mapa je složená z dlaždic o velikosti 256 x 256 pixelů. Každá dlaždice má nějakou URL, takže například:

http://mS.mapserver.mapy.cz/-typ-/zz_xxxx000_yyyy000

Ano, je to bez přípony, ta není potřeba. Místo S je vepsáno číslo od 1 do 4 (Seznam.cz nyní rozložil zátěž na 4 servery), místo -typ- je v adrese vepsán typ mapy:

  • base - základní
  • ophoto – aktuální satelitní snímky
  • ophoto0203 – satelitní snímky z roku 2002/2003
  • hybrid – hybridní (průhledné obrázky s vyznačenými cestami pro překrytí satelitních snímků)
  • turist – turistická mapa
  • army2 – historická mapa
  • relief-l – průhledný reliéf (stínování) pro překrytí

Jak je vidět, je typů hodně, ovšem některé (turistické, historické) nemusí být dostupné ve všech regionech. Vyzkoušejte.

Název dlaždice je složen ze tří částí oddělenými podtržítky. První část (zz) označuje zvětšení, jednička je nejmenší (nejméně podrobností), šestnáctka největší (jsou vidět i auta stojící na ulicích). Druhá (xxxx) a třetí (yyyy) část označuje souřadnice. Zde je nulový bod vlevo dole a od něj se určují souřadnice jednotlivých dlaždic. Číslo x-ové i y-ové souřadnice je v šestnáctkovém formátu, aby byla snížena délka URL pro stažení přísušné dlaždice.

U obou souřadnic jsou poslední tři místa nepoužitá (jsou tam tři nuly, které se nemění) a jsou nejspíše rezervovaná pro větší zvětšení (už se těším :-)). Při zvětšení šestnáct mají dlaždice ve vodorvném směru například tyto názvy:

16_8085000_6f30000
16_8086000_6f30000
16_8087000_6f30000
16_8088000_6f30000
16_8089000_6f30000
16_808a000_6f30000
16_808b000_6f30000
16_808c000_6f30000

Při menších zvětšeních jsou skoky už větší, poslední číslice (poslední tři nuly se nepočítají) se nezvětšuje o jednu, ale o dvě, čtyři, osm, šestnáct a tak dále (podle rovnice 2^(16 – zvětšení) ), například při zvětšení třináct budou adresy dvou dlaždic vedle sebe mít rozdíl podle rovnice 2^(16-13) = 8, takže takto:

13_8080000_6f30000
13_8088000_6f30000
13_8090000_6f30000
13_8098000_6f30000
13_80a0000_6f30000

To znamená, že každá dlaždice pokryje osm jednotek při zvětšení třináct a jednu jednotku při zvětšení šestnáct. Takže při dotázání na tuto dlaždici dostaneme krásnou historickou mapu:

http://m1.mapserver.mapy.cz/army2/13_8050000_7e70000

Napoak při dotázání na tuto dlaždici dostaneme prázdnou dlaždici:

http://m1.mapserver.mapy.cz/army2/13_8051000_7e70000

V x-ové souřadnici na místě jednotek (čtvrté místo) je číslo 1, které sem nepatří, protože zde jsou skoky o 8 jednotek – viz vzorec 2^(16-13) výše, takže zde může být (v 16tkové soustavě) jen znak 0 nebo 8.

Teď už je tedy systém mapového serveru na seznamu vysvětlen a proto nic nebrání tomu, aby se pomocí skriptu vygenerovaly názvy dlaždic a ty pomocí nějakého programu dávkově stáhly.

V příští části rozeberu základní myšlenku pro zobrazování dlaždic a posun po mapě.

Související články

Pod štítkem .

» Přidat komentář

Diskuze: 10 komentářů

» Odpovědět 05.12.2007 20:25 | peca | pokracovani?
Bude nejake pokracovani? Docela by me zajimalo, jak jsi pokrocil. :-)
Co GPS prijimac, SDIO, USB, rs232?
» Odpovědět 05.12.2007 21:03 | Vladimír Vondruš | web | Zasekl jsem se...
Poslední dobou se mi nedostává času a zatím jsem dobře nevyřešil, jak výkonně posouvat mapu a plynule načítat další dlaždice... Ale je toho určitě dost na napsání dalšího článku :-D
GPS přijímač... zjišťoval jsem ceny, ale na mé poměry trochu moc (6000) :-(
» Odpovědět 06.12.2007 11:29 | peca | vestaveni GPS
tohle: http://spritesmods.com/?art=gp2xgps znas?
Mi to prijde celkem jako frajerinka :-)
» Odpovědět 06.12.2007 17:59 | Vladimír Vondruš | web | To jsem taky našel...
Jo, na http://spritesmods.com/?art=gp2xgps jsem taky narazil - jenže v Čechách takovouto věc asi levně neseženu (pokud vůbec) - a k tomu je potřeba ještě spousta jiných věcí - další balík s bateriemi (aby gp2x ten gps modul vůbec utáhl (potřebuje 3,3 V namísto 2,4 V při NiMH bateriích) a externí anténa ... Já mám spíše jako představu nějaký modul, který se napíchne přes EXT port, bude mít vše co sám potřebuje a bude mi ležet někde v batohu. Při "zadělání" modulu přímo do gp2x nebudu mít (bez rozebrání) možnost tento modul vypnout, aby mi zbytečně nežral baterie.
» Odpovědět 06.12.2007 18:07 | peca | Takze asi USB GPS
Pres EXT by byl asi nejlepsi USB GPS nebo seriovy. Co jsem mel v praci na zkouseni, tak melo i pamet a interni akumulator. Takze vlastne autonomni modrozuba GPS, data sla stahnout pres USB i BT a umelo to i online rezim, kdy to posilalo souradnice prubezne.

Jestli me neco na PDA vadi, tak je to nechutna spotreba pri zaplem GPS. Ci-li neco takoveho, co dela log prubezne a autonome, jenom obcas by se z toho sosli data, zkontrolovat poloha a smer a zase PDA vypnout. Tak bych si to predstavoval.

No nic, preji uspech. Kdyby te zajimal ten GPS modul, tak pisni mejla.
» Odpovědět 06.12.2007 21:54 | Vladimír Vondruš | web | Jak často gps potřebuje data?
Občasné načítání dat je také dobrý nápad, ale jak často a kolik těch dat potřebuji k určení polohy a směru? Moc se v GPS nevyznám, takže nevím...
» Odpovědět 07.12.2007 21:51 | peca | Poloha a smer
K urceni aktualni polohy, smeru a rychlosti, staci precit jenom NMEA packet, ktery aktualne priputuje seriakem. Ja mel na mysli spise vykresleni cele trasy, kvuli kteremu je typicky potreba zaple PDA celou dobu, aby si ukladalo zaznam. Coz mnou zkouseny vyrobek umel sam, takze PDA mohlo byt vypnute.
Pokud te nezajima zaznam trasy, tak staci cist aktualni informace na vystupu GPS. Nekde bych mozna vystrachal popis NMEA packetu. Teda, mel bych to nekde mit.
» Odpovědět 08.12.2007 12:15 | Vladimír Vondruš | web | Záznam trasy vs. výdrž
Záznam trasy by se hodil, ale je to určitě na úkor výdrže na baterie, zapínání a vypínáni gps modulu při každém spuštění mapové aplikace je zdržovačka, když potřebuje nějakých 15-30 sekund na osahání družic a ustálení počáteční polohy. Pokud by měl GPS modul nastavitelnou frekvenci záznamu trasy (třeba každých 500 metrů), ušetřila by se nějaká spotřeba. A nebo mít jednoduchý (a levný) GPS modul bez záznamu (tj. i nižší spotřeba) a mapovou aplikaci naprogramovanou, aby se každých 5 minut probrala ze sleep módu (zhasnutí displeje, podtaktování procesoru na 20 MHz atd.) a zaznamenala polohu z gps modulu. Minimální GPS modul jsem našel na http://www.sparkfun.com/...230-Data-Sheet-V1.2.pdf (nejspíše nemá ani záznam), problém je s napájením - nabíjecí baterie v GP2X zvládnou 2,4 V a on potřebuje 3 V.
» Odpovědět 08.12.2007 13:47 | peca | napajeni
To IMHO neni problem. Existuji integrovane menice napeti, ktere meni libovolne vstupni (v rozsahu treba od 1,2 V do 24 V) napeti preves na delicem nastavene vystupni (treba 5V).

Tady ti poslou dva vzorky zdarma: http://www.maxim-ic.com/...sheet/index.mvp/id/1252

Krom toho menice tam maji hromadu jinych zajimavych vecicek :-)
Přesně to jsem hledal, díky
Na stránce došlo k chybě (0): Unknown error