16. Konfiguration GeoShop Queries

16.1. Definition

Mit einer Query werden Suchabfragen auf die Geodaten im GeoShop definiert. Queries werden Benutzern zugeordnet und bestimmen nach welchen Kriterien ein Benutzer nach Daten suchen kann.

Queries basieren auf den vorhandenen Daten. Die für eine Query notwendigen Daten werden in eine Datenbanktabelle geschrieben. Die Definition der Query beinhaltet die auswählbaren Suchkriteren aufgrund des Dateninhalts in der Datenbanktabelle. Beim Ausführen einer Query mit den selektieren Suchkriterien wird das Objekt in der Datenbanktabelle gesucht und angezeigt.

Die Definition einer Query erfolgt beim Upload eines INTERLIS Modelles, respektive den INTERLIS Daten in der Konfiguration IL2GEO.

Als Beispiel der Definition einer Query wird die Suchabfrage nach einer Strasse der amtlichen Vermessung im INTERLIS Modell DM01AVCH24D aufgeführt.

Datenbanktabelle kreieren

Für die Query ist in der GeoShop Datenbank eine Tabellen mit den notwendigen Attributen anzulegen.

Öffnen Sie die GeoShop Datenbank (defaultmässig eine ACCESS Datenbank).

GEOSHOP_DIR\data\dba\geoshop.mdb

Kreieren Sie darin eine neue Tabelle mit den notwendigen Attributen.

create table MYStrasse (
   FileID INTEGER,
   ObjID  INTEGER,
   Gemeinde CHAR(50),
   Strassenname CHAR(50),
   x DOUBLE,
   y DOUBLE
);

Die Tabelle muss folgende Felder beinhalten.

Beschreibung Datenbankfelder
Parameterreq/optTypBeschreibung
FileIDrINTEGERFremdschlüssel zum INTERLIS Datenfile des Objektes. Generiert durch GeoShop.
ObjIDrINTEGEREindeutige Objekt ID. Generiert durch GeoShop.
xrREAL

x Koordinate bei Punktobjekten.

yrREAL

y Koordinate bei Punktobjekten.

x1rREALMinimale x Koordinate der Ausdehnung bei Linien- oder Flächenobjekten.
y1rREALMinimale y Koordinate der Ausdehnung bei Linien- oder Flächenobjekten.
x2rREALMaximale x Koordinate der Ausdehnung bei Linien- oder Flächenobjekten.
y1rREALMaximale y Koordinate der Ausdehnung bei Linien- oder Flächenobjekten.
<name>r<type>Weitere für die Query erforderliche Attribute.
Datenbanktabelle mit Daten füllen

Die IL2GEO-Konfiguration für das INTERLIS Modell der Daten ist zu erweitern.

[Anmerkung]

Falls Sie eine bestehende Konfiguration aus dem System Verzeichnis erweitern wollen, so kopieren Sie diese und deren weitere Anteile zuerst aus dem System Verzeichnis in das User Verzeichnis.

Öffnen Sie die IL2GEO Konfiguration des INTERLIS Modelles mit einem Texteditor.

GEOSHOP_DIR\user\script\il2geo\DM01AVCH24D.cfg

und erweitern Sie den Abschnitt der Includes am Ende des Files um folgende Eintrag.

:
|INCL \script\il2geo\il2geo.out
|INCL \script\il2geo\DM01AVCH24D.out
|INCL \script\il2geo\il2geo.prg

Sichern und schliessen Sie das File wieder.

Kreieren Sie das neue File, das Sie oben inkludiert haben, falls es nicht schon vorhanden ist (eventuell vom Kopieren aus dem System Verzeichnis).

GEOSHOP_DIR\user\script\il2geo\DM01AVCH24D.out

In diesen File werden spezielle Output Prozeduren in iG/Script für die Integration der Daten in den GeoShop abgelegt. Dazu gehören Prozeduren die Datenbanktabellen mit den Daten füllen. Öffnen Sie das File in einem Texteditor und fügen Sie folgende Prozedur ein.

:
!----------------------------------------------------------------------------

PROCEDURE DB_MYSTRASSE_WRITE0

   ! Andwendbar auf Tabelle Gebaeudeadressen.LokalisationsNamePos

   ! Check Index
   !------------
   IF VAR.INDEX <> 1 THEN
      RETURN
   END_IF

   ! Test Object
   !------------
   IF 'IN.LokalisationsNamePos_von.Text' EXISTS NOT THEN
      RETURN
   END_IF
   IF IN.LokalisationsNamePos_von.Text IS_NULL THEN
      RETURN
   END_IF
   IF IN.Pos IS_NULL THEN
      RETURN
   END_IF

   ! build sql-insert-statement
   !---------------------------
   'insert into Mystrasse (FileID,ObjID,Gemeinde,Strassenname,x,y) values ('
      VAR.DB_FILE_ID APP ',' APP
      IN.GEOSHOP_ID APP ',' APP
      VAR.DB_GEMEINDE SQL_STRING APP ',' APP
      IN.LokalisationsNamePos_von.Text SQL_STRING APP ',' APP
      IN.Pos POINTX TO_STRING APP ',' APP
      IN.Pos POINTY TO_STRING APP
   ')' APP => VAR.DB_SQL

   ! execute sql-statement
   !----------------------
   IF VAR.DB_SQL DB.EXEC_SQL NOT THEN
      ERROR 'Can not insert MyStrasse (1): ',IN.LokalisationsNamePos_von.Text,' !'
      DISPLAY VAR.DB_SQL
      HALT
   END_IF

END_PROCEDURE

!----------------------------------------------------------------------------
:

Speichern und schliessen Sie das File.

Die Prozedur wird INTERLIS Objekte Gebaeudeadressen.LokalisationsNamePos in die Tabelle MyStrasse schreiben. Die Prozedur testet zuerst, ob alle notwendigen Bestandteile des Objektes vorhanden sind, bildet dann ein SQL Insert Statement und führt dieses aus.

Damit die Prozedur ausgeführt wird, muss diese in der Konfiguration eingetragen werden.

Öffnen Sie mit dem Konfigurationseditor IL2GEO die Konfiguration.

GEOSHOP_DIR\user\script\il2geo\DM01AVCH24D.cfg

Abbildung 36. Konfigurationseditor GEOEDit Beispiel DB Procedure

Konfigurationseditor GEOEDit Beispiel DB Procedure

Selektieren Sie unter INTERLIS Objects das Objekt Gebaeudeadressen.LokalisationsNamePos . Erzeugen Sie in GEO Objects mit GEO > New > Procedure einen neuen Procedure-Eintrag. Selektieren Sie unter Procedure Name die soeben erstellte Procedur DB_MYSTRASSE_WRITE0.

Speichern und schliessen Sie die Konfiguration.

Die Konfiguration wird beim Upload von INTERLIS Daten jeweils beim Objekt Gebaeudeadressen.LokalisationsNamePos die Procedure DB_MYSTRASSE_WRITE0 aufrufen, die das Objekt in die Tabelle MyStrasse schreibt.

Query definieren

Nun muss über eine Prozedur die Query definiert werden.

Öffnen Sie das File für die Prozeduren in einem Texteditor.

GEOSHOP_DIR\user\script\il2geo\DM01AVCH24D.out

Fügen Sie folgende Procedur ein.

:
!----------------------------------------------------------------------------

PROCEDURE QUERY_UPDATE_MYSTRASSE

   ! Allgemeine Angaben zur Query
   !-----------------------------
   &QUERY_OBJECT MAPCLEAR
   'mystrasse' => QUERY_OBJECT.NAME
   'My Strasse' => QUERY_OBJECT.DISPLAY_NAME
   'mystrasse' => QUERY_OBJECT.TABLE
   '10000.0' => QUERY_OBJECT.ZOOMAREA
   '255,0,255,1.0' => QUERY_OBJECT.HIGHLIGHT_COLOR
   QUERY_CREATE_QUERY

   ! 1. Feld Gemeinde
   !-----------------
   &QUERY_FIELD MAPCLEAR
   'gemeinde' => QUERY_FIELD.NAME
   'Gemeinde' => QUERY_FIELD.DISPLAY_NAME
   'select distinct gemeinde from gs_strasse' => QUERY_FIELD.SQL
   5 => QUERY_FIELD.VISIBLE_VALUES
   QUERY_CREATE_FIELD

   ! 2. Feld Strasse
   !----------------
   &QUERY_FIELD MAPCLEAR
   'strassenname' => QUERY_FIELD.NAME
   'Strasse' => QUERY_FIELD.DISPLAY_NAME
   'select distinct gemeinde,strassenname from gs_strasse' => QUERY_FIELD.SQL
   'gemeinde' => QUERY_FIELD.DEPENDS_ON
   15 => QUERY_FIELD.VISIBLE_VALUES
   QUERY_CREATE_FIELD

   ! write Query
   !------------
   QUERY_WRITE_QUERY

END_PROCEDURE

!----------------------------------------------------------------------------
:

Speichern und schliessen Sie das File.

Die Prozedur definiert eine Query mit dem Namen mystrasse. Der Namen der Prozedur muss zwingend den Prefix QUERY_UPDATE_ aufweisen. Die Prozedur definiert die Query und die Felder der Query. Die Prozedur wird automatisch am Ende eines Uploads der INTERLIS Daten ausgeführt.

Daten laden

Bisher wurden nur Definitionen für die Query konfiguriert. Damit die Query erstellt wird, müssen Daten des INTERLIS Modelles in den GeoShop geladen werden.

Uploaden Sie deshalb ein File des INTERLIS Modelles in den GeoShop

Beim Upload Prozess wird nun Datenbanktabelle mit Objekten des Files gefüllt. Am Schluss wird die Query erstellt und unter dem Namen wie folgt abgelegt.

GEOSHOP_DIR\data\query\msstrasse.qry

Die Query beinhaltet folgende Definitionen.

MAP
   name STRING mystrasse
   display_name STRING 'My Strasse'
   table STRING mystrasse
   zoomarea REAL 10000.0
   highlight_color STRING 255,0,255,1.0
   fields LIST
      MAP
         name STRING gemeinde
         display_name STRING 'Gemeinde'
         visible_values INT 5
         values LIST
            STRING 'Demogemeinde'
         }
      }
      MAP
         name STRING strassenname
         display_name STRING 'Strasse'
         depends_on STRING gemeinde
         visible_values INT 15
         values LIST
            STRING 'Demogemeinde,Aescherstrasse'
            STRING 'Demogemeinde,Aettenbergstrasse'
            STRING 'Demogemeinde,Aettenbergweg'
            :
            STRING 'Demogemeinde,Zürcherstrasse'
         }
      }
   }
}

Die Datenbanktabelle und die Query wird bei jedem Upload von Daten nachgeführt und aktualisiert.

16.2. Eigenschaften

Queries werden in Textfiles definiert/generiert und wie folgt abgelegt.

GEOSHOP_DIR\data\queries\<name>.qry

Folgende Eigenschaften können für Queries konfiguriert werden. Die Parameter entsprechen denjenigen, die in der Procedure mit der Querydefinition gesetzt werden können.

Beschreibung Definition Query
Parameterreq/optTypBeschreibung
MAPrMAPMap mit Definition Query.
Beschreibung Parameter MAP (Query)
Parameterreq/optTypBeschreibung
namerSTRINGName der Query.
display_namerSTRINGDisplayname der Query.
sourceoSTRING

Name der ODBC-Source mit der Datenbanktabelle für die Query.

tableoSTRING

Name der Datenbanktabelle mit den Daten für die Query.

zoomareaoREALFläche in m2 des Zoombereiches bei Queries für Punkte. Ist dieser Parameter gesetzt, wird ein Abfrage nach x/y abgesetzt. Ist dieser Parameter nicht gesetzt, wird ein Abfrage nach x1/y1 und x2/y2 abgesetzt.
highlight_coloroSTRINGR-Integer,G-Integer,B-Integer,Alpha-Real>. Highlightfarbe mit Transparent der Objektes. RGB-Integer-Werte 0-255, z.B. weiss = 255,255,255,1.0.
fieldsrLIST

Liste von Maps mit Feldern zur Query.

Beschreibung Parameter LIST MAP.fields
Parameterreq/optTypBeschreibung
noneoMAPDefinition Feld.
Beschreibung Parameter MAP MAP.fields.MAP (field)
Parameterreq/optTypBeschreibung
namerSTRINGName des Feldes.
display_namerSTRINGDisplayname des Feldes.
visible_valuesoINT

Bei einer Auswahlliste, wieviele sichtbare Werte maximal angezeigt werden sollen.

valuesoLIST

Auswahlliste mit Werten. Alle Werte sind vom Typ STRING.

depends_onoSTRING

Feld ist abhängig von einem anderen Feld der gleichen Abfrage (z.B. Strasse von Gemeinde). Nur in Kombination mit Auswahllisten anwendbar (s.a. values). Das abhängige Feld muss als Wert den Wert des depends_on Felds plus einen Zusatz separiert über ein Komma aufweisen.

16.3. Queries statisch

Die vorgängig erläuterten Queries sind von den Daten abhängig und deshalb dynamisch, das heisst, die Queries werden beim upload neuer oder geänderter Daten basierend auf den Definitionen der Query neu generiert.

Es können aber auch statische Queries definiert werden. Ein Beispiel ist die Suche nach einer Koordinate, respektive das Zoomen der Datenansicht auf eine Koordinate.

GEOSHOP_DIR\data\query\xy.qry

MAP
   name STRING 'xy'
   display_name STRING 'Koordinate'
   source STRING ''
   table STRING ''
   zoomarea REAL 2500.0
   fields LIST
      MAP 
         name STRING 'x'
         display_name STRING 'Rechtswert'
      }
      MAP 
         name STRING 'y'
         display_name STRING 'Hochwert'
      }
   }
}

Das obige Beispiel basiert auf keiner Datenbanktabelle. Es können aber auch statische Queries basierend auf Datenbanktabellen definiert werden analog den dynamischen Queries. Die Datenbanktabelle beinhaltet in diesem Falle keine Daten aus den in den GeoShop geladenen Files, sondern Daten aus einer anderen Quelle.