Wichtig ist, dass der Rechner, auf dem das Skript ausgeführt wird, bestimmte Voraussetzungen mitbringt:
- GMT muss klarerweise installiert sein. Eine Anleitung gibt es hier im Blog. Windows-Dateien können von der GMT-Homepage heruntergeladen werden. Ob das Skript unten auf Windows funktioniert, weiß ich nicht.
- Gegebenenfalls müssen die Pfade angepasst werden. Die meisten Distributionen verwenden inzwischen den GMT-Wrapper „GMT”. Falls das nicht der Fall ist, muss die Variable
$gmtWrappergelöscht werden und die Variablen$gmtCoast,$gmtXYund$gmtTextmit Pfadnamen versehen werden.
Nachdem man alles eingestellt hat (unter Ubuntu sollte das Skript Out-of-the-Box funktionieren), kann man von es von der Kommandozeile ausprobieren: php $gmt_globe.php. Dazu muss php-cli installiert sein.
Das Ergebnis kann sich durchaus sehen lassen:

Die Größe der Weltkugel ist im Skript festgesetzt. Durch Ändern der Variable $dpi lässt sich bestimmen, wie groß das resultierende PNG ist.
- Quelltext: Alles auswählen | Zeilennummerierung an/aus
-
- <?php
- //gmt_globe.php - Code-Schnippsel
- //Copyright (c) 1010, Maximilian Kalus, auxnet.de
- //Ausgabe:
- $lon = '11.566667'; //Längengrad
- $lat = '48.133333'; //Breitengrad
- $name = 'München'; //Name des Ortes
- $output = '/tmp/globus'; //Pfad und Namensteil für Ausgabedatei
- $is_utf8 = true; //System ist UTF-8?
- $dpi = 150; //DPI der Ausgabe: 72 oder 96 ist gut für den Bildschirm, 300 oder 600 für den Druck
- //Umgebung:
- $convert = '/usr/bin/convert'; //Pfad zu ImageMagick convert (oder GraphicsMagick Wrapper)
- $gmtWrapper = '/usr/bin/GMT'; //GMT-Wrapper oder leer
- $gmtCoast = 'pscoast'; //Name oder Pfad zu pscoast
- $gmtXY = 'psxy'; //Name oder Pfad zu psxy
- $gmtText = 'pstext'; //Name oder Pfad zu pstext
- ); //ggf. Umgebungsvariablen für GMT (PHP5)
- //Ausgabe-namen
- $tmpname = $output.'.ps'; //Ausgabe in PS-Datei
- //GMT-Generierung starten
- //Prozess-Pipes erzeugen
- $pipes = null;
- // in die geschrieben wird
- );
- //Globus selbst erstellen
- //PHP-Versionen unterscheiden sich...
- if (phpversion() < 5) $process = proc_open($gmtWrapper.' '.$gmtCoast.' -Rg -JG'.$lon.'/'.$lat.'/16c -B15g15 -Dc -A5000 -W0.3pt -G230 -P -K', $descriptorspec, $pipes);
- else $process = proc_open($gmtWrapper.' '.$gmtCoast.' -Rg -JG'.$lon.'/'.$lat.'/16c -B15g15 -Dc -A5000 -W0.3pt -G230 -P -K', $descriptorspec, $pipes, $cwd, $env);
- }
- //Punkt eintragen
- if (phpversion() < 5) $process = proc_open($gmtWrapper.' '.$gmtXY.' -Rg -JG'.$lon.'/'.$lat.'/16c -Ss0.15 -G255/0/0 -O -K', $descriptorspec, $pipes);
- else $process = proc_open($gmtWrapper.' '.$gmtXY.' -Rg -JG'.$lon.'/'.$lat.'/16c -Ss0.15 -G255/0/0 -O -K', $descriptorspec, $pipes, $cwd, $env);
- }
- //Titel eintragen
- if (phpversion() < 5) $process = proc_open($gmtWrapper.' '.$gmtText.' -Rg -JG'.$lon.'/'.$lat.'/16c -G0/0/0 -Dj0.06/0.06 -O', $descriptorspec, $pipes);
- else $process = proc_open($gmtWrapper.' '.$gmtText.' -Rg -JG'.$lon.'/'.$lat.'/16c -G0/0/0 -Dj0.06/0.06 -O', $descriptorspec, $pipes, $cwd, $env);
- }
- //GMT ist abgeschlossen
- //PNG erzeugen
- //PS-Datei löschen
- ?>
Codeschnippsel: PNG-Weltkugel per Generic Mapping Tools in PHP-Skript erzeugen (Linux/Ubuntu)
Die Generic Mapping Tools (GMT) sind ein mächtiges Werkzeug zur Erstellung von Kartenmaterial. Mit etwas Aufwand kann man GMT auch in ein PHP-Skript einbauen und somit Karten von einem Server z.B. für eine Website erzeugen lassen. Folgendes Codeschnippsel zeigt, wie's geht.
Der folgende Code zeigt den Aufruf von GMT von PHP aus. Längen- und Breitengrad muss angegeben werden sowie der Name des Ortes, der dargestellt werden soll und der Ausgabeort. Das Beispiel speichert die Karte in das /tmp/-Verzeichnis unter dem Namen „globus.png”.
- 1 Kommentare
Edit
Edit: Korrekturen und Abhängigkeit von ImageMagick entfernt.