DE:OpenLinkMap
OpenLinkMap ist eine Webanwendung, die auf einer OpenStreetMap-Karte viele verschiedene Zusatzinformationen anzeigt.
OpenLinkMap ist eine Webanwendung, die im Januar 2010 vorgestellt wurde. Anfangs wurden (Wikipedia-)Links auf einer Slippymap angezeigt, mittlerweile werden auch viele andere Details zu POIs angezeigt, zum Beispiel ein passendes Bild, der Anfang des passenden Wikipediaartikels, nächste Bushaltestellen, Parkplätze und Bahnhöfe, bei Restaurants Informationen über das Rauchen, Küche oder Internetanbindung und vieles mehr. Das Projekt versteht sich als eine Erweiterung der normalen Karte, die (auf der Kachelkarte) nicht sichtbare Informationen ergänzt und passende Informationen aus anderen Webdiensten einbindet.
Contents |
Funktionen
- Marker, mit denen sich Zusatzinformationen in Popups einblenden lassen
- täglich aktualisierte, weltweite Datenbasis
- Zusammenfassen von nah zusammenliegenden Markern für mehr Übersichtlichkeit
- zugehöriger Wikipediaartikel, wird in die Sprache des Benutzers übersetzt
- passendes Bild, entweder per Tag angegeben oder aus dem zugehörigen Wikipediaartikel entnommen
- nächste Objekte wie die nächste Bushaltestelle oder der nächste Parkplatz
- Name wird in der Sprache des Benutzers angezeigt
- Anzeige, ob ein POI gerade in diesem Moment geöffnet hat
- verschiedene Informationen, z.B. Rauchen, Öffnungszeiten, Kontaktdaten, Webseite, Küche, etc.
- Geländeschattierung, auch Hillshading genannt
- Startposition wird entweder anhand der IP oder wenn möglich anhand der Geolocation API gesetzt
- Suchfunktion, basierend auf Nominatim
- lokal begrenzt suchen
- Suchergebnisse auf der Karte anzeigen
- Permalinks
- Unterstützung für Touchscreens
- Mehrsprachigkeit
- HTML-Code: Möglichkeit, eine Karte mit Popup in andere Webseiten einzubinden
- Verhalten durch verschiedene URL-Parameter beeinflussbar (siehe unten)
Verwendete Software
- osmfilter
- osmconvert
- osmupdate
- OpenLayers
- Osmosis
- Linux
- PostgreSQL
- PostGIS
- Apache, PHP, Javascript, CSS, ...
URL-Parameter
lang=<Sprache nach ISO 639-1>
Dient dazu, eine bestimmte Sprache für Benutzeroberfläche und z.B. die Auswahl mehrsprachiger Namen zu erzwingen. Ansonsten wird die Sprache nach HTTP_ACCEPT_LANGUAGE des Benutzers ausgewählt.
id=<OSM-ID eines Objektes>
Zusammen mit dem Parameter "type" kann man direkt an zu diesem Objekt springen und das dazugehörige Popup öffnen.
type=node|way|relation
Zusammen mit dem Parameter "id" kann man direkt an zu diesem Objekt springen und das dazugehörige Popup öffnen.
q=<Suchausdruck>
Übergibt man mit diesem Parameter einen Suchausdruck, so wird direkt beim Laden der Seite eine Suche mit diesem Begriff durchgeführt.
bounded=1|0
Mit diesem Parameter kann man bei einer Suche über den URL-Parameter "q" angeben, dass nur im sichtbaren Kartenausschnitt gesucht werden soll. Diese Option ist nur sinnvoll, wenn gleichzeitig mit den Parametern "lat", "lon" und "zoom" ein Kartenausschnitt gewählt wird.
lat=<Lat-Koordinate>
Mit diesem Parameter lässt sich zusammen mit den Parametern "lon" und "zoom" die Position der Karte beim Aufruf der Webseite regeln.
lon=<Lon-Koordinate>
Mit diesem Parameter lässt sich zusammen mit den Parametern "lat" und "zoom" die Position der Karte beim Aufruf der Webseite regeln.
zoom=<Zoomstufe>
Mit diesem Parameter lässt sich zusammen mit den Parametern "lat" und "lon" die Position der Karte beim Aufruf der Webseite regeln. "zoom" bestimmt dabei die Zoomstufe.
offset=<Unterschied der eigenen Zeitzone zu UTC in Stunden>
Mit diesem Parameter legt man fest, wie viele Stunden die eigene Zeitzone von der Universalzeit UTC abweicht. Dieser Wert ist notwendig um korrekt zu berechnen, ob ein Geschäft zur Zeit offen hat oder wann die Datenbank zuletzt aktualisiert wurde.
API
Jeder ist ausdrücklich willkommen, die API für eigene kleinere Projekte mitzubenutzen. Am besten ist es, vorher mitzuteilen, wenn regelmäßige Abfragen durchgeführt werden, damit die Last nicht zu groß wird.
Alle API-Funktionen erlauben JSONP. Um dieses Format zu verwenden, müssen die Parameter
format=json callback=<Callback-Funktion>
übergeben werden.
POIs in einem bestimmten Bereich
http://openlinkmap.org/api/list.php
Parameter:
bbox: Boundingbox, Werte durch Komma getrennt format: csv, json; Standardwert: csv
Antwort:
CSV-Datei: <lon>|<lat>|<osmid>|<type>
Beispiel: http://www.openlinkmap.org/api/list.php?bbox=6.67336,51.203552,6.679132,51.206406
Details
http://openlinkmap.org/api/details.php
Parameter:
format: text (für vorformatiertes HTML), xml, json; Standardwert: xml id: OSM-ID des abzufragenden Objektes type: Objekttyp des abzufragenden Objektes, node/way/relation offset: Unterschied in Stunden der Zeitzone des Users zu UTC (benötigt für die korrekte Anzeige der Öffnungszeiten); Standardwert: 0 lang: Bevorzugte Sprache nach ISO 639-1, z.B. für die Auswahl des Namens oder des Wikipedialinks, aber auch für die Auswahl der Beschriftungen; Standardwert: priorisierte HTTP_ACCEPT_LANGUAGE
Antwort:
XML, JSON oder formatiertes HTML
Beispiel: http://www.openlinkmap.org/api/details.php?id=18530948&type=way
Erweiterte Details
http://openlinkmap.org/api/extdetails.php
Parameter:
format: text (für vorformatiertes HTML), xml, json; Standardwert: xml id: OSM-ID des abzufragenden Objektes type: Objekttyp des abzufragenden Objektes, node/way/relation offset: Unterschied in Stunden der Zeitzone des Users zu UTC (benötigt für die korrekte Anzeige der Öffnungszeiten); Standardwert: 0 lang: Bevorzugte Sprache nach ISO 639-1, z.B. für die Auswahl des Namens oder des Wikipedialinks, aber auch für die Auswahl der Beschriftungen; Standardwert: priorisierte HTTP_ACCEPT_LANGUAGE
Antwort:
XML, JSON oder formatiertes HTML
Beispiel: http://www.openlinkmap.org/api/extdetails.php?id=18530948&type=way
Objekte in der Nähe
http://openlinkmap.org/api/nextobject.php
Parameter:
lat: lat-Koordinate des abzufragenden Standortes (zusammen mit lon erforderlich, wenn kein bestimmtes Objekt bekannt ist; sonst nicht notwendig) lon: lon-Koordinate des abzufragenden Standortes (zusammen mit lat erforderlich, wenn kein bestimmtes Objekt bekannt ist; sonst nicht notwendig) type: Objekttyp des abzufragenden Objektes, node/way/relation (zusammen mit id erforderlich, wenn keine Koordinate bekannt ist; sonst nicht notwendig) id: OSM-ID des abzufragenden Objektes (zusammen mit type erforderlich, wenn keine Koordinate bekannt ist; sonst nicht notwendig) format: text (für vorformatiertes HTML), xml, json; Standardwert: text
Antwort:
XML, JSON oder formatiertes HTML
Die Entfernung ist lediglich die Luftlinie!
Beispiel: http://www.openlinkmap.org/api/nextobject.php?id=80148145&type=way&format=xml
Letztes Datenbank-Update
http://openlinkmap.org/api/timestamp.php
Parameter:
lang: Bevorzugte Sprache nach ISO 639-1, z.B. für die richtige Auswahl von Texten im Datum; Standardwert: priorisierte HTTP_ACCEPT_LANGUAGE format: text (für einfachen Plaintext String), xml, json; Standardwert: xml offset: Unterschied in Stunden der Zeitzone des Users zu UTC (benötigt für die korrekte Berechnung des Zeitunterschiedes zwischen Update und aktueller Zeit); Standardwert: 0
Antwort:
XML, JSON oder Text
Mit dieser Abfrage lässt sich abfragen, wann die Datenbank zuletzt aktualisiert wurde und wie alt die Daten sind.
Beispiel: http://www.openlinkmap.org/api/timestamp.php?format=xml
Name
http://openlinkmap.org/api/name.php
Parameter:
lang: Bevorzugte Sprache nach ISO 639-1, z.B. für die Auswahl des Namens oder des Wikipedialinks, aber auch für die Auswahl der Beschriftungen; Standartwert: priorisierte HTTP_ACCEPT_LANGUAGE format: text (für einfachen Plaintext String), xml, json; Standardwert: text id: OSM-ID des abzufragenden Objektes type: Objekttyp des abzufragenden Objektes, node/way/relation
Antwort:
XML, JSON oder Text
Mit dieser Funktion kann man den Namen eines gegebenen OSM-Objektes (in einer beliebigen Sprache) abfragen.
Beispiel: http://www.openlinkmap.org/api/name.php?format=xml&id=18530948&type=way&format=xml
Benutzersprache
http://openlinkmap.org/api/userlang.php
Parameter:
keine
Antwort:
String, der die Sprache des Benutzers nach ISO 639-1 zurückgibt.
Gibt die Sprache zurück, die beim Nutzer die höchste Priorität hat. Grundlage dafür ist HTTP_ACCEPT_LANGUAGE des Benutzers.
IP-Lokalisierung
http://openlinkmap.org/api/ippos.php
Parameter:
format: text (für einfachen Plaintext String), xml, json; Standardwert: text
Gibt den per IP-Adresse ermittelten Standort des Benutzers zurück.
Tag-Übersetzungen
http://openlinkmap.org/api/translation.php
Parameter:
lang: Sprache nach ISO 639-1, in welcher die Übersetzungen gewünscht sind string: Ein oder mehrere zu übersetzende Tags, getrennt durch ",". Key und Value werden durch "." getrennt (siehe Beispiel unten). format: text (einfacher Plaintext), xml, json; Standardwert: text
Gibt die Übersetzung für ein oder mehrere Tags zurück.
Beispiel: http://www.openlinkmap.org/api/translation.php?lang=de&string=amenity.fuel,shop.bakery
Übersetzungen
Um auf die Übersetzungen zuzugreifen, integriert man folgenden Code in seine eigene Anwendung:
<script type="text/javascript" src="http://www.openlinkmap.org/locales/<SPRACHE>.js"></script> <script type="text/javascript" src="http://www.openlinkmap.org/api/langfile.php?lang=<SPRACHE>"></script>
Eine Sprachdatei im JSON-Format bekommt man mit folgender Abfrage:
http://www.openlinkmap.org/api/langfile.php?format=json&lang=<SPRACHE>
Karte in andere Webseiten einbinden
Es besteht die Möglichkeit, eine kleine Karte mit einem Marker und dem dazugehörigen Popup in eine andere Webseite einzubinden:
<iframe width="420" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://www.openlinkmap.org/embed.php?id=<OSM-ID>&type=<node|way|relation>" style="border: 1px solid black"></iframe>
Außerdem gibt es einen Modus, in dem man eine kleine Slippymap mit allen POIs aus OpenLinkMap einbinden kann:
<iframe width="420" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://www.openlinkmap.org/small.php?lat=<LAT>&lon=<LON>" style="border: 1px solid black"></iframe>
Tagging
Zur Anzeige notwendige Tags
Damit Objekte auf der Karte als Punkte angezeigt werden, muss mindestens eines der folgenden Tags vorhanden sein. Für weitere Informationen über die Tags und mögliche Werte bitte unter den jeweiligen Keys nachsehen.
- wikipedia=*
- wikipedia:*=*
- contact:phone=*
- website=*
- url=*
- phone=*
- fax=*
- email=*
- addr:email=*
- image=*
- url:official=*
- contact:website=*
- addr:phone=*
- phone:mobile=*
- contact:mobile=*
- addr:fax=*
- contact:email=*
- contact:fax=*
- image:panorama=*
- opening_hours=*
Ausgewertete Informationen
Zusätzlich zu den notwendigen Tags gibt es weitere Tags, die ausgewertet werden. Für weitere Informationen über die Tags und mögliche Werte bitte unter den jeweiligen Keys nachsehen.
- name=* und name:LANGUAGE=*
- addr=*
- fee=*
- toll=*
- ref=*
- capacity=*
- service_times=*
- ele=*
- operator=*
- image=*
- description=*
- stars=*
- cuisine=*
- biergarten=*
- beer_garden=*
- smoking=*
- brewery=*
- microbrewery=*
- internet_access=*
- population=*
- disused=*
- fuel=*
- iata=* und icao=*
- wheelchair=*, wheelchair:toilets=*, wheelchair:rooms=*, wheelchair:access=*, wheelchair:places=*
- car_wash=yes
- car_repair=yes
- shop=kiosk
- kiosk=yes
Erlaubte Werte
Für einige Tags gibt es verschiedene zulässige Werte, die korrekt ausgewertet werden:
| Funktion | Akzeptierte Schlüssel | Beispiel-Wert |
|---|---|---|
| Wikipediaartikel in bestimmter Sprache | http://de.wikipedia.org/wiki/Köln de:Köln | |
| Wikipediaartikel in bestimmter Sprache | http://de.wikipedia.org/wiki/Köln de:Köln Köln | |
| Wikipediaartikel in Englisch | Cologne | |
| Hinweis: Zur Verlinkung des passenden Wikipediaartikels ist nur ein Tag notwendig! Sofern es sich um den gleichen Artikel handelt, kann der Link zu einem anderssprachigen Artikel mithilfe der Wikipedia-API gefunden werden. | ||
| Mobiltelefon | +49-1234-56789 +49 1234 56789 | |
| Fax |
|
+49-1234-56789 +49 1234 56789 |
| Homepage |
|
www.... http://www... http://... https://www... https://... |
| Bild |
|
vollständige URL zum Bild oder zur Bildseite; wegen rechtlichen Problemen werden nur Bilder von Wikimedia Commons angezeigt |
Projektmitarbeiter
Gelegentliche Mitarbeiter:
Verfügbare Sprachen
- Deutsch
- Englisch
- Französisch
- Italienisch
- Russisch
Fehlt dir eine Sprache in dieser Liste? Übersetze die Anwendung und diese Wikiseite in eine andere Sprache!
Bugs / Zukünftige Entwicklungen / Ideen / TODOs
- weitere Sprachen: vor allem nl, pl, lb, ksh, es, pt
- Tag "parking:lane=*" bei der Anzeige des nächsten Parkplatzes berücksichtigen
- weitere Karten-Layer
- Adressrelationen auswerten
- Öffnungszeiten-Parsing verbessern: Datum, Monate, Ferien, Zeitzone des POIs verwenden, Anzeige, wenn ein POI in der nächsten Zeit x schließt oder öffnet
- Routingfunktion
- komplette Geometrien anzeigen
- Linealfunktion
- Browserunterstützung verbessern
- Adressformate länderspezifisch
- neues Design
- Popupschatten
- abhängig von cuisine=* passende Flagge anzeigen
- bei Städten/Ländern Wetter, Währung, Flagge, Hymne oder lokale Zeit anzeigen
- Bearbeitungsfunktion ähnlich [wheelmap.org]
- besseres Parsing von mehreren, durch Semikolon getrennten Werten
- besseres Design, Effekte mit CSS3
- besserer Suport von mobilen Geräten
- Einbinden von ÖPNV-Informationen wie Abfahrtszeiten, etc.
- Name von Nächsten Objekten in Nutzersprache anzeigen, wenn möglich
- Je nach Nutzersprache passende Sprachkarte des Toolservers einbinden
- Editlink in Seitenleiste
- Während Laden des passenden Bildes eine Ladegrafik anzeigen
- Popups lassen sich teilweise nicht schließen
- Unterscheidung der Punkte per Farbe oder Popups zwischen verschiedenen Kategorien
- Kreis um eigenen Standort anzeigen
- Panoramafunktion
- "Expertenmodus": Auswahl nur Objekte mit wikipedia/image/website anzeigen
- Mittelpunktsberechnung an Mapnik anpassen
- Popups mit Namen oder Tooltips beim Hovern anzeigen
- Suchergebnislayer über POI-Layer
- Anzeige des POI-Typen (zum Beispiel als Icon im Popup)
- in Clustermarkern die Zahl der verborgenen Punkte anzeigen
- Permalink zu Suchfunktion
- länderspezifische Formate Updatedatum
- bei POIs ohne Wikipedia-Link soll anhand des Namens ein passender Artikel gefunden werden
- mehrere Werte von Tags unterstützen
- beim Laden der zusätzlichen Informationen soll in der Seitenleiste an den Anfang dieser Box gesprungen werden (sonst sind teilweise die Suchergebnisse davor und man muss erst herunterscrollen)
- warum werden die nächsten Objekte in manchen Browsern nicht geladen?
- bei POIs ohne Namen den Objekttyp als Namen anzeigen
- description:<lang>=* einbauen
- bei Syntax-Fehlern in opening_hours=* eine Warnung anzeigen
Mitarbeiten
Mitarbeiter sind jederzeit willkommen, sei es als Programmierer, Übersetzer oder Designer. Schreibe mir einfach eine kurze E-Mail, wenn du auf irgendeine Weise helfen willst.
Daten erfassen: Die Nützlichkeit dieser Karte hängt von den erfassten Daten ab. Trage also mit deinem Wissen dazu bei, dass die Karte noch umfangreicher, aktueller und genauer wird!
Programmieren: Du hast eine neue Funktion programmiert oder einen Fehler im Programmcode behoben? Schicke mir gerne deinen Code und nach einer Prüfung werde ich ihn einbauen.
Übersetzungen: OLM soll möglichst vielen Nutzern in ihrer Sprache verfügbar sein. Übersetze die Anwendung und diese Wikiseite in eine andere Sprache!
Design: Das jetzige Design ist stark verbesserungswürdig. Hier sind also Leute gefragt, die die Seite etwas auffrischen oder auch die Unterstützung in verschiedenen Browsern verbessern, damit OLM überall gleich aussieht.
Ressourcen: OLM ist ein Hobbyprojekt, dementsprechend sind die benötigten Ressourcen wie Hardware, Domains, etc. sehr knapp. Wenn du also mit einem der genannten Dinge helfen kannst, bist du herzlich willkommen.
Bugreports, Browsertests, Featurevorschläge oder Kritik sind ebenfalls hilfreich und gewünscht. Einfach Kontakt zu mir aufnehmen, wie, das steht unter Kontakt.
Download
- die neueste Version (aktuell, aber nicht immer ganz fehlerfrei) [im Git Repository herunterladen]
- stabile und ältere Versionen auf der [Downloadseite] herunterladen
Es wird empfohlen, keine Version unterhalb der Version 7.0 zu verwenden! Frühere Versionen setzen eine andere Datenbank voraus, deren Installation weder in den Paketen noch hier auf der Wikiseite dokumentiert ist.
Eine Übersicht über die Änderungen in jeder Version gibt es in der beigelegten Datei "CHANGELOG".
Über das [Git-Repository] kann man ebenfalls die Änderungshistorie einsehen.
Eigene Anwendungen
Jeder darf OLM als Grundlage für eigene Anwendungen benutzen, soweit dies mit den Lizenzbedingungen der [GNU General Public License Version 3] vereinbar ist. In Ausnahmefällen erlaube ich aber auch andere Nutzungsbedingungen!
Es wird empfohlen, keine Version unterhalb der Version 7.0 zu verwenden! Frühere Versionen setzen eine andere Datenbank voraus, deren Installation weder in den Paketen noch hier auf der Wikiseite dokumentiert ist.
Da meine Freizeit begrenzt ist und ich schon mit der Entwicklung von OLM mehr als genug beschäftigt bin, programmiere ich nicht auf Anfrage! Meine Unterstützung beschränkt sich lediglich auf das Beantworten von Fragen zur Installation oder dem Codeverständnis.
Updates
In der Regel wird die Datenbank jeden Tag um etwa 01:00 aktualisiert. Das angegebene Datum kann manchmal leicht vom Zeitstempel der Daten abweichen. Sollten Änderungen also nicht beim nächsten Update auftauchen, sollten sie auf jeden Fall beim nächsten Update erscheinen.
Kontakt
Um mich zu kontaktieren, stehen verschiedene Wege zur Verfügung:
- [Nachrichtenfunktion dieses Wikis]
- [OSM-Nachrichtenfuntkion]
- [E-Mail] (Link "Kontakt" oben in der Seitenleiste über dem Suchfeld)
Danksagungen
- Dieses Projekt läuft auf einem Server, der freundlicherweise von der Firma [CSL Computer Service Langenbach GmbH] zur Verfügung gestellt wird
- Die Karten- und Overlayanzeige geschieht mit OpenLayers
- Das OpenLinkMap-Icon stammt aus dem [Oxygen-Iconset], das unter der [LGPLv3] verfügbar ist
- gulp21 half bei so manchem Fehler...
- ...ebenso Mitja
- Gulp21 half bei den CSS-Animationen sowie dem Wikipedia-Anfang-Parsing-Code (was für ein Wort... ;))
- Einige Codeteile wurden aus der Demoanwendung des Projekts poi-tools entnommen
- Die eingebaute Suche basiert auf Nominatim
- Die Geolokalisierung mit Hilfe der IP nutzt die GeoIP-Datenbank]
- [Stephan Knauss] hat eine modifizierte Version von Openlayers.Protocol.HTTP zur Verfügung gestellt
- Das Routing benutzt YOURS Navigation
- Peter Büttner modifizierte Teile des Codes
- Daniele Forsi erstellte die italienische Übersetzung
- NothisIm erstellte die russische Übersetzung
- Die Domain wurde freundlicherweise von [joker.com] zur Verfügung gestellt
- Und nicht zuletzt viele Unscheinbare, die ich hier nicht alle namentlich nennen könnte, die über Forum und Mailingliste zahlreiche Vorschläge geäußert, Fehler gemeldet und bei manch einem Problem geholfen haben
- Vielen Dank auch an Markus Weber, der kurzfristig neue Funktionen in seine Programme osmfilter, osmconvert und osmupdate einbauen konnte und bei einigen Fragen geholfen hat.
- Für die Datenaktualisierung wird Osmosis verwendet.
- Die IP-Geolokalisierung nutzt die GeoLite City Datenbank
Links
- Quellcode
- FacilMap/API/POIs — OpenLinkMap Layer für OpenLayers