Logo Oracle Deutschland   Application Express Community
APEX und Geodaten - Teil III: Installation und Einrichtung von Oracle Maps

Erscheinungsmonat APEX-Version Datenbankversion
Dezember 2013 alle ab 10.2

Die Arbeit mit Positionen und Koordinaten, also Geodaten, spielt in mehr und mehr Anwendungsgebieten eine Rolle. Diese Tipp-Reihe der deutschsprachigen APEX Community stellt am Beispiel einer Image Geotagging Application vor, wie man in einer APEX-Anwendung mit Geodaten arbeiten, die Möglichkeiten der Datenbank ausnutzen und schließlich eine Karte in die APEX-Anwendung integrieren kann. Die Anwendung wird es ermöglichen ...

  • ... mit dem Smartphone aufgenommene Bilder per APEX-Anwendung hochzuladen
  • ... die Position zu extrahieren und als Koordinate zu speichern
  • ... die Bilder auf einer Karte darzustellen
  • ... räumliche Abfragen bzw. Auswertungen mit den Positionen durchzuführen
APEX Anwendung: "Image Geotagging"
APEX Anwendung: "Image Geotagging"

Da dies den Rahmen eines einzelnen Community-Tipps sprengen würde, werden die Themengebiete auf mehrere Community-Tipps verteilt.

Nachdem Teil 2 des Tutorials vorgestellt hatte, wie Sie Oracle Maps mit Hilfe der APEX-Plugins in Ihre Anwendung einbinden können, erfahren Sie in diesem Teil, wie Sie mit dem Oracle Kartenserver "MapViewer" Ihre eigene "Kartenengine" einrichten können.

Oracle Maps: Was ist das?

Eine Anwendung, die Geodaten verarbeitet, braucht nahezu immer eine Visualisierung derselben als Karte. Hierfür lassen sich externe Webdienste wie Google Maps, Bing Maps oder andere verwenden. Die Alternative ist, die Karte aus der eigenen Infrastruktur bereitzustellen.

Die Oracle-Software zum Erzeugen von Karten aus Geodaten in der Datenbank ist der Oracle MapViewer. Der MapViewer ist eine auf Java basierende Applikation, die als Dienst auf einem Server läuft und auf Anfrage Karten generiert. Dabei ist der Ablauf der folgende:

  1. Die Anwendung sendet einen Ein Map Request an den MapViewer
  2. MapViewer liest zunächst die Metadaten zu angefragten Karte aus der Datenbank. Die Metadaten enthalten alle Informationen über beteiligte Tabellen, Abbildungsvorschriften wie Farben, Linienformen und vieles mehr.
  3. MapViewer und liest die Geodaten aus der Datenbank
  4. MapViewer generiert die Karte und gibt sie als Map Response an die Anwendung zurück

Oracle Maps als Teil des MapViewer hilft dem Entwickler dabei, ein Look & Feel zu erzeugen, wie Anwender es aus dem Internet gewohnt sind. Die Karte wird dabei in mehreren Schichten aufgebaut. Die Hintergrundkarte wird in Kacheln unterteilt und im Vorfeld generiert - was einen schnellen Kartenaufbau sicherstellt. Auf diese statische Karte werden die zur Laufzeit generierten Features Of Interest gelegt. Zusätzlich ist es dem Entwickler möglich, mit einer Programmierschnittstelle weitere Objekte auf der Karte zu platzieren. Dass der Nutzer die Karte per Drag & Drop verschieben oder mit dem Mausrad hinein- und herauszoomen kann, wird von der Software out-of-the-box bereitgestellt.

Oracle Maps stellt die Karte in mehreren Schichten dar
Abbildung 1: Oracle Maps stellt die Karte in mehreren Schichten dar

Die Installation eines eigenen Kartenserver ist nur dann sinnvoll, wenn in der Datenbank auch eigene Kartendaten enthalten sind. Daher setzt dieser Tipp voraus, dass die im Teil 1 erwähnten Beispieldaten von HERE (ehemals NAVTEQ) bereits im Datenbankschema WORLD_SAMPLE installiert sind. Wenn das noch nicht der Fall ist, holen Sie das am besten jetzt nach.

Herunterladen und Auspacken des Oracle MapViewer

Laden Sie zunächst die aktuelle Version des Oracle MapViewer aus dem OTN herunter (Abbildung 2). Nehmen Sie am besten das QuickStart Kit, denn in diesem ist der MapViewer bereits fix und fertig in einem GlassFish Application Server vorinstalliert, so dass ein großer Teil des Installationsaufwands entfallen kann.

Oracle MapViewer Software-Download im OTN
Abbildung 2: Oracle MapViewer Software-Download im OTN

Nach dem Auspacken des ZIP-Archivs finden Sie die in Abbildung 3 dargestellten Dateien und Ordner.

Dateien und Ordner im ZIP-Archiv "Oracle MapViewer"
Abbildung 3: Dateien und Ordner im ZIP-Archiv "Oracle MapViewer"

Konfiguration des GlassFish Application Server und des MapViewer

Starten Sie auf Lunix (UNIX) Systemen das Skript runMeFirst.sh und auf Windows startMeFirst.bat (Abbildung 4). Dieses Skript richtet den Kartenserver MapViewer und Oracle Maps ein. An einer der ersten Meldungen erkennen Sie, dass das Passwort des Users admin auf welcome1 gesetzt wird - das werden wir im folgenden brauchen.

Initiale Einrichtung des MapViewer mit dem Skript "runMeFirst"
Abbildung 4: Initiale Einrichtung des MapViewer mit dem Skript "runMeFirst"

Öffnen Sie nun mit dem Browser die Glassfish-Admin Oberfläche unter der URL http://localhost:4848. Loggen Sie sich mit dem Usernamen admin und dem Passwort welcome1 ein. Zum Ändern des Passworts navigieren Sie danach in den Bereich Configurations, dort zu Security, zu Realms und dann zum admin-realm. Klicken Sie dann auf die Schaltfläche Manage Users.

Passwort für den User "admin" ändern
Abbildung 5: Passwort für den User "admin" ändern

Nun geht es an die Einrichtung einer Datenbankverbindung. Navigieren Sie dazu zu den Resources, dort zu JDBC und dann zu den JDBC Connection Pools. Klicken Sie auf New, um einen neuen Connection Pool anzulegen (Abbildung 6).

JDBC Connection Pools im Glassfish Application Server
Abbildung 6: JDBC Connection Pools im Glassfish Application Server

Geben Sie dem Connection Pool zunächst einen Namen (hier: WorldSamplePool) und wählen Sie javax.sql.DataSource als Resource Type aus. Als Database Driver Vendor nehmen Sie Oracle (Abbildung 7). Klicken Sie danach auf Next.

Einen neuen JDBC Connection Pool für die Oracle Datenbank anlegen
Abbildung 7: Einen neuen JDBC Connection Pool für die Oracle Datenbank anlegen

Nun öffnet sich ein tabellarisches Formular, in welchem Sie alle Angaben zur Datenbankverbindung hinterlegen können (Abbildung 8). Die hier nicht aufgeführten Einträge belassen Sie so, wie sie sind.

Detailangaben zum neuen JDBC Connection Pool
Abbildung 8: Detailangaben zum neuen JDBC Connection Pool
  • Tragen Sie als User WORLD_SAMPLE (bzw. das Datenbankschema, in welches Sie die Beispieldaten von HERE eingespielt haben) ein.
  • Bei Password tragen Sie das Passwort des Datenbankusers WORLD_SAMPLE ein (hier: "world_sample").
  • Den Database Name können Sie frei wählen
  • Als ServerName tragen Sie den Hostnamen des Datenbankservers ein.
  • Den DriverType stellen Sie auf thin .
  • Tragen Sie bei Service Name den Namen des Datenbankservice an, mit dem Sie sich normalerweise verbinden. Der Service Name ist nicht zwingend identisch mit der SID - schauen Sie im Zweifelsfalle nochmals nach.
  • Tragen Sie bei PortNumber noch den TCP/IP-Port des Oracle Listeners ein - typischerweise ist das die 1521 .

Wenn Sie fertig sind, klicken Sie oben rechts auf Finish. Danach sollten Sie Ihren neuen Connection Pool in der Liste sehen. Klicken Sie direkt nochmals darauf, denn es muss noch eine Änderung gemacht werden (Abbildung 9).

Der Connection Pool wurde erstellt
Abbildung 9: Der Connection Pool wurde erstellt

Klicken Sie direkt auf den Reiter Advanced (Abbildung 10).

JDBC Connection Pool: Änderung im Bereich "Advanced"
Abbildung 10: JDBC Connection Pool: Änderung im Bereich "Advanced"

Entfernen Sie dann das Häkchen bei Wrap JDBC Objects. Speichern Sie die Änderung mit einem Klick auf Save ab (Abbildung 11).

"Wrap JDBC Objects" muss abgeschaltet werden
Abbildung 11: "Wrap JDBC Objects" muss abgeschaltet werden

Nun ist der Connection Pool erstellt. Als nächstes braucht es eine sog. JDBC Resource. Navigieren Sie also im Menübaum links zu JDBC Resources und klicken Sie auf der rechten Hälfte auf New (Abbildung 12).

Vorhandene JDBC Resources
Abbildung 12: Vorhandene JDBC Resources

Tragen Sie jdbc/WorldSamplePool als JNDI Name ein - diesen Namen müssen Sie sich noch merken. Bei Pool Name wählen Sie den soeben erstellten WorldSamplePool aus. Klicken Sie dann auf OK.

Neue JDBC Resource erstellen
Abbildung 13: Neue JDBC Resource erstellen

Navigieren Sie nun wieder zu den Dateien des ausgepackten ZIP Archivs. Stoppen Sie den Glassfish Server mit dem Skript stopServer.sh (bzw. stopServer.bat).

Glassfish Server stoppen
Abbildung 14: Glassfish Server stoppen

Navigieren Sie dann zur Datei apps/mapviewer.ear/WEB-INF/conf/mapViewerConfig.xml. Öffnen Sie diese mit einem Editor, gehen Sie bis ans Ende und fügen Sie ein XML-Tag <map_data_source> wie folgt hinzu. Damit wird die in den Admin-Dialogen erstellte JDBC-Datenbankverbindung dem MapViewer als Spatial-Datenquelle bekanntgemacht. Achten Sie darauf, bei container_ds den soeben vergebenen JNDI Name der JDBC Resource zu verwenden. Stellen Sie sicher, dass der Eintrag nicht mit <!-- und --> auskommentiert ist.

<map_data_source name="worldsample"
                 container_ds="jdbc/WorldSamplePool"
                 number_of_mappers="8"
                 allow_jdbc_theme_based_foi="false"
                 editable="false"
   />
JDBC Datenbankverbindung im MapViewer bekanntmachen
Abbildung 15: JDBC Datenbankverbindung im MapViewer bekanntmachen

Starten Sie den Glassfish Server danach neu mit startServer.sh (bzw. startServer.bat).

GlassFish Server starten
Abbildung 16: GlassFish Server starten

Nun können Sie sich in Ihrem Browser mit dem MapViewer verbinden. Öffnen Sie dazu die URL http://{server-name}:8080/mapviewer. Sie sollten daraufhin eine Seite wie in Abbildung 17 sehen.

Oracle MapViewer Homepage
Abbildung 17: Oracle MapViewer Homepage

Klicken Sie dann oben rechts auf Admin und loggen Sie sich mit dem gleichen User ein, wie vorhin an der GlassFish Administrationsoberfläche. Klicken Sie dann auf Data Sources, um die eingerichtete Datenquelle für Geodaten zu prüfen. Sie sollten ein Bild wie in Abbildung 18 sehen.

Oracle MapViewer Administrationsbereich: Data Sources
Abbildung 18: Oracle MapViewer Administrationsbereich: Data Sources

In der Tabelle sollte eine Data Source namens worldsample gelistet sein. Ist das nicht der Fall, so wurde beim Einrichten des JDBC Connection Pools, der JDBC Ressource oder beim Arbeiten in der XML-Datei ein Fehler gemacht. Überprüfen Sie dann alles nochmal (prüfen Sie auch, ob die Angaben zur Datenbank auch wirklich stimmen), stoppen und starten Sie dann den Server erneut und prüfen Sie nochmals, ob die Datenquelle dann vorhanden ist.

Wenn die Datenquelle vorhanden ist, klicken Sie auf Create Tile Layer, um eine Oracle Maps Hintergrundkarte zu erstellen. Wählen Sie Internal als Type of map source aus und klicken Sie auf Continue (Abbildung 19).

Neuen Map Tile Layer erstellen -1-
Abbildung 19: Neuen Map Tile Layer erstellen -1-

Die Beispieldaten von HERE enthalten neben den reinen Geodaten auch Darstellungsvorschriften für den Oracle MapViewer. Diese sind in den Tabellen USER_SDO_STYLES, USER_SDO_THEMES und USER_SDO_MAPS enthalten. Diese Metadaten sagen dem MapViewer, wie welche Tabelleninhalte auf einer Karte darzustellen sind. Für eigene Geodaten müssen diese Vorschriften natürlich erst erstellt werden - dazu stellt Oracle ein eigenes Werkzeug, den Oracle MapBuilder zur Verfügung.

Im folgenden Dialog tragen Sie bei Name den Namen des zu erstellenden Tile Layers ein; den können Sie frei wählen. Bei Data Source stellen Sie die vorhandene Datenquelle worldsample ein. Unter Base Map werden Ihnen die im Datenbankschema vorhandenen Kartendefinitionen zur Auswahl gestellt ("WORLD_SAMPLE"). Diese Definitionen wurden, wie oben erwähnt, gemeinsam mit den Geodaten eingespielt. Wählen Sie also WORLD_SAMPLE aus, belassen Sie alle anderen Einstellungen so, wie sie sind und klicken Sie unten auf Submit (Abbildung 20).

Neuen Map Tile Layer erstellen -2-
Abbildung 20: Neuen Map Tile Layer erstellen -2-

Anschließend taucht der neue Map Tile Layer unter Manage Map Tile Layers auf. Mit einem Klick auf die Schaltfläche View Map / Manage Tiles können Sie testen, ob alles funktioniert; tragen Sie dazu 10 bei Center X und 50 bei Center Y ein und klicken Sie auf Show Map. Wenn alles stimmt, sollten Sie dann eine Karte sehen (Abbildungen 21 und 22).

Vorhandene Map Tile Layer
Abbildung 21: Vorhandene Map Tile Layer
Map Tile Layer verwalten
Abbildung 22: Map Tile Layer verwalten"

APEX-Plugin auf den neuen Oracle Maps Server umstellen

Nun geht es daran, den neuen Oracle Maps-Server, anstelle des Demoservers maps.oracle.com, auch in der APEX-Anwendung zu nutzen. Loggen Sie sich also am APEX-Workspace ein, gehen Sie zur im zweiten Teil des Tutorials erstellten Anwendung und dort zur Seite mit der vom APEX-Plugin Oracle Maps - Region erzeugten Karte. Navigieren Sie zu den Regionsattributen (Abbildung 23).

Einstellungen des Oracle Maps-Plugins ändern
Abbildung 23: Einstellungen des Oracle Maps-Plugins ändern

Passen Sie dann den Eintrag Map Server URL an Ihre Umgebung an und stellen Sie bei Map Tile Layers worldsample.WORLD_SAMPLE ein. Ein Map Tile Layer wird hier im Format {datasource}.{maptilelayer} angegeben.

Map Server URL und Map Tile Layer anpassen
Abbildung 24: Map Server URL und Map Tile Layer anpassen

Speichern Sie Ihre Änderung ab und starten Sie die Anwendungsseite. Sie sehen nun eine leicht veränderte Karte; der Rest der Anwendung funktioniert wie gehabt.

Die APEX-Anwendung zeigt nun eine andere Hindergrundkarte
Abbildung 25: Die APEX-Anwendung zeigt nun eine andere Hindergrundkarte

Mit einer eigenen Kartenserver-Infrastruktur lässt sich die APEX-Anwendung nun mit beliebigen Hintergrundkarten ausstatten. Voraussetzung ist natürlich, dass diese vorher im MapViewer als Map Tile Layers eingerichtet wurden.

Hintergrundkarte für die APEX-Anwendung - ältere NAVTEQ-Beispieldaten
Abbildung 26: Hintergrundkarte für die APEX-Anwendung - ältere NAVTEQ-Beispieldaten
Hintergrundkarte für die APEX-Anwendung - OpenStreetMap-Daten
Abbildung 27: Hintergrundkarte für die APEX-Anwendung - OpenStreetMap-Daten

Fazit

In diesem Community-Tipp haben Sie erfahren, wie Sie den im Teil 2 des Tutorials verwendeten Demoserver maps.oracle.com durch eine eigene Installation austauschen können. Mit einem eigenen Kartenserver ergeben sich wesentlich mehr Möglichkeiten: So kann nicht nur das Aussehen der Karte völlig frei gestaltet werden; auch erreicht man ein gutes Stück Unabhängigkeit von externen Diensten. Auf der anderen Seite steht natürlich der Aufwand, der sich für Bereitstellung und Betrieb des Kartenservers ergibt.

Zurück zur Community-Seite