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);Eine Beschreibung zur Implementierung von Funktionen findet sich unter:
CREATE FUNCTION soundex(text)
RETURNS text AS '$libdir/fuzzystrmatch', 'soundex'
LANGUAGE 'C' WITH (iscachable, isstrict);
http://www.postgresql.org/docs/current/static/sql-createfunction.htmlDer 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);