Offline kaarten op uw mobiel met MGMaps
Tagged:  •    •  

Voor een kleine vakantie naar Zuid-Duitsland dacht ik dat het wel handig zou zijn om wat kaarten van de te bezoeken steden op m'n telefoon te hebben. Natuurlijk heb ik Google Maps wel geïnstalleerd, maar dat wordt een duur grapje als ik dat in het buitenland ga gebruiken. Na een beetje onderzoek ben ik er in geslaagd om offline enkele kaarten beschikbaar te hebben.

Dit zijn slechts wat aantekeningen voor mezelf, en het gaat er van uit dat u een werkende J2ME-telefoon hebt, een PC met Linux (of een ander Unix-achtig beest) en een werkende verbinding tussen PC en de telefoon (USB of Bluetooth).

  1. Download en installeer Mobile GMaps. Dit lijkt op Google Maps, maar deze ondersteunt andere bronnen, zoals Yahoo Maps en OpenStreetMap. Het is niet in staat om Google Maps online te tonen, maar wel als het offline staat. En dat gaan we in de volgende stappen bewerkstelligen. Merk op dat u de ondertekende JAD-versie van het programma dient te installeren, anders zeurt het programma bij iedere leespoging van uw opslagmedium.
  2. We laten de telefoon even voor wat het is en gaan door op de PC. We hebben twee Perl-scripts nodig die alle kaarten automatisch downloaden. U kunt deze hier vinden. De scripts heten Map Tile Cacher (versie 1.34) en MapTileFE (versie 1.22). Dat laatste script dient als front-end voor het eerste script. Zorg ervoor dat beide scripts in dezelfde map staan.
  3. Het frontend-script heeft input nodig. Hier ziet u een script dat een gedeelte van het centrum van München downloadt:
    GoogleMap
    13-16: 48.16434661372288, 11.4697265625 : 48.16801181636728, 11.6455078125
    13-16: 48.15335100578967, 11.4752197265625 : 48.16434661372288, 11.6455078125
    13-16: 48.138690195212064, 11.480712890625 : 48.15335100578967, 11.6455078125
    13-16: 48.16801181636728, 11.480712890625 : 48.17167701901168, 11.6400146484375

    Het komt neer op het downloaden van 4 vierkante gebieden van Google Maps. Iedere regel specificeert een linker bovenhoek en een rechter onderhoek. Daaraan vooraf gaan de zoomniveaus. Dus ieder vierkant wordt in dit geval vier maal gedownload, voor ieder zoomniveau één.

    Dit lijkt nogal veel werk om zoiets te schrijven, en dat is het ook. Gelukkig is er MapCacher.com. Met behulp van een Google Maps-interface kunt u het gebied markeren dat u wenst te downloaden. Voor steden gebruik ik de zoomniveaus 13 t/m 16. Niveau 16 is gedetailleerd genoeg om alle straatnamen te kunnen lezen.
    De gedetailleerdheid van het te genereren script is van toepassing op niet-vierkante gebieden. Hoe meer details u wilt, hoe meer (kleinere) vierkanten er opgevraagd worden. Wanneer u voor grof detail kiest, worden er grotere vierkanten gedownload en bevat het gegevens waar u niet om gevraagd hebt. Minder detail betekent dat het wel sneller klaar is en dat er minder verzoeken naar de kaartservers gestuurd worden.
    Kies ook het kaarttype. Er zijn verschillende soorten kaarten van verschillende bronnen beschikbaar. Voor stedentrips ben ik tevreden met Google Road Maps. Sla het resulterende *.map-bestand in de map op waar u ook de twee Perl-scripts hebt opgeslagen.

  4. We gaat nu het MapTileFE-script uitvoeren:
    $ chmod +x MapTileFE.pl
    $ ./MapTileFE.pl
    Following map files are available.
    Munchen, HongKong, Tokyo,
    Choose one of Map File:

    Voer de naam van het gegenereerde invoerbestand en toets Enter. Nu worden alle kaarten opgehaald. Dit proces kan even duren bij grote kaarten en/of bij veel zoomniveaus. Lees ook de waarschuwing hieronder.

  5. Wanneer het script is voltooid, ziet u dat er een nieuwe map is bijgekomen: MGMapsCache. Deze map dient naar uw telefoon geüpload te worden, naar de root van uw opslagmedium.
  6. Start the MGMaps-toepassing op uw telefoon.
  7. (Optioneel) Wanneer u twee steden hebt gedownload, zal MGMaps centreren op één van die twee steden. Het kan daardoor wat lastig worden om het ander gedownloade gebied te benaderen (er van uitgaande dat u het gebied tussen de steden niet gedownload hebt). Als we toch nog in het binnenland zijn, laten we MGMaps gewoon nog verbinding maken via het mobiele netwerk en lokaliseren de gebieden met de zoekfunctie. Sla deze vervolgens op als Favoriet zodat u er gemakkelijk bij kunt wanneer u offline bent.
  8. In MGMaps moet nog zodanig ingesteld worden zodat het de opgeslagen kaarten laat zien. Ga naar Menu, Settings, Map Browsing. Selecteer daar de opties Stored Maps en Offline Mode. Het Storage Path dient ingesteld te zijn op E:/MGMapsCache wanneer u de map in de root van het extra geheugen hebt opgeslagen.
  9. Indien u enkele opties hebt gewijzigd in de vorige stap, dient u MGMaps opnieuw te starten.
  10. U ziet dat u automatisch gepositioneerd wordt in het gedownloade gebied. U kunt de opgevraagde zoomniveaus gebruiken en de kaart verschuiven alsof u online bent. Klaar!

Waarschuwing
Kaartdiensten vinden het blijkbaar niet zo leuk wanneer er vele verzoeken per seconden worden ingediend (zoals de scripts doen). Ik werd bijvoorbeeld voor 24 uur geblokkeerd bij Google Maps na het downloaden van twee steden. Wat u kunt doen is het front-end script aanpassen zodat deze wat langzamer downloadt, een snelheid die Google misschien wel aanstaat:

for ($Z = $Z1; $Z <= $Z2; $Z++) {
   open(CMD, "|perl MapTileCacher.perl");
   print CMD "$tiles_per_file\n$hash_size\n$MapType\n$Z\n$TopLeft\n$BottomRight\n\n";
   close(CMD);
+  sleep 5
}

Misschien is 5 seconden wel te veel van het goede, maar dat zal wel veilig zijn.

Bronnen:

OpenStreetMap

Je kan je kaarten ook van OpenStreetMap.org halen, je wordt dan niet geblokkeerd, en het is gedetaileerder dan Google Maps!