Förderjahr 2018 / Project Call #13 / ProjektID: 3437 / Projekt: YellowOSM
YellowOSM ist ein Gewerbeverzeichnis auf OpenStreetMap-Basis. Es sollen Gewerbebetriebe, Dienstleistungen und Verkaufsstellen gesucht und gefunden werden können.
Wir wollen auf YellowOSM die Information jedes Gewerbetreibenden auf einer verlinkbaren Seite anzeigen. Das soll das Teilen von Information um Firmen erleichtern. Die eindeutige Zuordnung eines Namens oder eines URL zu einem Betrieb ist aber nicht leicht. Oft sind Namen nicht eindeutig und die Vergabe von URLs wie zB `https://yellowosm.com/Werkstatt/Maier` würde zu Verwirrungen führen.
Betriebe sind durch den Namen allein nicht eindeutig zu unterscheiden. Vielleicht hilft die Firmenbuchnummer? Nein - sie hilft nicht. Eine Firmenbuchnummer wird zwar an diverse juristische Personen vergeben, zB GmbH, AG, KG etc., aber sie ist nicht zwingend erforderlich für Einzelunternehmer. Des weiteren ist die Firmenbuchnummer in einem öffentlichen Verzeichnis einsehbar, sie ist aber nicht frei, da nur kostenpflichtig abrufbar. Dies ist zumindest für Österreich der Fall. Idealerweise findet man eine Lösung die weltweit funktioniert.
Wählen wir einen anderen Ansatz. Nehmen wir als Grundlage eine frei zugängliche Alternative: Geo-Koordinaten. YellowOSM ist ein Verzeichnis, das auf einem Kartendienst basiert, insofern ist diese Herangehensweise nicht ganz aus der Luft gegriffen. Definieren wir einen eindeutigen Link, basierend auf dem Standort eines Betriebes, oder eine Verkaufsstelle.
OpenStreetMap verwendet zum Verlinken von Karten, Kurzlinks auf Basis von Quadtiles. Die Weltkarte (in Merkatorprojektion) wird in vier Teile geteilt. Jedes dieser Teile wird wieder in vier Teile geteilt und so weiter. Jede Wahl eines Quadrats kann mit 2 bit Information erfolgen. Um auf etwa 1 Meter Genauigkeit zu erreichen benötigt man 52 bit, also 26 Schritte zu je 2 Bit Information. Diese 52-bit Zahl wird für die Kurzlinks in ASCII kodiert und ergibt Links in dem Format: "https://osm.org/go/0Iz~i1S5m".
Unser Ziel ist es Links zu erstellen, die man gut lesen kann und die, auch wenn man sie abschreibt, funktionieren. Im Beispiel oben, ist nicht immer klar ob das erste Zeichen nach 'go/' ein 'O' oder eine '0' ist. Das zweite Zeichen kann in manchen Schriftarten als 'I' (grosses i) oder als 'l' (kleine L) gelesen werden.
Idealerweise findet man eine Kodierung, die ein Lesen leicht macht und dennoch nicht zu lange Zeichenketten, bei guter Auflösung ermöglicht.
Base58 ist ein reduzierter Zeichensatz aus alphanumerischen Zeichen, der ein leichtes verwechslungsfreies Lesen ermöglicht. Er enthält alle Zeichen von a-z, A-Z und 0-9, mit der Ausnahme von 'I' (grossem i), 'l' (kleinem L), 'O' (grossem O) und '0' (Null). Unsere Kurzlinks werden Base58 als Zeichensatz verwenden.
Quadtiles ermöglichen es eine nahezu beliebige Auflösung zu erreichen. Man muss nur mehr Bit hinzufügen um immer kleinere Ausschnitte zu definieren. Das verlängert aber auch den Kurzlink. Für unseren Fall ist das nicht nötig. YellowOSM genügt eine Auflösung von etwa 1 Meter. Das sollte genügen um eindeutig auf Firmen zu verweisen.
Als Basis der Geo-Koordinaten-Repräsentation verwenden wir nicht Quadtiles, sondern die klassische geografische Breite (lat) und die geographische Länge (lon). 1 Meter Genauigkeit erreicht man mit etwa 5 Nachkommastellen.
Dieser Link, "https://yosm.at/ND8CZPUkB", referenziert die selbe Stelle wie der oben genannte Link, allerdings ist er leichter lesbar und leichter zu tippen.
Wir nennen unsere Geo-URL-Kodierung "Geo58". Wir erreichen in 49 bis 55 bit (je nach Zoomstufe und Hemisphäre) eine Auflösung von etwa 1 Meter Genauigkeit.
Kleines Detail am Rande: je höher die Zoomstufe, desto weniger Bit werden benötigt. Das erreichen wir durch das Stürzen des Zoom Levels. Zoom-Stufe 20 wird mit 0 kodiert. Die minimale Zoom-Stufe 5 mit 15. Ausserdem sparen wir durch das Voranstellen der Vorzeicheninformation der x und y Koordinaten bei positiven Koordinaten weitere 2 Bit, wenn die Zoomstufe maximal (20) ist. So kann man im besten Fall mit 49 Bit auf ein Gewerbe verlinken. Das entspricht 9 Base58 Zeichen. Bei Nutzung von den moglichen 55 Bit werden 10 Zeichen benötigt.
Die genaue Implementierung ist in unserem Github-Repository zu finden: https://github.com/YellowOSM/YellowOSM/blob/master/backend/lib/geo58.py