Im Moment bin ich dabei eine App mit Hilfe von Android Studio zu programmieren.
Meine aktuelle Position kann ich auslesen.
Jetzt meine Frage:
Wie bekomme ich mit Hilfe von OSM heraus in welcher Strasse ich mich gerade befinde?
Wie bekomme ich Zugriff auf die Karte und ihren Inhalt? “germany-latest.osm.pbf”, damit?
Ich habe mich jetzt schon viel reingelesen, nur finde ich einfach nicht heraus eine Verbindung zwischen OSM und dem Device aufzubauen bzw Zugriff auf die Karte zu erhalten.
Mein Vorhaben ist, die erlaubte Höchstgeschwindigkeit der Straße auf der ich mich befinde, anzeigen zu können.
Normalerweise - also Linux, Windows & Mac - erstellt man aus dem Datenfile eine Postgresql-Datenbank und läßt bestimmte Programme (z.B Nominatim) darin suchen.
Ob und wie das unter Android geht, ist mir nicht bekannt.
Osmand als App mit lokalen Daten erstellt dagegen mit MapCreator aus den OSM-Daten unter Linux anwendungsspezifische Dateien für Android. Das Zeug ist frei verfügbar, muttu nur googeln.
Android bietet natürlich schon Views,Klassen usw an, aber natürlich nur für Google Maps
Die Anzeige der Karte ist damit nicht trivial und es gibt ein paar Libraries für OSM-Karten:
Damit kannst du auf jeden Fall eine OSM-Karte einblenden (egal ob on- oder offline).
Um die Speedlimits anzuzeigen gibt es bestimmt mehrere Möglichkeiten. Eine ist z.B. in mapsforge die tag-mapping.xml anzupassen, damit die maxspeed-tag überhaupt verarbeitet werden, und Code zum Anzeigen schreiben. Du könntest dir auch die Daten manuell ziehen und dann als GeoJSON anzeigen oder sie in eine lokale SQLLite Datenbank auf dem Android Device speichern.
Ansonsten kannst du dir auch das Projekt angucken: https://code.google.com/p/osmbonuspack/
Da werden mehrere Features in einem Projekt zusammengefasst, unter anderem ein OverpassAPI Wrapper und GeoJSON&KML support.
Aus Koordinaten Adressen (im weitesten Sinne) ableiten nennt sich “Reverse Geocoding” und ist eine nicht triviale Aufgabe.
Prinzipiell hast Du zwei Möglichkeiten:
Du kannst aus den recht umfangreichen™ OSM-Daten die relevanten extrahieren, in Deinem Fall also die Straßen in DE mit Verlauf und Höchstgeschwindigkeit, vielleicht auch mit Namen, diese in eine kompakte Form Deiner Wahl bringen und dann zu Deiner App aufs Schlaufon laden; sodann selbst in diesen Daten die zur aktuellen Location passende Straße heraussuchen. Vorteil: funktioniert auch offline. Nachteil: Du musst Dich um die Konversion kümmern und die Suche in den Daten bauen; die umfangreiche Daten belasten den Speicher des Gerätes, die Daten müssen von den Anwendern aktualisiert werden.
Oder Du stellst die Bestimmung von Straße aus der Location als Webservice bereit. Vorteil: schlanke App, kein Update der Daten für den Nutzer; Nachteil: funktioniert nur Online.
In der OSM-Welt stellt Nominatim diesen Dienst bereit, sowohl mit einer Web-Oberfläche als auch über eine API.
Wichtiger Hinweis: dieser Dienst ist wie alle OSM-Dienste nicht für kommerzielle Nutzung gedacht.
Das enthält die Rohdaten, die Du für Offline-Nutzung filtern und dann in eine App-geeignete Form bringen musst. Für Online-Nutzung werden diese Daten (zB) in einen Klon von Nominatim eingespielt. Und (hoffentlich) mit den Diff-Dateien von planet.openstreetmap.org regelmäßig aktualisiert.
Vielleicht hilft ein Codebeispiel für den Zugriff auf Nominatim. Gibts auch als fertige App. Holt auf Knopfdruck vom System die Location, fordert die Adressdaten zu dieser Location bei Nominatim an und zeigt die Antwort von Nominatim in Rohform. Mit der Doku zur Nominatim-API zusammen könnte das beim Einstieg helfen.
Die Kartendarstellung als Vektorgrafik, POI- und Adress-Suche, Routing und Anzeige von Höchstgeschwindigkeiten sind alles eigene Komponenten, welche die Programmierer von Osmand selbst entwickelt haben.
Generell: nenne uns ein paar OSM-basierte Apps, die deinen Vorstellungen nahe kommen, und wir können dir vielleicht weiter mit Details helfen.