版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25073789/article/details/77746339
osmdroid是手机地图开发者们的一个福音,但是国内资源不是太多 关于osmdroid的教程更是少之又少,我就把我自学过程中遇到的问题以及解决的方案写出来,大家一起讨论学习。
一、首先下载问题
想要下载官方的实例程序、以及源码、最新版本、基础教程、API文档都可以在osmdroid github官网下载 https://github.com/osmdroid/osmdroid 官网首页
相关文档,以及jar包,都可以在官网相关链接中打开,将项目push到本地后 官方提供了一个入门例子OpenStreetMapViewer
可以运行查看基础的功能(比较全面),osmdroid-android里面是源码
想下载5.6.3的jar包的话到
二、离线地图加载
首先了解osmdroid支持的离线地图格式,官方也有介绍官方离线地图介绍 相关入门介绍里面都有,这里需要注意的有以下几
个地方:
如果是zip包的话需要放在sdcard/osmdroid目录下,调用zip包是比较简单的(一般应该不会使用这种方法,占用内存太大)
Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); map = (MapView) findViewById(R.id.map); map.setTileSource(new XYTileSource("YOUR MAP SOURCE", 0, 18, 256, ".jpg", new String[] {})); //.... map.setUseDataConnection(false); //optional, but a good way to prevent loading from the network and test your zip loading. IMapController mapController = map.getController(); mapController.setZoom(_A ZOOM LEVEL YOU HAVE IN YOUR ZIP_); GeoPoint startPoint = new GeoPoint(_POSITION SOMEWHERE INSIDE YOUR MAP_); mapController.setCenter(startPoint); }
具查看数据表结构 ,我抓取得离线sqlite包:官方推荐使用的是sqlite文件,引用sqlite文件的话必须注意需要使用符合osmdroid 的sqlite文件,大家可以下载sqlite可视化工
关键代码:
String strFilepath = Environment.getExternalStorageDirectory().getPath()+"/osmdroid/china.sqlite";
File exitFile = new File(strFilepath);
String fileName = "china";
if(!exitFile.exists()){
mMapView.setTileSource(TileSourceFactory.MAPNIK);
}else {
if(ArchiveFileFactory.isFileExtensionRegistered(fileName)){
try {
OfflineTileProvider tileProvider = new OfflineTileProvider(new SimpleRegisterReceiver(this),new File[]{exitFile});
mMapView.setTileProvider(tileProvider);
String source = "";
IArchiveFile[] archives = tileProvider.getArchives();
if (archives.length>0){
Set<String> tileSouce = archives[0].getTileSources();
if(!tileSouce.isEmpty()){
source = tileSouce.iterator().next();
mMapView.setTileSource(FileBasedTileSource.getSource(source));
}else {
mMapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
}
}else
mMapView.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
} catch (Exception e) {
e.printStackTrace();
}
}
}
// 关闭网络连接
mMapView.setUseDataConnection(false)