GNavigia Clients
Erweiterungen, die zum Umfang der Auslieferung gehören

Was Sie im vorausgehenden Kapitel programmiert haben, fasse ich im
Folgenden unter der Bezeichnung «GNavigia
Client» zusammen. Und damit Sie sehen, dass ich selbst dieser
Art, GNavigia zu erweitern, eine große Bedeutung beimesse, werden
zusammen mit dem Programm ein Client zur Demonstration und weitere mit
«realer» Funktionalität ausgeliefert. Sie müssen
sie nicht benutzen, aber wenn Sie diese nutzen wollen, müssen sie
gewisse Voraussetzungen dafür schaffen.
HOLUX Client zur Anzeige der Geschwindigkeit
Die Anzeige der von HOLUX-Empfängern
registrierten Geschwindigkeit erfolgt über eine spezielle
Erweiterung, die sich im Hauptmenü unter Clients
einhängt. Diese Funktionalität ist ab Version 2.6.9.0
verfügbar, siehe Programm
GNavigia. Sie funktioniert naturgemäß nur da, wo die
Geschwindigkeit als eigenständige Größe gespeichert
wurde. Schalten Sie andere Anzeigen aus, wenn Sie diese
Funktionalität benutzen. Stellen Sie sicher, dass Sie nicht ganz
allgemein im Menü Ansicht die Anzeige der Profilfenster
ausgeschaltet haben. Da muss ein Haken dran sein!
Adressen im OSM Datenbestand suchen
1. Vorbereitung der Datenbank:
Um den folgenden Abschnitt zu verstehen müssen Sie die Seite
«OSM
Daten nutzen» durchgeackert und OSM Daten in eine PostgreSQL
Datenbank eingespielt haben.
Folgende Erweiterungen des Modells sind erforderlich, damit Sie suchen
können, hier am Beispiel von XP:
- Öffnen Sie unter XP Systemsteuerung/Verwaltung/ODBC-Datenquellen
oder starten Sie unter Windows 7 als Administrator das Programm
C:\Windows\SysWOW64\odbcad32.exe.
Wählen Sie den Reiter System-DSN. Wählen Sie die
Schaltfläche Konfigurieren. Geben Sie die folgenden Daten
ein. Ersetzen Sie den Datenbanknamen durch den, den Sie für die
OSM-Daten benutzt haben.
- Sichern Sie die Einstellungen mittels Save.
- Fügen Sie der Datenbank Funktionen hinzu, die die
Suche ausführen. Namentlich:
Soundex (http://de.wikipedia.org/wiki/Soundex)
DROP FUNCTION soundex(text); CREATE FUNCTION soundex(text) RETURNS text AS '$libdir/fuzzystrmatch', 'soundex' LANGUAGE 'C' WITH (iscachable, isstrict);
Eine Beschreibung zur Implementierung von Funktionen findet sich unter:
http://www.postgresql.org/docs/current/static/sql-createfunction.html
Der hier vorgestellte Client nutzt allein die scharfe Suche und
die Soundex-Suche. Der Client stellt auch
nicht die Suche selbst bereit, sondern steuert lediglich die
Fähigkeiten der Datenbank an. Die aufwändige Implementierung
des Clients und
die Zusammenstellung der folgenden Suchalgorithmen geht zurück auf
freizeit-biking.de (historische Domain).
2. Suchen und erfolgreich positionieren:
Um einen Ort zu suchen, gehen Sie wie folgt vor:
- Öffnen Sie eine neue Datei (zunächst ohne
Vorlage) und blenden Sie das Verwaltungsfenster aus.
- Schalten Sie Ansicht/Hintergrundbild darstellen ein.
- Starten Sie aus dem Menü Clients/Adresssuche.
|
Die Adresssuche selbst hat einige Besonderheiten, die Sie
kennen sollten. Wenn Sie nur ein Ergebnis gefunden haben wird die
Anzeige implizit ausgelöst. Sie müssen zudem zuerst den
Ort suchen und dann die Straße. Die OSM-Daten haben
(mindestens) einen entscheidenden Modellfehler:
Es gibt keinen Verweis von einer Straße auf den Ort, zu dem sie
gehört. Die Suche muss daher immer geometrisch erfolgen. Der
Client sucht dazu in einem Bereich, der in jede Richtung etwa 30%
über den sichtbaren Kartenausschnitt hinausgeht. Sollten
Sie keinen Treffer
bekommen,
obgleich Sie wissen, dass die Straße existiert, prüfen Sie
zunächst die
Maßstabszahl und vergrößern sie diese! |
Der Reiter Optionen erlaubt die
Angabe der Maßstäbe, die Anwendung finden, wenn das
Ergebnis der Orts- oder Straßensuche zur Anzeige kommt. Aus den
zuvor genannten Gründen sollten Sie für die Ortssuche keinen
allzu kleinen Wert eintragen. Für Städte wie Bonn hat sich
1:25000 bewährt, für München werden Sie eine
größere Zahl wählen müssen, damit Straßen am
Stadtrand gefunden werden können. |
Die Schaltfläche «Unscharfe Suche»
initiiert eine Suche nach dem Soundex Algorithmus. Dabei wird
an den Anfang sortiert, was dem Namen nach auch bei exakter Suche als
Ergebnis geliefert worden wäre. Alles andere wird so angezeigt,
wie es die Sortierung der Datenbank liefert. Die unscharfe oder
auch phonetische oder fuzzy Suche läuft sehr viel
länger als die exakte. Bei genauer Kenntnis des Ortsnamens macht
ihr Gebrauch wenig Sinn.
OSM Daten werden von Enthusiasten zusammengestellt, die gerne auch mal
über das Ziel hinaus schießen. Das manifestiert sich vor
allem in der Tatsache, dass einige Ergebnisse doppelt
auftreten. Sind auch Länge und Breite identisch, werden sie
aussortiert. Suchen Sie mal nach «Weiler»!
Wichtig zu wissen ist auch, dass
die Suche unabhängig ist vom WMS Server, der angesprochen wird. Die
Suche positioniert nur das Kartenbild. Sie können also in der
OSM-Datenbank nach Bonn/Sebastianstraße suchen und ein
Hintergrundbild von einem NRW-DGK-5 Service erhalten, wenn dieser als aktiver
Service ausgewählt ist! Allgemein gilt, dass der zuletzt benutzte
Service
bei einer neuen Karte aufgerufen wird. Und bedenken Sie auch, dass bei
einer neuen Karte die Ansicht des Hintergrundbildes ausgeschaltet ist!
|
|
3. Als Vorlage speichern
Es gibt noch eine Reihe weiterer Voreinstellungen, die Sie machen
werden , bevor Sie eine Kartenansicht haben, die Ihnen gefällt.
Speichern Sie daher die aktuelle Kartenansicht «als
Vorlage». Und
damit Sie beim Aufstarten nicht zu lange auf das Ergebnis warten
müssen, wählen Sie zuvor eine kleine Maßstabszahl. Wenn
das
Hintergrundbild dann nicht mehr angezeigt wird - umso besser. Bedenken
Sie, dass bei der nächsten Suche, die auf dieser Vorlagendatei
aufsetzt, wieder der Maßstab so eingestellt wird, wie Sie das auf
dem
Reiter Optionen angegeben haben.
4. Vorschläge für eigene Clients
Sie können weitere Algorithmen implementieren, müssen dann
aber die Methoden selbst als Clients implementieren. Das erfordert die
Bereitstellung eigener Dialoge! Beispiele für Suchfunktionen:
Levenshtein (http://en.wikipedia.org/wiki/Levenshtein_distance)
DROP FUNCTION levenshtein(text,text); CREATE FUNCTION levenshtein (text,text) RETURNS int AS '$libdir/fuzzystrmatch','levenshtein' LANGUAGE 'C' WITH (iscachable, isstrict);
Metaphone (http://en.wikipedia.org/wiki/Metaphone)
DROP FUNCTION metaphone (text,int); CREATE FUNCTION metaphone (text,int) RETURNS text AS '$libdir/fuzzystrmatch','metaphone' LANGUAGE 'C' WITH (iscachable, isstrict);
Dmetaphone (http://en.wikipedia.org/wiki/Double_Metaphone)
DROP FUNCTION dmetaphone (text,int); CREATE FUNCTION dmetaphone (text,int) RETURNS text AS '$libdir/fuzzystrmatch','dmetaphone' LANGUAGE 'C' WITH (iscachable, isstrict);
|
|
 |
|
    |