2012-10-19 13 views
9

Ich arbeite derzeit an einem Schulprojekt und ich versuche, die Techniken zum Herunterladen von OSM-Kartenkacheln in den lokalen Speicher/Cache des Telefons zu lernen, so dass Benutzer die Karten offline anzeigen können .Herunterladen bestimmter Dateien in OSMDroid Cache

Dies geschieht durch Angabe eines bestimmten Ortes, und die Kartenkacheln, die sich in einem bestimmten Radius/Abstand vom Standort befinden, werden in den Telefonspeicher (bei Online-Verbindung) zur Offline-Anzeige heruntergeladen.

Allerdings habe ich einige leichte Probleme beim Verständnis der APIs von OSMDroid. Von meinem Verständnis, so scheint es, dass die beteiligten Klassen sind:

Bitte korrigiert mich, wenn ich mich nicht irre.

Auch in MapTileBase (die ich glaube, ist der Anbieter), gibt die getMapTile android.graphics.drawable.Drawable zurück.

Ist diese Zeichenklasse sogar mit dem Konzept der Offline-Kartenanzeige verbunden?

Hoffnung jemand auf mich aufklären kann, wo genau Karten genannt werden in den Speicher des Telefons heruntergeladen zu werden, und wie wir die Karten-Schnittstelle darzustellen wie Routen, Stifte bearbeiten können usw.

+1

möglich Duplikat [Download Karten für osmdroid] (http://stackoverflow.com/questions/22862534/download-maps-for-osmdroid) – yochannah

Antwort

1

I don‘ Sie haben eine genaue Antwort, wenn Sie nach einer Methode suchen, um offline außerhalb eines Bereichs zu cachespeichern, zu dem MapView noch nicht navigiert ist. Die eingebaute Caching-Unterstützung ist da, aber nicht genau, wie Sie es machen wollen.

Sie werden Online-Download-Funktionen benötigen, wenn Sie vorhaben, Ihre eigenen Offline-Kartenkacheln zu cachen und nicht nur zu liefern. Ich würde mir den MapTileDownloader ansehen und vielleicht versuchen, eine eigene Version davon zu implementieren. Die MapTileDownloader.TileLoader.loadTile() -Methode verwendet einen MapTileRequestState, den MapTileProviderArray, wenn eine Kartenkachel benötigt wird, aufruft.

Wenn Sie die vorhandene TileLoader-Funktionalität des MapTileDownloaders replizieren können, können Sie wahrscheinlich Ihre eigenen relativen MapTileRequestState- oder Straight-Up-MapTile-Dateien in das angeforderte einfügen. z.B. Nimm den TileLoader namens MapTileRequestState, inspiziere ihn, finde heraus, wie man einen neuen MapTileRequestState/MapTile erstellt, der Kacheln außerhalb der aktuellen Ansicht darstellt. Es wird jedoch nicht einfach sein, da Sie sich mit den verschiedenen Zoomstufen befassen müssen, und abhängig von der Zoomstufe sollte der Radius kleiner sein, etc ... Eine niedrigere Zoomstufe von 18 hätte einen größeren Fliesenradius als ein höherer 10.

Persönlich habe ich vor kurzem daran gearbeitet, 100% offline zu arbeiten, also habe ich keinen Beispielcode, um zu helfen. Viel Glück, obwohl es ein paar Monate war.

+2

Vielen Dank für die Eingabe sowieso =) Ich habe dieses Problem gelöst, indem ich bestimmte MapTiles heruntergeladen habe und sie für die Offline-Anzeige auf dem Handy zusammengefügt habe. Ich schaffte es, die Downloads für einen Zoom-Level arbeiten zu lassen, bekam aber Probleme mit mehreren Zoomstufen [http://stackoverflow.com/questions/13930364/asynctask-not-executing-properly-according-to-logic] – lyk

+0

Das ist sehr schade. Ich habe auch Offline-Kacheln mit einem OSMDroid MapView, der aus der activity_main.xml anstatt des üblichen onCreate() - Konstruktors erstellt wurde: http://stackoverflow.com/questions/13894267/how-to-add-a-sliding -drawer-a-mapview-view-thats-erstellt-programmgesteuert – garlicman

0

Zuerst gehen Sie nach rechts die Quelle https://github.com/osmdroid/osmdroid

Es gibt ein paar Wiki-Artikel, die vor allem die Offline-Kartenkacheln Artikel hilft. Kurz gesagt, verwenden Sie MOBAC oder das von Osmdroid bereitgestellte Tool. OSMBonuspack verfügt auch über ein Tool, um die gleiche Aufgabe auf dem Gerät auszuführen.

Kartenkacheln werden heruntergeladen tatsächlich diese Klasse mit https://github.com/osmdroid/osmdroid/blob/master/osmdroid-android/src/main/java/org/osmdroid/tileprovider/modules/MapTileDownloader.java