osmdroid是手机地图开发者们的一个福音,但是国内资源不是太多 关于osmdroid的教程更是少之又少,我就把我自学过程中遇到的问题以及解决的方案写出来,大家一起讨论学习。
可以运行查看基础的功能(比较全面),osmdroid-android里面是源码
想下载5.6.3的jar包的话到
osmdroid-android-5.6.3.jar
个地方:
如果是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)