Wie kann ich Offline-Karten mithilfe von Osmdroid implementieren, indem ich Kartenkachelbilder in der SQLite-Datenbank abspeichere?

8

Ich habe ein Projekt, das auch im Offline-Modus Kartendaten anzeigen muss. Ich habe OpenStreet-Karten für dasselbe verwendet. Ich habe Kartenbilder (Kacheln) gespeichert und jede Kachel wird von einem Kachelschlüssel in der Datenbank referenziert. Ich möchte auf diese Kartenkacheln aus der Datenbank zugreifen und sie entsprechend verwenden.

Bitte schlagen Sie mir vor.

Vielen Dank im Voraus.

    
Ayush Verma 15.11.2011, 13:05
quelle

2 Antworten

22

Kartenkacheln in Osmdroid werden von Kartenkachelanbietern bereitgestellt. Der von Osmdroid standardmäßig verwendete Kachelanbieter ist MapTileProviderBasic . Dieser Anbieter erweitert MapTileProviderArray , was bedeutet, dass es sich um ein Array von einigen anderen Kachelanbietern handelt - wenn eine Kachel angefordert wird, werden diese Kachelanbieter nacheinander nach einem Kachelbild gefragt, bis eines von ihnen es bereitstellt. Sehen Sie sich den Konstruktor von MapTileProviderBasic an:

%Vor%

Dem Array von Providern sind drei Kartenkachelanbieter in dieser Reihenfolge hinzugefügt:

  • MapTileFilesystemProvider - stellt Kacheln aus dem Dateisystem (SD-Kartenverzeichnis)
  • bereit
  • MapTileFileArchiveProvider - stellt Kacheln aus Archiv im Dateisystem
  • bereit
  • MapTileDownloader - stellt Kacheln bereit, indem sie aus dem Internet heruntergeladen werden (z. B. von OSM-Servern)

Das MapTileProviderBasic sucht zuerst nach einer bestimmten Kachel im Dateisystem, wenn die Kachel nicht verfügbar ist, sucht sie in Archivdateien und, wenn sie dort nicht verfügbar ist, lädt sie die Kachel aus dem Internet herunter.

Ok, das ist der Standardmechanismus. Wenn Sie diesen Mechanismus ändern möchten, um nach Kacheln zu suchen, die in einer Datenbank gespeichert sind, können Sie eine eigene Klasse ähnlich wie MapTileProviderBasic erstellen. Also könnte Ihre Klasse auch MapTileProviderArray erweitern und einfach andere Anbieter im Konstruktor verwenden. In Osmdroid gibt es eine Klasse DatabaseFileArchive , das Ihnen beim Lesen von Kacheln aus der DB helfen könnte.

Nachdem Sie Ihren eigenen Kachelanbieter erstellt haben, sollten Sie ihn anstelle des Standardkachels verwenden. Kartenkachelanbieter sind mit MapView verknüpft. Einige Konstruktoren von MapView verwenden MapTileProviderBase als Argument - Sie können einen von ihnen verwenden, um Ihren eigenen Provider anzuhängen.

    
Piotr 27.11.2011, 14:34
quelle
1

Die einfachste Möglichkeit, Offline-Karten mit dem Standardanbieter zu verwenden %Co%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> src / main / java / org / Osmdroid / Kachelprovider / Konstanten / OpenStreetMapTileProviderConstants.java "> MapTileProviderBasic .

Laden Sie die Datei OSMDROID_PATH oder .zip, .sqlite, .mbtiles in das Verzeichnis .gemf herunter.

Wenn Sie sich osmdroid/ Sie sehen es als MapTileFileArchiveProvider in %Co_de% , das den richtigen Archivanbieter basierend auf den Dateierweiterungen auswählt.

    
Espen Riskedal 15.12.2014 12:55
quelle

Tags und Links