Portál AbcLinuxu, 29. března 2024 09:54

Výroba mapy pre Trekbuddy z OSM na mieru

22.2.2009 13:13 | Přečteno: 3226× | Výběrový blog | poslední úprava: 3.3.2009 22:57

V tomto zápise si ukážeme, ako si vyrobiť mapu pre J2ME aplikáciu Trekbuddy z mapových podkladov openstreetmap.org (OSM). Toto vám môže prísť vhod, ak vám mapy vygenerované podľa nastavení východzích renderovacích pravidiel pre Mapnik alebo Osmarender nevyhovujú a chcete si napríklad zvoliť vlastný font/farbu pre elementy alebo povoliť či zakázať ich zobrazovanie.

Prvým krokom je stiahnutie .osm dát pre príslušnú geografickú oblasť. Najpohodlnejším riešením je využitie java OSM editora josm. Prejdeme do menu Súbor - Stiahnuť z OSM a myšou vyberieme v karte Aktuálna mapa oblasť, ktorej mapu budeme generovať. Potvrdíme a po stiahnutí dát ich uložíme na disk.

Teraz potrebujeme mapový renderer. Ponúka sa trebárs Mapnik alebo Osmarender, mne ako najjednoduchší na inštaláciu prišiel perlový skript http://wiki.openstreetmap.org/wiki/Osmarender/orp - Osmarender in Perl. U mňa vyžadoval len dodatočnú inštaláciu niekoľkých perlových modulov (viď spomínaný odkaz).

Ďalšou ingredienciou je súbor xml pravidiel, podľa ktorých bude rendering prebiehať. Tento súbor nemusíme samozrejme vytvárať od začiatku, oveľa efektívnejšie bude použiť už predpripravený, ktorý upravíme podľa našich požiadaviek. Takéto súbory nájdeme na svn osm, konkrétne na stránke http://svn.openstreetmap.org/applications/rendering/osmarender/stylesheets/. Nezabudnite tiež stiahnuť symboly (svg súbory v adresári symbols), inak vám bude orp vypisovať chyby, že dané súbory nevie nájsť. Popisom konkrétnych úprav sa nebudem zaoberať, verím, že po chvíľke študovania súboru ho pochopí každý. Jednu vec však treba urobiť, aby sme mohli neskôr mapu presne skalibrovať. Do xml súboru s pravidlami pridáme tag, ktorý bude popisovať hranicu (bounding box) mapy. Pre mapu Košíc by riadok mohol vyzerať takto:
<bounds minlat="48.7400" maxlat="48.7486" minlon="21.2448" maxlon="21.2471" />

Teraz môžme prejsť k renderingu. Z osm dát vytvoríme na základe xml pravidiel pomocou or/p renderera svg súbor nasledovným príkazom:

./orp.pl -r rules.xml data.osm

Vygenerovaný vektorový súbor data.svg prevedieme do rastrového png napr. v inkscape. Rozlíšenie exportovaného súboru závisí od použitia, podľa mojich skúseností je ako postačujúce maximum 550 dpi pre detailnú mapu. Mapu rozkrájame skriptom TBCutter.pl (pre stiahnutie sa treba zaregistrovať na fóre):
./TBcutter.pl -f mapa.png
Posledným krokom je vytvorenie plaintextového .gmi súboru, podľa ktorého sa bude pixelová pozícia x/y prevádzať na súradnice. Použite takúto šablónu:
Map Calibration data file v3.0
nazov suboru s rastrovou mapou
sirka mapy v pixeloch
vyska mapy v pixeloch
0;0;minlon (vid tag bounds);maxlat (vid tag bounds);
sirka mapy v pixeloch;0;maxlon;maxlat;
0;vyska mapy v pixeloch;minlon;minlat;
sirka mapy v pixeloch;vyska mapy v pixeloch;maxlon;minlat;
Príklad:
Map Calibration data file v3.0
data-21-02.png
10147
11525
0;0;21.1620;48.7869;
10147;0;21.3287;48.7869;
0;11525;21.1620;48.6620;
10147;11525;21.3287;48.6620;
Teraz už len stačí .set, .gmi a adresár s nakrájanou mapu preniesť do mobilu a načítať ju v aplikácii.

Update: Celé by to šlo zautomatizovať nejak takto:

#!/bin/bash
###############################
# rules file already contains
# <bounds ..> tag
mapname=ke-osm-feb28
rules=rules.xml
minlat=48.6871
maxlat=48.7656
minlon=21.194
maxlon=21.2915
dpi=500
##############################
wget -O data.osm "http://www.openstreetmap.org/api/0.5/map?bbox=${minlon},${minlat},${maxlon},${ma
xlat}"
./orp.pl -r ${rules} data.osm
inkscape --without-gui -Df data.svg -d ${dpi} -e ${mapname}.png
./TBcutter.pl -f ${mapname}.png
width=$(file -b ${mapname}.png | sed -n "s/^[^0-9]*\([0-9]*\) x.*/\1/p")
height=$(file -b ${mapname}.png | sed -n "s/^[^0-9]*[0-9]* x \([0-9]*\).*/\1/p")
echo "Detected width is ${width}"
echo "Detected height is ${height}"
echo "Map Calibration data file v3.0
${mapname}.png
${width}
${height}
0;0;${minlon};${maxlat};
${width};0;${maxlon};${maxlat};
0;${height};${minlon};${minlat};
${width};${height};${maxlon};${minlat}; " > ${mapname}/${mapname}.gmi

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

=^..^= AmigaPower® avatar 22.2.2009 13:49 =^..^= AmigaPower® | skóre: 30 | blog: BLB | Praha
Rozbalit Rozbalit vše Re: Výroba mapy pre Trekbuddy z OSM na mieru
Odpovědět | Sbalit | Link | Blokovat | Admin
Nahrál jsem si trekbudy do founu, ale pak jsem to v něm nenašel. Včera jsem se dozvěděl, že je to údajně tím, že je v něm "modifikovaný" soft od operátora, který logicky chce aby člověk používal vestavěný GPS soft a tím i stahování map online na kterém mně může stáhnout o penízky za stažený data...
I♥DRX * www.KERNELULTRAS.org
kyknos avatar 23.2.2009 08:14 kyknos | skóre: 18 | blog: Quid novi? | Ranša Rosa
Rozbalit Rozbalit vše Re: Výroba mapy pre Trekbuddy z OSM na mieru
nikdy nekupovat telefon od operatora
So the Nationalists and the Socialists have the same policy on Brexit. They should get together and form a...
=^..^= AmigaPower® avatar 23.2.2009 08:57 =^..^= AmigaPower® | skóre: 30 | blog: BLB | Praha
Rozbalit Rozbalit vše Re: Výroba mapy pre Trekbuddy z OSM na mieru
Souhlas, je služební...
22.2.2009 18:55 michal00 | skóre: 14 | blog: OpenStreetMap
Rozbalit Rozbalit vše Re: Výroba mapy pre Trekbuddy z OSM na mieru
Odpovědět | Sbalit | Link | Blokovat | Admin
len doplním že preddefinové exporty pre trekbuddy sú na http://wiki.freemap.sk/TrekBuddy.

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.