Auf den Ort kommt es an: Geodaten in Application Express-Anwendungen nutzen
Kennen Sie Google Maps? Wahrscheinlich schon.
Dann stellt sich die Frage, ob geografische Informationen
auch in Ihren Anwendungen einen Nutzen stiften können.
Der geografische Ort wird
meist nur indirekt verwendet, etwa als postalische Adresse oder als Kennziffer für
das Vertriebsgebiet - was für viele Aufgabenstellungen völlig ausreichend ist.
Der erfolgreiche Einsatz von Navigationssystemen oder Diensten wie Google Maps
zeigt deutlich, welchen Stellenwert
Anwendungen mit Ortsbezug erreichen können. Auf die gleiche Weise kann die
Verwendung geografischer Informationen in Ihren Application Express-Anwendungen
deutlich zur Wertschöpfung beitragen.
So wird zum Beispiel die Frage, welche Kunden im Umkreis um eine bestimmte
Filiale wohnen, durch die Verwendung von Geokoordinaten exakt beantwortet.
Solche Informationen können hervorragend als Entscheidungsgrundlage für
den Einsatz von Ressourcen oder zur Planung von Kampagnen dienen. Es entstehen
vielfältige Möglichkeiten - mit Business Intelligence oder Geomarketing
seien hier nur zwei Beispiele genannt.
In dieser und einigen der folgenden Ausgaben werden Sie daher mehr über geografische
Informationen (Geodaten) in der Oracle-Datenbank und zum Umgang mit denselben
in Application Express erfahren. Das Ziel wird es sein, räumliche Informationen
mit fachlichen zu kombinieren und zusätzlich eine Landkarte mit
Informationen über Standorte, Kunden oder Vertriebsgebiete in Ihre
Application Express-Anwendung zu integrieren.
Zu Beginn benötigen Sie einige Geodaten zum Ausprobieren
und zum "Spielen". In der Vergangenheit war genau dies das Problem - umfassende
Geodaten zum Testen waren nur schwierig zu bekommen. Dieses
Problem ist behoben: Inzwischen
finden Sie im
Oracle Technet Geodaten von NAVTEQ zum
kostenlosen Download.
Laden Sie sich das "World Sample" herunter - Es enthält:
- Ländergrenzen
- Administrative Bereiche (Bundesländer, Regierungsbezirke)
- Wichtige Fernstraßen (Major Highways)
- Städte (für Deutschland sind auch kleinere Orte dabei)
Sie benötigen ca. 600 MB freien Plattenplatz
für die Geodaten - ein eigenes Tablespace ist empfehlenswert. Das
ZIP-Archiv enthält in der README-Datei Anweisungen zum Importieren
der Daten mit Data Pump -
unter Umständen müssen Sie den Import gemeinsam mit dem
Datenbankadministrator durchführen.
Achten Sie darauf, dass Sie von Ihrem Application Express-Workspace
aus Zugriff auf die erzeugten Tabellen haben - Importieren Sie also
in Ihr Workspace-Schema oder vergeben Sie (wenn die Tabellen in ein
anderes Schema importiert werden) entsprechende SELECT-Privilegien.
Ihre Datenbankversion muss mindestens 10g Release 2 (10.2.0.x) sein.
Übrigens: Die hier vorgestellte Geodaten-Technologie ist, soweit
nicht anders erwähnt, in allen Editionen der Datenbank vorhanden. Die
Spatial-Option muss nur bei Verwendung bestimmter Funktionalitäten
lizensiert werden - werden solche Funktionalitäten hier verwendet, so wird
dies ausdrücklich erwähnt.
Wenn Sie die Daten erfolgreich importiert haben, stehen in Ihrem
Workspace mehrere neue Tabellen bereit - Abbildung 1 zeigt eine der
Tabellen (WORLD_CITY_SMALL) im
SQL Workshop.
Abbildung 1: Geodaten-Tabellen im SQL Workshop
Die Geokoordinaten selbst befinden sich in der Tabellenspalte
GEOMETRY.
Lässt man sich die Tabelle
beschreiben, so erfährt man, dass diese vom Datentyp
SDO_GEOMETRY ist.
SDO_GEOMETRY speichert in der Oracle-Datenbank
räumliche Daten als geometrische Objekte.
-
Punkte beschreiben einen Ort, bspw. die Lokation eines Kunden
-
Linienzüge können Wege (Strassen oder Schienenwege) beschreiben
-
Polygone beschreiben Flächen, bspw. Seen oder Bundesländer
Das Land "Niedersachsen" ist dabei ein "Polygon mit Loch";
da Bremen ein eigenes Bundesland ist, muss dessen Fläche aus der von Niedersachsen
ausgenommen werden.
Alle Daten eines geometrischen Objektes sind in
SDO_GEOMETRY enthalten,
neben Angaben über den Typ (Punkt, Linie, Polygon, ...) also auch alle
Koordinaten. Der Aufbau von SDO_GEOMETRY folgt dem Industriestandard
OGC Simple Features For SQL und ist
vollständig dokumentiert.
Die Geodaten des World Sample, welche Sie importiert haben,
verwenden Längen- und Breitengrade als Koordinaten (für die Experten:
WGS84) - dies lässt sich auf
einfachem Wege nachprüfen. Abbildung 2 zeigt, wie Sie im SQL-Workshop die
Koordinaten von München selektieren.
Abbildung 2: Längen- und Breitengrade von München
Mit diesen Grundlagen wollen wir eine erste Application Express-Anwendung
erstellen - sie enthält zwar (noch) keine Karte, wird aber schon in der
Lage sein, räumliche Berechnungen durchzuführen. Erstellen Sie also
eine neue Application Express-Anwendung mit wenigstens einer leeren
Seite (Abbildung 3).
Abbildung 3: Eine leere Application Express-Anwendung
Fügen Sie Ihrer Anwendung zunächst eine Entferungstabelle hinzu. Dazu
arbeiten Sie mit der Tabelle WORLD_CITY_CAPITAL,
welche 61 Hauptstädte
enthält. Starten Sie mit einer Auswahlliste, in welcher Sie eine
der Städte auswählen können. Nennen Sie die Liste
P1_START_CITY. Das SQL
für die Werteliste sollte wie folgt aussehen:
Nachdem Sie eine neue Schaltfläche Go zum Absenden der ausgewählten
Stadt eingerichtet haben (wählen Sie eine Schaltfläche, die
zwischen den Elementen der Region dargestellt wird),
fügen Sie nun einen Bericht mit der Entfernungstabelle hinzu.
Zur Berechnung des Abstands zwischen zwei Geometrie-Objekten dient die
Funktion SDO_GEOM.SDO_DISTANCE. Sie
berücksichtigt nicht nur die Tatsache,
dass die Erde eine Kugel (oder genauer: ein Ellipsoid) ist, sondern
darüber hinaus die Besonderheit, dass der kürzeste Weg manchmal
über die Pole führen kann.
SDO_GEOM.SDO_DISTANCE wird mit vier Parametern aufgerufen:
- Die Geometrie, von der aus der Abstand gerechnet wird
- Die Geometrie, zu der Abstand gerechnet wird
- Die "Toleranz"; diese setzen wir hier mit einem Meter (1m) fest
- Die Einheit, in der das Ergebnis zurückgeliefert werden soll
Demnach sieht die SQL-Abfrage für den Bericht wie folgt aus:
Das Ergebnis sollte dann in etwa wie in Abbildung 4 aussehen.
Abbildung 4: Entfernungstabelle: Berechnung mit SDO_GEOM.SDO_DISTANCE
Der praktische Nutzen dieser Anwendung wird sofort klar - eine solche
Abfrage ist natürlich auch mit den Lokationen der eigenen Kunden denkbar;
man kann also herausfinden, wie weit Kunden von der nächsten eigenen
Niederlassung entfernt sind ... (und ob dies etwas mit dem Umsatz zu
tun hat) ...
Die Frage kann jedoch auch anders gestellt werden. Welche Städte
befinden sich innerhalb einer bestimmten Distanz? Diese Fragestellung
kennen Sie wahrscheinlich bereits aus der ein oder anderen Internet-Seite:
Viele Dienste geben Ihnen zu einem bestimmten Ort an, welche Theater,
Hotels oder andere Dinge sich innerhalb einer bestimmten Distanz befinden.
Fügen Sie Ihrer Anwendung also ein neues Textfeld hinzu, in welches
die gewünschte maximale Distanz eingegeben werden kann. Nennen Sie es
P1_MAX_DISTANZ. Ändern Sie
anschließend das SQL Ihres Berichtes wie folgt:
Nun können Sie, wie in Abbildung 5 dargestellt, eine maximale Entfernung
angeben. Mit Hilfe der Funktion SDO_WITHIN_DISTANCE
wird in der SQL WHERE-Klausel
eine zusätzliche Einschränkung vorgenommen - es werden nur die Städte
zurückgeliefert, welche sich innerhalb der gewünschten Distanz befinden.
Abbildung 5: Einschränkung mit SDO_WITHIN_DISTANCE
Natürlich können solche räumlichen Kriterien in einer Abfrage problemlos mit
fachlichen Kriterien gemischt werden. So soll eine weitere Einschränkung
hinsichtlich der Einwohnerzahl vorgenommen werden. Erzeugen Sie dazu eine
Auswahlliste P1_POPULATION mit einer
statischen Werteliste:
Anschließend ändern Sie das SQL des Berichts wiederum ein wenig um:
Abbildung 6: Entfernungstabelle: zusätzliche Einschränkung anhand der Einwohnerzahl
Man sieht, wie einfach räumliche Informationen in SQL-Abfragen integriert
werden können. Neben der hier vorgestellten Funktion SDO_DISTANCE bietet
das PL/SQL-Paket SDO_GEOM viele weitere räumliche Funktionen an. Einige Beispiele dafür sind:
- Berechnen des Flächeninhaltes mit SDO_GEOM.SDO_AREA
- Berechnung der Länge (eines Strassenzugs) mit SDO_GEOM.SDO_LENGTH
- Finden der nächsten Nachbarn mit SDO_NN
- Finden der direkt angrenzenden Geometrieobjekte (direkte Nachbarn) mit SDO_TOUCH
- und viele mehr ...
In den nächsten Ausgaben wird dieses Beispiel fortgesetzt. Sie werden erfahren ...
- ... wie Sie diese Daten in einer Karte darstellen
- ... und diese Karte in Ihre Application Express-Anwendung integrieren können
- ... wie Sie die Karte mit fachlichen Informationen (Einwohnerzahlen) anreichern können
- ... wie Sie neue Geodaten "erfassen" können (bspw. Kunden)
Wenn Sie mehr über die Geodaten-Technologie erfahren möchten, finden Sie hier
weitere Informationen:
Zurück zur Community-Seite
|