18.3 Image_GIS 

Besprochene Version: 1.1.1 | Lizenz: PHP-Lizenz 2.02 |
Klassendatei(en): Image/GIS.php |
Eines meiner Lieblingspakete ist Image_GIS von Jan Kneschke und Sebastian Bergmann. Die Abkürzung GIS steht für »Geografische Informationssysteme«, und Sie haben mit dem Paket die Möglichkeit, auf einfachste Art und Weise Landkarten zeichnen zu lassen. Allerdings benötigt das Paket GIS-Daten von den Regionen, die gezeichnet werden sollen. Logischerweise kann das Paket nicht alle Daten von allen Ländern mitbringen, weil das Datenvolumen einfach viel zu groß wäre und sich auch Copyright-Probleme ergeben könnten.
Aber all das ist kein Problem, da Sie die Daten kostenlos bei der GeoCommunity unter www.geocomm.com herunterladen können. Für einzelne Informationen wie Straßen, Landesgrenzen, Gewässer etc. sind jeweils eigene Dateien im E00-Format vorgesehen.
Nachdem Sie die Dateien heruntergeladen haben, können Sie auch schon loslegen. Hierzu übergeben Sie dem Konstruktor die Information, wie groß die zu erstellende Abbildung werden soll. Sie können ein Array übergeben, das über die Schlüssel height und width verfügt und die entsprechenden Angaben als Werte enthält. Maximal darf eine solche Grafik 2048 Pixel hoch oder breit sein. Geben Sie keine Größe an, wird die Datei automatisch 640 x 480 Pixel groß.
Die geografischen Informationen, die in der Grafik vertreten sein sollen, müssen danach jeweils mithilfe der Daten-Dateien hinzugefügt werden. Die Methode addDataFile(), die das für Sie übernimmt, bekommt den Namen der Datendatei und die Farbe übergeben, in der die Linien gezeichnet werden sollen. Die Farbe können Sie hierbei über ihren Namen, also beispielsweise red, green, black, blue, gray angeben, oder Sie nutzen eine hexadezimale Farbangabe.
require_once 'Image/GIS.php'; $groesse=array( 'width' => 490, 'height' => 550 ); $map = new Image_GIS($groesse); $map->addDataFile('./PONET.E00', 'gray'); $map->addDataFile('./RDLINE.E00', 'black'); $map->addDataFile('./DNNET.E00', 'blue'); $map->addDataFile('./PPPOLY.E00', '#ff0000'); $map->setRange(5, 17.2, 47, 55.1); $map->saveImage('deutschland.png'); echo 'Daten gespeichert';
Listing 18.5 Ausgabe einer Deutschlandkarte mit PEAR::Image_GIS
Die Methode setRange() bekommt vier Werte übergeben. Bei diesen vier Fließkommazahlen handelt es sich um die Angabe der Längen- und Breitengrade. Der erste Wert sagt aus, an welchem Längengrad die Ausgabe der Karte beginnen soll, und der zweite definiert, an welchem Längengrad sie endet. Das zweite Koordinatenpaar bezeichnet den ersten und letzten Breitengrad, der auf der Karte dargestellt werden soll. Um diese Koordinaten zu bestimmen, können Sie auf eine »konventionelle« Landkarte zurückgreifen.
Es empfiehlt sich, eine einmal berechnete Karte als Datei abzuspeichern, da die Erstellung sehr ressourcenintensiv ist, wie Sie feststellen werden. Neben der recht langen Rechenzeit benötigen die Scripts auch sehr viel Speicher. Daher kann es sein, dass Sie die PHP-Konfigurationsdatei überarbeiten müssen, um Ihren Scripts mehr Speicher zuzubilligen.
Möchten Sie die Datei dennoch direkt an den Client senden, können Sie an Stelle der Methode saveImage(), die die Datei speichert, die Methode showImage() nutzen.
Standardmäßig werden die Dateien im PNG-Format erstellt. Allerdings unterstützt das Paket auch den Datentyp SVG, den Sie selektieren können, wenn Sie das Array, das dem Konstruktor beim Instanziieren übergeben wird, um den Schlüssel renderer erweitern, der auf den Wert SVG verweisen muss.
Abbildung 18.4 Mit PEAR::Image_GIS generierte Deutschlandkarte