| 
19.05.2007
 | 
13:23

Generic Mapping Tools unter Ubuntu

Die Generic Mapping Tools (GMT) sind zweifelsohne eine der tollsten Erfindungen seit dem elektrischen Reiskocher – hier eine kleine Anleitung, wie man diese unter Ubuntu vollständig zum Laufen bringt.

GMT installieren

Um die Generic Mapping Tools in cooler weise benutzen zu können, müssen sie erst installiert werden:

sudo apt-get install gmt gmt-manpages gmt-coast-low bzip2

Wer will, kann sich auch noch das Tutorial und die Anleitungen herunterladen, die wirklich gut sind (die Pakete heißen gmt-doc, gmt-doc-ps bzw. gmt-doc-pdf, gmt-examples, gmt-tutorial, gmt-tutorial-ps, gmt-tutorial-pdf). Alternativ surft man nach Hawaii: http://www.soest.hawaii.edu/gmt/.

Hochauflösende Küstenlinien

Ok, jetzt brauchen wir noch einige Küstenliniendaten und topographische Daten. Diese werden nicht als Debian-Pakete angeboten, also muss man sie auf die gute alte Art herunterladen und sie installieren…

Dafür geht man z.B. auch den GMT-Mirror der Uni Wien und lädt sich die Küstendaten von High und evt. noch von Full herunter (letztere brauchen wir hier nicht, aber für manchen mag das von Interesse sein, wenn man recht hochauflösende Daten braucht).

sudo mkdir /usr/share/gmt/coast
cd /usr/share/gmt/coast
sudo wget ftp://gd.tuwien.ac.at/pub/gmt/4/GMT4.2_high.tar.bz2
sudo bunzip2 GMT4.2_high.tar.bz2
#optional:
sudo wegt ftp://gd.tuwien.ac.at/pub/gmt/4/GMT4.2_full.tar.bz2
sudo bunzip2 GMT4.2_full.tar.bz2

Das waren die Küstenlinien – jetzt müssen wir sie noch GMT bekannt machen:

cd /usr/share/gmt/
sudo su
# Im SU-Modus:
cat >>coastline.conf << eof
/usr/share/gmt/coast
EOF
exit
eof

Topographische Daten

Als letztes brauchen wir noch die topgraphischen Daten der Welt. Man kann sich diese von der Seite http://www.ngdc.noaa.gov/mgg/topo/gltiles.html holen und umwandeln, aber das ist ein recht aufwändiger Prozess und außerdem brauche ich persönlich keine so hochauflösenden topographischen Daten wie diese... Wen das aber interssiert, kann eine recht gute Anleitung zur Erstellung von grds auf Wikipedia oder einer englischen Anleitungsseite finden. Ich verwende eine etwas einfachere Karte, die jedoch in den meisten Fällen ausreichen sollte:

cd /usr/share/gmt/dbase/
sudo wget ftp://ftp.ualg.pt/users/jluis/candi_data/etopo2v2.grd.bz2
sudo bunzip2 etopo2v2.grd.bz2

Ich verwende die Datei grdraster.info nicht – wer dafür eine Anleitung hat, schicke mir diese bitte – bin dankbar für Hinweise. Meistens lege ich einen Symlink in das Verzeichnis, in dem ich die Karten erstelle – das funktioniert gut!

Beispiel: Europa in Farbe

Hier ein kleines Beispiel, um zu testen, ob alles funktioniert:

mkdir ~/maptest
cd ~/maptest
ln -s /usr/share/gmt/dbase/etopo2v2.grd

Wir brauchen auch noch einige Farbwerte für die Karten – diese hier sind von Wikipedia inspiriert und für unsere Ziele gut verwendbar:

cat >land.cpt <<EOF
# File land.cpt
# COLOR_MODEL = RGB
#
0 0 97 71 50 16 122 47
50 16 122 47 500 232 215 125
500 232 215 125 1500 161 67 0
1500 161 67 0 2000 130 30 30
2000 130 30 30 3000 110 110 110
3000 110 110 110 4000 255 255 255
4000 255 255 255 6000 255 255 255
B 0 97 71
F 255 255 255
N 255 255 255
EOF

cat >meer.cpt <<EOF
# File meer.cpt
# COLOR_MODEL = RGB
#
-11000 36 38 175 -5500 56 58 195
-5500 56 58 195 -3000 70 72 214
-3000 70 72 214 -2000 81 102 217
-2000 81 102 217 -750 100 129 223
-750 100 129 223 -70 131 161 230
-70 131 161 230 -20 164 192 240
-20 164 192 240 0 170 200 255
N 170 200 255
F 170 200 255
B 170 200 255
EOF

Unter Ubuntu wird GMT in einem Wrapper bedient, d.h. man muss vor jeden Befehl GMT stellen (ein Skript, das dann alles weitere regelt).

So können wir z.B. die Vorgaben für Stiftdicken ändern, indem wir schreiben:

GMT gmtset GRID_PEN_PRIMARY 0.75
GMT gmtset GRID_PEN_SECONDARY 0.25

Es sollte keine Fehlermeldung kommen und eine Datei .gmtdefaults4 im Verzeichnis zu finden sein, die diese Vorgaben speichert…

Ok, wir richten uns der Einfachheit halber einige Umgebungsvariablen ein, um unsere Beispielkarte zu erstellen:

OUTFILE=europa
RANGE="-R-11/20/32/60"
PROJ="-JM16c"

Outfile ist der Dateiname, Range bestimmt die Koordinaten, die wir auf der Karte haben wollen (hier soll die Karte einen Bereich von 11° West bis 20° Ost und zwischen dem 32. und 60. Breitengrad Nord anzeigen). PROJ enthält die Projektion – in unserem Falle eine Mercatorprojektion der Breite 16 cm.

Um die Topographie schön einzuzeichnen, erstellen wir einen Kartenraster und eine Schattenkarte (d.h. nur die Kontinentalumrisse) der etopo2-Vorlage:

GMT grdcut etopo2v2.grd $RANGE -G$OUTFILE.grd
GMT grdgradient $OUTFILE.grd -A45 -Ne0.5 -G${OUTFILE}_schatten.grd

Beide neuen Dateien sollten um die 3 MB haben…

So, nun fangen wir richtig an – alles ist vorbereitet, jetzt können wir Europe erstellen:

GMT grdimage $OUTFILE.grd -Cmeer.cpt $RANGE $PROJ -P -K > $OUTFILE.ps
GMT pscoast -Gc -Di $RANGE $PROJ -P -K -O >> $OUTFILE.ps
GMT grdimage $OUTFILE.grd -I${OUTFILE}_schatten.grd -Cland.cpt $RANGE $PROJ -P -K -O >> $OUTFILE.ps
GMT pscoast -Q -K -O >> $OUTFILE.ps

Was passiert hier? In der ersten Zeile wird eine Karte mit dem Meer erstellt und in die ps-Datei (unsere Endatei) geschrieben. Dann wird ein CLipping begonnen, nämlich das Land, das ja schön ausgeschnitten auf dem Meer erscheinen soll. Diese Projektion der topographischen Daten wird in der dritten Zeile gemacht und in der vierten das Clipping wieder aufgehoben, so dass die Karte wieder schön angezeigt werden kann.

Nun, zeichnen wir noch eine schöne Küstenlinie und Flüsse ein:

GMT pscoast -Di -Bs10g10 -I1/2/40/40/120 -I2/1/40/40/120 $RANGE $PROJ -P -K -O -W0.2pt >> $OUTFILE.ps

Die einzelnen Einstellungen kann man in der Anleitung von GMT nachlesen, in Kürze: Di = mittelgute Kartenauflösung, B = Kartenraster, etc., I = primäre und sekundäre Flüsse.

Als letztes wollen wir noch einige Daten zu Orten auf der Karte platzieren. Hierzu erstellen wir eine Lokalitätendatei:

cat > locations_utf.txt <<EOF
10.88847 48.36785 16 0 0 1 Augsburg
-3.70601 40.41834 16 0 0 1 Madrid
-4.71912 41.65277 16 0 0 1 Valladolid
-9.13169 38.70968 16 0 0 1 Lissabon
-0.10172 51.51851 16 0 0 RB London
11.24313 43.77795 16 0 0 1 Florenz
8.92962 44.41853 16 0 0 CB Genua
12.33046 45.43576 16 0 0 RB Venedig
3.61804 51.50064 16 75 0 0 Middelburg
4.89232 52.37078 16 0 0 LM Amsterdam
4.41670 51.21747 16 0 0 1 Antwerpen
4.35621 50.84631 16 0 0 CT Brüssel
11.06030 49.45107 16 0 0 1 Nürnberg
10.02383 53.55297 16 0 0 LM Hamburg
10.64654 53.86914 16 0 0 RB Lübeck
6.93503 50.94254 16 0 0 LM Köln
4.83321 45.73955 16 0 0 1 Lyon
5:59:13W 37:22:38N 16 0 0 1 Sevilla
5:18:0W 35:53:12N 16 0 0 LM Ceuta
EOF

Auch hier bitte ich um Nachlesen in der Anleitung…

Da ich Probleme mit der UTF-8-Kodierung und GMT hatte, müssen wir noch die Location-Datei in ein ISO-Format konvertieren:

iconv -f utf-8 -t iso-8859-1 < locations_utf.txt > locations.txt

Der letzte Schritt kann damit gemacht werden. Die Daten werden eingetragen, und die ps-Datei angeschlossen:

GMT psxy -R -JM -Sc0.16 -G0/0/0 -O -K -V <locations.txt >> $OUTFILE.ps
GMT pstext -R -JM -G0/0/0 -Dj0.12/0.12 -O -V <locations.txt >>$OUTFILE.ps

So, nun kann man die Karte mit gv europa.ps bewundern.

Wer nun gs und imagemagick auf seinem Rechner hat, kann das Ganze in eine schöne (sagen wir) JPG-Grafik umwandeln:

gs -dNOPAUSE -sDEVICE=epswrite -dNOCACHE -sOutputFile=$OUTFILE.eps -q -dBATCH $OUTFILE.ps
convert $OUTFILE.eps -quality 80 $OUTFILE.jpg

Hier wird zuerst eine eps-Datei erstellt – mit dem no-cache-Trick, der die Bounding-Box automatisch berechnet… Naja, nicht schön, aber effizient! Convert macht aus dem eps ein JPG.

Hier unser Ergebnis:

 Europakarte

  •  
  • 6 Kommentare
  •  
Gravatar: Hans RoyHans Roy
16.09.2007
18:01

Thanks

…thanks

Gravatar: AnonymousAnonymous
18.11.2008
21:32

Vielen Dank!

Vielen Dank!

Gravatar: SimonSimon
18.06.2009
09:54

Schweizer Grid

Vielen Dank erstmal für die schöne Anleitung!
Ich überlege gerade, ob ich GMT als GIS nutzen soll oder überhaupt kann. Grundvoraussetzung wäre, dass GMT mit dem Schweizer Grid klarkommt (CH1903, basierend auf dem Bessel Ellipsoiden).
Weiß jemand etwas darüber?
Gruß,
Simon Elfert

Gravatar: MaxMax
08.06.2009
13:46

ArcGMT

Wegen der Schweizer Koordinaten: Schau mal unter ArcGMT nach – vielleicht hilft dir das.
Ob man GMT als GIS nutzen kann oder will, kommt vermutlich auf die Anwendung an. GMT kann lediglich Karten projezieren. Muss man Informationen abfragen (z.B. ob eine bestimmte Koordinate im Meer onder an Land liegt), kommt man mit GMT nicht sehr weit.
Max.

Gravatar: SimonSimon
08.06.2009
14:11

Re: Schweizer Grid

Danke für die schnelle Antwort!
Werd mich mal bei ArcGMT schlau machen… aber so richtig viel Hoffnung hab ich nicht mehr.
Trotzdem danke!
Viele Grüße,
Simon

Gravatar: Chr_MChr_M
13.07.2011
15:58

Vielen Dank!

Funktioniert einwandfrei, allerdings sind die angegebenen Links zu den Daten alle tot.

Viele Grüße



Chr_M

Mein Kommentar
Ich möchte über jeden weiteren Kommentar benachrichtigt werden.

Zurück