User:Lübeck/Garminkarten für Teilgebiete
Garminkarten für Teilgebiete
Wie ich auf meiner User-Seite schon geschrieben habe verwende ich für meinen Garmin-GPS-Empfänger die aktuellen Kacheln von Computerteddy [1].
Neben dem kompletten Paket für Deutschland und Europa stellt Computerteddy diese Daten auch einzeln zur Verfügung.
Damit ich nicht immer die kompletten Pakete ziehen muss habe ich mir einige Hilfsroutinen (Windows) gebastelt die ich Euch nachfolgend vorstellen möchte. Abgesehen davon entlastet dieses den Traffic bei
Computerteddy.
Moritz Ringler bietet einen Rechner OSM/Computerteddy Garmin IMG tile calculator [2] an der ermittelt welche Einzelkacheln von Computerteddy benötigt werden. Auf
der Seite werden direkte Links zu gespiegelten Kacheln angeboten. Darüberhinaus gibt es ein SH-Skript mit dem alle gelisteten Kacheln in einem Arbeitsgang gezogen werden können. Da, aus Erfahrung, nicht von
einer zeitnahen Spiegelung ausgegangen werden kann und das SH-Script eine weitere Programminstallation erforderlich macht bin ich einen eigenen Weg, auf PERL-Basis gegangen. Perl verwende ich schon für
andere Werkzeuge.
Alle nachfolgenden Datendateien, Skripte und die erforderliche sendmap.exe werden in einem gemeinsamen Verzeichnis hinterlegt. Für das Perl-Skript wird ein spezielles Modul für das entpacken der bz-Dateien
benötigt. Dieses kann unter http://www.digistar.com/bzip2/v100/bzip2-100-x86-win32.exe heruntergeladen werden
In einer einfachen ASCII-Datei (z.B. img-list-DEU-nord.txt) werden untereinander die erforderlichen Kachelnamen des betreffenden Gebietes hinterlegt.
63273619.img 63273620.img 63273621.img 63273622.img ...
In einem Batch-File (img-kacheln_download.bat) wird die Steuerung des Perl-Skriptes und das Verschmelzen der Kacheln übernommen.
@ECHO OFF echo Herunterladen von Garmin-Kacheln - definierter Bereich echo Jan Tappenbeck, 11/2008 echo. echo Image-Liste:%1 echo. echo Herunterladen der Kacheln perl img-kacheln_download.pl %1 echo. echo Erstellen der Garmin-IMG-Datei sendmap20 -l -f %1 echo Loeschen der IMG-Dateien echo. Delete_Images pause
Die Funktion Delete_Images.bat löscht die entpackten IMG-Dateien - etwas besseres ist mir bisher noch nicht eingefallen.
@echo off echo Loeschen der eingespielten TDB/IMG-Dateien [Ziffer 0-9]*.img echo Jan Tappenbeck, 11/2008 echo Loeschen der img-Dateien del 0*.img /q del 1*.img /q del 2*.img /q del 3*.img /q del 4*.img /q del 5*.img /q del 6*.img /q del 7*.img /q del 8*.img /q del 9*.img /q echo Loeschen der tdb-Dateien del 0*.tdb /q del 1*.tdb /q del 2*.tdb /q del 3*.tdb /q del 4*.tdb /q del 5*.tdb /q del 6*.tdb /q del 7*.tdb /q del 8*.tdb /q del 9*.tdb /q pause
Per Drag&Drop wird die Datei mit den herunterzuladenden Kacheln auf die img-kacheln_download.bat. Der übergebenen Listenname wird jetzt an das Perl-Skript übergeben. Nacheinander werden die kompremierten
Kacheln heruntergeladen und entpackt. Ist dieses geschehen, dann werden die aktuellen Kacheln mit (siehe [3] und [4]) zur GMAPSUPP.IMG
verschmolzen und stehen für den Transfer zum Empfänger bereit. Abschließend werden noch die bz-Dateien gelöscht.
An dieser Stelle ein Dankeschön an das Forum der Perl-Community [5] für die Hilfe bei der Erstellung dieses Perl-Skriptes.
#!/usr/bin/perl # ------------- Historie ------------ # 2009-01-12 JT Erweiterung der URL um ein Verzeichnis aus den ersten 5 Buchstaben des Dateinamens. # Dieses ist erforderlich, wenn die Daten direkt aus dem Verzeichnis von Computerteddy # gezogen werden. Lt CT ist die Spiegelung auf osm.ammit.de etwas unzuverlässig. use strict; use warnings; use LWP::Simple; # Variablendefinition my $url=''; print("Herunterladen von IMG-Kacheln....\n"); # Verzeichnis in welchem ich mich befinden muss my $pfad='D:/DATEN/JAN/openstreetmap/Perl_4osm/ImageDownload/'; # Definition des Bereiches in GRAD: -6,36.2,-2,37.5 # Liste mit den Defintionen für den Kachel-Download #Liste aus Perl-Aufruf my $liste=$ARGV[0]; # URL zum Verezeichnis mit den Image-Dateien - endet auf BACKSLASH !!! # nachfolgende URL ist ggf. anzupassen !!!!!! my $url4image='http://openstreetmap.teddynetz.de/latest/img/'; #Prefix für die Pack-Datei my $bz_prefix='.gz'; # Programm zum Entpaken der bzip2-komprimierten Dateien # sollteste du installieren, oder etwas anders nutzen. #quelle: http://www.digistar.com/bzip2/v100/bzip2-100-x86-win32.exe #nachfolgende Zeile ist entsprechend anzupassen !!!!!! my $unzip='C:/Perl/eg/gzip -d'; # Verzeichnisname fuer die Datenauslese bei Computerteddy - die ist etwas anders organisiert als bei osm.ammit.de my $datafolder = ''; # öffnen der Liste mit den Image-Dateien open(my $fh, '<', $liste) or die "Fehler bei open $liste ($!)\n"; # Auslesen der Dateinamen while(my $kachelname=<$fh>){ chomp($kachelname); $datafolder = substr($kachelname,0,5); $url=$url4image.$datafolder.'/'.$kachelname.$bz_prefix; print("$kachelname\n"); # print("download $kachelname.... \n"); my ($file)=$url=~m|/([^/]+?)$|; # etwas ausfuerlichere Ausgabe der Fehler beim Download # zudem wird jetzt nur entpackt wenn wirklich was herunter geladen wurde. print("unzip ...\n"); print("$pfad$file.\n\n"); my $rc=getstore($url, "$pfad$file"); if( is_success($rc)){ system("$unzip $pfad$file") ==0 or warn "Fehler bei $unzip $pfad$file ($@)\n"; # < Fehlergund ausgeben }else{ warn "Fehler bei download $url nach $pfad$file (".status_message($rc).")\n"; # < Fehlergrund mit ausgeben } } close($fh); print("\n**** perl-script-ende ****\n\n");