Wie OSM in WPF anzeigen?

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

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 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.

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-net-tutorial-maps-markers-and-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…

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…!!

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/tree/master/OsmSharp.WinForms.UI.Sample gibts Beispielcode.

;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

Willst du nur eine Zoomstufe, oder willst du mehrere?

Brauchst du die Vektordaten, oder reichen dir die Kartenkacheln?

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

Hallo, bis zum Waldweg

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

Hallo,

Aber insgesamt schon in mehreren Stufen, oder reicht eine?

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.

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?

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.

Hallo,
habe was gefunden http://www.codeproject.com/script/Articles/ViewDownloads.aspx?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

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?

Bei mir stürzt es ab…

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

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.

Naja, für Microsoft gibt’s halt keinen Support :stuck_out_tongue:

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

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

JOSM-OSM-XML unterscheidet sich etwas vom normalen OSM-XML :wink:

;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…?

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=cylce&lat=47.629000&long=7.262000&longto=7.906000&latto=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.

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.