ganz kurz vorab: ich bin eine blutige Anfängerin im OSM. Ich habe für eine Hausarbeit einige Themen zum Auswahl bekommen und eins davon betrifft OSM.
Ich habe deswegen jede Menge Fragen:
Kann ich OSM Daten in eigener Datenbank abspeichern?
Welche Möglichkeiten gibt es, eine Karte (z.B. für Deutschland oder für NRW) in einer Web-Seite einzubinden?
Ist es möglich eine Route vom Punkt A nach B innerhalb einer OSM-Karte (die ich auf eine Webseite eingebunden habe) zu planen und diese Ruote zu einem Navigationsgerät zu exportieren?
(Fast) alle Leute, die eigene Karten auf OSM-Basis anbieten, oder Auswertungen machen, haben eine eigene Datenbank. Die meisten dürften PostgreSQL haben, viele davon halten diese Datenbank aktuell, indem sie minütlich, stündlich oder täglich die neuesten Veränderungen der OSM-“Hauptdatenbank” abholen und bei sich einspielen. Es gibt aber auch Leute, die MySQL verwenden, gelegentlich sieht man sogar MSSQL. Es gibt auch Angebote, die kleinere Ausschnitte der Datenbank anbieten und Werkzeuge, in diesen Ausschnitten z.B. nach allen Parkbänken zu suchen, um nur diese in seine Datenbank zu stopfen.
Man klickt auf OSM.org auf “Teilen”, wählt “HTML” und kopiert das, was in dem kleinen Fenster steht in seine Seite. Wer kompliziertere oder hübschere Darstellungen haben will, kann z.B. mit Leaflet oder OpenLayers die Kartenkacheln einbinden.
graphhopper bietet die Möglichkeit, GPX-Dateien runterzuladen, denen du Nachfahren könntest. Die anderen Router, die auf osm.org angeboten werden haben das sicher auch. Die Reit- und Wanderkarte wäre ein Beispiel für eine Seite mit eingebundenem Router und Exportmöglichkeit.
Postgresql, Leaflet und Openlayers sind übrigens keine Dinge, die zu OSM gehören. Die werden von anderen Leuten entwickelt und nicht nur für OSM.
Die Router wie graphhopper und Webseiten wie die Reit- und Wanderkarte gehören ebenfalls nicht zu OSM. Das sind Anwendungen, die OSM-Daten zum Routenberechnen und eigene Kartendarstellungen nutzen. Das können sie weil Frage 1 mit “ja” beantwortet werden kann. OSM selbst bietet im Wesentlichen nur eine Karte, eine Datenbank und die Infrastruktur, diese Datenbank zu verändern und runterzuladen. Den Rest können andere erledigen.
Habe ich es richtig verstanden, dass nach dem Zugriff auf die OSM-Daten, diese in einem osm-xml-Datei zur Verfügung stehen?
Kann ich mir nur osm-Daten herunterladen oder auch “Roh-SQL-Daten”? Muss ich osm-Daten selbst in SQL-Daten konvertieren?
Gibt es ein aktuelles Datenbankschema für MySQL?
Das heißt, wenn ich “HTML”-Weg nehme, habe ich einen Permalink und kann ich nur die Informationen darstellen, die ich auch auf http://www.openstreetmap.org sehe?
Und dabei wird auf den OSM-Server zugegriffen?
Leaflet und OpenLayers muss ich mir näher anschauen, hört sich interessant an.
So wie ich verstehe, sind das alles externe Anbieter. Gibt es auch eine Möglichkeit es selber herzustellen?
Ja. XML ist das übliche Austauschformat (PBF wird auch verwendet). Es gibt sicher Anbieter, die andere Formate anbieten. Mir fällt aber nur “Shapefile” ein, was eher für GIS-Anwendungen gedacht ist, nicht für Datenbanken. Für andere DBs gibt es Tools, aber keine Ahnung, ob/wie die funktionieren. Letztendlich kannst du auch csv-Dateien aus dem xml erzeugen (osmconvert kann das) und die dann deiner DB geben.
Alle anderen OSM-Karten, die man so findet sind ja “selbst hergestellt”, manche von Firmen, andere von Freizeitkartografen. Du kannst dir auch deine eigene Routing-Software schreiben oder dir aus quelloffenen Routern (graphhopper, brouter, pgrouting …) was basteln.
Danke für deine Antwort. Vielleicht sollte ich mir diese Dienste angucken, bevor ich weiter dazu frage. Es ist für einen Neuling sehr viel Material, selbst um sich einen ersten Überblick zu verschaffen.
Ich habe eine weitere Frage oder ein weiteres Szenario, von dem ich wissen möchte, ob es möglich ist:
Ich würde z.b. die Webeinbindung über OpenLayers oder leaflet einbinden (inkl. der Daten vom OSM-Server - also keine eigene DB). Gäbe es eine Chance, dass ein User eigene POIs z.b. einträgt, die für ihn wichtig sind aber für keinen anderen. Diese POIs würden auf meinem Server gespeichert als userspezifischer Layer und beim nächsten Aufruf werden die aktuellen OSM-Server-Daten dargestellt und der User-Layer darüber gelegt?
Prima. Das wäre doch ein schöner Einstieg.
mysql+entsprechendes Wissen wäre vorhanden.
Schade, dass das Beispiel ausser Betrieb ist. Ich hätte das gerne mal live ausprobiert.
Noch eine Frage: Warum, wenn man sowas machen kann, sollte man denn einen eigenen DB-Server betreiben? Was bewegt einen, nicht die OSM-Daten plus eigenen Layerdaten zu nehmen?
//----------------------------------------------------------------------------
// Stelle Deutschland in maximaler Groesse dar
//----------------------------------------------------------------------------
if (!map.getCenter()) {
map.zoomToExtent(
new OpenLayers.Bounds(5.88, 47.26, 15.04, 54.91).
transform(map.displayProjection, map.getProjectionObject()));
}
Aber bei mir (ich krieg es ja sogar zum laufen) wird eine Karte von Britannien bis Moskau dargestellt. Wie schaffe ich es, dass z.b. nur NRW dargestellt wird? Und wie bekomme ich zu dem + und - auch diese Leiste zum Zoomen dazu?
Noch ein Tipp: Wenn Du Dich in so einen Anwendungsfall einarbeiten willst, würde ich Dir trotz Netzwolf Beispiel empfehlen von Anfang an Leaflet (und dessen Beispiele) zu verwenden.
OpenLayers ist deutlich sperriger, umständlicher und schwerer verständlich in der Handhabung. Bei Leaflet sollte es Dir bedeutend leichter und schneller von der Hand gehen.
Dazu kommt, dass es schon lange die Version 3.x von Openlayers gibt, und man “eigentlich” alle neuen OL-Anwendungen gleich mit OL 3.X machen sollte.
Ich erspare mir allerdings den Wechsel auf OL 3.x und schreibe neue Anwendungen nur noch in Leaflet.
Och Menno.
Jetzt habe ich doch genau von Netzwolf das o.g. Beispiel zum laufen gebracht.
Aber wenn Ihr meint, Leaflet wäre sinnvoller für den Einstieg… ich schau mir das gleich mal an.
Ich habe jetzt ein Ziel: Ich würde gerne in eine Karte eigene POIs einfügen können (mit mysql als Backend) und ganz klasse wäre, wenn ich fertige POIs oder Marker in die Karte integrieren könnte, die per Mausklick Informationen als Tabelle (aus mysql) darstellen. Also z.b. heißt das, das ich über z.b. (wie beim Netzwolf-Beispiel) über str-shift-klick einen eigenen POI anlegen kann und über den normalen Mausklick diese Informationen angezeigt bekomme.
Und zusätzlich möchte ich vorab eingefügte POIs oder Marker (was ist eigentlich der Unterschied??) haben, die bei Klick tabellarische Informationen anzeigen, z.b. Klick auf Bushaltestelle ergibt Abfahrzeiten als Tabelle. (alles natürlich nur in einem ganz kleinen Testfeld von z.b. 1km x 1km)
Ist sowas mit Leaflet möglich oder ist das zu hoch als Anspruch?
meinen Aussage: “Wenn neu, dann am Besten mit Leaflet” ist a) meine unwichtige Meinung und b) auf dein Projekt wohl nicht so strikt anwendbar.
Das Problem ist, dass Netzwolf einige wirklich tolle Beispiele ins Netz gestellt hat, die uns allen sehr viel gebracht haben. Nur hat er sich entschieden, aus OSM “auszusteigen” und daher vermissen wir ihn sehr. Wenn er noch dabei wäre, gäbe es inzwischen wohl eben so tolle OL3-Beispiele oder sogar Leaflet-basierende Lösungen von ihm.
Du musst halt wissen, auf welches Pferd du springst, damit du möglichst gut und schnell ins Ziel kommst.
Da ich OpenLayers und Netzwolfs Beispiele ins Spiel gebracht habe: Das war nur als Beispiel “wie und dass sowas geht” gedacht, nicht als Aufforderung zum Nachbau. Ich persönlich würde sowas tatsächlich mit OpenLayers machen, ich würde sogar Version 2.x verwenden. Der Grund dafür ist Bequemlichkeit.
Wenn ich was neues Anfangen würde, würde ich vermutlich auch Leaflet nehmen, die Argumente von Nop und wambacher sind natürlich richtig.
Ich habe noch eine gute Idee. Ich kann das Projekt ja 2teilen und mache das eine ohne das andere zu lassen.
Ist vielleicht für meine Arbeit noch besser, da ich dann sowohl OL als auch leaflet nutzen oder vergleichen kann.
Eine weitere Frage: Kann ich eigentlich auf ein Gebäude mit mehreren Etagen Marker auf jede Etage setzen oder kann man das nicht mehr visualisieren?
Und noch eine: Kann ich bei einem Klick auf einen Marker ein Popupfenster anzeigen, das sich dann mit Daten einer URL füllt?