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"
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:
- Die Anwendung sendet einen Ein Map Request an den MapViewer
- 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.
- MapViewer und liest die Geodaten aus der Datenbank
- 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.
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.
Abbildung 2: Oracle MapViewer Software-Download im OTN
Nach dem Auspacken des ZIP-Archivs finden Sie die in Abbildung 3 dargestellten
Dateien und Ordner.
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.
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.
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).
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.
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.
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).
Abbildung 9: Der Connection Pool wurde erstellt
Klicken Sie direkt auf den Reiter Advanced (Abbildung 10).
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).
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).
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.
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).
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.
Abbildung 15: JDBC Datenbankverbindung im MapViewer bekanntmachen
Starten Sie den Glassfish Server danach neu mit startServer.sh (bzw. startServer.bat).
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.
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.
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).
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).
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).
Abbildung 21: Vorhandene Map Tile Layer
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).
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.
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.
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.
Abbildung 26: Hintergrundkarte für die APEX-Anwendung - ältere NAVTEQ-Beispieldaten
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
|