x

Wie OSM in WPF anzeigen?


  1. Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 11.07.2014 13:57 · [flux]

    Hallo zusammen, ich bin vollkommen neu hier und kenne mich nicht aus, darum entschuldigt im voraus..

    Ich bin ein Bergwachtmitglied und Mechatroniktechniker, beruflich habe ich meist mit der Programmierung von Motoren, GUI und beherrsche verschiedene Sprachen.

    Habe jetzt nun die Idee ein Arbeitskarte zu entwickeln (die Idee ist erst mal vollkommen Privat und hat nichts mit der Bergwacht zutun), wo man im Wald beim Einsatz Autos, Personen in eine Karte einzeichnen kann. Natürlich könnte man das auch über bestehende Programme tun, aber wenn die Hände e schon zittern, die Witterung nicht gut, sind einfach die bestehenden Oberflächen nichts.

    Frage1: Kann man OSM zu einem Gewissen teil herunterladen um unabhängig vom Internet zu sein?
    Frage2: Ich würde das ganze gern in WPF (C#) einbinden, ist das möglich?

    Danke im voraus


    • Re: Wie OSM in WPF anzeigen? · SammysHP (Gast) · 11.07.2014 14:37 · [flux]

      Antwort 1: Ja. Es gibt Exporte für den gesamten Planeten, für einzelne Länder und teilweise auch bestimmter übergreifender Regionen. Außerdem kannst du kleinere Gebiete (einige km²) direkt herunterladen. Zudem gibt es "fertige Karten" in diversen Formaten (Garmin, Mapsforge, OsmAnd, …), die du eventuell verwenden kannst.

      Antwort 2: Das ist sicher möglich. Die Daten von OSM kannst du in fast jedes beliebige Format konvertieren. Du brauchst dann nur noch eine Bibliothek, die das Format lesen und darstellen kann.


    • Re: Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 11.07.2014 14:58 · [flux]

      Zu Antwort1: Wo kann ich die herunterladen?
      Zu Antwort 2: Du hättest nicht zufällig ein Beispiel?


    • Re: Wie OSM in WPF anzeigen? · chris66 (Gast) · 11.07.2014 15:15 · [flux]

      Klick mal auf openstreetmap.org auf "Export".

      Dort kannst Du kleine Gebiete runterladen.
      Größere Gebiete am besten über http://download.geofabrik.de/ .

      Chris


    • Re: Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 11.07.2014 15:40 · [flux]

      Hallo chris66, gut die habe ich jetzt heruntergeladen, wie kann ich die jetzt in meinem Programm anzeigen (C#)


    • Re: Wie OSM in WPF anzeigen? · stephan75 (Gast) · 11.07.2014 15:42 · [flux]

      Berg2304feuer wrote:

      Zu Antwort1: Wo kann ich die herunterladen?
      Zu Antwort 2: Du hättest nicht zufällig ein Beispiel?

      Stöbere doch mal etwas im OpenStreetMap-Wiki und mach dich mit den Grundzügen von OSM vertraut.

      Das wichtigste: es gibt "Rohdaten" in einer Datenbank, die stellen Punkte, Linienzüge, Flächen etc. dar. Das sind die eigentlichen Geodaten.

      Diese Daten kann man auf vielfache Weise graphisch darstellen, auch rendern genannt.

      geht mal zu http://wiki.osm.org sowie http://help.osm.org und gib in die dortigen Suchfelder "offline" ein.

      Für Beispiele wäre wichtig: welche Hardware schwebt dir zur Darstellung der Karten vor? PC, Laptop, Tablet, Android, iOS, ... ?


    • Re: Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 11.07.2014 15:49 · [flux]

      zu stepahn75
      Das schöne bei was neuem es donnern so viele Informationen ein, da liest ne halbe stunde, und zum Schluss merkst das war für die Katze ;D.

      Also über Laptop, das Prgramm würde ich gern in C# WPF schreiben


    • Re: Wie OSM in WPF anzeigen? · ikonor (Gast) · 11.07.2014 18:49 · [flux]

      Zu C# fällt mir OsmSharp ein (keine Ahnung bzgl. WPF). Selbst nicht ausprobiert und weiß nicht, wie gut man das erweitern und eigene Marker platzieren kann, kann aber zumindest Offline-Rendering und der Kartenstil lässt sich auch per MapCSS anpassen.


    • Re: Wie OSM in WPF anzeigen? · free_as_a_bird (Gast) · 12.07.2014 12:48 · [flux]

      Schau Dir mal Greatmaps an (Opensource)
      http://greatmaps.codeplex.com/

      Greatmaps lässt sich sowohl online als auch offline verwenden und unterstützt WPF..


    • Re: Wie OSM in WPF anzeigen? · Bernhard Hiller (Gast) · 13.07.2014 10:27 · [flux]

      Greatmaps lädt nur die Kacheln herunter, kann sie lokal abspeichern. D.h. das ist keine Vektorkarte.


    • Re: Wie OSM in WPF anzeigen? · Bernhard Hiller (Gast) · 13.07.2014 11:07 · [flux]

      OSMSharp schaut interessant aus. Leider kein Tutorial auffindbar, nur alte Links, die aussagen, daß die Seite umgezogen ist.
      Nach einigem Rumstöbern fand ich auf https://github.com/OsmSharp/OsmSharp rechts einen Button "Download ZIP", über den man an eine Sammlung von Beispielprogrammen kommt. WPF ist zwar nicht dabei, aber Windows Forms.

      Ich ab's mal mit Visual Studio 2010 C# EXPRESS (d.h. nicht die Vollversion auf meinem Dienstrechner, sondern die "freie" Version auf meinem Privatrechner) versucht.

      Eine Reihne von Fehlermeldungen beim Öffnen:
      Solution folders are not supported in this version of the application...

      Läßt sich nicht kompilieren:
      error MSB4019: The imported project "C:\Program Files (x86)\MSBuild\Microsoft\Portable\v4.0\Microsoft.Portable.CSharp.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

      Naja, da fehlen mir noch ein paar Libraries: Entwicklung für Smartphones interessiert mich nicht, habe deswegen nie diesen Bereich heruntergeladen.
      An dieser Stelle lasse ich es mal dabei bewenden: vielleicht kümmere ich mich ein andermal drum, eine Projektmappe zusammenzustellen, die auch mit der Express-Version funktioniert.


    • Re: Wie OSM in WPF anzeigen? · free_as_a_bird (Gast) · 13.07.2014 11:17 · [flux]

      Bernhard Hiller wrote:

      Greatmaps lädt nur die Kacheln herunter, kann sie lokal abspeichern. D.h. das ist keine Vektorkarte.

      Richtig, das betrifft aber nur den "Kartenhintergrund". Gebiete, Wege etc. lassen sich nachträglich mit Vektoren bzw. Polygonen hervorheben (Bsp auf die Schnelle: http://www.websofia.com/2013/02/gmap-ne … polygons/)

      Für kleine Gebiete sehe ich das durchaus als Vorteil. Außerdem lassen sich dadurch auch Luftbilder offline als Hintergrund verwenden...

      Von daher hängt es, berg2304feuer, von Deinem genauen Einsatzszenario ab..


    • Re: Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 14.07.2014 15:06 · [flux]

      Hallo. Danke schön für die zahlreichen Infos. Werde mich da durchlesen. Eins vorab der Link von free_as_a_bird bringt ein Error..
      Das Problem bei GreatMaps, ist glaube ich auf den ersten Blick zusehen, das die Karte auch vom Server gezogen wird.
      Mit OSM Export kann ich zwar die Karter herunterladen aber das sind "nur" die werpkt. Wenn ich das in JOSM öffne sehe ich nur Linien, gehe ich auf Hintergrund Mapnik gehe werden nur Kacheln bis zur einer gewissen Stufe erzeugt (offline). Das wichtigste ist erstmal das mir eine Detailkarte OFFLINE zu Verfügung steht, da ich im Wald nicht immer Netz habe.

      Jetzt schaue ich mir mal OSMSharp an ;D

      Danke nochmal für die Beiträge..!!


    • Re: Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 14.07.2014 15:30 · [flux]

      Hallo, habe jetzt OSM SDK (osmsharp.com/download) mittels NuGet installiert, wie arbeite ich nun damit? Gibt's da Beispiel??

      Grüße


    • Re: Wie OSM in WPF anzeigen? · gormo (Gast) · 14.07.2014 16:25 · [flux]

      Berg2304feuer wrote:

      Hallo, habe jetzt OSM SDK (osmsharp.com/download) mittels NuGet installiert, wie arbeite ich nun damit? Gibt's da Beispiel??

      Grüße

      Hier https://github.com/OsmSharp/OsmSharp/tr … .UI.Sample gibts Beispielcode.


    • Re: Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 14.07.2014 19:16 · [flux]

      ;D der Reihe nach..

      wie würdet ihr in einem Frame oder sogar in einem WPF Frame die OSM Karte Anzeigen, bei great maps wird es ja auch heruntergeladen nur man sieht eben nicht die OPM HP Karte, sondern so schön diskret der hinweiß in der karte das es von OSM ist...

      Danke


    • Re: Wie OSM in WPF anzeigen? · gormo (Gast) · 15.07.2014 08:01 · [flux]

      Berg2304feuer wrote:

      Frage1: Kann man OSM zu einem Gewissen teil herunterladen um unabhängig vom Internet zu sein?

      Willst du nur eine Zoomstufe, oder willst du mehrere?

      Brauchst du die Vektordaten, oder reichen dir die Kartenkacheln?

      Berg2304feuer wrote:

      Frage2: Ich würde das ganze gern in WPF (C#) einbinden, ist das möglich?

      siehe auf http://wiki.openstreetmap.org/wiki/Frameworks


    • Re: Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 15.07.2014 13:51 · [flux]

      gormo schrieb:
      Willst du nur eine Zoomstufe, oder willst du mehrere?

      Hallo, bis zum Waldweg

      gormo schrieb:
      Brauchst du die Vektordaten, oder reichen dir die Kartenkacheln?

      Wenn detailliert heißt das ich Vektordaten brauche, dann ja


    • Re: Wie OSM in WPF anzeigen? · gormo (Gast) · 15.07.2014 14:54 · [flux]

      Hallo,

      Berg2304feuer wrote:

      gormo schrieb:
      Willst du nur eine Zoomstufe, oder willst du mehrere?

      Hallo, bis zum Waldweg

      Aber insgesamt schon in mehreren Stufen, oder reicht eine?

      gormo schrieb:
      Brauchst du die Vektordaten, oder reichen dir die Kartenkacheln?

      Wenn detailliert heißt das ich Vektordaten brauche, dann ja

      Nee, Vektordaten brauchst du dann, wenn du Informationen zu den Objekten brauchst, die im Kartenbild nicht sichtbar sind.

      Es gibt bei OSM (bei Geodaten allgemein) zwei Abgabeformen: als Raster- und als Vektordaten. Rasterdaten bedeuten du hast eine Grafik, die x mal y Pixel groß ist, und wo durch Pixelfarben, Objektsignaturen etc. für Menschen klar ist, was dort in der Realität ist. Vektordaten sagen "auf Position x.xxxx, y.yyyy ist ein Punkt, dieser Punkt ist eine Telefonzelle" oder "Zwischen den Punkten 1.1111 und 2.2222 läuft ein Pfad mit Sand als Oberfläche, den man Montags bis Freitags von 11 bis 18 Uhr befahren darf".

      Dein Monitor kann aber nur Rasterdaten anzeigen (Schalte Farbe rr,gg,bb auf Kristall x,y im Monitor).

      Der Schritt zwischen Raster- und Vektordaten bei Openstreetmap ist das sogenannte rendering. Dabei wird nach bestimmten Regeln, die irgendwo beschrieben sind, aus der Info das ein Weg ein Sandweg ist eine Linie (im Sinne von "die Pixel auf der Linie") zwischen den beiden Punkten in einer bestimmten Farbe und mit einem bestimmten Muster gezeichnet.

      Jetzt gibts aber mehrere Arten, die Vektordaten in Rasterdaten zu überführen, das sind also unterschiedliche Render-Regeln. Das Ergebnis sind dann bspw. die Humanitarian-, Verkehrskarte, die OpenCycleMap und noch ein paar mehr Kartenstile.

      Per Definition ist ein Kartenstil aber immer eine Abwägung, welche Daten ich ins Kartenbild übernehme. Male ich eine ÖPNV-Karte, kann ich kleine Waldwege weglassen. Male ich eine Notfallkarte für die Bergwacht interessieren mich Frisörgeschäfte, Parkbänke oder Hundekottütenspender wohl eher nicht.

      Jetzt ist die Frage: machst du dir die Mühe deinen eigenen Kartenstil als Rasterdaten zu rendern? Dann kannst du beispielsweise Maperitive http://wiki.openstreetmap.org/wiki/Maperitive nehmen - oder nimmst du einen bestehenden Kartenstil, wie den "normalen" auf openstreetmap.org , und zeichnest nur die dich interessierenden Objekte als Overlay drüber? Zweiteres ist einfacher, ersteres eventuell hübscher.

      Also:

      • Gibt es einen Kartenstil, der alles das darstellt was du willst?
      • Ja: Super, nimm den!
      • Nein: Gibt es einen, mit dem du leben kannst?
        • Ja: Nimm den und zeichne deine fehlenden Objekte drüber
        • Nein: mach deinen eigenen Stil.

    • Re: Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 15.07.2014 22:00 · [flux]

      Hallo Senior Member, danke für die Grundlagen infos,

      Ja in mehreren Stufen

      Der Kartenstil von OSM ist zum reinkommen in das ganze vollkommen ausreichend...

      Jetzt wieder zu "einfachen" Frage: Welche Adresse muss ich eingeben das mein Frame zB Baden Württemberg von OSM anzeigt?


    • Re: Wie OSM in WPF anzeigen? · gormo (Gast) · 16.07.2014 17:13 · [flux]

      Berg2304feuer wrote:

      Jetzt wieder zu "einfachen" Frage: Welche Adresse muss ich eingeben das mein Frame zB Baden Württemberg von OSM anzeigt?

      Auf einer Internetseite? http://leafletjs.com/examples/quick-start.html

      Oder meinst du dein Frame in deiner C#-WinForms-Anwendung? Dann wirds komplexer. Du brauchst entweder eine Browserkomponente und zeigst darin per Leaflet die OSM-Karte an, oder ... da bin ich leider überfragt, sorry.


    • Re: Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 16.07.2014 17:59 · [flux]

      Hallo,
      habe was gefunden http://www.codeproject.com/script/Artic … ?aid=87944

      Jetzt erzsugt aber das Programm einen Cahefolder und erzeugt extra Ordner und Nummeriert die, das gefällt micht nicht, hat jmd eine Idee wie ich das umschreiben kann das es sie Temporär abspreichert, zudem habe ich auch gleich wieder die Weltkarte, reichen würde nur BaWü

      Grüße


    • Re: Wie OSM in WPF anzeigen? · gormo (Gast) · 17.07.2014 15:14 · [flux]

      Berg2304feuer wrote:

      Hallo,
      habe was gefunden http://www.codeproject.com/script/Artic … ?aid=87944

      Jetzt erzsugt aber das Programm einen Cahefolder und erzeugt extra Ordner und Nummeriert die, das gefällt micht nicht, hat jmd eine Idee wie ich das umschreiben kann das es sie Temporär abspreichert, zudem habe ich auch gleich wieder die Weltkarte, reichen würde nur BaWü

      In dem Testprogramm kannst du beispielsweise in der MainWindow.xaml.cs im Konstruktor auf dem Kartenwidget latitude, longitude und zoom setzen.

      Die Ordnerstruktur kommt von der Tile-Struktur, die OSM verwendet. Was dabei auffällt ist, das das Programm bei stärkerer Nutzung wohl gegen die Tile Usage Policy http://wiki.openstreetmap.org/wiki/Tile_usage_policy verstoßen könnte.

      Nö, wie man das anders machen kann wüsste ich auf die Schnelle nicht. Aber wieso willst du das anders machen?


    • Re: Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 17.07.2014 16:16 · [flux]

      gormo wrote:

      Nö, wie man das anders machen kann wüsste ich auf die Schnelle nicht. Aber wieso willst du das anders machen?

      Bei mir stürzt es ab...

      Das Programm lädt jetzt die Kacheln, das sind aber nicht die Vektordaten?


    • Re: Wie OSM in WPF anzeigen? · Bernhard Hiller (Gast) · 18.07.2014 18:46 · [flux]

      Das CodeProject-Beispielprogramm sowie Greatmaps verwenden die Kacheln. GreatMaps kann sie speichern, so daß später keine erneuten Serverzugriffe nötig sind.

      Rohdaten erhältst du z.B. von Geofabrik unter http://download.geofabrik.de/europe/germany.html (für Baden-Württemberg gibt es auch die Regireungsbezirke einzeln).

      Wie diese Rohdaten mit OSMSharp lädt, als Karte darstellt, bearbeitet, und seine Bearbeitungen speichert, weiß ich leider nicht.

      Achtung: diese ".osm.pbf" Dateien sind stark komprimiert - rechne mal mit gur dem 10fachen Speicherbedarf für die entpackten Daten.
      Es könnte also empfehlenswert sein, noch kleinere Bereiche daraus auszuschneiden. Geht z.B. mit Osmosis.

      Tja, als .Net-Fans sind wir in der OpenStreetMap-Welt eine kleine Minderheit. Wegen allerhand Schwierigkeiten (wieviel Daten kann ich über die API erhalten? Wie ist die XML-Schema-Definition von osm? Da gibt's ein paar xsd - ich habe Klassen damit erzeugt, versucht eine von JOSM erstellte osm-Datei zu laden, und kein einziges Mal hat das funktioniert...) programmiere ich so ungefähr nichts mit OSM, wende nur die - zumeist in Java geschriebenen - Tools an.


    • Re: Wie OSM in WPF anzeigen? · rayquaza (Gast) · 18.07.2014 19:36 · [flux]

      Bernhard Hiller wrote:

      Tja, als .Net-Fans sind wir in der OpenStreetMap-Welt eine kleine Minderheit.

      Naja, für Microsoft gibt's halt keinen Support 😛

      Bernhard Hiller wrote:

      wieviel Daten kann ich über die API erhalten?

      Mal andersrum gefragt: Bei was wüsstest du nicht wie du es erhalten könntest?

      Bernhard Hiller wrote:

      Wie ist die XML-Schema-Definition von osm?

      Völlig OT: Wozu braucht man das überhaupt?

      Bernhard Hiller wrote:

      versucht eine von JOSM erstellte osm-Datei zu laden

      JOSM-OSM-XML unterscheidet sich etwas vom normalen OSM-XML 😉


    • Re: Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 18.07.2014 23:13 · [flux]

      ;D ich quäle mich so durch, wenn ich es fertig habe teile ich es gerne.

      Habe das so Verstanden das die Kachel von http://tile.openstreetmap.org/{0}/{1}/{2}.png geladen werden, kann man das nich beim laden begrenzen also gleich zun Tile'n von BaWü springen...?


    • Re: Wie OSM in WPF anzeigen? · Berg2304feuer (Gast) · 19.07.2014 01:21 · [flux]

      Hallo, stimmt ich habe schon manche Projekte gemacht auch OOO Anwendung aus WPF heraus, aber das hier ist schon was zum beißen

      Habe ja oben schon mal ein Link geteilt vom codeprojekt, nun habe ich eine schöne Seite gefunden was die tiles angeht
      http://oms.wff.ch/calc.php?baseurl=cylc … =47.354000
      Nun möchte ich in meinem Programm das gleich BaWü angezeigt wird, in dem Programm für 0,0,0 fuktioniert das so

      ␣␣private␣const␣string␣TileFormat␣=␣@"http://tile.openstreetmap.org/{0}/{1}/{2}.png";
      
      internal␣static␣BitmapImage␣GetTileImage(int␣zoom,␣int␣x,␣int␣y)
      {
      if␣(string.IsNullOrEmpty(CacheFolder))
      {
      throw␣new␣InvalidOperationException("Must␣set␣the␣CacheFolder␣before␣calling␣GetTileImage.");
      }
      
      double␣tileCount␣=␣Math.Pow(2,␣zoom)␣-␣1;
      if␣(x␣<␣0␣||␣y␣<␣0␣||␣x␣>␣tileCount␣||␣y␣>␣tileCount)␣//␣Bounds␣check
      {
      return␣null;
      }
      
      Uri␣uri␣=␣new␣Uri(string.Format(CultureInfo.InvariantCulture,␣TileFormat,␣zoom,␣x,␣y));
      return␣BitmapStore.GetImage(uri);
      }
      

      Was macht er da, bügelt der die URL auf 0,0,0.


    • Re: Wie OSM in WPF anzeigen? · Bernhard Hiller (Gast) · 20.07.2014 09:07 · [flux]

      Erst mal debuggen.
      Schaut uri korrekt aus? So in etwa http://tile.openstreetmap.org/8/134/89.png
      Wieso ist deine Funktion "static"?
      Wie rufst du sie auf - etwa mit nem Lambda oder mit allerhand Mulit-Threading?
      GreatMaps enthält auch den Code, sich die Tiles herunterzuladen, auch von Google und Bing und Co.