Logo Oracle Deutschland   Deutschsprachige APEX und PL/SQL Community
APEX-Region "Karte" mit eigenen Karten verwenden
Erscheinungsmonat APEX-Version Datenbankversion
September 2012 ab 4.0 ab 10.2

Seit der Version 4.0 bietet APEX den Diagrammtyp "Karte" an; dieser erlaubt die sehr einfache Integration von Karten in eine APEX-Anwendung. Erzeugt man eine neue Region vom Typ Karte, so bietet APEX eine Vielfalt von verfügbaren Karten an (Abbildung 1).

Verfügbare Karten in einer Region vom Typ "Karte"

Abbildung 1: Verfügbare Karten in einer Region vom Typ "Karte"

Deutschland findet sich unterhalb von Europe - die Karte Germany enthält die Bundesländer, Germany (Second Level) enthält einige (nicht alle) Regierungsbezirke.

Für Deutschland verfügbare Karten in APEX 4.0

Abbildung 2: Für Deutschland verfügbare Karten in APEX 4.0

Nachdem man die üblichen Angaben zu Regionstitel und -Template gemacht hat, wird im Bereich Query die SQL-Abfrage für die Kartendarstellung hinterlegt. Die Karte ist dabei als Hintergrund zu verstehen; auf dieser werden die Daten der SQL-Abfrage visualisiert. Es empfiehlt sich, die Links Map Query Example und Map Reference Information aufzuklappen (Abbildung 3).

SQL Abfrage zur Region vom Typ Karte hinterlegen

Abbildung 3: SQL Abfrage zur Region vom Typ Karte hinterlegen

Um Daten auf der Karte zu visualisieren, braucht es keine Koordinaten wie Längen- und Breitengrade. Vielmehr wird die Abfrage wie eine typische APEX Diagrammabfrage aufgebaut. Es müssen drei Spalten zurückgeliefert werden: LINK, LABEL und VALUE. Die Visualisierung auf der Karte findet nun allein über die Ergebnisspalte LABEL statt. Diese wird mit dem REGION_NAME aus der MapReference Information zusammengebracht - und das entsprechende Gebiet auf der Karte wird dann - je nach dem Inhalt der VALUE-Spalte - eingefärbt. Hinterlegen Sie für die Karte Germany (Second Level) also folgende SQL-Abfrage

select null, 'Kassel', 500 from dual union all (
  select null, 'Freiburg', 1000 from dual
)

Speichern Sie alles ab und starten Sie die Seite. Die Karte sollte etwa wie in Abbildung 4 aussehen ...

Deutschlandkarte (Second Level) in APEX

Abbildung 4: Deutschlandkarte (Second Level) in APEX

Diese Karte ist nicht wirklich zufriedenstellend. Für einige Bundesländer sind Regierungsbezirke enthalten; für andere jedoch nicht und das Land Brandenburg fehlt völlig. Nimmt man stattdessen die Karte Germany, so wird mit den Namen der Bundesländer gearbeitet, was in manchen Fällen sicherlich ausreicht, in vielen Fällen jedoch zu wenig ist.

Wenn Sie mit Hilfe dieses Community-Tipps eigenes Kartenmaterial verwenden, achten Sie darauf, dass die Karten nicht zu umfangreich sind. AnyChart lädt die ganze Karte in den Hauptspeicher des Browsers; enthält diese zuviele Details (ein Test wurde bspw. mit den PLZ-Gebieten in Deutschland gemacht; das Shapefile hierfür ist ca. 13MB groß), so reagiert der Browser beim Bewegen der Karte recht träge. Die AnyChart-Kartenkomponente ist nur für einfache Visualisierungsaufgaben geeignet; für komplexere Aufgaben sollte man den ebenfalls in einigen Community Tipps näher erläuterten Weg mit Oracle Locator / Spatial und Oracle Maps wählen. Am Ende dieses Tipps finden Sie entsprechende Links.

Zum Glück ist es möglich, hier eigene Karten einzubinden und zu verwenden. Als Beispiel verwenden wir die Stadtteile von Köln, die von der Stadt Köln unter einer Creative Commons Lizenz zum freien Download bereitgestellt werden. Sie können diese Daten also frei verwenden und nutzen. Laden Sie das ZIP-Archiv herunter und packen Sie es aus. Sie sollten darin folgende Dateien vorfinden.

 Volume in drive D is Local Disk
 Volume Serial Number is A81D-2C37

 Directory of D:\Stadtteil

05.09.2012  14:50              .
05.09.2012  14:50              ..
23.08.2012  14:27            13.362 Stadtteil.dbf
23.08.2012  14:27               564 Stadtteil.prj
23.08.2012  14:27             1.012 Stadtteil.sbn
23.08.2012  14:27               204 Stadtteil.sbx
23.08.2012  14:27           629.220 Stadtteil.shp
23.08.2012  14:27           130.908 Stadtteil.shp.xml
23.08.2012  14:27               788 Stadtteil.shx
               7 File(s)        776.058 bytes
               2 Dir(s)  23.645.958.144 bytes free

Sie haben ein sog. ESRI Shapefile vor sich, eine sehr gängiges Dateiformat für den Austausch von Geodaten. Solche Shapedateien sind der Ausgangspunkt für eigene Karten in APEX. Als nächstes muss die Shapedatei in ein AnyChart-Format (AMAP-Datei) umgewandelt werden. Hierzu stellt AnyChart ein kostenloses Werkzeug, den AnyChart Map Converter, bereit. Laden Sie diesen von der AnyChart Webseite herunter und installieren Sie das Programm auf Ihrem Rechner. AnyChart stellt auch ein sehr ausführliches Tutorial zum Umgang mit dem Converter bereit. Darin sind auch die Eigenschaften und Inhalte der AMAP-Dateien erklärt.

Tutorial für den AnyChart Map Converter

Abbildung 5: Tutorial für den AnyChart Map Converter

Das Tutorial enthält im Abschnitt Input SHP Requirements einige wertvolle Hinweise, wie die Shapedateien beschaffen sein müssen, damit sie in AMAP-Dateien umgewandelt werden können:

  • Die Datei muss Polygone, also geschlossene Flächen beinhalten. Ein Shapefile voller Punkte ist also nutzlos.
  • Das Shapefile darf keine projizierten Daten beinhalten - oder anders gesagt: Das Shapefile muss die Daten in Längen- und Breitengraden (Koordinatensystem WGS84) enthalten. In der Praxis ist das recht häufig der Fall, aber eben nicht immer. Und auch die Stadtteile von Köln stellen uns hier zunächst vor ein Problem - denn diese liegen in der Projektion ETRS 1989 / UTM Zone 32N vor.
    Information zur Projektion der Shapedatei auf der Webseite

Wir können die Shapedatei also nicht direkt verwenden, sondern müssen Sie zunächst umwandeln - und zwar von ETRS89 / UTM Zone 32N nach WGS84. Wie das geht, ist im AnyChart Tutorial ebenfalls beschrieben - das angehängte Reprojection Tutorial beschreibt die Vorgehensweise mit Hilfe eines freien, kostenlosen Werkzeugs - stellen Sie jedoch sicher, dass Sie beim Download des MapWindow-Werkzeugs wirklich die Version 4.6 (und keine neuere) nehmen.

AnyChart Map Converter: Reprojection Tutorial

AnyChart Map Converter: Reprojection Tutorial

Nachdem Sie die Shapedatei ins Koordinatensystem WGS84 gebracht oder eine bereits in Längen- und Breitengraden vorliegende Shapedatei beschafft haben, starten Sie dan AnyChart Map Converter - er sollte wie in Abbildung 6 aussehen.

AnyChart Map Converter

Abbildung 6: AnyChart Map Converter

Öffnen Sie nun das Shapefile, in dem Sie zunächst auf File und dann auf Load Shapefile klicken. Wählen Sie dann die Datei mit der Endung .shp aus. Die anderen Dateien sind aber ebenso wichtig (nicht löschen), denn auch diese werden im Hintergrund geöffnet und ausgelesen (Abbildung 7).

Die Stadtgebiete von Köln im AnyChart Map Converter

Abbildung 7: Die Stadtgebiete von Köln im AnyChart Map Converter

Stellen Sie die Auswahlliste unter Group Polygons By Column auf NAME um. Daraufhin sehen Sie anstelle von IDs die Stadtteilnamen. Danach klicken Sie rechts unten auf Save AMAP File und speichern die AMAP-Datei auf Ihrer Festplatte ab.

Nun muss die AMAP-Datei für die in APEX eingebettete AnyChart Engine verfügbar gemacht werden. Leider kann sie nicht bei den Gemeinsamen Komponenten unter Dateien abgelegt werden - Sie muss unterhalb des Webserver-Pfades /i/ und dort unterhalb von flashchart/swf/maps zum Download bereitstehen (Abbildung 8). Es ist also Arbeit am Webserver nötig.

Die AMAP-Datei muss zu den anderen Dateien unterhalb von /i/ gebracht werden

Abbildung 8: Die AMAP-Datei muss zu den anderen Dateien unterhalb von /i/ gebracht werden

Je nach verwendetem Webserver ist die Vorgehensweise also unterschiedlich: Wenn Sie den Apache Webserver mit mod_plsql verwenden, müssen Sie die amap-Datei einfach nur ins Verzeichnis $APEX_HOME/images/flashcharts/swf/maps kopieren. Wenn Sie das PL/SQL Embedded Gateway verwenden, muss die Datei ins XML DB Repository übernommen werden. Hierzu kann der datenbankeigene FTP-Server verwendet werden. Dieser muss aber vorher als SYS mit DBMS_XDB.SETFTPPORT(2100) aktiviert werden ...

D:\Stadtteil>ftp -n
ftp> open sccloud030 2100
Connected to sccloud030.de.oracle.com.
220- sccloud030.de.oracle.com
Unauthorised use of this FTP server is prohibited and may be subject to civil and criminal prosecuti
on.
220 sccloud030.de.oracle.com FTP Server (Oracle XML DB/Oracle Database) ready.
ftp> user system ***
331 pass required for SYSTEM
230 SYSTEM logged in
ftp> cd /images/flashchart/swf/maps/europe
250 CWD Command successful
ftp> bin
200  Type set to I.
ftp> put stadtteile-koeln.amap
200 PORT Command successful
150 BIN Data Connection
226 BIN Transfer Complete
ftp: 386021 bytes sent in 0,03Seconds 12063,16Kbytes/sec.
ftp> bye
221 QUIT Goodbye.

Navigieren Sie nun zum vorhin erzeugten Chart und wandeln Sie die SQL-Abfrage so um, dass sie zu den Stadtteilen von Köln passt.

select null, 'Porz', 500 from dual union all (
  select null, 'Mülheim', 1000 from dual
)

Navigieren Sie dann zu den Diagrammattributen und dort zum Bereich Custom XML. Stellen Sie ein, dass Custom XML verwendet werden soll, denn die Verwendung Ihrer neuen Karte müssen Sie im XML-Dokument einstellen; in den APEX-Auswahllisten erscheint sie nicht (Abbildung 9).

Die Karte wird per "Custom XML" eingerichtet

Abbildung 9: Die Karte wird per "Custom XML" eingerichtet

Navigieren Sie im XML-Dokument dann zum in Abbildung 10 gezeigten Bereich und nehmen Sie mindestens die folgenden vier Änderungen vor.

Das XML-Dokument muss angepasst werden, damit die Karte von Köln verwendet wird

Abbildung 10: Das XML-Dokument muss angepasst werden, damit die Karte von Köln verwendet wird

  • Tragen Sie den Namen der AMAP-Datei ins Attribut source des Tags map_series ein. Tragen Sie ihn relativ zum Verzeichnis $APEX_HOME/images/flashcharts/swf/maps ein. Wenn Sie die Datei also ins Verzeichnis europe gelegt haben, müssen Sie europe/stadtteile-koeln.amap eintragen.
  • Tragen Sie die Spalte mit den Stadtteilnamen, die Sie im AnyChart Map Converter eingestellt hatten (NAME) ins Attribut ID_COLUMN ein.
  • Ändern Sie schließlich innerhalb des Tags format, welches sich innerhalb von tooltip_settings und label_settings befindet, etwaige Vorkommen von %value1 nach %Value - achten Sie dabei auf Groß- und Kleinschreibung. Anders ausgedrückt: Stellen Sie sicher, dass %Value immer mit großem "V" hinterlegt ist und dass keine Zahl anhängt - wie in Abbildung 10.

Sie können das XML natürlich auch noch weiter ändern. Beschreibungen der Tags und Attribute sowie deren Bedeutung, finden Sie in der AnyChart Dokumentation. Damit lässt sich die Karte beliebig anpassen. Speichern Sie danach die Änderungen ab und starten Sie die Seite. Da Sie die SQL-Abfrage ja bereits geändert haben, sieht die Karte nun wie folgt aus (Abbildung 11).

Die neue Karte mit den Stadtteilen von Köln

Abbildung 11: Die neue Karte mit den Stadtteilen von Köln

Das war zwar etwas Aufwand, aber die in APEX eigebaute Kartenfunktion konnte um eine ganz spezielle Karte (hier: für Köln) erweitert werden. Und diese Erweiterungen dürften in der Praxis häufig vonnöten sein, denn die im Lieferumfang enthaltenen Karten sind wahrscheinlich nicht ausreichend.

Generell ist diese Art der Kartendarstellung jedoch nur für einfache Visualisierungen geeignet. Sobald man mit "richtigen" Koordinaten arbeiten und ggfs. sogar räumliche Operationen auf den Daten direkt durchführen möchte, kommt man an der Arbeit mit Geodaten nicht mehr vorbei. In der APEX Community sind auch dazu einige Tipps vorhanden, die zwar schon etwas älter, aber immer noch aktuell und funktionstüchtig sind - schauen Sie mal rein.

Zurück zur Community-Seite