关于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
配置基本图层
mMapView.setTileSource(TileSourceFactory.USGS_TOPO);
创建新的瓦片提供者并连接瓦片源
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入口。用于转换瓦片坐标到经纬度边界。
创建瓦片图层
TilesOverlay layer = new TilesOverlay(provider, getActivity());
设置背景和载入线为透明
layer.setLoadingBackgroundColor(Color.TRANSPARENT); layer.setLoadingLineColor(Color.TRANSPARENT);
将图层添加到视图上
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。