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.
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 |
Parameter | req/opt | Typ | Beschreibung |
FileID | r | INTEGER | Fremdschlüssel zum INTERLIS Datenfile des Objektes. Generiert durch GeoShop. |
ObjID | r | INTEGER | Eindeutige Objekt ID. Generiert durch GeoShop. |
x | r | REAL | x Koordinate bei Punktobjekten. |
y | r | REAL | y Koordinate bei Punktobjekten. |
x1 | r | REAL | Minimale x Koordinate der Ausdehnung bei Linien- oder Flächenobjekten. |
y1 | r | REAL | Minimale y Koordinate der Ausdehnung bei Linien- oder Flächenobjekten. |
x2 | r | REAL | Maximale x Koordinate der Ausdehnung bei Linien- oder Flächenobjekten. |
y1 | r | REAL | Maximale y Koordinate der Ausdehnung bei Linien- oder Flächenobjekten. |
<name> | r | <type> | Weitere für die Query erforderliche Attribute. |
Die IL2GEO-Konfiguration für das INTERLIS Modell der Daten ist zu erweitern.
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
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.
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.
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.
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 |
Parameter | req/opt | Typ | Beschreibung |
MAP | r | MAP | Map mit Definition Query. |
Beschreibung Parameter MAP
(Query) |
Parameter | req/opt | Typ | Beschreibung |
name | r | STRING | Name der Query. |
display_name | r | STRING | Displayname der Query. |
source | o | STRING | Name der ODBC-Source mit der Datenbanktabelle für die Query. |
table | o | STRING | Name der Datenbanktabelle mit den Daten für die Query. |
zoomarea | o | REAL | Flä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_color | o | STRING | R-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. |
fields | r | LIST | Liste von Maps mit Feldern zur Query. |
Beschreibung Parameter LIST
MAP.fields |
Parameter | req/opt | Typ | Beschreibung |
none | o | MAP | Definition Feld. |
Beschreibung Parameter MAP
MAP.fields.MAP (field) |
Parameter | req/opt | Typ | Beschreibung |
name | r | STRING | Name des Feldes. |
display_name | r | STRING | Displayname des Feldes. |
visible_values | o | INT | Bei einer Auswahlliste, wieviele sichtbare Werte maximal angezeigt werden sollen. |
values | o | LIST | Auswahlliste mit Werten. Alle Werte sind vom Typ
|
depends_on | o | STRING | 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. |
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.