Hallo zusammen,
ich wollte Fragen, wie ich Karten von OpenStreetMap in mein eigenes Programm einbinden könnte.
Also folgendes kann das Programm schon:
Den Längengrad und Breitengrad in Dezimal umrechnen, als auch in das UTM Koordinatensystem mit ihrem Rechts und Hochwert.
Was muss ich alles dabei beachten?
Was muss ich noch umrechnen?
Ich kenne z.B. das GPS Programm gpsdrive, was es kann
Oder gibt es irgendwo eine Website, bei der es erklärt wird
Hallo Andy und herzlich willkommen im Forum.
Schau doch mal hier vorbei. Eigentlich geht es hier um das einbinden auf Webseiten, aber eventuell kannst du hier Ansätze finden für dein Programm. Code steht dort genug.
Georg
Deine Fragen sind noch recht allgemein, daher auch nur eine allgemeine Antwort.
Ich schreibe auch gerade ein Programm (in Java, als RCP-Anwendung (RCP = Rich Client Platform)). Alles was mit Darstellungen in Karten auf OSM-Basis zusammenhaengt, werde ich jedoch nicht direkt in diese Anwendung integrieren. Dazu rufe ich aus meiner Anwendung einen Browser auf und verwende OpenLayers (http://openlayers.org/). Das ist eine maechtige JavaScript-Bibliothek, die u.a. OSM-Karten anzeigt, diverse Controls von der Stange anbietet und ueber Layers andere Informationen als POI, Polygonzuege und Flaechen einblenden kann. Man kann mittels OpenLayers sogar geometrische Objekte in einer Karte editieren.
Auf diese Weise ist die kartenbasierte Darstellung zwar nicht direkt in meine Anwendung integriert, aber ich bin zu dem Schluss gekommen, dass mir dieses Vorgehen viel Arbeit spart, da ich Dinge, die OpenLayers kann, nicht noch einmal erfinden muss. Ach ja, in der RCP ist Jetty als WebServer integriert. Den (oder etwas adaequates) braucht man natuerlich, um OpenLayers mit den Daten zu fuettern, die man auf der Karte anzeigen will. Die Karte selbst wird als “Untergrund” vom OSM-Server geladen.
Fuer alles weitere muesstest Du Deine Anforderungen und Deine technischen Moeglichkeiten etwas mehr konkretisieren.
Noch ein Hinweis zu UTM: OpenLayers verwendet normalerweise Karten in sphaerischer Merkatorprojektion, nicht UTM. Dies scheint wohl ein “Standard” zu sein, den auch Google Maps und andere verwenden. Dafuer gibt es verschiedene Gruende, vgl. die Dokumentation von OpenLayers. Wenn Dir Daten in anderen Koordinaten vorliegen, ist das kein Problem, da OpenLayers die Moeglichkeit bietet, diese auf die sphaerische Merkatorprojektion umzurechnen. Das brauchst Du nicht zu programmieren. Es ist aber gut moeglich, dass OpenLayers auch Karten in anderen Projektionen anzeigen kann.
Im Prinzip ist das ganz einfach. Du kannst Dir die Kacheln von Mapnik z.B. einfach aus dem Internet herunterladen. (Cachen für min 7 Tage nicht vergessen).
An genau so etwas hatte ich uebrigends auch erst gedacht. Und daraus resultieren z.B. folgende Aufwaende/Fragen:
Cachen, wie von Dennis angemerkt.
Die notwendigen Kacheln ausrechnen und laden.
Damit das Laden nicht zu lange braucht, sollten mehrere Threads die Kacheln parallel herunterladen und/oder die Anfragen auf mehrere Server verteilt werden.
Zoom aendern, Karte verschieben,… waere auch zu programmieren.
Brauchst Du Controls?
Willst Du Daten in Form geometrischer Objekte auf der Karte darstellen?
…
Ich weiss nicht, ob die Kombi OpenLayers / Browser mehrere Threads nutzt, um das Herunterladen zu beschleunigen. Wenn ich mich recht erinnere, werden die Anfragen aber auf mehrere Server verteilt. OL laed auch mehr als die angezeigten Kacheln im Voraus herunter und speichert diese lokal im Browser. Dadurch geht das Verschieben schnell (responsive, wie es Neudeutsch heisst). Nur bei groesseren Verschiebungen muessen neue Kacheln nachgeladen werden.
Jenachdem, was Du (Andy) vorhast (ein bischen spielen und lernen, oder eine “Anwendung” im Sinne von Anwenden schreiben) wirst Du sicher auch auf die eine oder andere dieser Fragen stossen.
Cachen bedeutet, daß Du eine heruntergeladene Kachel auf der Festplatte für mindestens 7 Tage speichern sollst. Wenn Du die gleiche Kachel nochmal brauchst, mußt Du sie von der Festplatte laden. Ziel ist es, keine Kachel innerhalb von 7 Tagen doppelt vom Server herunter zu laden.
Du hast ja GPS-Positionen und rechnest damit die Kachel aus. Wenn Du auf Kachel 1000,5000 zu 492,5000 kommst, dann lädst Du Dir die Kachel 1000/492 vom Server und bist an der Position 0,5/0,5, also genau in der Mitte dieser Kachel. Daraus resultiert dann, wenn Du Kachel 1000,9999 zu 492,9999 ausrechnest, bist Du (fast) genau an der Ecke der Kachel.
Meine Idee, wäre in dein Programm ein Web-Steuerelement (Browser) integrieren und diesem dann mittels permalink an die richtige Stelle schicken. Das Setzen der Position eght natürlich auhc direkt über den html-Code. Damit ersparst du dir das, was schlauchboot und Denis schon geschrieben haben.
Die OSM-Kacheln sind mittels spherical Merkator projeziert. Die Zoom-Level-abhängige Vorschrift ergibt sich aus den Beschreibungen, auf die DennisB in Post 5(?) verwiesen hat. Damit solltest Du das umrechnen können (macht OpenLayers z.B. automatisch… ;-))
7.56198 zwischen long 7.0 und long 8.0
damit wäre ich dann bei 7.56198 = 56,198 %
Wenn jetzt die Kachel 256 breit ist, dann wäre es bei Pixel
256/100*56,1988 = 143,36
für die Höhe das gleiche
47.47607 zwischen lat 47 und lat 48
damit wäre ich dann bei 47.47607 = 47,607%
Wenn jetzt die kachel 256 hoch ist, dann wäre es bei Pixel
256/100*47,607 = 121,87392
Ist dies nur bei Zoom 16 so?
Ich glaube bei anderem Zoom, verändern sich die Abstände
@schlauchboot ich hab es schon so erledigt, ich meine die Umrechnung von long lat in x und y
die kacheln werden auch schon geladen.
Das einzigste ist, den genauen punkt in die kachel zu setzen, wo ich mich gerade befinde
Die Zoom-Level ist egal. Wenn Dir ausrechnest, daß Du die Kachel 7643,45 brauchst, dann ist das die Kachel 7643 und Du bist bei 45% der Kachel. Wenn Du Dir ausrechnest, daß Du Kache 7,323453 brauchst, ist das die Kacel 7 und Du bist bei 32,3453& der Kachel.
Das funktioniert fast Perfekt. Denn die Erde ist ja rund und der Monitor Flach. Somit wird die Kugel gerade gezerrt. Und durch diese Verzerrungen bekommst Du leichte Abweichungen diese dürften aber so klein sein, daß Du sie gar nicht bemerkst.
@Andy123: Ist das “Blubb” nur um das Posting in der zeitlichen Sortierung dieses Forums neu nach oben zu schieben? Und das schon nach < 1 Tag? Was hälst Du denn von Nachkommastellen bei X und Y?