AppBuilder Suchen

Allgemeines

Für die Konfiguration von Suchabfragen steht im Repository eine eigenständige Rubrik “Suchen” zur Verfügung, in welcher die einzelnen Suchabfragen projektunabhängig aufgebaut und auf Benutzergruppen beschränkt werden können. Suchkonfigurationen können einmal erstellt und in mehreren Projekten bereitgestellt werden.

Die bestehenden Suchkonfigurationen können über das Repository neu erstellt, bearbeitet oder gelöscht werden – hierfür stehen in der Menüleiste die entsprechenden Funktionsbuttons zur Verfügung

Aufruf Suchen im Repository des App Builders

Kategorien

Innerhalb des AppBuilders stehen unterschiedliche Suchkategorien zu Verfügung, die im Folgenden erläutert werden:

  • Standard
  • Schnell
  • Spatial
  • Adressen
  • Volltext Suche

Die Betitelung der Suche, die Definition des Abfragetyps über Auswahlliste, Textfeld oder Combo-Box, die Datenbankverbindung sowie der Aufbau des SQLs sind obligatorisch.

Im SQL-Eingabefenster aller Kategorien wird das SELECT aufgebaut – bitte beachten Sie den Platzhalter {Input}, welches dem Werteintrag im Textfeld entspricht. Im SELECT bildet der erste Spaltenname den anzuzeigenden Wert – im nachfolgenden Beispiel also Strassenname – gefolgt von der FID. Im weiteren können Spalten aufgeführt werden, die für die Verknüpfung zu untergeordneten Objekten benötigt werden. 

Standard Suche

Unter der Kategorie Standard verbirgt sich die u.a. in MapEdit Desktop bereitgestellte Suchfunktion – siehe Steuerungsfenster:

Standard-Suche im Steuerungsfenster MapEdit Desktop

Die oben abgebildeten Suchmöglichkeiten finden sich im AppBuilder unter dem entsprechenden Projekt wieder – nachfolgend am Beispiel der Suche “VK”:

Beispielkonfiguration an 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.

Hinzufügen- und Entfernen-Buttons zum Aufbau kaskadierender Suchabfragen

Schnell Suche

Hinter der Kategorie Schnell verbirgt sich die Schnellinfo über den Info-Button.

Schnell-Suche in MapEdit Desktop

Im AppBuilder wird diese Schnellinfo konfiguriert:

Konfiguration der Schnell-Suche im App Builder

Im linken Bereich der Konfiguration der Schnell-Suche können die bisher angelegten Suchen zur Bearbeitung aufgerufen werden. Der mittlere Bereich beinhaltet die Detailkonfiguration.

Die Schnell-Suche lässt sich am einfachsten über den Befehl Auto erstellen. Auto liest alle Dialoge/Formulare, die im eingerichteten Menü vorhanden sind und bildet daraus die Einträge für die Schnellinfoleiste. Dies gilt nur für Dialoge, die eine Geometrie haben.

Über Hinzufügen und Entfernen lassen sich Suchen erstellen bzw. löschen.

Schnell-Suchen können thematisch gruppiert werden, unter Caption ist die Objektklasse anzugeben. Angaben zu Datenbankverbindung und Karten Tabelle sind zwingend.

Bei Setzen des Hakens unter “Dialog nach dem Highlighten öffnen” wird das entsprechende Formular präsentiert, welches unter Dialog angegeben ist. Mittels eines Eintrages unter Dialog Filter lassen sich die Datensätze bereits filtern, z.B. nach Status.

Die Checkbox “Menüpunkt (Alle Objektklassen) anzeigen” erlaubt das Anzeigen aller Objektklassen. Dann dauert die Suche allerdings länger, da nach dem Klick in die Grafik alle Dialoge der eingebundenen Datenbankverbindungen geöffnet werden, die an der Koordinate liegen.

Über den Filter für (alle Objekte) können Objektklassen bereits vorab gefiltert werden. Es besteht die Möglichkeit mit einem * Filter die Auswahl einzuschränken. Zum Beispiel sollen nur die Objektklassen aus dem Dokument GAS durchsucht werden, die mit dem Kürzel GA_* beginnen. Dann trägt man bei “Filter für (Alle Objekte)”: GAS.GA_*

Checkbox Menüpunkt “(Alle Objektklassen)” anzeigen

Spatial Suche

Innerhalb der Kategorie Spatial werden die Objektklassen definiert, die unter der Funktion “Objekte via Buffer selektieren” für die Anwender zur Auswahl stehen sollen.

Spatial-Suche (Buffer) in MapEdit Desktop

Im App Builder ist diese Buffer-Objekt-Selektion konfiguriert – das Feld “Caption” spiegelt dabei die Ziel-Objektklasse wieder, Connection (Datenbankverbindung) und Table (Tabelle) gewährleisten die Einbindung der entsprechenden Objektklassentabelle.

Konfiguration der Spatial-Suche im App Builder

Mittels der im unteren Bereich angeordneten Funktionsbuttons können weitere Spatial-Suchen hinzugefügt, geändert oder entfernt werden.

Eingabe Typ

Bei der Erstellung einer Suche können Textfelder, Listen oder Comboboxen verwendet werden.

Drop-Down-Menü der Eingabetypen in App Builder

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 Selects 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

Ü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.

Funktionsbutton “Mehr…”

Der Funktionsbutton “Mehr…” führt zu einem separaten Konfigurationsbereich:

Register “Geometrie” im App Builder

Geometrie

Im Register “Geometrie” ist die Datenbankverbindung und die Geometrietabelle anzugeben, in welcher die Geometrien für den Sprung auf die Karte gehalten werden. Unter dem Geometry Feature Key wird über ein SELECT die FID der Geometrietabelle ermittelt bzw. übergeben.

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.

Im Register “Hyperlink” können ein oder mehrere Links auf eine URL angegeben werden.

Temporary Layers

Im Register “Temporary Layers” können temporäre WMS-Layer definiert werden, die atomatisch bei Ausführen der Suche eingeblendet werden. Weitere Erläuterungen finden Sie im Kapitel “Einbindung von dynamischen Kartenlayern”.

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.

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 die FID 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_LAGBEZKATALOGEINTG
  • Für die Geometrie ist nicht die Spalte GEOM, sondern die eindeutige Spalte FID zu verwenden.

Nachfolgend ein Beispiel auf Basis des aktuellen MUM ALKIS-Datenmodells definiert im Infrastructure Administrator:

Aufbau der Objektsuche “Ort” im Infrastructure Administrator
Aufbau der Objektsuche “Strasse” im Infrastructure Administrator
Aufbau der Objektsuche “Hausnummer” im Infrastructure Administrator

Überführt nach App Builder:

Aufbau der Objektsuchen übernommen nach App Builder

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}%’

Adressen Suche

Die Kategorie Adress Suche bietet die Suche via Geocoding.

Adress-Suche im Steuerungsfenster MapEdit Desktop

Im App Builder aktivieren Sie hierzu die Checkbox “Adress Suche aktiv”.

Konfiguration der Adress-Suche in MapEdit Desktop

Den unter https://developer.opencagedata.com/ erhaltenen Servicekey tragen Sie im Feld “Adress Suche Service Key” ein . Unter “Adress Suche Filter” können vordefiniert Stadt und Land vorgegeben werden (Bsp. ,Osnabrück, Germany).

Die Aktivierung der Adress Suche greift erst nach einem Neustart von MapEdit.

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 cascadierender Suche

Wenn man eine cascadierende 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(cascadierendes 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 (Cascadierenden SQL) dann folgendermaßen aus:

select {MYSQL}

Volltext Suche

Diese Volltext Suche wird aktuell für das neue MapEdit Mobile verwendet (>Version 21.1.x). Die Inhalte kommen aus einer Datenbank, die sowohl in Wildfly als auch im AppBuilder für das Mobile Projekt eingerichtet ist. Die Volltext Suche wird im AppBuilder eingerichtet.

Adressen Suche (aus ALKIS Daten)

Für die Adressen Suche in ALKIS wird eine View benötigt, da bei Volltext Suchen keine kaskadierenden Suchabfragen möglich sind (wie in MapEdit Desktop). Daher werden die benötigten kaskadierenden Abfragen in einer View erstellt.

Beispiel View für Gemeinde/Strasse/Hausnummer aus ALKIS:

CREATE OR REPLACE VIEW V_ALKIS_SUCHE AS
SELECT lmht.FID, g.BEZEICHNUNG as GEMEINDE, gt.BEZEICHNUNG as GEMEINDETEIL, gm. BEZEICHNUNG as GEMARKUNG, lk.BEZEICHNUNG || l.UNVERSCHLUESSELT ||' '||lmh.HAUSNUMMER as ADRESSE , lmht.geom as geom
FROM AX_FLURSTUECK f
LEFT JOIN AX_GEMEINDEKENNZ gk ON f.FID_GEMEINDEZUGEHOERIGKEIT = gk.FID
LEFT JOIN AX_GEMEINDE g ON gk.FID = g.FID_GEMEINDEKENNZEICHEN
LEFT JOIN AX_GEMEINDETEIL gt ON gt.FID_SCHLUESSEL = gk.FID
LEFT JOIN AX_GEM_SCHLUESSEL gs ON f.FID_GEMARKUNG = gs.FID
LEFT JOIN AX_GEMARKUNG gm ON gs.FID = gm.FID_SCHLUESSEL
INNER JOIN REL_LAGBEZHNR_FLST_WEIST rlm ON f.FID = rlm.FID_PARENT
LEFT JOIN AX_LAGBEZMITHNR lmh ON rlm.FID_LAGEBEZEICHNUNGMITHNR = lmh.FID
LEFT JOIN AX_LAGBEZMITHNR_TBL lmht ON lmh.FID = lmht.FID_PARENT
LEFT JOIN AX_LAGEBEZEICHNUNG l ON lmh.FID_LAGEBEZEICHNUNG = l.FID
LEFT JOIN AX_LAGBEZKATALOGEINTG lk ON l.LAND || l.REGIERUNGSBEZIRK || l.KREIS || l.GEMEINDE || l.LAGE = lk.SCHLUESSELGESAMT;

Im AppBuilder wird die Suche wie folgt eingerichtet. Auf Großschreibung ist zu achten:

Adressen Suche Volltext

In Mobile funktionieren die Volltext Suchen genauso wie eine Google Suche. Die Suche wird über das Symbol der Lupe geöffnet und darin werden die im AppBuilder definierten Suchen aufgelistet. Bei der Suche über eine Adresse sollte man auch den Ort mit angeben, denn oft gibt es die Strassennamen in unterschiedlichen Gemeinden. Durch Klick auf ein Ergebnis wird in der Karte an diesen Ort gezoomt.

Adressen Suche Volltext

Flurstücksuche (aus ALKIS Daten)

Hier die benötigte View für eine Suche nach Fluren und Flurstücksnummern.

create or replace view V_FLST_SUCHE as select 
f.fid,
(select BEZEICHNUNG from AX_GEMARKUNG where SCHLUESSELGESAMT in (select LAND || GEMARKUNGSNUMMER from AX_GEM_SCHLUESSEL where FID = f.FID_GEMARKUNG))||' '||FLURNUMMER as Flur,
case
  when NENNER is NULL then ZAEHLER
  else ZAEHLER || '/' || NENNER
end as Flst,
--geom
(select geom from AX_FLURSTUECK_TBL where fid_parent = f.fid and rownum = 1) as GEOM
from AX_FLURSTUECK f;

Die Kategorie kann so im AppBuilder eingerichtet werden:

Kategorie Mobile Suche

Und in Mobile kann man damit über die Gemarkung/Flur und Flurstücksnummer suchen:

Suche Flur Flurstücksnummer

Suche über Objekte aus Netzwerkmodellen

Für die Suche nach Objekten aus einem Utilitymodell kann entweder eine View verwendet werden, welche u.a. die FID und die GEOM Spalte beinhaltet. Oder man verwendet die Query, um dort über ein passendes Select die benötigten Felder zu bekommen. Damit spart man sich das Erstellen von Views.

Query Suche

Updated on October 8, 2021