¿Cómo puedo implementar mapas sin conexión usando osmdroid al guardar imágenes de mosaicos de mapa en la base de datos sqlite?

Tengo un proyecto que tiene un requisito de mostrar los datos del mapa en modo fuera de línea también. He utilizado mapas de OpenStreet para el mismo. He guardado las imágenes del mapa (los azulejos) y cada azulejo es referenciado por un tilekey en base de datos. Quiero acceder a estos mosaicos del mapa de la base de datos y utilizarlos en consecuencia.

Por favor, sugerirme.

Gracias por adelantado.

Azulejos de mapa en Osmdroid son proporcionados por los proveedores de azulejos de mapa. El proveedor de mosaico predeterminado utilizado por Osmdroid es MapTileProviderBasic . Este proveedor extiende MapTileProviderArray , lo que significa que es una matriz de algunos otros proveedores de mosaico – cuando se solicita un mosaico, estos proveedores de mosaico se preguntan uno por uno para una imagen de mosaico hasta que uno de ellos lo proporcione. Echa un vistazo al constructor de MapTileProviderBasic :

 public MapTileProviderBasic(final IRegisterReceiver pRegisterReceiver, final INetworkAvailablityCheck aNetworkAvailablityCheck, final ITileSource pTileSource) { super(pTileSource, pRegisterReceiver); final TileWriter tileWriter = new TileWriter(); final MapTileFilesystemProvider fileSystemProvider = new MapTileFilesystemProvider(pRegisterReceiver, pTileSource); mTileProviderList.add(fileSystemProvider); final MapTileFileArchiveProvider archiveProvider = new MapTileFileArchiveProvider(pRegisterReceiver, pTileSource); mTileProviderList.add(archiveProvider); final MapTileDownloader downloaderProvider = new MapTileDownloader(pTileSource, tileWriter, aNetworkAvailablityCheck); mTileProviderList.add(downloaderProvider); } 

Hay tres proveedores de mosaico de mapa agregados a la matriz de proveedores, en este orden:

  • MapTileFilesystemProvider – proporciona los azulejos del sistema de archivos (directorio de la tarjeta del SD)
  • MapTileFileArchiveProvider – proporciona mosaicos del archivo en el sistema de archivos
  • MapTileDownloader : proporciona mosaicos descargándolos de Internet (por ejemplo, desde servidores OSM)

Así que el MapTileProviderBasic busca un azulejo en primer lugar en el sistema de archivos, si el mosaico no está disponible, entonces lo busca en archivos de archivo y de nuevo si no está disponible allí descarga el mosaico de Internet.

Ok, este es el mecanismo predeterminado. Si desea cambiar este mecanismo para buscar azulejos almacenados en un DB, entonces puede crear su propia clase similar a MapTileProviderBasic . Así que su clase también podría extender MapTileProviderArray y simplemente utilizar otros proveedores en el constructor. En Osmdroid hay una clase DatabaseFileArchive que probablemente podría ayudarle a leer los azulejos de la base de datos.

Después de crear tu propio proveedor de mosaico, debes usarlo en lugar del predeterminado. Los proveedores de mosaicos de mapa se adjuntan al MapView . Algunos de los constructores de MapView tomar MapTileProviderBase como un argumento – puede utilizar uno de ellos para adjuntar su propio proveedor.

La forma más sencilla de obtener mapas sin conexión para trabajar con el proveedor predeterminado MapTileProviderBasic es poner su arhive de mapas en OSMDROID_PATH .

En otras palabras, descargue su .zip, .sqlite, .mbtiles o .gemf en el directorio osmdroid/ .

Si observa MapTileFileArchiveProvider , verá que llama a getArchiveFiles() en ArchiveFileFactory que elige el proveedor de archivos correcto en función de las extensiones de archivo.

  • No se puede copiar la base de datos SQLite de los activos
  • SQLite para la vista de tabla personalizada de Android (vista de SQL, no vista de Android) discrepancia?
  • Obtener fila aleatoria de SQLite Database Android SDK
  • Android sqlite ordenar en la columna calculada (coordina la distancia)
  • ¿Por qué obtengo un error "sqlite3: not found" en un Nexus One enraizado cuando intento abrir una base de datos usando el shell de adb?
  • Android OrmLite base de datos pre-poblar
  • ¿Cualesquiera buenas herramientas de ORM para el desarrollo de Android?
  • Operador '! =' No se puede aplicar a los operandos de tipo 'Tarea' e 'int'
  • Necesita un buen método para cambiar (SQLite) tipo de datos de columna
  • ¿Cómo comprobar si el valor ya existe en la base de datos android sqlite?
  • Consulta SQLite que contiene caracteres especiales
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.