四、关于osmdroid地图源的疑问

来源:互联网 发布:淘宝网雪纺女装 编辑:程序博客网 时间:2024/05/19 13:45

关于osmdroid地图源的疑问

1、能否一次使用多个tile source?

可以。一个案例如下:

  • Weather
  • Grid lines
  • Data that’s too complex to draw or that’s drawn on a server
  • Elevation data
  • Tile sources that use transparency

    1. 配置基本图层

      mMapView.setTileSource(TileSourceFactory.USGS_TOPO);

    2. 创建新的瓦片提供者并连接瓦片源

      apTileProviderBasic provider = new MapTileProviderBasic(getActivity(), new OnlineTileSourceBase(“MGRS”,0,15,256,”PNG”, new String[0]) {
      @Override
      public String getTileURLString(MapTile aTile) {
      BoundingBox bbox=tile2boundingBox(aTile.getX(), aTile.getY(), aTile.getZoomLevel());
      String baseUrl =”http://egeoint.nrlssc.navy.mil/arcgis/rest/services/usng/USNG_93/MapServer/export?dpi=96&transparent=true&format=png24&bbox=”+bbox.west+”,”+bbox.south+”,”+bbox.east+”,”+bbox.north+”&size=256,256&f=image”;
      return baseUrl;
      }
      });

Note:tile2boundingBox方法来自于OSM的Slippy Map wiki入口。用于转换瓦片坐标到经纬度边界。

  1. 创建瓦片图层

    TilesOverlay layer = new TilesOverlay(provider, getActivity());
  2. 设置背景和载入线为透明

    layer.setLoadingBackgroundColor(Color.TRANSPARENT);layer.setLoadingLineColor(Color.TRANSPARENT);
  3. 将图层添加到视图上

    mMapView.getOverlays().add(layer);

2、能否改变osmdroid查询地图缓存(archives)的位置?

可以,这取决于你你是用的osmdroid的版本。

当版本老于5.6时:OpenStreetMapTileProviderConstants.java

详见setCachePath和TILE_PATH_BASE。虽然这个类叫常量,但许多字段可以重写,你可以按自己的意愿进行设置。

当版本为5.6或更新时:Configuration.java

Configuration.getInstance().set...

3、是否有其他载入瓦片的机制?

有如下方式:

  • Asset,你可以放zip格式的缓存在assets文件夹中
  • 本地文件系统(zip、sqlite等缓存文件)
  • 网络资源缓存-默认在/sdcard/osmdroid/tiles/cache.db下
  • 网络资源-=需要什么下载什么

4、如何使用离线瓦片缓存(archives)?

存储位置

复制你的瓦片数据到osmdroid路径中(默认为/sdcard/osmdroid):

/sdcard/osmdroid/                 myZippedArchive.zip                 myOsmdroidDatabase.sqlite                myMBTiles.mbtile                myGEMF.gemf/sdcard/osmdroid/tiles/                     cache.db (this is used for downloaded and cached tiles)

选择瓦片提供者

默认的Map Tile Provider自动扫描osmdroid基本路径中的瓦片缓存(Archives)以及Assets文件夹,最后是在线资源

如果你无感的话,也可以使用OfflineOnlyTileProvider。

当使用的是自己的缓存格式时,你可以实现IArchiveFile接口,然后注册你的实现到ArchiveFileFactory。