Donnerstag, 9. Juni 2011

Geodatenschätze heben - Räumliche Analysen und Data Mining

Über gängige räumliche Operatoren und Funktionen hinaus bietet Oracle Spatial Methoden, um den Einfluss von Nachbarschaftsbeziehungen auf der Basis der Verortung von Objekten zu untersuchen, abzuschätzen und vorauszusagen.
Diese sind den folgenden Anwendungsbereichen zugeordnet und im PL/SQL Package SDO_SAM implementiert:
  • Location Prospecting Analysis
  • Clustering Analysis
  • Spatial Mining
  • Neighborhood-Bases Estimation
Der heutige Blogeintrag gibt einen ersten kleinen Einblick in die von diesem Package bereitgetellten Methoden.

SDO_SAM.AGGREGATES_FOR_LAYER in Anwendung

Betrachten wir folgenden Anwendungsfall:
Für die Beurteilung der Auswirkungen von Fluglärm sollen die Bewohnerinnen und Bewohner im Umkreis von 5 km um die Flughäfen ermittelt werden.

Für die notwendige Analyse wird als Datengrundlage bewährtermassen das von der GfK GeoMarketing für die Oracle Datenbank bereitgestellte Deutschland-Datenset verwendet. Darin enthalten sind (u.a.) die Tabellen:

  • DE_AIRPORTS mit allen Flughäfen in Deutschland
  • DE_5DIGPC_2010 mit den 5-stelligen PLZ-Geometrien und u.a. der Population als Kennzahl
Diese nutzen wir ebenso wie die Prozedur AGGREGATES_FOR_LAYER im PL/SQL-Package SDO_SAM.
Im nachfolgenden SQL-Befehl, welcher einen View anlegt, sind die Parameter-Werte für die Prozedur kommentiert, um ihre Verwendung zu erklären.
-- Berechnet thematisches Aggregat für einen Geometrielayer 
create or replace view de_stats_pop_around_airports
as
select 
  a.name,
  a.type,
  round(b.aggregate_value) aggregate_value,
  b.geometry
from
  table(  
    sdo_sam.aggregates_for_layer(
      'DE_5DIGPC_2010',      -- Theme-Tabelle. 5-stellige PLZ Geometrien
      'GEOMETRY',            -- Geometriespalte der Theme-Tabelle
      'SUM',                 -- Aggregatsfunktion (Summe)
      'NEW___Z',             -- Zu aggregierender Wert (Bevölkerung absolut)
      'DE_AIRPORTS',         -- Data Mining Tabelle (Flughäfen)
      'GEOMETRY',            -- Geometriespalte in Data Mining Tabelle
      'distance=5 unit=km')  -- Distanzspezifikation (Umkreis von 5km um Flughäfen)
  ) b,
  de_airports a
where 
  b.region_id = a.rowid;
Die in diesem View aggregierten Daten sollen auf einer Karte dargestellt werden. Dafür benötigen wir zunächst einmal die Metadaten. Die Syntax für den entsprechenden INSERT-Befehl ist sichert vertraut.
-- Metadaten
insert into user_sdo_geom_metadata (
  table_name, 
  column_name, 
  diminfo,
  srid) 
values (
  'DE_STATS_POP_AROUND_AIRPORTS',
  'GEOMETRY',
  sdo_dim_array(sdo_dim_element('Lon',-180,180,0.005),
  sdo_dim_element('Lat',-90,90,0.005)),
  8307);
Der Rest ist dann Arbeit für den Oracle MapBuilder. Dort wird ein enstprechender Style definiert (Kreis roter Füllung und schwarzer Umrandung). Dieser Style wird für ein Theme verwendet, welches als Advanced Theme > Variable Marker definiert ist.
Das Ergebnis ist im nachfolgenden Bild dargestellt. Um die thematische Kartenebene räumlich besser einordnen zu können, wurde eine weitere Kartenebene hinterlegt, welche die Bundesländergrenzen von DE abbildet.

Thematische Karte mit Population im Umkreis von 5 km um Flughäfen dargestellt als Ranged Variable Markers
(basierend auf einem Deutschland-Datenset der GfK GeoMarketing für die Oracle DB)

Mit SDO_SAM.AGGREGATES_FOR_LAYER liegt damit ein Einstieg ins Thema vor. Weitere Tipps & Tricks zum Thema werden folgen.

Der Vollständigkeit halber sind nachfolgend noch die XML-Dokumente für den Advanced Style und das Theme eingefügt.

<?xml version="1.0" ?>
<AdvancedStyle>
  <VariableMarkerStyle basemarker="CITIES_OVER_100K" startsize="5" increment="4">
    <Buckets>
      <RangedBucket seq="0" label="<5K" low="-Infinity" high="5000" label_style="LABELS"/>
      <RangedBucket seq="1" label="5-10K" low="5000" high="10000" label_style="LABELS"/>
      <RangedBucket seq="2" label="10-20K" low="10000" high="20000" label_style="LABELS"/>
      <RangedBucket seq="3" label="20-50K" low="20000" high="50000" label_style="LABELS"/>
      <RangedBucket seq="4" label="50-100K" low="50000" high="100000" label_style="LABELS"/>
      <RangedBucket seq="5" label="100-200K" low="100000" high="200000" label_style="LABELS"/>
      <RangedBucket seq="6" label="200-500K" low="200000" high="500000" label_style="LABELS"/>
      <RangedBucket seq="7" label=">500K" low="500000" high="Infinity"/>
    </Buckets>
  </VariableMarkerStyle>
</AdvancedStyle>
<?xml version="1.0" standalone="yes"?>
<styling_rules>
    <hidden_info>
        <field column="NAME" name="Name des Flughafens"/>
        <field column="AGGREGATE_VALUE" name="Population absolut"/>
        <field column="TYPE" name="Typ des Flughafens"/>
  </hidden_info>
    <rule column="AGGREGATE_VALUE">
        <features style="V.DE_POP_AROUND_AIRPORTS"> </features>
        <label column="NAME" style="LABELS"> 1 </label>
  </rule>
</styling_rules>

Keine Kommentare:

Kommentar veröffentlichen