Geodaten und Application Express: Darstellung als Karte

Geodaten und Application Express: Darstellung als Karte

Kennen Sie Google Maps? Wahrscheinlich schon.

Dann stellt sich die Frage, ob geografische Informationen auch in Ihren Anwendungen einen Nutzen stiften können.

Der geografische Ort wird meist nur indirekt verwendet, etwa als postalische Adresse oder als Kennziffer für das Vertriebsgebiet - was für viele Aufgabenstellungen völlig ausreichend ist. Der erfolgreiche Einsatz von Navigationssystemen oder Diensten wie Google Maps zeigt deutlich, welchen Stellenwert Anwendungen mit Ortsbezug erreichen können. Auf die gleiche Weise kann die Verwendung geografischer Informationen in Ihren Application Express-Anwendungen deutlich zur Wertschöpfung beitragen.

In der letzten Ausgabe haben Sie erfahren ...

  • ... wo Sie Kartendaten von NAVTEQ im Oracle-Format kostenlos herunterladen
  • ... wie Sie diese Kartendaten in die Datenbank importieren
  • ... wie Sie geometrische Berechnungen auf diesen Daten durchführen können

In dieser Ausgabe lernen Sie, wie Sie die Daten als Karte darstellen und diese Karte in Ihre Anwendung integrieren.

Zum Erzeugen der Karte wird in diesem Tipp der Oracle Application Server MapViewer verwendet. Der MapViewer erzeugt anhand in der Datenbank vorhandener Geodaten Karten, welche dann z.B. in eine Webseite eingebunden werden können.

Der MapViewer ist Bestandteil des Oracle Application Servers. Um ihn produktiv nutzen zu können, müssen Sie die Java Edition des Application Servers lizensieren. Zum Testen (oder zum Ausprobieren dieses Tipps) können Sie sich eine Version aus dem OTN herunterladen.

Damit Application Express auf den MapViewer zugreifen kann, wird die MapViewer Client-Bibliothek verwendet. Diese basiert auf Java - daher läuft das hier beschriebene Beispiel nicht ohne weiteres in OracleXE.

Um den MapViewer auf Ihrem System bereitzustellen und mit Ihrer Application Express-Anwendung zu integrieren sind einige Vorbereitungen erforderlich. Diese Vorbereitungen sind der Schwerpunkt des heutigen Tipps.

Aufsetzen des MapViewer

Der MapViewer ist als J2EE-Applikation realisiert. Das bedeutet, dass er einen Java Application Server als Laufzeitumgebung benötigt - direkt in der Datenbank bzw. in Application Express kann der MapViewer nicht laufen. Da zum produktiven Betrieb des MapViewers (wie oben erwähnt) eine Lizenz des Oracle Application Servers (Java Edition) erforderlich ist, ist es zu empfehlen, eben diesen Oracle Application Server auch direkt als Laufzeitumgebung zu nutzen.

Der MapViewer muss nicht auf dem gleichen Rechner wie die Datenbank bzw. Application Express laufen. Die Kommunikation zwischen MapViewer und Application Express wird über das Netzwerk laufen, so dass Sie hier die freie Wahl haben.

  • Stellen Sie sicher, dass eine Java-Umgebung (JDK) in der Version 1.5 oder höher bereit steht. Sie ermitteln die Version, indem Sie in der "DOS-Box" (Windows) oder in einem Terminal (Unix/Linux) folgendes eingeben:
    /home/oracle> java -version
    java version "1.5.0_05"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_05-b05)
    Java HotSpot(TM) Client VM (build 1.5.0_05-b05, mixed mode)
  • Laden Sie das MapViewer QuickStart Kit aus dem OTN herunter. Navigieren Sie zu Database, dort zu Location Services, von dort zu Software und schließlich zu Oracle Application Server MapViewer. Laden Sie das QuickStart Kit herunter - Sie erhalten ein ZIP-Archiv mit dem Namen mv10131_qs.zip.
  • Nach dem Auspacken des Archivs erhalten Sie eine für den MapViewer fertig vorkonfigurierte Umgebung, welche Sie sofort starten können. Bevor Sie dies tun, sollten Sie jedoch noch den Datenbankzugriff des MapViewer einrichten. (Wohlgemerkt: Der MapViewer läuft im Gegensatz zu Application Express außerhalb der Datenbank, benötigt also Informationen zum Datenbankzugriff)
    Navigieren Sie dazu (ausgehend vom Verzeichnis, in welches Sie das QuickStart Kit ausgepackt haben) in das Verzeichnis mit der Datei mapViewerConfig.xml und editieren Sie diese. Im folgenden ist dies beispielhaft für Linux dargestellt:
    ../OC4J> ls
    bin          j2ee       javavm  jlib  rdbms       soap  startup  webservices
    diagnostics  javacache  jdbc    lib   Readme.txt  sqlj  uix
    
    .../OC4J> cd j2ee
    .../OC4J/j2ee> cd home
    .../OC4J/j2ee/home> cd applications/
    .../OC4J/j2ee/home/applications> cd mapviewer/
    .../OC4J/j2ee/home/applications/mapviewer> cd web/
    .../OC4J/j2ee/home/applications/mapviewer/web> cd WEB-INF/
    .../OC4J/j2ee/home/applications/mapviewer/web/WEB-INF> cd conf/
    .../OC4J/j2ee/home/applications/mapviewer/web/WEB-INF/conf> vi mapViewerConfig.xml
    Bewegen Sie sich ans Ende der Datei. Dort werden sie einen Bereich map_data_source vorfinden. Ändern Sie ihn so um, dass er in etwa wie folgt aussieht. Achten Sie dabei darauf, dass Sie hier das Datenbankschema verwenden, in welches Sie in der letzten Ausgabe die Geodaten importiert haben und dass Ihre Definition nicht etwa mit <!-- und --> auskommentiert ist.
    <map_data_source name="world"
                     jdbc_host="[Datenbank-Rechnername]"
                     jdbc_sid="[Oracle-SID]"
                     jdbc_port="[TCP/IP-Port des Oracle Listeners: normalerweise 1521]"
                     jdbc_user="[Datenbank-Username (Schema mit den Geodaten)]"
                     jdbc_password="![Datenbank-Passwort]"
                     jdbc_mode="thin"
                     number_of_mappers="3"
    />
    
    Achten Sie bei diesen Angaben peinlich genau auf deren Richtigkeit; der MapViewer kann keine Karten erzeugen, wenn der Datenbankzugriff nicht funktioniert. Lassen Sie sich im Zweifelsfall von Ihrem Datenbankadministrator helfen. Das führende Ausrufezeichen beim Passwort ist wichtig - dadurch wird es beim ersten Start des MapViewers verschlüsselt.

  • Nachdem Sie den Datenbankzugriff eingerichtet haben, speichern Sie die Datei, welchseln zurück in das Verzeichnis j2ee/home des MapViewer QuickStart Kit und starten den MapViewer dann wie folgt:
    [...]/OC4J/j2ee/home/applications/mapviewer/web/WEB-INF/conf> cd [...]/OC4J/j2ee/home
    [...]/OC4J/j2ee/home> java -jar oc4j.jar 
  • Testen Sie Ihren Setup schließlich, in dem Sie mit einem Web Browser folgende URL aufrufen:
    http://[Server-name]:8888/mapviewer
    Das Ergebnis sollte dann in etwa wie folgt aussehen.
    Willkommensseite des Oracle Application Server MapViewer

    Abbildung 1: Willkommensseite des Oracle Application Server MapViewer

Der MapViewer steht nun zur Entgegennahme von Anfragen bereit.

Einrichten der MapViewer Client Bibliothek in der Datenbank

Die nun folgenden Schritte sind erforderlich, damit Ihre Application Express-Anwendung mit dem MapViewer kommunizieren kann. Dazu muss ein PL/SQL-Paket in die Datenbank eingespielt werden. Mit diesem PL/SQL-Paket werden Sie später in der Lage sein, Karten vom MapViewer anzufordern. Sie benötigen für diese Schritte DBA-Privilegien auf Ihrer Datenbank.

  • Navigieren Sie nochmals in das Verzeichnis, in welches Sie das MapViewer QuickStart Kit ausgepackt haen:
    ../OC4J> ls
    bin          j2ee       javavm  jlib  rdbms       soap  startup  webservices
    diagnostics  javacache  jdbc    lib   Readme.txt  sqlj  uix
    
    .../OC4J> cd j2ee
    .../OC4J/j2ee> cd home
    .../OC4J/j2ee/home> cd applications/
    .../OC4J/j2ee/home/applications> cd mapviewer/
    .../OC4J/j2ee/home/applications/mapviewer> cd sql/
    
    .../OC4J/j2ee/home/applications/mapviewer/sql> ls
    sdomvclb.sql  sdomvclh.sql  sqlmvclient.readme
    
    Loggen Sie sich nun als DBA in Ihre Datenbank ein und starten Sie die beiden SQL-Skripte sdomvclb.sql und sdomvclh.sql.
    $ sqlplus system/[Passwort]
    
    SQL*Plus: Release 10.2.0.2.0 - Production on Tue Feb 20 11:58:15 2007
    
    Copyright (c) 1982, 2005, Oracle.  All Rights Reserved.
    
    
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
    With the Partitioning, Oracle Label Security, OLAP and Data Mining options
    
    SQL> start sdomvclh.sql
    SQL> start sdomvclb.sql
    
  • Als nächstes laden Sie die MapViewer Client-Bibliothek aus dem Oracle Technet herunter. Die erhalten eine Datei sqlmvclient14.zip. Spielen sie diese mit dem loadjava-Kommando der Oracle-Datenbank als DBA wie folgt ein.
    .../> ls
    sqlmvclient14.zip
    
    .../> unzip sqlmvclient14.zip
      inflating: mvclient14.jar
      inflating: readme.txt
    
    .../> loadjava -force -schema mdsys -grant PUBLIC -user system/[Passwort] mvclient14.jar
    
  • Nun müssen Sie noch einige Rechte vergeben: Sowohl das Schema MDSYS als auch das Parsing Schema Ihrer Application Express-Anwendung benötigen zur Kommunikation mit dem MapViewer entsprechende Netzwerk-Privilegien. Den Namen Ihres Parsing Schemas finden Sie in den Anwendungsattributen .
    Anwendungsattribute: Parsing Schema

    Anwendungsattribute: Parsing Schema

    Setzen Sie (mit DBA-Privilegien) folgende SQL-Anweisungen ab:
    $ sqlplus system/[Passwort]
    
    SQL*Plus: Release 10.2.0.2.0 - Production on Tue Feb 20 11:58:15 2007
    
    Copyright (c) 1982, 2005, Oracle.  All Rights Reserved.
    
    
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
    With the Partitioning, Oracle Label Security, OLAP and Data Mining options
    
    SQL> call dbms_java.grant_permission(
      2       'MDSYS',
      3       'SYS:java.net.SocketPermission',
      4       '[Mapviewer-Hostname]:8888',
      5       'connect, resolve'
      6     );
    
    SQL> call dbms_java.grant_permission(
      2       '[Parsing-Schema]', 
      3       'SYS:java.net.SocketPermission',
      4       '[Mapviewer-Hostname]:8888',
      5       'connect, resolve'
      6     );
    
    Nun existiert in Ihrer Datenbank das PL/SQL-Paket SDO_MVCLIENT. Dies werden Sie jetzt nutzen, um eine Karte anzufordern und in Ihre Anwendung zu integrieren.

Oracle Application Server MapViewer: Die Funktionsweise in Kürze

Der MapViewer generiert Karten aufgrund eines Map Request. Der MapRequest ist ein XML-Datenstrom und enthält alle Angaben, die der MapViewer zum Erzeugen der Karte braucht wie:

  • Kartenausschnitt
  • Kartengröße
  • Titel
  • Hintergrundfarbe
  • Bildformat der Karte (JPG, PNG, ...)
  • Einzelne Bestandteile der Karte (Layer)
  • Zeichenstil für die einzelnen Bestandteile
  • ...

Sie brauchen den XML-Code des Map Request glücklicherweise nicht selbst zu schreiben, dies übernimmt das PL/SQL Paket SDO_MVCLIENT für Sie.

Um anhand der Geodaten eine Karte zu zeichnen, werden nun Informationen über den Stil benötigt, in dem die Karte erstellt werden soll. So muss man dem MapViewer mitteilen, dass er die Linienzüge, die in der Tabelle AUTOBAHNEN enthalten sind, bspw. als rot-gelbe Linie darstellen soll.

Zusammen mit den Geodaten haben Sie in der letzten Ausgabe auch einige Kartendefinitionen in Ihre Datenbank importiert (diese befinden sich übrigens in den Tabellen USER_SDO_MAPS, USER_SDO_THEMES und USER_SDO_STYLES). Für den Anfang wollen wir diese bereits fertigen Definitionen verwenden. Wie Sie eigene Kartendefinitionen hinterlegen können, muss einer anderen Ausgabe vorbehalten bleiben.

Eine Karte anfordern: Map Requests aus Application Express

Jetzt ist es endlich soweit: Mit dem soeben eingerichteten MapViewer und den Geodaten, welche Sie in der letzten Ausgabe kennengelernt haben, eine Karte zu erzeugen in die erstellte Application Express-Anwendung zu integrieren. Fügen Sie der Anwendung als erstes eine neue Seite hinzu. Nennen Sie die Seite Karte (Abbildung 2).

Ausgangspunkt: Die Karte wird in eine (noch) leere Seite eingebaut

Abbildung 2: Die Karte wird in eine (noch) leere Seite eingebaut

Fügen Sie dieser Seite eine neue Region vom Typ PL/SQL dynamic Content hinzu. Der hier hinterlegte PL/SQL-Code wird eine Karte vom MapViewer anfordern und als PNG-Bild in die Anwendungsseite integrieren.

declare
  v_result    varchar2(1000);
  v_image_url varchar2(1000);
begin
  sdo_mvclient.createMapViewerClient('http://[MapViewer-Host]:8888/mapviewer/omserver');

  sdo_mvclient.setDataSourceName('world');
  sdo_mvclient.setImageFormat('PNG_URL');
  sdo_mvclient.setAntiAliasing('true');
  sdo_mvclient.setBaseMapName('WORLD_SAMPLE');
  sdo_mvclient.setCenterAndSize(10,50,2);
  sdo_mvclient.setDeviceSize(500,400);
  v_result := sdo_mvclient.run();
  v_image_url := sdo_mvclient.getGeneratedMapImageUrl();
  htp.p('<img src="'||v_image_url||'" alt="Karte" title="Karte">');
end;

Die Bedienung des MapViewer ist, wie Sie an diesem Code sehen, denkbar einfach. Zunächst wird mit der Prozedur createMapViewerClient eine Intialisierung vorgenommen. Achten Sie darauf, hier Ihren Hostnamen einzutragen. Der hintere Teil der URL /mapviewer/omserver ist stets gleich.

Anschließend wird der Name der Datenquelle gesetzt. Achten Sie darauf, dass Sie die hier verwendete Datenquelle während der Einrichtung des MapViewers (weiter oben) in der Datei mapViewerConfig.xml definiert haben.

  • Der MapViewer soll die Karte als PNG-Bild generieren und eine URL auf das Bild zurückliefern (PNG_URL). Mit dieser URL wird abschließend ein <img src="..."> Tag erzeugt, womit die Karte in Ihre Anwendung eingebunden ist.
  • Für dieses Beispiel verwenden Sie eine bereits vordefinierte Karte (WORLD_SAMPLE)
  • Das Kartenzentrum liegt bei 10° östl. Länge und 50° nördl. Breite. Die Karte soll sich (vertikal) über 2 Breitengrade erstrecken.
  • Die Karte soll 500 mal 400 Pixel groß sein.

Das reicht als einfaches Beispiel bereits aus. Starten Sie die Seite und betrachten Sie das Ergebnis (Achtung: Der allererste Aufruf kann auf Grund von Initialisierungen einige Sekunden dauern).

Das Ergebnis: Eine Karte in Ihrer Application Express-Anwendung

Abbildung 4: Das Ergebnis: Eine Karte in Ihrer Application Express-Anwendung

In der nächsten Ausgabe werden Sie das neue PL/SQL-Paket SDO_MVCLIENT näher kennenlernen. Unter anderem werden Sie erfahren, wie Sie in der erzeugten Karte navigieren und ihr dynamisch neue Elemente hinzufügen können.

Wenn Sie mehr über die Geodaten-Technologie erfahren möchten, finden Sie hier weitere Informationen:

Zurück zur Community-Seite