在地图应用相关的开发中,经常会应用到打开第三方地图应用,并在打开的地图上显示标注信息,本文将具体说明目前国内三大地图:百度地图、高德地图、腾讯地图的具体实现效果。先看下本文中效果在美团
本文实现的主要就是上图中的其他地图功能。点击其他地图,跳转本机安装的地图应用上,支持百度、高德和腾讯地图。
判断地图是否安装
首先,我们需要先判断本地是否安装地图类应用,判断方法如下:
/**
* 检测地图应用是否安装
*
* @param context
* @param packagename
* @return
*/
public static boolean checkMapAppsIsExist(Context context, String packagename) {
PackageInfo packageInfo;
try {
packageInfo = context.getPackageManager().getPackageInfo(packagename, 0);
} catch (Exception e) {
packageInfo = null;
e.printStackTrace();
}
if (packageInfo == null) {
return false;
} else {
return true;
}
}
//百度地图应用包名:"com.baidu.BaiduMap"
//高德地图应用包名:"com.autonavi.minimap"
//腾讯地图应用包名:"com.tencent.map"
本文中对是否安装应用做了方法抽取,判断地图应用是否安装调用该方法即可。
第三方地图的跳转
根据上文中判断出的本机地图类型,跳转到指定的地图应用,接下来,我们根据官方文档,依次实现第三方地图应用的调用。说明,本文是基于百度地图坐标系来实现,所以当使用高德地图和百度地图时,需要进行坐标的转换。
1.百度地图调用
由于我们应用中使用的是百度系坐标,所以坐标无需做单独处理。先看下百度官方文档的地图调起URI API的说明,官方文档地址:http://lbsyun.baidu.com/index.php?title=uri/api/android
该API接口能实现图区、搜索、导航等功能,本文主要展示图区功能中的自定义打点功能:
具体代码如下所示:
// shopItem为我们封装的店铺信息类,封装了店铺名称和坐标等信息
Intent intent_baidumap = new Intent();
intent_baidumap.setData(Uri.parse("baidumap://map/marker?location=" + shopItem.getLatitude() + "," + shopItem.getLongitude() + "&title=" + shopItem.getStoreName() + "&content=" + shopItem.getCategoryTitle() + "&traffic=on&src=andr.baidu.openAPIdemo"));
startActivity(intent_baidumap);
2.高德地图调用
在使用高德地图之前,我们需要对我们的坐标进行转换,本文使用百度地图API提供的方法来进行转换,具体的转换方法有两种:WEB 服务API:http://lbsyun.baidu.com/index.php?title=webapi/guide/changeposition 第二种是Android SDK内封装API :http://lbsyun.baidu.com/index.php?title=androidsdk/guide/tool/coordinate 通过这两个方法,我们可以将百度坐标系(BD09坐标)转换为高德或腾讯坐标系(GCJ02坐标)。
坐标转换之后,接下来,我们看高德地图的调用方法:
首先,我们还是还先查找高德地图相关API接口:https://lbs.amap.com/api/amap-mobile/guide/android/marker,在开发文档中,有个地图标注功能,如下所示:
我们同样来演示高德地图的标注功能:
// shopItem为我们封装的店铺信息类,封装了店铺名称和坐标等信息 desCoord是我们根据shopItem中坐标转换后的坐标信息
Intent intent_gdmap = new Intent();
intent_gdmap.setAction("android.intent.action.VIEW");
intent_gdmap.setPackage("com.autonavi.minimap");
intent_gdmap.addCategory("android.intent.category.DEFAULT");
intent_gdmap.setData(Uri.parse("androidamap://viewMap?sourceApplication=testDemo&poiname=" + shopItem.getStoreName() + "&lat=" + desCoord.latitude + "&lon=" + desCoord.longitude + "&dev=0"));
startActivity(intent_gdmap);
3.腾讯地图调用
腾讯地图的调用,我们同样需要先进行坐标的转换,获取GCJ02的坐标信息,然后查看官方API文档:http://lbs.qq.com/uri_v1/guide-mobile-poiMarker.html 中的地点标注相关内容:
具体的调用方法:
// shopItem为我们封装的店铺信息类,封装了店铺名称和坐标等信息 desCoord是我们根据shopItem中坐标转换后的坐标信息
Intent intent_txmap = new Intent();
intent_txmap.setData(Uri.parse("qqmap://map/marker?marker=coord:"+desCoord.latitude+","+desCoord.longitude+";title:"+shopItem.getStoreName()+";addr:&referer=OB4BZ-D4W3U-B7VVO-4PJWW-6TKDJ-WPB77"));
startActivity(intent_txmap);
至此,应用内调起第三方地图应用的相关内容就介绍完了,如有问题,欢迎留言。