10 January 2007

Mapviewer installieren und in APEX integrieren - "How To ?"

Eine Kurzanleitung

Mapviewer installieren:
(Englische Version als PDF)
Deutsche Beschreibung:
1. Du gehst auf die Oracle AS Mapviewer/Software Download Seite.
2. Downloade für die aktuelle Version 10.1.3.1 die folgende Software runter:
3. MapViewer Quickstart kit—The MapViewer Quickstart kit includes a ready-to-run standalone OC4J with MapViewer 10.1.3.1 pre-deployed and configured (Zip - 89.6MB)
4. Demo Data Set—A MapViewer demo dataset (MVDEMO) specifically prepared for this release (Zip - 4.3MB)
5 View/Download the Users Guide—An updated PDF version of the MapViewer User's Guide (4.9MB)
6. Readme (Text)
Optional: Map Builder kit—The new Map Builder desktop application (um Themes/Layer zu editieren)

Vereinfacht geht es dann so weiter:

Step 1:
Voraussetzung ist natürlich eine Oracle Datenbank (möglichst 10g oder 9i) mit der Spatial Funktionalität installiert hast. Du kannst das wie folgt überprüfen :

SQL> SELECT COMP_NAME, STATUS FROM DBA_REGISTRY
WHERE COMP_NAME = 'Spatial';

COMP_NAME STATUS
----------------------------- -----------
Spatial VALID

Zum Installieren verfahre wie folgt:
SQL> connect SYS as SYSDBA
SQL> @?/md/admin/mdinst.sql

Step 2:
Das "MVDEMO" Demo Dataset (siehe 4.) auspacken und gemäß Readme.txt über SQL-Plus in die Datenbank installieren. Es werden dann Demodaten in Form von Tabellen, Karten und Layern, Themes, Base_maps usw. angelegt und indiziert; sprich die Funktionalitäten des Spatial Schemas MDSYS für die Daten nutzbar gemacht.

Step 3:
Den Mapviewer Quickstart Kit auspacken und (man braucht dazu Java SDK 1.5 wird auch JDK 5 genannt), den Pfad in der Start.bat oder Start.sh anpassen, dass es in etwa so aussieht und
-------------------------------------
C:
cd C:\mv10131_qs\oc4j\j2ee\home
java -server -Xmx384M -jar oc4j.jar
-------------------------------------
(start.bat oder start.sh - Startdatei für den Oracle Application Server)

Step4:
den OC4J (Oracle Containers for Java, die J2EE Version des Oracle Application Servers) starten (Doppelklick auf die "start.bat" und obige Datei wird gestartet)

Step5:
Aufruf des Mapviewer mittels:
http://localhost:8888/mapviewer oder gleich:
http://localhost:8888/mapviewer/faces/home.jspx
Jetzt landest Du im "kleinen Enterprise Manager" (EM) des AS Mapviewers.
Unten auf der Seite siehst Du dann auch den Link zu Oracle Maps Tutorial.

Step6:
Schau Dir zunächst mal das 3. Kapitel Demo Setup an und gehe die Steps durch.
die 1. haben wir oben mit dem Import des Demo Datasets MVDEMO schon erledigt. In der Regel mußt Du das MVDEMO Schema nicht "droppen" , da Du es ja wahrscheinlich gerade erst eben mit den Demodaten angelegt hast.
Dann folgt 2. : Es muß über den ADMIN Teil (oben rechts Button im EM) eine Datasource angelegt werden (Verbindung vom Application Server OC4J zur Datenbank).
Das Einloggen geschieht mit (normalerweise) oc4jadmin/oc4jadmin.
Und Du mußt das Skript "mcsdefinition.sql" erwähnt in 3.) laufen lassen.
Dann kannst Du über "Running the Demos" Dir die ersten Karten ansehen. Na hoffentlich! Glückwunsch !

Step 7:
Im Oracle Maps Tutorial findest Du im Inhaltsverzeichnis oben links: Getting Started.
Hier werden die 3 Schritte zum Bau eines Oracle Maps API beschrieben:
The essential steps to building any Oracle Maps application or mashup using the JavaScript API are:
(1) Loading the Oracle Maps JavaScript library in the beginning of a web page
(2) Placing an HTML DIV component that serves as the master map container on the page
(3) Writing custom JavaScript code to set up initial map contents (base-map, FOI layers, etc) and implement application specific logic.

Wo kommt das in APEX nun hin ? Berechtigte Frage.

Oracle Maps in APEX integrieren:

Step 1 - laden der Oracle Maps Javascript library am Seitenanfang
Wir legen eine neue Anwendung in APEX mit einer leeren Seite und ohne Authentication an (empfehle ich).
Zu (1) - Wir rufen die Seite auf und gehen bei "Page Rendering"/"Seitenwiedergabe" auf Page/Seite und in dem Kasten oben rechts auf das Icon "Page Attributes/Seiten Eigenschaften.
Dort gehen wir zum HTML Header und kopieren den unter Step 1 und Step 3 (des Tutorials) erwähnten Quellcode hinein.
Also die Zeile:

'<'script language="Javascript" src="/mapviewer/fsmc/jslib/oraclemaps.js"'>'<'/script'>'

und den großen Block unter Step 3. (nur den großen Block!.)
Bei Anzeigeattribute und "Cursor Focus" muß ausgewählt sein: "Cursor nicht als Focus"
Als (vor-) letztes gehen wir auf der APEX Seite unterhalb des "HTML Header" zu "Beim Laden"/"On Load" und kopieren die untere Zeile


'<'body onLoad="javascript:showMap();"'>'
dort hinein.
Das Javascript von Oracle Maps wird nun zu Beginn der Seite immer aufgerufen.

Step 2 - Anzeige der Karte in einer Region:
Wohin soll aber die Karte kommen ?
Dafür richten wir eine Region ein vom Typ HTML und kopieren den Quellcode von Step 2 in "Quelle"/"Sources" wie folgt:

'<'div id="map" style="left:1%; top:1%; width:99%; height:99%"'>'<'/div'>'
d.h. ein sogen. DIV Container namens "map" nimmt die Ergebnisse auf und stellt sie dar, die das Javascript und der Mapviewer beim Aufbau der Seite zusammenspoolen;
die Seite ist (fast) fertig.
Eine kleine Anpassung müssen wir noch vornehmen:
Im HTML Header bei den Seitenattributen heisst es ja:


src="/mapviewer/fsmc/jslib/oraclemaps.js


und das müssen wir abändern in:


"src="#IMAGE_PREFIX#javascript/oraclemaps.js"

Das macht aber natürlich nur Sinn, wenn wir die "oraclemaps.js" auch in das Verzeichnis der APEX images unter javascript



...??\?htmldb?\images\javascript

kopiert haben.
Dazu mußt Du bitte in das Verzeichnis des ausgepackten OC4J (Application Server) gehen und nach der Datei "oraclemaps.js" suchen.
Sie sollte in:


..??\oc4j\j2ee\home\applications\mapviewer\web\fsmc\jslib

liegen und muß nach



..??\?htmldb?\images\javascript
kopiert werden.

Ein allerletzter Schritt - das war es dann auch, ehrlich! -

Da APEX ja auch Javascript benutzt, welches in APEX liegt und der Mapviewer auch Javascript nutzt und ein "Cross-Scripting" APEX und der OC4J nicht erlauben, müssen wir dem Apache/http server dies nun noch beibringen:
Wir gehen in die "httpd.conf" in:

...??\htmldb\Apache\Apache\conf

und ergänzen in der Section:


#
# Proxy Server directives. Uncomment the following lines to
# enable the proxy server:
#
ProxyRequests On
ProxyPass /mapviewer/ http://localhost:8888/mapviewer/
ProxyPassReverse /mapviewer/ http://localhost:8888/mapviewer/
NoCache *
#
#


F E R T I G ! ! ! !
Jetzt sollte es laufen. Zumindest schonmal mit einer Karte in APEX.
Wenn Du das Oracle Maps Tutorial nochmal studierst, wirst Du sehen, wie einfach es ist, die Karte um zusätzlich "Features" zu ergänzen oder eine andere als die Demo-Karte anzuzeigen.
Falls die Anleitung noch etwas holperig sein sollte, laß es mich bitte wissen, damit ich sie verbessern kann.
Viel Spaß damit - es lohnt sich.

5 comments:

Aliocha said...

Can you translate to english, please?

Thanks
Antonio

B. Fischer-Wasels said...

Antonio,
recommend to look here at Patrick Wolfs BLOG explaining it in English:
http://www.inside-oracle-apex.com/2007/01/integration-of-google-maps-oracle-maps.html

best
Bernhard

畅游龙行 said...

Why I can not access the functions like "MVSdoGeometry.createPoint" even I incuded the oraclemap.js document???
Please help me !

Steffi said...

hallo bernhard fischer-wasels,

da ich bei meinen recherchen immer wieder auf ihren blog stosse, moechte ich sie direkt nach einem loesungsvorschlag fuer mein projekt fragen:
ich habe vor, eine webanwendung mit einer map zu erstellen, in der ich pois mit zusaetzlichen infos anzeigen kann, naechsten- und umkreissuche durchfuehren kann sowie routen anzeigen. die daten liegen in einer oracle spatial db.
mir steht der jdeveloper zur verfuegung und ich dachte an ein adf projekt. ich bin mir nur nicht sicher, ob ich damit alle funktionalitaeten abdecken kann. waere ein anderer weg evtl. ein besserer?
ich hoffe, sie koennen mir einen tipp geben.

vielen dank und viele gruesse
steffi lammers

B. Fischer-Wasels said...

Hi Steffi,
die Oracle-Maps Implementierung im JDeveloper 11g ist derzeitig "uncool" (es werden für FOIs 2 Spalten einer Tabelle für Lat/Lon genutzt statt auf SDO_Geometry zu gehen)- man müßte das neu bauen und kann die Standardfunktionailtät, die dort angeboten wird zur Integration einer Karte kaum nutzen.
Der produktivere Weg ist m.E. APEX und Oracle Maps.
Falls Du dass "offline" noch weiter diskutieren möchtest, bitte mail an: bernhard.fischer-wasels(ät)oracle.com.
Gruss
Bernhard