exportfunktion von osmstreetmaps.org offline nutzen

Hallo!

Tolles Forum hier :slight_smile:

ich möchte innerhalb kurzer Zeit (hab leider nicht mehr viel Zeit) eine kleine Anwendung entwerfen, mit der ich Offline Karten anzeigen lassen kann. Jetzt meine Frage:

gibt es eine Möglichkeit, wie auf www.openstreetmap.org die Exportfunktion (sprich einfach nur zwei eck-Koordinaten angeben und ein PNG Image erhalten) offline durchzuführen?
wie gesagt, ich möchte einfach nur zwei Koordinaten eingeben, und dann ein Bild erhalten mit dem Kartenmaterial. Idealerweise noch mit Auswahl ob welche Layer ich mit anzeigen möchte, aber das ist wie gesagt optional und totale Nebensache!

Vielen Dank!

Deine Frage ist leider ein wenig unlogisch.

Die Funktion erstellt Dir vom Onlinesystem eine Offlinefähige Datei. Wenn Du bereits offline bist, ist es dafür zu spät. Wenn Du so etwas haben möchtest, wenn Du bereits offline bist, musst Du Dir vorher die ganze Welt herunterladen. Wenn Du aber schon die ganze Welt hast, brauchst Du keine Exportfunktion mehr.

Hast Du Dir mal die einzelnen Kacheln Onlinekarte im Detail angeschaut? Vielleicht reicht es ja wenn Du Dir die Kacheln herunterlädst und speicherst.

ok, etwas anders formuliert:

wenn ich mir die osm daten von der ganzen welt herunterlade (oder in meinem fall von einem land) möchte ich hierraus irgendwie eine karte generieren und anzeigen. das ganze sollte dann noch “zoombar” sein, sodass ich größere und kleinere kartenausschnitte anzeigen kann… das ganze soll in c# ablaufen!

edit: es wĂĽrde mir auch reichen, wenn es ein objekt gibt, was ich in c# einbinden kann welches mir dann einfach diese slippy map (ich glaub so heisst es) darstellt

also ich möchte einfach koordinaten in mein c# programm eingeben und den entsprechenden kartenausschnitt in meinem eigenen programm darstellen (sodass ich noch gewisse sachen darauf zeichnen kann später)

Du meinst z.B. sowas: http://wiki.openstreetmap.org/wiki/Mapgen.pl

Allerdings glaube ich fĂĽr einem ganzen Land ist Mapgen wohl nicht das richtige.

naja, schnell wird das nicht gehen. Du brauchst

  • die Daten fĂĽr Dein Gebiet
  • ein Backend
    • eine Datenbank (kann entfallen wenn das Gebiet sehr klein ist)
    • ein Renderer (der macht aus den Daten viele Bildchen)
    • einen Webserver (oder Mapserver, der kann auch das rendern ĂĽbernehmen)
  • ein Frontend bspw Openlayers

Wobei ich nicht weiĂź, wie das ganze mit c# zusammen arbeitet.

Wie möchtest Du die Daten denn speichern? Die ganzen Karten arbeiten alle Kachelbasiert. Slippy-Map ist der Name des HTML-Frontends für den User. Im Hintergrund wird die Welt mittels Kacheln gespeichert. Die Welt hat ca. 90 Milliarden Kacheln. Du merkst, es ist absolut unmöglich, sich alle 90 Milliarden Kacheln herunter zu laden, damit Du dann offline Zugriff auf die Karten hast.

Der von PHerison vorgeschlagene Weg wäre dann sicher das bessere. Du speicherst die Rohdaten der Welt. Die Welt ist ca. 22 GB groß, täglich kommen 50 MB an Updates, welche man in die 22 GB Datei einspielen muss. Aus diesen Daten kann man sich dann seinen Bereich rausschneiden und den Live rendern lassen. Alles in allem keine 0815-Projekte.

Oder Du verzichtest auf die Offline-Funktionalität und programmierst Dir eine Onlinesoftware. Das ist alles in allem eher ein leichtes. Du lädst die PNG-Files vom Server und lässt sie anzeigen. Beim verschieben lädste schnell die neuen Kacheln nach. Beim Zoomen änderst du den Zoomfaktor. Schwer wirds wenn alles Ruckelfrei und nahtlos werden soll. Zoomt der User rein hast Du die Daten noch nicht. Du musst also die vorhandenen Daten hochrechnen und als Vorschau anzeigen. Hast Du dann eine Kachel ist ein sanfter Übergang notwendig. Preloading und Caching ist Pflicht.

Ob es für C bereits so eine Map gibt, weiß ich nicht. Ich habe mal eine für Delphi angefangen, mir wurde aber schnell klar wie viel Arbeit alles ist. Sanftes verschieben, Sanftes Zoomen, Preloading, Caching. Vorausberechnen von Kacheln die es nur in falschen Zoomlevels gibt habe ich angefangen. Dann gings aber los, wenn nutzt Du eine alte Kachel aus dem Cache und wann rechnest Du eine neue Kachel aus einer falschen Zoomstufe aus? In welcher Reihenfolge lädst Du die Kacheln, damit der User seine Karte als erstes sieht, das Preloading aber schnell genug für die nächste Useraktion ist? Wie schafft man ein Sanftes überblenden (alte Daten/Neue Daten) während der User die Karte verschiebt oder Zoomt? Das laden an DSL Light ist zäh. Also habe ich viel auf Vorausberechnung gesetzt. Das geht aber extrem auf den Prozessor. Also ist Multithreading notwendig. 10.000 Files im Chacheordner waren sehr schnell erreicht. Am Ende habe ich festgestellt, daß das beste wäre, wenn man viel mehr Objektorientiert arbeitet, und jede Kachel in ein Objekt jagt. Verschiebt der User die Karte werden nicht mehr benötigte Objekte destroyt und neue created. Jedes Objekt entscheidet für sich alleine, was es anzeigt. Jedes Objekt besteht aus zwei Bildern welche separat hin und her gefadet werden können (alte Cache-Daten und neue Daten) und jedes Objekt berechnet sich selber seine hochgerechneten Kacheln. Und plötzlich war mein Programm wieder bei quasi Null. Da ich versucht hatte, die Kacheln per Software zur Karte zusammen zu rechnen und das Endprodukt anzuzeigen.

On-Line sind alle Funktionen, die Dennis beschreibt, mit z.B. mit Openlayer http://www.openlayers.org/ oder ktml http://www.khtml.org/osm/v0.83/index.php abgedeckt.
FĂĽr kleinere Gebiete (25x25km) kann man sich alle Tiles herunterladen (Skript auf Anfrage) und die Routinen in OL so umbiegen, dass die lokale Version der Tiles verwendet wird.

@fx99

genau sowas brauch ich… nur dass ich ca. 75x75 km brauche aber da fällt mir schon was ein! kannst du mir das skript zukommen lassen?

Hilft bei dem ganzen Thema vieleicht http://wiki.openstreetmap.org/wiki/Maps_on_a_Stick weiter? wegen Offline?