Virtuelle Ebenen

Virtuelle Ebenen stellen eine per GeoSQL abgefragte Sicht auf eine oder mehrere andere Ebenen dar.

Es kann jede der verfügbaren Datenquellen verwendet werden, die Abfragen zulassen. Die Ebene muss allerdings zum Zeitpunkt der Definition eines virtuellen Layers geladen sein.

Abfragen mittels GeoSQL sind möglich. Wenn die Ebene eine Geometrie definiert, dann ist auch die Kartendarstellung möglich.

Argumente

Typname: Virtual

  • source: eine SQL Abfrage, welche die Basisquelle dieser Ebene definiert. Hierbei wird ein gültiges GeoSQL Statement erwartet, welches die verfügbaren (anderen) geladenen Ebene referenziert.
  • geomColumnName (""): optional, wenn angegeben, dann wird hier der Name einer vorhandenen Spalte erwartet, die vom Typ Geometry ist, wenn die Angabe fehlt, wird die erste Spalte vom Typ Geometry verwendet, soweit vorhanden. SELECT * FROM %s LIMIT 0,
  • quickLoad (false): optional

Ladevorgang

Beim ersten Zugriff wird zur Bestimmung der verfügbaren Spalte immer SELECT * FROM {source} LIMIT 0 auf die Datenquelle durchgeführt.

Wenn quickLoad false ist, dann ...

  • ist keine Geometrie-Spalte vorhanden, wird SELECT COUNT(*) FROM {source}
  • sonst SELECT ST_MBR({geomColumnName}),COUNT(*) FROM {source}

ausgeführt. Dies dient der Ermittlung der Gesamtausdehnung und der Anzahl der Elemente in der Datenquelle. Die EPSG der Ebene wird aus der BBox ermittelt, die durch ST_Mbr abgefragt wurde.

Beispiel

Hier wird eine Shape-Datei mit einer SQL Server Datenquelle verknüpft bereitgestellt, diese Sicht kann dann über die Ebene mit dem Namen Virtual angesprochen werden.

[
    {
    "SALKA_GEOM": {
      "type": "Shapefile",
      "filename": "D:\\temp\\bsp.shp",
      "quickLoad": false}
    },{
    "SALKA_ATTR": {
      "type": "OdbcLayer",
      "ConnectionString": "Driver={SQL Server Native Client 11.0};
          Server=ihrServer\\sql2014;Database=dbname;Uid=uidname;pwd=pwd",
      "Source": "ODBCLayer",
      "quickLoad": true}
  },{
    "Virtual": {
      "type": "Virtual",
      "source": "SELECT SALKA_GEOM.* FROM SALKA_GEOM LEFT JOIN SALKA_ATTR ON SALKA_ATTR.ID = SALKA_GEOM.ID"
      "style": "unordered {
    /*bestehende Altablagerung*/
    polygon [akz == \"01\" ] {
        fill-color: RGB(204,248,204);                    
        fill-pattern: solid;
        outer-border-line:
        {
            line-width: 1px;
            line-color: green;
            line-join: round;
            line-start-cap: round;
            line-end-cap: round;
        };
        inner-border-line:
        {
            line-width: 1px;
            line-color: green;
            line-join: round;
            line-start-cap: round;
            line-end-cap: round;
        };
    }
    /*bestehender Altstandort*/
    polygon [akz == \"02\" ] {
        fill-color: RGB(204,204,255);                    
        fill-pattern: solid;
        outer-border-line:
        {
            line-width: 1px;
            line-color: blue;
            line-join: round;
            line-start-cap: round;
            line-end-cap: round;
        };
        inner-border-line:
        {
            line-width: 1px;
            line-color: blue;
            line-join: round;
            line-start-cap: round;
            line-end-cap: round;
        };
    }
    /*bestehende Rüstungslast*/
    polygon [akz == \"03\" ] {
        fill-color: RGB(237,226,204);                    
        fill-pattern: solid;
        outer-border-line:
        {
            line-width: 1px;
            line-color: brown;
            line-join: round;
            line-start-cap: round;
            line-end-cap: round;
        };
        inner-border-line:
        {
            line-width: 1px;
            line-color: brown;
            line-join: round;
            line-start-cap: round;
            line-end-cap: round;
        };
    }
    /*archivierte Altablagerung*/
    polygon [akz == \"11\" ] {
        fill-color: RGB(255,221,221);                    
        fill-pattern: solid;
        outer-border-line:
        {
            line-width: 1px;
            line-color: red;
            line-join: round;
            line-start-cap: round;
            line-end-cap: round;
        };
        inner-border-line:
        {
            line-width: 1px;
            line-color: red;
            line-join: round;
            line-start-cap: round;
            line-end-cap: round;
        };
    }
    /*archivierter Altstandort*/
    polygon [akz == \"12\" ] {
        fill-color: RGB(255,221,221);                    
        fill-pattern: solid;
        outer-border-line:
        {
            line-width: 1px;
            line-color: red;
            line-join: round;
            line-start-cap: round;
            line-end-cap: round;
        };
        inner-border-line:
        {
            line-width: 1px;
            line-color: red;
            line-join: round;
            line-start-cap: round;
            line-end-cap: round;
        };
    }
    /*archivierte Rüstungslast*/
    polygon [akz == \"13\" ] {
        fill-color: RGB(255,221,221);                    
        fill-pattern: solid;
        outer-border-line:
        {
            line-width: 1px;
            line-color: red;
            line-join: round;
            line-start-cap: round;
            line-end-cap: round;
        };
        inner-border-line:
        {
            line-width: 1px;
            line-color: red;
            line-join: round;
            line-start-cap: round;
            line-end-cap: round;
        };
    }    
}"
   }
  }
]

Wie zu erkennen ist, spielt hier die Ladereihenfolge eine Rolle. Die Abfrage kann erst dann erfolgreich durchgeführt werden, wenn alle dort referenzierten Quellen verfügbar sind.

Hintergrund in diesem konkreten Beispiel ist, dass die zur Darstellung benötigten Attribute aus einer externen Quellen benötigt werden.

SALKA = sächsisches Altlastenkataster, ein Beispiel aus der Praxis.


Zuletzt geändert: 13.03.2024 12:40:13 (erstmals erstellt 14.03.2017)