Aus Linux-Magazin 10/2001

Mapserver-Projekt der TU München und der Stadtverwaltung

Die Stadt München bietet in Zusammenarbeit mit der Technischen Universität einen Service an, bei dem übers Internet Geodaten von einem Linux-basierten Mapserver abgerufen und on the fly in Bilddaten umgewandelt werden. Eine feine Sache – nicht nur für Leute mit Umzugsplänen.

Sie suchen Informationen? Zum Beispiel über die so genannten harten Faktoren wie Miet- und Immobilienpreise oder die weichen wie das Renommee Ihrer neuen Wohngegend? Vielleicht haben Sie auch noch darüber hinaus gehende Wünsche, etwa eine gesunde Wohnumwelt, und suchen Hinweise dazu? Diese und viele weitere geografisch referenzierten Informationen stellt ein Server zur Verfügung. Linux-Magazin-Leser kennen bereits solche Mapserver, die es auch als freie Software gibt: Frank Koormann stellte den UMN-Mapserver, der hier zum Einsatz kommt, in seinem Artikel in der Ausgabe 9/2000 vor.

Diese Dienste bieten eine neue Chance: Zum Beispiel können Sie bei einer Adressensuche blitzartig auch die unterschiedlichen Umweltaspekte in er künftigen Wohnumgebung anzeigen lassen: Egal ob Ozonbelastung, Mobilfunkanlagen oder Grün- und Freiflächen – Information at your fingertips!

Cookie-Handling und Perl-CGIs

Umweltinformationen für Stadt und Region München wurden bislang mit einem Mapserver unter Windows NT im Internet angeboten, aber sowohl Betriebssystem-Stabilität als auch Programmierumgebung gaben wenig Anlass zur Zufriedenheit: Die bootende Hand des Administrators musste oft eingreifen, die Kombination Dispatcher-DLL und Mapserver-OCX war nicht zum Cookie-Handling zu bewegen, Perl-CGIs unter NT waren langsam – um nur ein paar Beispiele zu nennen.

In dieser Situation wurde auf der Tagung Computer Aided Planning (CAP) 1999 [1], einer jährlichen Tagung des Instituts für Städtebau und Wohnungswesen, die Idee einer Kooperation zwischen dem Lehrstuhl für Raumforschung, Raumordnung und Landesplanung sowie dem Referat für Gesundheit und Umwelt der Landeshauptstadt München (RGU) [2] geboren.

Am Lehrstuhl ist seit 1998 ein Linux-Server mit einer datenbankbasierten (ADABAS) WWW-Applikation für statistische Gemeindedaten in Bayern [3] (RIO, Regional Informationen Online) in Betrieb, und dieses System lief und läuft störungsfrei. Bei Recherchen fiel die URL des Mapservers der University of Minnesota (UMN) [4] auf, und das war auch schon die endgültige Geburtsstunde für das gemeinsame Mapserver-/XML-Projekt namens DREAM (Digitaler Regionalatlas München) [5]. Sicherlich ein Kandidat für den Obfuscated URL Contest, aber leider war die Domain dream.de bereits an eine Partnervermittlungs-Agentur für Damen verschiedener Nationalität vergeben. ;-)

Geodaten für Umweltschutz und Planung

Die Aufgabenstellung “kartografische Umwelt- und Planungsinformation für die Öffentlichkeit” an eine Behörde beziehungsweise einen Raumplanungs- Lehrstuhl umfasst eine Reihe zentraler Anforderungen:

  • Darstellung ausschließlich kartografischer Inhalte
  • Integration von Vektor- und Rasterkarten
  • Nutzung der vorhandenen Geo- und Sachdatenbasis
  • Hohe Zuverlässigkeit, möglichst wenig (keine) Administration
  • Geringe Client-Anforderungen (Hard-/Software und Internetanbindung)
  • Bedienung aller Browser auf allen Betriebssystemen, also keine Plug-ins
  • Keine Festlegung auf nur ein Server-Betriebssystem (zumindest SunOS und Linux)
  • Minimierte Kosten
  • Offene Architektur
  • Schnittstellenvielfalt für Datenbankanbindungen
  • Orientierung an OpenGIS [6]

Die damals verfügbaren Mapserver-Lösungen umfassten nur eine Handvoll Produkte. Die Betriebssystem-Präferenz Unix und die Forderung nach Kostenminimierung für Hard- und Software des Servers ergaben einen klaren Vorteil für die lizenzkostenfreie UMN-Mapserver- Lösung. Auf der Homepage heißt das Programm zwar lediglich Mapserver, aber es beschreibt eher die Funktionalität eines Geodatenviewers mittels Browser für die Präsentation im Internet, für die es inzwischen eine größere Anzahl von Produkten gibt. Deshalb soll dieser spezifische Mapserver im Folgenden genauer als UMN-Mapserver bezeichnet werden.

Zusammenspiel mit Axkit

Für das Projekt Digitaler Regionalatlas München kombinieren wir den UMN-Mapserver mit dem Mod_perl-XML-Server Axkit [7] und der Suchmaschine Swish-e [8], um eine Karten und Text integrierende Portal-Lösung zu schaffen. Zielgruppe für dieses Informationssystem sind alle Bürger und Fachanwender, die über einen Internetanschluss verfügen. Deshalb haben wir versucht, die Einstiegshürden für Anwender in puncto Hardware, Software und Benutzerschnittstelle zu minimieren. Um keine Interessenten auszusperren ist eine Lösung nach dem Motto “Viewable with any browser” [9] angestrebt, die trotzdem eine möglichst intuitive Bedienung erlauben soll.

Da aktive Inhalte im Internet für den Benutzer immer mit Risiken verbunden sind, sollten darüber hinaus Basisfunktionen des Mapservers mit abgeschaltetem Javascript genutzt werden können. Die Nutzung von Active-X verbietet sich unter diesem Gesichtspunkt von selbst. Eine vollständig als Java-Applet realisierte Kartendarstellung konnte nicht verwirklicht werden, weil dies aufgrund der Browser- und Hardware-Anforderungen einen Teil der Zielgruppe wieder ausgegrenzt hätte.

Die vektorbasierten Technologien kamen nicht in die engere Auswahl, da der Schutz der Geodaten durch Darstellung in Form einer Bitmap-Grafik sehr viel höher ist, als wenn sie verschlüsselt direkt durch das Netz transportiert werden. Das ist insbesondere für die öffentliche Verwaltung ein ganz wesentlicher Gesichtspunkt.

Implementation

Die Anforderungen an die Benutzerschnittstelle zu erfüllen erwies sich bald als wesentlich aufwändiger als die Arbeit mit dem Mapserver selbst. Leider halten sich die Browser in sehr unterschiedlicher Weise nicht an die Standards, besonders wenn man die Implementierung des für eine digitale Karte interessanten dynamischen HTML auf allen Betriebssystemen betrachtet. Dieser Umstand ließ DREAM zeitweise fast zu einem Albtraum werden.

Schließlich wurde ein einfaches HTML-GUI erstellt, das alle Funktionalitäten enthält und Zoom, Pan, Sachdateninformation sowie Adressensuche sogar mit Netscape 3 und abgeschaltetem Javascript erlaubt. Zusätzlich entstand eine Version mit Java-Unterstützung, die aber aufgrund der versionsabhängig unterschiedlichen und zum Teil sogar fehlerhaften Implementation der Javascript-Java-Kopplung in den einzelnen Browsern leider nicht als Standard angeboten werden kann.

Betatestphase

Das Layout wurde nach Rücksprache mit den Betatestern immer wieder abgeändert, weil die Auffassungsweise von Programmierern und Kartenerstellern doch erheblich von der Wahrnehmung des normalen Anwenders abweicht. Die Bandbreite der unterstützten Browser deckt Netscape (älter als Version 6), Internet Explorer und Opera ab, Mozilla funktioniert leider noch nicht, Konqueror ebenso wenig. Gerade diese Schwierigkeiten haben die Autoren fast an den Rand der Verzweiflung gebracht.

Da der Apache für den XML-Server sowieso um die Mod_perl-Fähigkeiten erweitert werden musste, lag es nahe, Mod_perl für die Nachbearbeitung der HTML-Ausgabe des Mapservers zu verwenden. So gibt der Mapserver den Kartenmaßstab beispielsweise als Gleitkommazahl aus, aber eine Angabe wie etwa “Maßstab 1 : 202610.554334” in einer Karte ruft Gelächter hervor.

Abhilfe für dieses Problem sowie die Behandlung verschiedener HTML-Formularelemente, die der UMN-Mapserver nicht selbst durchführt, bietet das Einlesen und Neuschreiben des vom Mapserver erzeugten HTML-Codes durch das in Listing 1 gezeigte Perl-Modul. Natürlich hätte hierfür der Quellcode geändert werden können, aber es wäre dann notwendig gewesen, diese Änderungen in jede neue Version des Mapservers einzuarbeiten.

Informationen über die Bebauung - direkt aus dem Internet geholt.

Informationen über die Bebauung – direkt aus dem Internet geholt.

Vom Desktop-GIS zur Internet-Karte

Für Analyse und Layout der Karten wird traditionell sowohl im Stadt-Referat als auch am TU-Lehrstuhl die GIS-Software Arcview [10] verwendet. Das Datenformat für die Kartendefinition ist zwar nicht vollständig dokumentiert, glücklicherweise aber weder verschlüsselt noch unleserlich: Die Projektdateien mit allen thematischen Einstellungen bestehen aus Ascii-Repräsentationen von Objekten – und dies wurde für DREAM ausgenutzt, um ein Perl-Programm zur Konvertierung in das UMN-Mapserver-Format ».map« zu erstellen. Damit kann eine Arcview-Karte in den Mapserver übernommen werden. Für Flächen-, Linien und Punktsymbole wurden Paletten sowohl für Arcview als auch für den Mapserver erstellt, die eine größtmögliche Ähnlichkeit der Kartendarstellung in Arcview und Internet erlauben.

CGI-Formulare steuern die weitere Ausgestaltung der Karte wie zum Beispiel Beschriftung und Abfragbarkeit. Außerdem können standardisierte Hintergrundkarten hinzugeladen werden. Auf diese Art wurde das manuelle Bearbeiten der Definitionsdateien des Mapservers durch eine grafische Benutzeroberfläche ersetzt und die studentischen Hilfskräfte des Lehrstuhls können damit nach kurzer Einweisung ihre Karten ins Internet stellen.

Listing 1: »mapserv_rewrite.pm«

# mapserv_rewrite.pm
#
# This program is free software; you can redistribute it and/or modify it under the 
# terms of the GNU General Public License as published by the Free Software 
# Foundation; either version 2 of the License, or (at your option) any later version.

# In httpd.conf:
# <Location /cgi-bin/mapserv>
#   PerlSendHeader off
#   SetHandler perl-script
#   PerlHandler mapserv_rewrite
# </Location>

package mapserv_rewrite;

use strict;
use Symbol;
use File::MkTemp;
use Apache::Reload;
use Apache::Constants qw(OK REDIRECT DECLINED);

sub handler {
  my $r = shift;
  my @args = $r->args;          # cgi arguments
  my $args = '';                # empty receiver string
  my $zoomsize = '';
  for (my $i = 0; $i < $#args; $i += 2) { # every variable pair
    $args .= $args[$i] . '=' . $args[$i+1] . '&'; # into receiver string
    $zoomsize = $args[$i+1] if $args[$i] =~ /^zoomsize$/io; # remember zoomsize
  }
  # these are redirected images
  $r->content_type('text/html')
    if ($args !~ /mode=(map|reference|scalebar|legend)/);
  $ENV{QUERY_STRING} = $args;   # set QUERY_STRING for CGI
  my $fh = Symbol::gensym();    # avoids leakages
  open ($fh, $r->filename . " |") or die $r->filename, ': ', $!; # open as pipe
  if ($r->content_type() eq 'text/html') { # if htmlfile
    while (<$fh>) {             # read every line
      next if /^Content-type: text/html/i; # skip header
      my $line = $_;            # save line
      if ($line =~ /[zoomsize_(d)/) { # line with zoomsize
        my $zs = $1;            # save zoomsize select value
        if ($zs == $zoomsize) { # if it equals required zoomsize
          $line =~ s/[zoomsize_.*?]/selected/; # replace with selected
        } else {
          $line =~ s/[zoomsize_.*?]//; # or replace with nothing
        }
      } elsif ($line =~ /<!--rnd-->([d.]+)<!--rnd-->/) {
        my $fscale = $1;
        my $scale = sprintf("%dn",sprintf("%.4g", $fscale));
        $line =~ s/<!--rnd-->[d.]+<!--rnd-->/<!--rnd-->$scale<!--rn
      }
      $r->print($line);
    }
    close $fh;                  # close pipe
    return OK;                  # return
  } else {
    # create temporary filename
    my $gif = '/data/web/tmp/'.mktemp('msr_XXXXXX','/data/web/tmp/').'.gif
    my ($gifurl) = ($gif =~ m!(/tmp/.*)!); # derive url
    my $s = join('',<$fh>);     # read pipe into string
    $s =~ s!content-type: image/gifnn!!ioms; # strip mime type
    my $fo = Symbol::gensym();
    open $fo, "> $gif" or r->exit(DECLINED);
    print $fo $s;               # write string into file
    close $fo;                  # close file
    close $fh;                  # close pipe
    $r->header_out(Location => $gifurl); # send redirect
    return REDIRECT;            # return
  }
  DECLINED;                     # fallback
}

1;

Aufbereitung großer Geodaten

Für die Region München wurde dem Kooperationsprojekt von der Gesellschaft für Angewandte Fernerkundung (GAF) [11] ein IRS-1C/D Satellitenbild der Region mit 20 Meter, im Bereich der Stadt München sogar mit fünf Meter Auflösung zur Verfügung gestellt. Das Luftbild ist als 24-Bit-TIFF-Datei rund 92 beziehungsweise 316 MByte groß.

Um die Systemlast möglichst gering zu halten, wurde das Bild der Region vorab in 35 GIF-Kacheln umgewandelt, auf die der Mapserver über eine Indexdatei zugreift. Für die Gesamtausschnitte werden zusätzlich noch zwei in ihrer Auflösung zurückgerechnete Gesamtbilder bereitgehalten. Bei der Generierung des gewählten Kartenbilds wählt der UMN-Mapserver dann – dem gewünschten Maßstab entsprechend – die passenden Bilddateien aus.

Für die Flurstücks- und Gebäudegrenzen (137 beziehungsweise 93 MByte Vektordaten im Shapefile-Format) im Stadtgebiet München wurde dieselbe Vorgehensweise gewählt, das reduziert die Zeiten für das Erzeugen einer Internet-Karte auf typisch unter 1,2 Sekunden. Reine Vektorkarten werden vom Mapserver als GIF-Bilder mit meist weniger als 20 KByte ausgegeben, Karten mit Satellitenbild-Hintergrund erreichen hingegen bis zu 100 KByte. Diese Datenmengen ermöglichen selbst auf einer Modemstrecke zum Endbenutzer noch erträgliche Ladezeiten.

Zuverlässigkeit und Performance

Nach nunmehr über einem halben Jahr Erfahrung im Serverbetrieb unter stetig zunehmender Last kann der Stabilität die Note Hervorragend gegeben werden. Das liegt unter anderem an der CGI-Technik des Mapservers, die in Gesprächen mit Kollegen allerdings oft als altmodisch bezeichnet wird und als Performance-Bremse gilt.

Im speziellen Fall des Mapservers ist aber das Verhältnis des Berechnungsaufwands für das Durchsuchen und die Visualisierung von vielen MByte Vektordaten zum Aufwand der Prozesserzeugung einfach günstiger als bei typischen Formular-Anwendungen. Die Stabilität bei über 130000 Mapserver-Requests spricht jedenfalls dafür, nicht allzu schnell das vorgebliche Heil in Serverprozessen zu suchen.

Der DREAM-Server läuft auf einem Duron-600-Rechner mit 512 MByte Speicher und einem Raid-Hardware-Controller unter SuSE Linux 7.0; bis jetzt war noch keine nennenswerte Verzögerung der Kartenauslieferung durch Serverbelastung zu beobachten. Sollte die Leistungsgrenze aber irgendwann erreicht sein, spricht vor allem wegen des überragenden Preis-Leistungs-Verhältnisses der Software viel für eine Lastverteilung auf mehrere Server.

Für das Intranet des Referats für Gesundheit und Umwelt wurde dieselbe Mapserver-Perl-Kombination auf einer Sun aufgesetzt. Hier läuft der Betrieb – bei allerdings vergleichsweise erheblich geringerer Belastung – vollkommen störungsfrei.

Vektordaten mit hinterlegtem Satellitenbild der Region München.

Vektordaten mit hinterlegtem Satellitenbild der Region München.

Ausblick

Der Einsatz von freier Software für die Veröffentlichung von Geodaten ist durchweg positiv zu bewerten. Die Nutzung des Mapservers wird durch eine aktive Entwicklergemeinschaft wesentlich erleichtert, die auch auf Anfragen in der Mailingliste durchweg freundlich und schnell reagiert. Die geforderten Eigenschaften konnten alle abgedeckt werden und die Einsatzsicherheit ist auch in Zukunft durch die Möglichkeit der Anbindung an eine Spatial Database Engine (SDE) gegeben, wie sie von den Mapserver-Entwicklern in den USA bereits heute genutzt wird.

Für die Nutzung im Rahmen des digitalen Regionalatlas München sind noch etliche Erweiterungen geplant, so beispielsweise die Möglichkeit, Bildschirm und Druckausgabe zu kalibrieren, zudem Feature-Abfragen, Flächen mit bestimmten Eigenschaften selektieren und anzeigen können, die Einbindung einer Routing-Engine für den Radwege-Stadtplan und eventuell die Möglichkeit für den Benutzer, die Klassifizierung von dargestellten Geodaten selbst beeinflussen können.

Es bleibt also noch einiges zu tun übrig, aber die offene Architektur des UMN-Mapservers ist eine gute Grundlage, um diese Anforderungen erfüllen zu können. (agr)

Die Autoren

Markus Spring hat Agrarwissenschaften an der Technischen Universität München/Weihenstephan studiert. Seit 1990 ist er am Referat für Gesundheit und Umwelt (RGU) der Landeshauptstadt München der Perl-Monk schlechthin. Der Familienzuwachs durch seine vor kurzem geborenen Zwillingstöchter Klara und Magda stellt ihn auch noch in anderer Hinsicht auf den Prüfstand.

Markus Spring hat Agrarwissenschaften an der Technischen Universität München/Weihenstephan studiert. Seit 1990 ist er am Referat für Gesundheit und Umwelt (RGU) der Landeshauptstadt München der Perl-Monk schlechthin. Der Familienzuwachs durch seine vor kurzem geborenen Zwillingstöchter Klara und Magda stellt ihn auch noch in anderer Hinsicht auf den Prüfstand.

Andreas Fritzsche hat Kartografie an der Fachhochschule München studiert und ist seit nunmehr 1991 am Lehrstuhl für Raumforschung, Raumordnung und Landesplanung an der Technischen Universität München unter anderem auch als ambulanter Geo-Datenhuber beschäftigt. Er hofft allerdings weiterhin auf die Reinkarnation als Experte für Linux-Systeme.

Andreas Fritzsche hat Kartografie an der Fachhochschule München studiert und ist seit nunmehr 1991 am Lehrstuhl für Raumforschung, Raumordnung und Landesplanung an der Technischen Universität München unter anderem auch als ambulanter Geo-Datenhuber beschäftigt. Er hofft allerdings weiterhin auf die Reinkarnation als Experte für Linux-Systeme.

Infos

[1] [http://www.isw.de]

[2] [http://www.muenchen.de/referat/rgu/frames/datfakt/Fdatfakt.htm]

[3] [http://www.lrrl.arch.tu-muenchen.de/rio]

[4] [http://mapserver.gis.umn.edu]

[5] [http://dream.lrrl.arch.tu-muenchen.de]

[6] [http://www.opengis.org]

[7] [http://axkit.org]

[8] [http://sunsite.berkeley.edu/SWISH-E]

[9] [http://www.anybrowser.org/campaign/anybrowser_de.html]

[10] [http://www.esri-germany.de]

[11] [http://www.gaf.de]

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben