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.
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?
Das CodeProject-Beispielprogramm sowie Greatmaps verwenden die Kacheln. GreatMaps kann sie speichern, so daß später keine erneuten Serverzugriffe nötig sind.
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.
;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…?
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);
}
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.