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

Ayu*_*rma 8 sqlite maps android osmdroid

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

请建议我.

提前致谢.

Pio*_*otr 22

Osmdroid中的地图图块由地图图块提供者提供.Osmdroid使用的默认tile提供程序是MapTileProviderBasic.此提供程序扩展了MapTileProviderArray,这意味着它是一些其他tile提供程序的数组 - 当请求tile时,这些tile提供程序将被逐个询问tile图像,直到其中一个提供它.看一下构造函数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);
}
Run Code Online (Sandbox Code Playgroud)

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

  • MapTileFilesystemProvider - 从文件系统(SD卡目录)提供切片
  • MapTileFileArchiveProvider - 从文件系统中的存档提供切片
  • MapTileDownloader - 通过从Internet下载(例如从OSM服务器)提供磁贴

因此,MapTileProviderBasic首先在文件系统中查找给定的磁贴,如果磁贴不可用,则它在归档文件中查找它,如果它不可用,则再次从Internet下载磁贴.

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

创建自己的磁贴提供程序后,您应该使用它而不是默认的.地图图块提供程序附加到MapView.一些施工人员MapView采取MapTileProviderBase作为一个参数-你可以用它们的一个附加自己的供应商.