Příprava mapy pro aplikaci jMap
Jedna z nejdůležitějších funkcí aplikace je zobrazení polohy uživatele v mapě. Aplikace není závislá na jediné mapě nebo dodavateli mapových podkladů, ale uživatel může použít v podstatě libovolnou rastrovou mapu, stačí ji převést do vhodného formátu a zkalibrovat.
Digitální rastrové mapy
Mapy používané v počítači lze rozdělit na vektorové a rastrové. Zatímco vektorové mapy obvykle pracují s vrstvami (silnice, vodstvo, zeleň, stavby...) a objekty představují polygony, křivky a body, rastrová mapa je pro počítač pouhým obrázkem. Vektorové mapy obsahují více informací, pro uložení v počítači jsou výhodnější, je možné další zpracování (například hledání optimální cesty), je možné libovolně měnit zobrazení a dokonce lze z vektorové mapy vyrobit rastrovou mapu, zatímco opačný proces je v podstatě nemožný.
Důvodem, proč jMap používá rastrové mapy je jejich dostupnost. Jako rastrovou mapu lze použít leteckou fotografii, satelitní snímek, libovolnou naskenovanou mapu, případně screenshot z navigačního programu nebo webové stránky. Pokud si uživatel stáhne pro vlastní potřebu mapu z internetu, je to naprosto legální, pouze ji nesmí dál šířit nebo prodávat. Digitální rastrové mapy lze také běžně zakoupit, zatímco vektorová data v otevřeném formátu (nezašifrovaná pro určitý program) se prodávají za ceny řádově vyšší a jejich bezplatné legální pořízení je problém.
Přepočet souřadnic
Výhodou rastrové mapy je jednoduché zpracování v navigační aplikaci. Narozdíl od vektorových dat, kde by bylo nutné přesně definovat, jakým způsobem se mají jednotlivé vrstvy zobrazovat (např. vodstvo modře, čím hlubší moře, tím je modrá barva tmavší, zeleň zelenou barvou s odstínem podle typu porostu, města hnědě s různým symbolem podle počtu obyvatel...), u rastrové mapy je již vše dané a aplikaci stačí bitmapu zobrazit standardním způsobem.
Jedinou komplikací je přepočet mezi GPS souřadnicemi a pixely v obrázku, protože v bitmapě takové informace nejsou a pokud se uživatel nachází například v Praze, aplikace neví, kam do mapy ČR nakreslit jeho polohu. K definici převodního vztahu slouží kalibrace, kdy uživatel definuje například, že levý horní roh mapy má zeměpisné souřadnice 50.55N 13.25E, pravý dolní roh souřadnice 48.75N 18.35E atd. Pomocí těchto kalibračních bodů lze určit převodní vztah mezi zeměpisnými souřadnicemi a použitou mapou.
Závislost mezi souřadnicemi a polohou v mapě bohužel obvykle není lineární, ale používají se různé projekce a souřadné systémy, což přesný výpočet znažně komplikuje. Jelikož jMap používá kvůli kompatibilitě se staršími telefony pouze celočíselnou aritmetiku, byla místo přesného výpočtu použita jednoduchá aproximace, kdy jsou zeměpisné souřadnice násobeny maticí H o velikosti 3x3.

K určení hodnoty matice H potřebujeme znát zeměpisné souřadnice alespoň čtyř různých pixelů v mapě. Zobrazení pomocí této matice bude přesné ve čtyřech použitých bodech, ostatní budou interpolovány. Pro mapy malého území jsou odchylky při zobrazení polohy zanedbatelné, výpočet je velmi rychlý a univerzální. U map větších území (větších než mapa okresu) však již byly odchylky znatelné, proto byla matice H rozšířena na velikost 3x5 a ve vzorci bylo použito navíc druhé mocniny zeměpisné šířky a délky.

Tato metoda již umožnila například kalibraci podrobné mapy České republiky s přijatelnou chybou. Jelikož však matice obsahuje patnáct neznámých, je k jejímu určení potřeba sedm kalibračních bodů. Pokud je bodů méně, lze některým prvkům matice přiřadit nulovou hodnotu a použít tak jednodušší transformaci.
Běžného uživatele nemusí výpočet matice H příliš zajímat, protože ji za něho vypočítá skript při kalibraci mapy. Tyto informace mohou být užitečné při tvorbě utilit pracujících s mapami pro jMap.
Pořízení a konverze mapy
Chcete-li do aplikace přidat novou mapu, prvním krokem je pořízení obrázku s mapou a převedení do použitelného grafického formátu. Snadno lze mapu stáhnout z některých webových stránek, například Mapy.cz nebo Google Maps. Nejsnazší je mapu "vyfotit" klávesou Print Screen, vložit do grafického programu a oříznout z obrázku přebytečné okraje. Získání mapy větší oblasti je již složitější, ručně spojovat mapu z jednotlivých výřezů je velmi pracné, nicméně existují i programy, které dokáží stáhnout mapu o zadaných rozměrech ze serveru automaticky.
Přestože jMap může pracovat s mapou uloženou v jediném souboru, je takové řešení použitelné jen pro malé soubory, protože k načtení obrázku velkých rozměrů nemá většina mobilních telefonů dostatek paměti a navíc je to poměrně pomalé. Výhodnější je rozdělit mapu na malé čtverce (nebo obdélníky) a ty uložit do samostatných souborů. Na obrazovce nikdy není zobrazena celá mapa, takže aplikaci stačí vždy načíst pouze viditelné části mapy, což je mnohem rychlejší.
K rozdělení mapy na dlaždice existují různé programy, například pro GIMP lze použít plugin ot2gps. Pro jMap je podstatné, aby výsledné soubory byly ve formátu PNG (na některých telefonech mohou fungovat i jiné formáty) a rozměry všech dlaždic musí být shodné. Soubory je nuné pojmenovávat tak, aby název obsahoval souřadnice levého horního rohu obrázku, tedy místo na které dlaždice patří.
Například chceme-li mapu o velikosti 768 x 512 pixelů rozdělit na šest částí o velikosti 256 x 256 pixelů, mohou se vytvořené soubory jmenovat map_0_0.png, map_256_0.png, map_512_0.png, map_0_256.png, map_256_256.png a map_512_256.png.

Velikost mapy nemusí být přesně násobkem velikosti dlaždice, to aplikaci nevadí, pouze obdélníky v posledním sloupci (úplně vpravo) nebo řádku (dole) vyjdou menší, například poloviční.
Kalibrace mapy
Aby zeměpisné souřadnice bylo možné zobrazit v rastrové mapě, je nutné definovat převodní vztah a k tomu potřebujeme nalézt kalibrační body. To jsou takové body, pro které známe jak polohu v mapě, tak skutečné zeměpisné souřadnice.
Polohu bodu v mapě definují souřadnice daného pixelu x a y. Levý horní roh mapy má vždy souřadnice x=0, y=0, směrem doprava roste hodnota x, směrem ke spodnímu okraji se zvyšuje hodnota y. Skutečnou polohu bodu určují zeměpisné souřadnice, tedy zeměpisná šířka (anglicky latitude) a zeměpisná délka (anglicky longitude), obě hodnoty se uvádějí ve stupních.
Kalibračními body mohou být například vrcholy hor, křižovatky silnic nebo jiné přesně zaměřitelné objekty. K zjištění souřadnic v mapě postačí použít běžný grafický editor, ukázat na pixel reprezentující bod myší a souřadnice si přečíst ve status baru. Zjištění zeměpisných souřadnic bývá obtížnější. V některých mapách je možné souřadnice určit podle nakreslené sítě čar, případně lze použít jinou mapu a určit zeměpisné souřadnice tam (online mapové portály obvykle mají funkci na zjištění souřadnic vybraného bodu). Teoreticky je možné souřadnice bodu změřit přímo v terénu, ale taková kalibrace mapy by byla zdlouhavá.
Pokud jsou již kalibrační body k dispozici, například protože byla mapa dříve zkalibrována pro jinou navigační aplikaci, není důvod znovu body hledat, stačí souřadnice bodů přečíst z původního kalibračního souboru (u některých textových formátů je to snadné, jindy to může být složité).
Po zjištění souřadnic kalibračních bodů je posledním krokem zadání souřadnic do kalibračního skriptu. Pro každý kalibrační bod je v tabulce vyhrazen jeden řádek, do kterého se postupně zadávají souřadnice x, y, zeměpisná délka a šířka. Všechny hodnoty se očekávají jako desetinná čísla, to znamená, že souřadnice ve formátu stupňů, minut a vteřin je nutné nejprve převést na hodnotu ve stupních.
Čím více kalibračních bodů je zadáno, tím složitější transformace je použita. Při ručním hledání kalibračních bodů je optimální zadat 4 body. Méně bodů nevede k použitelnému výsledku, při více bodech je již velmi důležitá přesnost. Použití sedmi kalibračních bodů vede k nejpřesnější transformaci, pokud jsou souřadnice všech bodů změřeny přesně, ale při nepřesné poloze mohou být výsledky více bodů naopak horší. Kalibrační body by neměly být blízko u sebe, ležet na přímkách spojujících jiné kalibrační body nebo být v jejich blízkosti.
Po vyplňení tabulky a potvrzení vygeneruje skript základ INI souboru, ve kterém je nejdůležitější řádek H, což je výsledek kalibrace. Současně jsou zapsány i souřadnice použitých kalibračních bodů. Ty sice aplikace nepoužívá, ale mohly by být užitečné v budoucnu třeba při tvorbě kalibračního souboru pro jiný program. Po doplnění rozměrů mapy v pixelech a cesty k souborům s obrázky je možné již mapu v aplikaci jMap otevřít.
INI soubor
Pro uložení informací o mapě používá aplikace jMap jednoduchý INI soubor. Tento soubor zřejmě není kompatibilní s žádnou jinou aplikací, nicméně typů kalibračních souborů map existuje téměř tolik jako navigačních aplikací a většina z nich není dostatečně zdokumentována, takže bylo výhodnější použití vlastního způsobu uložení dat.
INI soubor může byt pojmenován libovolně (ani přípona ini není nutná), jde o textový soubor, kde každý řádek obsahuje název atributu, znak rovná se (=) a hodnotu atributu. Řádky začínající středníkem jsou považovány za komentář, soubor může obsahovat i prázdné řádky.
Src je povinný atribut a obsahuje cestu k souborům s obrázky mapy. Pokud mapu tvoří jediný soubor, bude zde uveden jeho název, pokud je mapa rozdělena na dlaždice, musí uvedený název obsahovat proměnné $x a $y, například "map_$x_$y.png". Proměnné jsou následně nahrazeny souřadnicemi, na které patří levý horní roh obrázku obsaženého v souboru. Cesta může být jak relativní, která se vztahuje k umístění INI souboru, tak absolutní.
Width a height jsou povinné atributy udávající šířku a výšku celé mapy (před případným rozdělením na dlaždice) v pixelech.
H obsahuje transformační matici použitou k převodu souřadnic mapy zapsanou po řádcích jako desetinná čísla oddělená čárkou. Bude zde tedy 15 hodnot v pořadí: h11, h12, h13, h14, h15, h21, h22, h23, h24, h25, h31, h32, h33, h34, h35. Tento řádek za uživatele vypočítá kalibrační skript.
ImageWidth a ImageHeight jsou nepovinné atributy udávající šířku a výšku jedné dlaždice v pixelech. Není-li uveden aplikace si údaj zjistí ze souboru vlevo nahoře (map_0_0.png).
ArrowFile umožňuje definovat soubor s obrázky, který je na mapě použit jako ukazatel polohy uživatele místo standardní zelené šipky.
PointFile umožňuje definovat soubor s obrázek, který je na mapě použit jako označení polohy vybraného bodu místo standarního kruhu s křížem.
Všechny další atributy v souboru jsou aplikací zatím ignorovány.
Obsah INI souboru mapy může vypadat například takto:
src=cesko_$x_$y.png
width=2048
height=1280
H=2002.134961239918, -228.74480848453115, -0.48198963877796397, 3.451597557565925, -21501.34195863225, 398.50685195359745, 3085.713113461133, -13.31152533153162, -60.87282969410266, -860.6739845110695, 0.004820205747367719, -0.2644147109889409, -0.00018497738038838912, 0.004117553699379592, 10
imageWidth=128
imageHeight=256
Instalace mapy
Jakmile je připraven INI soubor i soubory obsahující obrázky mapy, stačí soubory přesunout do filesystému telefonu a v aplikaci přidat mapu do seznamu dostupných map.
Způsob přístupu k souborovému systému telefonu se velmi liší podle značky telefonu, obvykle je nutný datový kabel a obslužná aplikace od výrobce nebo bluetooth adaptér. Na některých telefonech je možné také soubory nakopírovat na paměťovou kartu přímo pomocí čtečky karet.
Mapy lze také zapsat přímo do JAR souboru aplikace. To je výhodné, pokud telefon neumožňuje přístup java aplikací k souborovému systému. JAR soubor je komprimovaným archívem podobně jako například ZIP a řada komprimačních programů tento formát podporuje, případně lze použít program jar, který je součástí Java SDK. Pokud telefon k instalaci aplikace vyžaduje i JAD soubor, je zde po případné úpravě JARu nutné upravit údaj o velikosti.