Geodaten und Application Express: Oracle MAPS mit freien OpenStreetMap-Daten
Wie man mit dem frei verfügbaren Kartenserver von
OpenLayers und den
Daten des
OpenStreetMap-Projekts eine Karte in
eine Application Express-Anwendung
integrieren kann, war Thema des
Community-Tipps von Bruno Unberath. Allerdings
wurde die Karte komplett vom externen OpenLayers-Server abgerufen;
die Kombination von Fachdaten aus der lokalen Application-Express-Datenbank
war nur mit umfangreicher JavaScript-Programmierung möglich.
Heute erfahren Sie, wie Sie die Kartendaten
in Ihre Umgebung übernehmen
und mit Hilfe von Oracle MAPS in
Ihrer Anwendung darstellen können. Die Kombination
der Kartendaten mit lokalen Fachdaten wird so wesentlich einfacher; außerdem
lassen sich alle Möglichkeiten von Oracle MAPS auch mit der OpenStreetMaps-Karte
nutzen.
Abbildung 1: Das Ziel: OpenStreetMap-Karte mit Oracle MAPS, eingebettet in Application Express
Dieser Tipp gehört zur Reihe Geodaten und Application Express
und baut den bereits vorhandenen Tipps der Reihe auf.
Heute werden wir die in der letzten Ausgabe genutzte OpenLayers-Karte also durch Oracle MAPS
ersetzen. Oracle MAPS stellt die komplette Kartenansicht als AJAX-basierte
Web-Oberfläche bereit, wobei die Kartendaten an sich weiterhin vom
OpenStreetMap-Projekt kommen, also frei verfügbar sind. Die Application Express-Anwendung wird nun
nicht mehr mit dem externen OpenLayers-Server integriert, sondern mit
dem zur "lokalen" IT-Infrastruktur gehörenden Oracle MapViewer.
Vorbereitungen
Stellen Sie sicher, dass der Oracle MapViewer und Oracle MAPS installiert
und konfiguriert sind. Hinweise zu Download, Installation und Setup des Oracle MapViewer
finden Sie in diesem Dokument.
Für diesen Tipp sind darin die Schritte 1, 2, 4 und 5 von Bedeutung.
Oracle MAPS wird heute mit einem Dienst im Internet kommunizieren. Wenn Sie
sich hinter einer Firewall befinden, müssen Sie dem MapViewer den Proxy-Server
bekanntmachen. Dies geschieht ebenfalls in der Datei
mapviewerConfig.xml , welche
Sie beim Einrichten des MapViewers bereits kennengelernt haben.
Konzept: Wie kommen die OpenStreetMap-Daten in Oracle MAPS?
Die Tipps 1 bis 5 dieser Reihe basieren auf dem Demo-Kartenmaterial von
NAVTEQ, welches aus dem Oracle Technet heruntergeladen und in die Datenbank
importiert werden kann. Oracle MAPS generiert die Karte dann anhand
dieser Daten.
Für die Daten des OpenStreetMap-Projekts gibt es keinen Download, den
man direkt in die Oracle-Datenbank importieren könnte. Neben dem Kartenserver
OpenLayers
stehen noch Web-Dienste bereit, die den Download von Daten im XML-Format erlauben.
Für dieses Beispiel wollen wir die OpenStreetMap-Daten daher nicht als "Spatial-Daten"
( SDO_GEOMETRY) in die Datenbank laden -
wir sind ja nur an der Karte interessiert. Diese soll
allerdings mit Oracle MAPS dargestellt werden. Um die OpenStreetMap-Karte
in Oracle MAPS zu bekommen, kann man den frei verfügbaren
WMS-Dienst
der
WhereGroup GmbH & Co. KG aus Bonn nutzen.
WMS steht für
Web Map Service
und beschreibt einen Kommunikationsstandard für Kartenserver. Mehr zur
Kommunikation mit Kartendiensten über das WMS-Protokoll finden Sie im
Wikipedia-Artikel zu WMS. Dort können Sie auch
nachlesen, wie Sie bei einem WMS-Dienst herausfinden, welche Karten er
anbietet (getCapabilities).
Oracle MAPS ist
in der Lage, einen externen WMS-Dienst anzusprechen und einen
Map Cache mit
dessen Kartendaten aufzubauen. Mit dieser (statischen) Karte lassen sich dann ganz
einfach die Fachdaten aus der lokalen Datenbank kombinieren.
Abbildung 2: Die OpenStreetMap-Karte wird per WMS-Dienst in Oracle MAPS eingebunden"
Einrichten des Map Cache
Starten Sie Ihren Browser und navigieren Sie zur MapViewer-Startseite.
Abbildung 3: MapViewer Startseite
Klicken Sie oben rechts auf das Symbol Admin -
im dann folgenden Login-Fenster melden Sie sich als
Administrator der J2EE-Umgebung an. Der Username ist
normalerweise oc4jadmin;
das Passwort haben Sie beim ersten Start der MapViewer-Umgebung festgelegt.
Abbildung 4: MapViewer Administrationsbereich
Um eine neue Karte für die OpenStreetMap-Daten zu erzeugen, klicken
Sie zunächst oben auf Manage Map Tile Layers
und dann links auf Create,
um einen neuen Map Tile Layer zu erzeugen.
Da die Daten vom einem
externen WMS-Dienst und nicht aus der Datenbank kommen, wählen Sie
External als
Data Source aus und klicken
dann auf Continue (Abbildung 5). Achten Sie
im folgenden darauf, dass Sie alle Angaben exakt wie hier vorgegeben machen;
selbst scheinbar banale Dinge wie zusätzliche Leerzeichen führen später zu
Fehlermeldungen.
Abbildung 5: Neuen Map Tile Layer erzeugen: Externe Datenquelle
Geben Sie dem Map Tile Layer
zunächst einen Namen und wählen Sie
eine MapViewer Data Source aus.
Auch für externe Datenquellen benötigt
Oracle MAPS eine Data Source; dort werden Metadaten zum WMS-Dienst abgelegt.
Die o.g.
Hinweise zu Installation und Setup des MapViewer
beschreiben auch,
wie eine Data Source eingerichtet wird - am besten ist es, wenn die
Data Source das Parsing Schema
der Application Express-Anwendung (wo auch
alle anderen Tabellen liegen) nutzt.
Abbildung 6: Neuen Map Tile Layer erzeugen: Name und Datenbankverbindung für Metadaten festlegen
Fahren Sie anschließend mit dem Ausfüllen des Formulars fort:
-
Als Map Service URL tragen Sie die
Adresse des WMS-Dienstes ein:
-
Bei Adapter class muss exakt folgender Text
eingetragen werden (achten Sie auf Groß- und Kleinschreibung):
-
Die Jar File Location müssen Sie auf
Ihrem System nachsehen. Suchen Sie
(ausgehend vom Verzeichnis, in welches die MapViewer-Umgebung installiert ist),
nach der Datei mvadapter.jar. Sie
befindet sich "recht tief" im Verzeichnisbaum der MapViewer-Umgebung; schauen
Sie im Verzeichnis
.../applications/mapviewer/web/WEB-INF im Ordner
tileserver/mvadapter nach (Abbildung 7).
Abbildung 7: Lage der Datei mvadapter.jar herausfinden
Wenn Sie die Datei gefunden haben, tragen Sie den vollständigen
Pfad zu dieser Datei inklusive des Dateinamen mvadapter.jar unter
Jar File Location ein.
Auf Unix/Linux-Systemen geben Sie den Pfad dann so an:
Auf Windows-Systemen beginnen Sie mit
dem Laufwerkbuchstaben. Verwenden
Sie dort allerdings nicht den üblichen Backslash (\),
sondern den normalen
Schrägstrich (/):
Abbildung 8: Adresse des WMS-Dienstes und Java-Klasse für den WMS-Adapter einrichten
Dann geht es mit dem Ausfüllen des Formulars weiter - bei
der Checkbox für die Adapter Properties.
Markieren Sie sie - daraufhin sollte
das Formular sich erweitern.
Abbildung 9: Adapter Properties (WMS-Parameter) einrichten
Mit einem Klick auf die Schaltfläche
Add fügen Sie einen neuen WMS-Parameter
hinzu. Fügen Sie folgende fünf WMS-Parameter hinzu (achten Sie darauf, dass ab dem
zweiten Parameter stets einer markiert ist, wenn Sie auf
Add klicken).
Abbildung 10: Adapter Properties (WMS-Parameter) einrichten
Die Parameter für Copy & Paste ...
name | value |
service | WMS |
srs | EPSG:31467 |
layers | OSM_Basic |
map | /data/umn/osm/osm_basic.map |
format | image/png |
Fahren Sie danach beim Eingabefeld für die Tile Storage
fort. Wenn Sie die
vom WMS-Dienst abgeholten Karten in einem speziellen Verzeichnis ablegen
möchten, tragen Sie es dort ein - ansonsten lassen Sie das Feld unverändert;
MapViewer wählt das Verzeichnis dann selbst aus.
Ändern Sie die SRID auf
31467 um und geben Sie
0 (Null) für
MinX und
MinY und
10000000 (Zehn Millionen)
für MaxX und
MaxY ein. Für die Experten: Die
SRID 31467 fordert die Karte als
Gauss-Krüger-Projektion an.
Abbildung 11: Koordinatensystem und Kartenraum konfigurieren umstellen
Lassen Sie alle anderen Felder unverändert. Bevor Sie nun unten
im Formular auf die Schaltfläche Submit klicken,
um die Karte in Oracle MAPS zu erzeugen, überprüfen
Sie nochmals alle Angaben - achten Sie dabei
darauf, dass die Angaben exakt wie in diesem Dokument gemacht sind. Die
Groß- und Kleinschreibung ist dabei ebenso bedeutsam wie die Tatsache,
dass vor und nach den Parametern keine zusätzlichen Leerzeichen vorhanden
sein dürfen.
Abbildung 12: Der neue Map Tile Layer wurde erzeugt
Die neue Karte in Application Express nutzen
Navigieren Sie nun zu Ihrer Application Express-Anwendung - fügen Sie
ihr eine neue Seite
hinzu und versehen Sie diese mit einer neuen Region
Karte vom Typ
HTML.
Diese Seite sollte dann wie folgt aussehen:
Abbildung 13: Anwendungsseite: (noch) ohne Oracle Maps
Navigieren Sie nun wiederum zum Quelltext der HTML-Region und
hinterlegen Sie folgenden Code:
Der nötige JavaScript-Code wird im Seiten-Header hinterlegt:
Rufen Sie die erzeugte JavaScript-Funktion
show_map() im onLoad-Handler
des HTML Body Tags auf (Sie müssen zusätzlich das Feld Cursor-Fokus auf Cursor nicht fokussieren stellen):
Aufruf der JavaScript-Funktion im HTML Body Tag und Einrichten des Cursor-Fokus
Die Dokumentation für die JavaScript-Bibliothek ist auf Ihrem MapViewer-Server
bereits vorhanden. Geben Sie einfach im Browser folgende URL ein:
Dort finden Sie eine genaue Beschreibung der hier verwendeten und aller
verfügbaren JavaScript-Aufrufe.
Starten Sie die Seite nun. Wenn Sie den Kartenaufbau verfolgen, fällt
Ihnen wahrscheinlich sofort auf, dass die Karte aus mehreren Kacheln besteht.
Sie können den Kartenausschnitt nun bequem mit der Maus per Drag & Drop
verschieben oder über die Navigationsleiste links oben verschieben - auch das
Herein- und Herauszoomen ist mit der Navigationsleiste ganz einfach:
Probieren Sie es aus!
Abbildung 14: Das Ergebnis: OpenStreetMap-Karte mit Oracle Maps - in Application Express
Oracle Maps ermittelt zunächst, welche Kacheln nötig sind, um den
angeforderten Kartenausschnitt darzustellen. Ist die Kachel bereits
im Map Cache enthalten, so wird sie sofort ausgeliefert, andernfalls
wird sie zuerst erstellt. Aus diesem
Grund dauert der erste Abruf einer Kachel stets länger.
Um diese Wartezeiten für den Endanwender zu vermeiden, besteht die
Möglichkeit, die Kacheln im voraus zu generieren. Navigieren Sie
dazu in den Administrationsbereich
des MapViewer und dort zu Manage Tile Layers.
Wählen Sie Ihren Layer OPENSTREEPMAP_WMS aus
und klicken Sie die
Schaltfläche View Map / Manage Tiles.
Dort können Sie sich die Karte ansehen und Kacheln
für von Ihnen gewählte Kartenausschnitte und Zoom Levels im voraus
generieren lassen. Ist eine Kachel einmal im Cache vorhanden, wird der
externe WMS-Dienst bis zum Löschen des Cache nicht mehr angesprochen.
Abbildung 15: Administrationsbereich des MapViewers: Kacheln im Voraus berechnen
Stellen Sie die Zoom-Level und den Kartenausschnitt ein, für den Sie
die Kacheln vorberechnen möchten; klicken Sie anschließend auf
Prefetch Tiles. Die
Kacheln werden dann im Hintergrund vom WMS-Dienst abgeholt - bis der MapViewer damit
fertig ist, kann allerdings einige Zeit vergehen.
Dynamische Elemente hinzufügen: Features Of Interest!
Im letzten Teil geht es nun darum, die in
3. Tutorial: Die Karte wird erweitert per
Zufallsgenerator generierten und in der Tabelle KUNDEN enthaltenen Daten
in die Karte einzubinden
(SQL-Skript zum Erstellen der Tabelle). Lassen
Sie das SQL-Skript im SQL Developer oder in SQL*Plus laufen, nehmen Sie nicht den
SQL Workshop in Application Express.
In Oracle Maps werden solche Daten als Features Of Interest (FOI) eingebunden.
Features Of Interest müssen
vorher in der Datenbank als MapViewer
Theme definiert sein. Dies kann
mit dem Werkzeug Oracle MapBuilder,
welches im Paket der MapViewer-Software
enthalten ist (mapbuilder.jar), erfolgen (Abbildung 9).
Abbildung 16: Kartendefinitionen mit dem Oracle Map Builder
Mit dem MapBuilder kann aus Aussehen der Karten komplett selbst
definiert werden. Die Styles definieren,
wie etwas gezeichnet wird,
die Themes legen fest, wo die
Daten herkommen und welcher Style
zur Darstellung verwendet wird. Die
Base Maps bestehen schließlich
aus mehreren übereinandergelegten Themes und bilden so eine
vordefinierte Karte. Sie können sich mit dem MapBuilder auch
die bereits vorhandenen Kartendefinitionen des NAVTEQ World
Sample ansehen und ggfs. verändern.
Das Theme, welches für die dynamische Darstellung der Kunden benötigt
wird, soll nun durch ein einfaches SQL
INSERT erstellt werden - hier verwenden
wir den MapBuilder nicht. Setzen
Sie das folgende SQL-Kommando von
SQL*Plus aus (nicht dem
SQL Workshop)
ab. Melden Sie sich im SQL*Plus mit dem
Parsing Schema Ihrer Application
Express-Anwendung an.
Navigieren Sie in Ihrer Application Express-Anwendung wieder zum
Seiten-Header und ändern Sie den JavaScript-Code wie folgt um:
Um einen Link als "Schalter" für die Kunden einzurichten, ändern Sie den
HTML-Code der Region Karte wie folgt:
Starten Sie die Seite anschließend neu. Klicken Sie dann einmal auf den
Link
Kunden ein/ausblenden unterhalb der
Karte - dann sollte für jeden
Kunden eine Stecknadel auf Ihrer Karte erscheinen. Mit nochmaligem Klick
auf den Link verschwinden die Stecknadeln wieder.
Abbildung 17: Das Ergebnis: Die Karte mit dynamisch ein- und ausblendbaren Informationen zu Kunden
Das ist jedoch noch nicht alles. Wenn Sie auf eine der Stecknadeln
klicken, wird ein
Information Window mit Details zu diesem
Kunden eingeblendet - im Moment sind dies lediglich die
ID und der
Name - mehr Informationen gibt es zu
diesen zufällig generierten
"Kunden" nicht. Im einer "realen" Applikation können auf diesem
Weg weitere Informationen wie die komplette Adresse oder Angaben
zum Umsatz angezeigt werden.
Zusammenfassung und Ausblick
Sie haben hier nun Kartendaten des freien OpenStreetMap-Projekts als
Kacheln in Oracle MAPS und damit in Ihre Infrastruktur übernommen und
darüber hinaus mit Daten aus Ihrer lokalen Tabelle kombiniert. Da nun
die Möglichkeiten der Datenbank und von Oracle MAPS genutzt werden können,
wird gerade diese Integration sehr einfach.
Übrigens nutzt nicht nur die WhereGroup den WMS-Standard zur Bereitstellung
eines Kartendienstes. Auch die Landesvermessungsämter der einzelnen
Bundesländer stellen Kartendaten und Luftbilder über diese Schnittstelle bereit -
eine Übersicht finden Sie hier. Achten
Sie dabei allerdings an die Lizenz- und Nutzungsbedingungen; diese Daten sind
nicht frei. Nehmen Sie ggfs. Kontakt zu den auf der Übersichtsseite gelisteten
Ansprechpartnern auf.
Abbildung 18 zeigt, wie - analog zur in diesem Tipp
geschilderten Vorgehensweise - ein WMS-Dienst für Luftbilder (Digitale Orthofotos)
eingebunden und in Application Express dargestellt werden kann.
Die Vorgehensweise ist die gleiche - ein anderer WMS-Dienst erwartet jedoch
andere Parameter; hierfür benötigen Sie ein wenig Hintergrundwissen über
WMS (siehe
Wikipedia-Artikel) und die Antwort des
Dienstes auf eine getCapabilities-Anfrage.
Mit diesen Informationen
sollte es ein Leichtes sein, den entsprechenden WMS-Dienst in Oracle MAPS
einzurichten.
Abbildung 18: Einbindung eines anderen WMS-Dienstes - hier: Digitale Orthofotos
Zurück zur Community-Seite
|