osmdroid 离线地图加载

来源:互联网 发布:淘宝默认邮箱 编辑:程序博客网 时间:2024/06/09 16:01

       osmdroid是手机地图开发者们的一个福音,但是国内资源不是太多 关于osmdroid的教程更是少之又少,我就把我自学过程中遇到的问题以及解决的方案写出来,大家一起讨论学习

一、首先下载问题

      想要下载官方的实例程序、以及源码、最新版本、基础教程、API文档都可以在osmdroid  github官网下载                       https://github.com/osmdroid/osmdroid 官网首页
相关文档,以及jar包,都可以在官网相关链接中打开,将项目push到本地后 官方提供了一个入门例子OpenStreetMapViewer

可以运行查看基础的功能(比较全面),osmdroid-android里面是源码

想下载5.6.3的jar包的话到

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文件的话必须注意需要使用符合osmdroid 的sqlite文件,大家可以下载sqlite可视化工
具查看数据表结构 ,我抓取得离线sqlite包:
china.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)


原创粉丝点击