Android百度地图开发-个性化地图

最近做了一款app软件,需要接入百度地图,然后要求自定义地图上的文字和图标样式,发现百度地图上有个个性化地图的功能,然后就看了一下,发现也不算难,就是有些地方感觉说的不是很详细。

怎么使用百度地图个性化地图

http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-map/custommap 设置官网的地址

地图上的元素属性生成的json并不需要一个一个敲上去,官网有个工具,因为这个在官网上的没有做太明显的标注,我这里截图,因为我一开始都没有看到有这个工具。

注意:这个工具不太好用,很多属性在编辑工具里面怎么修改,生成的json就是不变,需要自己查下面的元素表,然后在生成的json里面去手动改里面的属性值。

android 自定义路线 android绘制自定义地图_android 自定义路线


android 自定义路线 android绘制自定义地图_官网_02

  1. 从个性化编辑工具里编辑好需要的地图样式,然后下载下来json文件
  2. 将下载下来的文件保存到app项目的assets文件夹中
  3. 调用文件工具类里面这个方法
1. public class FileUtils {
 /**• 设置个性化地图config文件路径
 */
 public static void setMapCustomFile(Context context, String PATH) {
 FileOutputStream out = null;
 InputStream inputStream = null;
 String moduleName = null;
 try {
 //“customConfigdir/” +
 inputStream = context.getAssets()
 .open(PATH);
 byte[] b = new byte[inputStream.available()];
 inputStream.read(b);
 moduleName = context.getFilesDir().getAbsolutePath();
 File f = new File(moduleName + “/” + PATH);
 if (f.exists()) {
 f.delete();
 }
 f.createNewFile();
 out = new FileOutputStream(f);
 out.write(b);
 } catch (IOException e) {
 e.printStackTrace();
 } finally {
 try {
 if (inputStream != null) {
 inputStream.close();
 }
 if (out != null) {
 out.close();
 }
 } catch (IOException e) {
 e.printStackTrace();
 }
 }
 MapView.setCustomMapStylePath(moduleName + “/” + PATH);}
 }
  1. 最好在Application里面调用
1. public class MyApplication extends Application {
 /**• 初始化方法
 */
 @Override
 public void onCreate() {
 super.onCreate();
 baiduMapCutm();
 //在使用SDK各组件之前初始化context信息,传入ApplicationContext
 //注意该方法要再setContentView方法之前实现
 SDKInitializer.initialize(getApplicationContext());}
 private void baiduMapCutm() {
 这个方法第二个参数为assets文件里面保存的json文件,如果有后缀名(如text.json)
 怕你看不到我这个描述,我就没有注释,自己注释一下我的描述吧。
 FileUtils.setMapCustomFile(getApplicationContext(), “text.json”);}
 }
  1. Activity里面如何做我就不写了,这个官网写的很清楚了,定位功能,在清单文件配置权限不起作用,或者发现等位不准,一直都在大海上,可能就需要你加上运行时权限了;
1. /**
• 检查定位权限方法
 */
 private void checkPermession() {
 //下面是动态获取权限代码
 //如果 API level 是大于等于 23(Android 6.0) 时
 //判断是否具有权限
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
 //判断是否需要向用户解释为什么需要申请该权限
 if (ActivityCompat.shouldShowRequestPermissionRationale(this,
 Manifest.permission.ACCESS_COARSE_LOCATION)) {
 Toast.makeText(this, “百度地图定位需要打开定位权限”, Toast.LENGTH_SHORT).show();
 }
 //请求权限
 ActivityCompat.requestPermissions(this,
 new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
 }}
  1. 启动Activity的时候调用MapView.setMapCustomEnable(true);就OK了
  2. 注意,关键点来了:就是在页面销毁的时候一定要关闭个性化地图,不然反复打开几次应用一定会报错。
  3. 在onDestroy方法里面调用MapView.setMapCustomEnable(false);就OK了