User:Lübeck/Garminkarten für Teilgebiete

From OpenStreetMap Wiki
Jump to: navigation, search

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");

Fragen und Anregungen