android 调起第三方地图

 

在地图应用相关的开发中,经常会应用到打开第三方地图应用,并在打开的地图上显示标注信息,本文将具体说明目前国内三大地图:百度地图、高德地图、腾讯地图的具体实现效果。先看下本文中效果在美团 
 
本文实现的主要就是上图中的其他地图功能。点击其他地图,跳转本机安装的地图应用上,支持百度、高德和腾讯地图。

判断地图是否安装

首先,我们需要先判断本地是否安装地图类应用,判断方法如下:

    /**
     * 检测地图应用是否安装
     *
     * @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);


 
至此,应用内调起第三方地图应用的相关内容就介绍完了,如有问题,欢迎留言。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值