如何使用osmdroid通过将地图图块图像保存到sqlite数据库来实现离线地图?

我也有一个需要在离线模式下显示地图数据的项目。 我已经使用了OpenStreet地图。 我已经保存了地图图像(瓦片),每个瓦片都被数据库中的瓦片引用。 我想从数据库访问这些地图图块,并相应地使用它们。

请build议我。

提前致谢。

Solutions Collecting From Web of "如何使用osmdroid通过将地图图块图像保存到sqlite数据库来实现离线地图?"

Osmdroid中的地图图块由地图图块提供者提供。 Osmdroid使用的默认磁贴提供程序是MapTileProviderBasic 。 这个提供者扩展了MapTileProviderArray ,这意味着它是一个其他几个tile提供者的数组 – 当一个tile被请求的时候,这些tile提供者一个接一个地被问到一个tile图像,直到其中一个提供它。 看看MapTileProviderBasic的构造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); } 

有三个地图块提供程序按以下顺序添加到提供程序数组中:

  • MapTileFilesystemProvider – 提供来自文件系统(SD卡目录)
  • MapTileFileArchiveProvider – 从文件系统中的归档提供切片
  • MapTileDownloader – 通过从互联网下载它们(例如从OSM服务器)

因此, MapTileProviderBasic首先在文件系统中查找给定的图块,如果图块不可用,则会在存档文件中查找该图块,如果该图块不可用,则从Internet下载该图块。

好的,这是默认的机制。 如果要更改此机制以查找存储在数据库中的切片,则可以创build类似于MapTileProviderBasic自己的类。 所以你的类也可以扩展MapTileProviderArray并在构造函数中使用其他提供者。 在Osmdroid中有一个DatabaseFileArchive类,它可能可以帮助你从数据库中读取数据。

创build自己的磁贴提供程序后,您应该使用它而不是默认的提供程序。 Map贴图提供程序附加到MapViewMapView某些构造函数将MapTileProviderBase作为参数 – 您可以使用其中的一个来附加自己的提供程序。

获取离线地图与默认提供程序MapTileProviderBasic一起工作的最简单方法是将您的地图arhive(s)放入OSMDROID_PATH

换句话说,将.zip, .sqlite, .mbtiles.gemf文件下载到osmdroid/目录中。

如果您查看MapTileFileArchiveProvider您会看到它在ArchiveFileFactory调用getArchiveFiles() ,它根据文件扩展名select正确的存档提供程序。