Standard-Suche
Unter der Kategorie Standard verbirgt sich die u.a. in MapEdit Desktop bereitgestellte Suchfunktion - siehe Steuerungsfenster:
Die oben abgebildeten Suchmöglichkeiten finden sich im AppBuilder unter dem entsprechenden Projekt wieder - nachfolgend am Beispiel der Suche "VK":
Folgende Eingabefelder seien kurz erläutert:
- Unter Titel erhält die konfigurierte Suche ihren Namen, welcher im linken Navigationsbereich präsentiert und die Suche zur Bearbeitung ausgewählt werden kann.
- Unter Gruppe kann die Suche thematischen Gruppen zugewiesen werden.
- Titel des Detailfensters spiegelt die Aufforderung zur Angabe des "Suchwertes" wider.
- Unter Eingabe Typ können die unterschiedlichen Suchkategorien Textfeld, Liste und ComboBox definiert werden - siehe hierzu auch nachfolgende Beschreibung.
- Die Listenhöhe stellt die maximale Anzeige von Suchen dar, die in dem Suchen- Fenster ausgeschrieben untereinander angezeigt werden.
- Datenbankverbindung bietet die Auswahl eines schon eingerichteten Datenbankusers.
- Das Drop-Down-Menü Cache Typ spiegelt die Einstellungen zum Cachen von Suchen wieder.
- Im Feld SQL wird das
SELECT
aufgebaut und gleichzeitig die Ergebnisausgabe definiert.
Die im unteren Bereich angeordneten Buttons HINZUFÜGEN und ENTFERNEN bieten den Aufbau kaskadierender Suchabfragen.
Eingabe Typ
Bei der Erstellung einer Suche können Textfelder, Listen oder Comboboxen verwendet werden.
Bei mehr als 500 zu erwartenden Datensätzen sollte man immer die Einstellung "Textfeld" in Verbindung mit {Input} benutzen. Ergo: Viele Daten --> Textfeld, wenig Daten Liste oder Combobox.
Textfeld
Bei Verwendung des Textfeldes ist eine manuelle Eingabe erforderlich. Vergeben Sie einen Titel und wählen Sie die entsprechende Datenbankverbindung aus.
Beim Aufbau des Select
-Statements in der Suchabfrage ist die Variable {Input}
zu verwenden, diese Variable entspricht dem eingegebenen Text.
Liste
Bei Verwendung von Liste werden die Werte (Values) der in der Suchkonfiguration definierten Spalte in einer Liste. Hinweis: Dieser Such-Typ sollte nur bei einer geringen Anzahl von Werteinträgen verwendet werden. Über die Listenhöhe kann die Anzahl der in der Suche angebotenen Werte definiert werden, darüber hinausgehende Suchen können mittels Scrollfunktion ausgewählt werden.
Combo-Box
Bei Comboboxen ist die Anzahl der Rückgabewerte auf 2000 Einträge beschränkt. Das gilt für alle Datensätze des SQLs. Nur die ersten 2000 Datensätze werden zurückgeliefert. Und diese 2000 Datensätze stehen dann für die Eingabe zur Verfügung.
Über die Combo-Box werden ebenso wie bei der Liste Werte zur Auswahl vorgeschlagen, jedoch bietet die Combo-Box kaskadierende Suchen - wie wir sie z.B. bei der Suche nach Ort, Strasse und Hausnummer vorfinden. Auch ist bei Verwendung von Combo-Boxen die manuelle Eingabe von Werten möglich.
Kaskadierende Suche
Kaskadierende Suchen sind durch die Zusammenstellung von einzelnen Suchkonfigurationen möglich. So werden bei der Suche nach Ort, danach nach Strasse und final der Hausnummer die Suchen einzeln definiert und wie beim "Baukastenprinzip" in der Reihenfolge der Abfrage angeordnet. Das Ergebnis der zuvor ausgeführten Suche wird an die danach angeordnete Suche übergeben.
select strassenname, fid from strassen where gemeinde_fid={fid}
Die FID
in { ... }
entspricht der FID
des gewählten Datensatzes aus der übergeordneten Suche - hier: Gemeinde.
Mehr - Highlight (Geometrie)
Wenn die Suche das Objekt in der Karte Highlighten (Umfärben) soll dann müssen dies Konfigurieren.
Drücken Sie dazu den Knopf "MEHR".
Im Register "Highlight (Geometrie)" wählen Sie dann die Datenbankverbindung.
In Versionen vor 24.1.178 hatte das Register "Highlight (Geometrie)" den Namen "Geometrie"
Bei "Geometry Table" wählen Sie die Tabelle aus welche die Geometrie enthält.
Bei "Geometry Feature Key / SQL" wird der SQL eingegeben der die FID (oder FIDs) der Geometrie zurückliefert.
Hier können in geschweiften Klammern Werte der "SQL Suche" verwendet werden.
Beispiel:
In der Tabelle STREET (Strassen) soll nach dem Straßennamen (Feld STRNAME) gesucht werden und die Geometrie der Strasse gehighlighted werden.
Der "Such SQL" sieht folgendermaßen aus:
select STRNAME,FID from STREET where Upper(STRNAME) like upper('{Input}%')
Bei "Highlight Geometrie" muss dann bei "Geometrie Table" STREET ausgewählt werden da diese die Geometrie enthält und beim "Highlight SQL" muss folgendes eingetragen werden.
select FID from STREET WHERE FID={FID}
oder wahlweise die Kurzform
{FID}
Beim "Highlight SQL" können in geschweiften Klammern Werte aus dem "Such SQL" angegeben werden.
Erklärung:
Der Anwender gibt im Textfeld den Namen der Strasse ein, z.B. "Hauptstrasse" und drückt ENTER.
Das Programm ersetzt dann im "Such SQL" den Wert "{Input}" mit dem eingegebenen Wert.
d.h. aus
select STRNAME,FID from STREET where Upper(STRNAME) like upper('{Input}%')
wird
select STRNAME,FID from STREET where Upper(STRNAME) like upper('Hauptstrasse%')
Dann wird der SQL ausgeführt und das Ergebnis in einer Liste angezeigt. Die können ggf mehrere Ergebnisse sein.
Der Anwender klickt nun auf eines der Ergebnisse.
Das Programm fügt dann die FID des angeklickten Ergebnisses in den "Highlight SQL" ein
aus
select FID from STREET WHERE FID={FID}
wird
select FID from STREET WHERE FID=172356
Mit den FIDs die dieser SQL zurück gibt werden dann alle Geometrien die bei "Geometry Table" angegebenen wurde gesucht und gehighlighted.
Die sieht für diesen einfachen Standardfall kompliziert aus ist aber notwendig um komplexere Fälle abzudecken wo die Geometrie nicht direkt in der gleichen Tabelle steht wie in der der gesucht wird. z.B. bei Utility Geomtrie Tabellen.
Nehmen wir an das die "Strassen Tabelle" eine Attribut Tabelle ist und keine Geometrie enthält und die Geometrie in einer separaten Tabelle "STREET_LINE" gespeichert ist welche ubere ein Feld FID_ATTR mit der STREET Tabellen verbunden ist.
Dann würde der Geometrie SQL folgendermaßen aussehen.
select FID from STREET_LINE WHERE FID_ATTR={FID}
Zoomlevel
Wenn der Zoom Level leer ist wird der Zoom Level verwendet der im AppBuilder bei "Einstellungen" im Register "Karte" -> "Desktop" -> "Default Zoomlevel" angegeben wurde.
Es wird immer versucht auf diesen Zoom Level zu zoomen.
Für nicht Punkt Objekte gilt:
Wenn das Objekt nicht in den Zoom Level passt weil es zu gross
ist wird auf den ersten Stützpunkt des Objektes gezoomt.
Wenn das Objekt kleiner als 20 Pixel ist wird der Zoom Level so lange vergrößert bis das Objekt grösser als 20 Pixel ist.
Ab Version 23.2.223
Wird bei Zoom Level der Wert -1 eingetragen dann wird auf die Ausdehnung des Objekts gezoomt. Diese Option sollte bei Punkt Featuren nicht verwendet werden
da diese keine Ausdehnung haben.
Das Zoomen kann in keinem Fall den bei der Kartenverwaltung eingestellten Minimum/Maximum Zoom Level über/unterschreiten.
Mehr - Dialog
Im Register Dialog steuert das Öffnen des Formulars nach Auswahl eines Objektes aus dem Suchergebnis. Hierzu ist der Haken Show Open Dialog Button zu setzen. Bei Setzen des Hakens für Auto Open Dialog wird nach Ausführung der Suche automatisch das Formular geöffnet.
Im Feld Dialogname kann eine andere Tabelle angesprochen werden, die mit dem Geometrieobjekt allerdings verknüpft sein muss. Beispielhaft seien hier die Attribut-Objektklassen in den Utility-Modellen genannt - im Formular soll ja nicht die "neutrale" Geometrietabelle, sondern z.B. die Attribut-Objektklasse "Trafostation" geöffnet werden. Im Feld Dialog-Filter wird die Filterbedingung eingetragen, der Wert aus den { }
wird dabei aus dem SELECT
der Suche entnommen und muss in diesem SELECT
mit angegeben sein.
Mehr - Hyperlink
Im Register Hyperlink können ein oder mehrere Links auf eine URL angegeben werden.
Je Link erscheint dann unter der Suche ein Knopf.
Wird der Knopf gedrückt dann wird eine vom Anwender spezifizierte Web Seite geöffnet.
Drücken Sie den "hinzufügen" Knopf und geben Sie bei "Label" einen beliebigen den Knopf Titel ein.
Bei "URL" geben Sie die URL der Webseite ein die Sie öffnen wollen.
Sie können Parameter in die URL einsetzen in dem Sie Feldnamen des letzten Abfrage Ergebnisses in geschweiften Klammern eingeben.
Die Feldwerte werden dann in die URL eingesetzt.
Beispiel:
https://www.schachtbauwerke.de?FidSchacht={FID}
Mehr - Temporary Layers
Im Register Temporary Layers können temporäre WMS-Layer definiert werden, die automatisch bei Ausführen der Suche eingeblendet werden. Weitere Erläuterungen finden Sie im Kapitel "Einbindung von dynamischen Kartenlayern".
Mehr - Layer ein-/ausschalten
Hier können über die Suche gezielt Karten oder Layer ein- oder ausgeschaltet werden. D.h. bei Ausführen spezieller Suchen kann hierüber gewährleistet werden, dass entsprechende Karten oder Layern mit im Suchergebnis "ausgegeben" - konkret: dargestellt - werden.
Neu ab Version 23.2.28
Es wird nur noch auf eine "Ebenen Umschalter" Definition verwiesen.
Dadurch können nun Einstellungen wiederverwendet werden.
In älteren aufgesetzte Einstellungen werden vom System beim Versionsupdate in "Ebenen Umschalter" Definitionen umgewandelt. Diese sind bei den "Ebenen Umschalter" Definition am Namen "X_" plus "Name der Suche" plus "_Nummer" zu erkennen.
Gruppe
Die Suchen aus den Kategorien Standard und Schnell können thematischen Gruppen zugewiesen werden. Die Gruppe wird durch manuellen Eintrag in das Textfeld erstellt.
Suche aus Map 3D übernehmen
In Map3D erstellte Suchen können nach MapEdit Professional überführt und nach Durchführung nachfolgend beschriebener Anpassungen genutzt werden:
- Im
SELECT
entspricht der erste Spaltenname dem in der Suche anzuzeigenden Attribut, als zweiter Spaltenname ist dieFID
anzugeben. - Übergabe des Ergebnisses aus übergeordneten Suchen nicht über die
{ }
, sondern als{<Spaltenname>}
- Per Pipe zusammengesetzte Attribute müssen mit dem Alias
as ident
versehen werden. Bsp.:select bezeichnung, gemeinde||land||regierungsbezirk||kreis||lage as ident from AX_LAGBEZKATALOGEINT
- Für die Geometrie ist nicht die Spalte
GEOM
, sondern die eindeutige SpalteFID
zu verwenden.
Nachfolgend ein Beispiel auf Basis des aktuellen MUM ALKIS-Datenmodells definiert im Infrastructure Administrator:
Überführt nach AppBuilder
Im MapEdit muss folgendes angepasst werden. Nach dem Select steht als erstes die Spalte, die in der Suche angezeigt werden soll, dann mit Komma getrennt die FID bzw. die eindeutige Spalte, auf die im Folgenden wieder gesucht wird:
Select bezeichnung, schluesselgesamt from AX_gemeinde where schluesselgesamt in (select distinct(land||regierungsbezirk||kreis||gemeinde) from ax_lagebezeichnung ) order by bezeichnung
Im MapEdit funktioniert die Übergabe vom Ergebnis der übergeordneten Suche nicht mit der Zahl in { }, sondern hier muss der Spaltenname in die geschweifte Klammer geschrieben werden. Und da in der nächsten Stufe Bezug genommen wird auf gemeinde||land||regierungsbezirk||kreis||lage muss dieser Wert für MapEdit einen Alias bekommen – hier „as ident“.
select bezeichnung, gemeinde||land||regierungsbezirk||kreis||lage as ident from AX_LAGBEZKATALOGEINTG where substr(schluesselgesamt,1,8)={schluesselgesamt} order by bezeichnung
Die Übergabe der Straße erfolgt hier durch den Alias {Ident}.
select hausnummer, fid from AX_LAGBEZMITHNR where fid_lagebezeichnung in (select fid from ax_lagebezeichnung where gemeinde||land||regierungsbezirk||kreis||lage = {ident}) order by hausnummer
MapEdit benötigt nicht die Spalte GEOM sondern die eindeutige Spalte aus der Tabelle der Hausnummern. Auch hier steht in den { } der Spaltenname und dieser Spaltenname muss in Suche 3 auch definiert sein.
select fid from ax_lagbezmithnr_tbl where fid_parent={FID}
Suche mit mehr als einem Objekt im Ergebnis
Ist mit der Ausgabe von mehreren Ergebnisdatensätzen pro Suche zu rechnen - z.B. in der Situation mehrerer vorhandener Hausanschlüsse pro Hausnummer - so ist die SELECT
-Anweisung zu erweitern:
select fid from strassen where fid = {fid} and Name = '{Input}'
select fid from strassen where fid = {fid} and Name like '{Input}%'
Dialog-Auswahl bei Liste aus mehreren Tabellen
Will man eine Liste anzeigen die aus mehreren Tabellen kommt und will dazu den jeweils richtigen Dialog öffnen, muss man bei dem SQL für die Suche folgendes konfigurieren:
Beispiel:
select strname || '(Strassen)', fid, 'OSNAB.STRASSEN' as DIALOGNAME from STRASSEN where strname is not null
union select POINAME || '(Poi)', fid, 'OSNAB.POI' as DIALOGNAME from POI where poiname is not null
Erstes Feld ist der Anzeige Name, zweites Feld ist die FID
(oder sonstige ID) und im dritten oder folgenden Feld definiert man den Dialognamen hier 'OSNAB.STRASSEN'
also Datenbankverbindung PUNKT Tabellenname. Dann den MEHR Button drücken und im Register Hyperlink bei URL das hier eintragen:
OPENDIALOG {DIALOGNAME}, FID={FID}
Zur Laufzeit wird dann {DIALOGNAME}
und {FID}
durch das Ergebnis aus dem vorigen SQL ersetzt. Der Befehl ist OPENDIALOG Dialogname , Filter. (Das ist der gleiche Befehl wie bei den Tooltipps Hyperlinks wo es auch den OPENDIALOG-Befehl gibt)
Bei kaskadierender Suche
Wenn man eine kaskadierende Suche hat kann man auch in der Folgesuche den Tabellenamen (oder beliebigen Ausdruck) durch einen Parameter der vorigen Suche definieren.
Beispiel:
select strname || '(Strassen)', fid, 'STRASSEN' as MYTABLENAME from STRASSEN where strname is not null
union select POINAME || '(Poi)', fid, 'POI' as MYTABLENAME from POI where poiname is not null
im Kind-Select sieht der SQL(kaskadierendes SQL) dann folgendermaßen aus::
select fid,fid from {MYTABLENAME}
oder man kann den ganzen SQL definieren:
select strname || '(Strassen)', fid, 'fid,fid from STRASSEN' as MYSQL from STRASSEN where strname is not null
union select POINAME || '(Poi)', fid, 'fid,fid from POI' as MYSQL from POI where poiname is not null
im Kind-Select sieht der SQL (kaskadierendes SQL) dann folgendermaßen aus:
select {MYSQL}
ALKIS-Suche für Postgres und Oracle
Es folgen einige Beispiele für die Suche nach der Gemeinde, Straße oder derHausnummer für Postgres and Oracle:
Beispiele POSTGRES
Für die Gemeinde:
select bezeichnung, schluesselgesamt
from ax_gemeinde
where schluesselgesamt in (select distinct(land||regierungsbezirk||kreis||gemeinde) from ax_lagebezeichnung ) order by bezeichnung
Für die Straße:
select bezeichnung, gemeinde||land||regierungsbezirk||kreis||lage as ident
from ax_lagbezkatalogeintg
where substring(schluesselgesamt FROM 1 FOR 8)='{schluesselgesamt}' order by bezeichnung
Für die Hausnummer:
select hausnummer, fid
from ax_lagbezmithnr
where fid_lagebezeichnung in (select fid from ax_lagebezeichnung where gemeinde||land||regierungsbezirk||kreis||lage = '{ident}') order by hausnummer
Geometry Table AX_LAGBEZMITHNR_TBL:
select fid from ax_lagbezmithnr_tbl where fid_parent={FID}
Beispiele ORACLE
Für die Gemeinde:
select bezeichnung, schluesselgesamt
from AX_gemeinde
where schluesselgesamt in (select distinct(land||regierungsbezirk||kreis||gemeinde) from ax_lagebezeichnung ) order by bezeichnung
Für die Straße:
select bezeichnung, gemeinde||land||regierungsbezirk||kreis||lage as ident
from AX_LAGBEZKATALOGEINTG
where substr(schluesselgesamt,1,8)={schluesselgesamt} order by bezeichnung
Für die Hausnummer:
select hausnummer, fid
from AX_LAGBEZMITHNR
where fid_lagebezeichnung in (select fid from ax_lagebezeichnung where gemeinde||land||regierungsbezirk||kreis||lage = {ident}) order by hausnummer
Geometry Table AX_LAGBEZMITHNR_TBL:
select fid from AX_LAGBEZMITHNR_TBL where fid_parent={FID}