需求:

点击店铺位置,弹出popupwindow进行选择

如果该手机安装了所选的地图APP,就跳转到该地图APP中

如果该手机未安装所选的地图APP,就提示

MapUtil工具类
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import java.io.File;/*** @ClassName MapUtil* @Description 地图导航:可转换坐标,可判断是否安装*/public class MapUtil {public static final String PN_GAODE_MAP = "com.autonavi.minimap";// 高德地图包名public static final String PN_BAIDU_MAP = "com.baidu.BaiduMap"; // 百度地图包名public static final String PN_TENCENT_MAP = "com.tencent.map"; // 腾讯地图包名/*** 检查地图应用是否安装* @return*/public static boolean isGdMapInstalled(){return isInstallPackage(PN_GAODE_MAP);}public static boolean isBaiduMapInstalled(){return isInstallPackage(PN_BAIDU_MAP);}public static boolean isTencentMapInstalled(){return isInstallPackage(PN_TENCENT_MAP);}private static boolean isInstallPackage(String packageName) {return new File("/data/data/" + packageName).exists();}/*** 百度转高德* @param bd_lat* @param bd_lon* @return*/public static double[] bdToGaoDe(double bd_lat, double bd_lon) {double[] gd_lat_lon = new double[2];double PI = 3.14159265358979324 * 3000.0 / 180.0;double x = bd_lon - 0.0065, y = bd_lat - 0.006;double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * PI);double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * PI);gd_lat_lon[0] = z * Math.cos(theta);gd_lat_lon[1] = z * Math.sin(theta);return gd_lat_lon;}/*** 高德、腾讯转百度* @param gd_lon* @param gd_lat* @return*/private static double[] gaoDeToBaidu(double gd_lon, double gd_lat) {double[] bd_lat_lon = new double[2];double PI = 3.14159265358979324 * 3000.0 / 180.0;double x = gd_lon, y = gd_lat;double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * PI);double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * PI);bd_lat_lon[0] = z * Math.cos(theta) + 0.0065;bd_lat_lon[1] = z * Math.sin(theta) + 0.006;return bd_lat_lon;}//    /**
//     * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换
//     * 即 百度 转 谷歌、高德
//     *
//     * @param latLng
//     * @returns
//     *
//     * 使用此方法需要下载导入百度地图的BaiduLBS_Android.jar包
//     */
//    public static LatLng BD09ToGCJ02(LatLng latLng) {
//        double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
//        double x = latLng.longitude - 0.0065;
//        double y = latLng.latitude - 0.006;
//        double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
//        double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
//        double gg_lat = z * Math.sin(theta);
//        double gg_lng = z * Math.cos(theta);
//        return new LatLng(gg_lat, gg_lng);
//    }
//
//    /**
//     * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
//     * 即谷歌、高德 转 百度
//     *
//     * @param latLng
//     * @returns
//     *
//     * 需要百度地图的BaiduLBS_Android.jar包
//     */
//    public static LatLng GCJ02ToBD09(LatLng latLng) {
//        double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
//        double z = Math.sqrt(latLng.longitude * latLng.longitude + latLng.latitude * latLng.latitude) + 0.00002 * Math.sin(latLng.latitude * x_pi);
//        double theta = Math.atan2(latLng.latitude, latLng.longitude) + 0.000003 * Math.cos(latLng.longitude * x_pi);
//        double bd_lat = z * Math.sin(theta) + 0.006;
//        double bd_lng = z * Math.cos(theta) + 0.0065;
//        return new LatLng(bd_lat, bd_lng);
//    }/*** 打开高德地图导航功能* @param context* @param slat 起点纬度* @param slon 起点经度* @param sname 起点名称 可不填(0,0,null)* @param dlat 终点纬度* @param dlon 终点经度* @param dname 终点名称 必填*/public static void openGaoDeNavi(Context context,double slat, double slon, String sname, double dlat, double dlon, String dname){String uriString = null;StringBuilder builder = new StringBuilder("amapuri://route/plan?");if (slat != 0) {builder.append("sname=").append(sname).append("&slat=").append(slat).append("&slon=").append(slon);}builder.append("&dlat=").append(dlat).append("&dlon=").append(dlon).append("&dname=").append(dname).append("&dev=0").append("&t=0");uriString = builder.toString();Intent intent = new Intent(Intent.ACTION_VIEW);intent.setPackage(PN_GAODE_MAP);intent.setData(Uri.parse(uriString));context.startActivity(intent);}/*** 打开腾讯地图* params 参考http://lbs.qq.com/uri_v1/guide-route.html** @param context* @param slat 起点纬度* @param slon 起点经度* @param sname 起点名称 可不填(0,0,null)* @param dlat 终点纬度* @param dlon 终点经度* @param dname 终点名称 必填* 驾车:type=drive,policy有以下取值0:较快捷1:无高速2:距离policy的取值缺省为0* &from=" + dqAddress + "&fromcoord=" + dqLatitude + "," + dqLongitude + "*/public static void openTencentMap(Context context, double slat, double slon, String sname, double dlat, double dlon, String dname) {String uriString = null;StringBuilder builder = new StringBuilder("qqmap://map/routeplan?type=drive&policy=0&referer=wuczh");if (slat != 0) {builder.append("&from=").append(sname).append("&fromcoord=").append(slat).append(",").append(slon);}builder.append("&to=").append(dname).append("&tocoord=").append(dlat).append(",").append(dlon);uriString = builder.toString();Intent intent = new Intent(Intent.ACTION_VIEW);intent.setPackage(PN_TENCENT_MAP);intent.setData(Uri.parse(uriString));context.startActivity(intent);}/*** 打开百度地图导航功能(默认坐标点是高德地图,需要转换)* @param context* @param slat 起点纬度* @param slon 起点经度* @param sname 起点名称 可不填(0,0,null)* @param dlat 终点纬度* @param dlon 终点经度* @param dname 终点名称 必填*/public static void openBaiDuNavi(Context context,double slat, double slon, String sname, double dlat, double dlon, String dname){String uriString = null;//终点坐标转换
//        此方法需要百度地图的BaiduLBS_Android.jar包
//        LatLng destination = new LatLng(dlat,dlon);
//        LatLng destinationLatLng = GCJ02ToBD09(destination);
//        dlat = destinationLatLng.latitude;
//        dlon = destinationLatLng.longitude;double destination[] = gaoDeToBaidu(dlat, dlon);dlat = destination[0];dlon = destination[1];StringBuilder builder = new StringBuilder("baidumap://map/direction?mode=driving&");if (slat != 0){//起点坐标转换//            LatLng origin = new LatLng(slat,slon);
//            LatLng originLatLng = GCJ02ToBD09(origin);
//            slat = originLatLng.latitude;
//            slon = originLatLng.longitude;double[] origin = gaoDeToBaidu(slat, slon);slat = origin[0];slon = origin[1];builder.append("origin=latlng:").append(slat).append(",").append(slon).append("|name:").append(sname);}builder.append("&destination=latlng:").append(dlat).append(",").append(dlon).append("|name:").append(dname);uriString = builder.toString();Intent intent = new Intent(Intent.ACTION_VIEW);intent.setPackage(PN_BAIDU_MAP);intent.setData(Uri.parse(uriString));context.startActivity(intent);}
}

使用方式

我这里的经纬度以及目的地是写死的

    /*** 目的地名*/String locationName = "杭州市西湖文化广场";/***  经度*/Double longitude = 120.162979;/*** 纬度*/Double latitude = 30.276701;

选择地图APP 的点击事件

            //高德地图case R.id.pop_map_GaoDe:openGaoDeMap();break;//腾讯地图case R.id.pop_map_TengXun:openTencentMap();break;//百度地图case R.id.pop_map_BaiDu:openBaiDuMap();break;

对应的方法

    //高德private void openGaoDeMap() {if (MapUtil.isGdMapInstalled()) {MapUtil.openGaoDeNavi(this, 0, 0, null, latitude, longitude, locationName);} else {//这里必须要写逻辑,不然如果手机没安装该应用,程序会闪退,这里可以实现下载安装该地图应用ToastUtils.getInstance(this).show("尚未安装高德地图",1000);}}//百度private void openBaiDuMap() {if (MapUtil.isBaiduMapInstalled()) {MapUtil.openBaiDuNavi(this, 0, 0, null, latitude, longitude, locationName);} else {//这里必须要写逻辑,不然如果手机没安装该应用,程序会闪退,这里可以实现下载安装该地图应用ToastUtils.getInstance(this).show("尚未安装百度地图",1000);}}//腾讯private void openTencentMap() {if (MapUtil.isTencentMapInstalled()) {MapUtil.openTencentMap(this, 0, 0, null, latitude, longitude, locationName);} else {//这里必须要写逻辑,不然如果手机没安装该应用,程序会闪退,这里可以实现下载安装该地图应用ToastUtils.getInstance(this).show("尚未安装腾讯图",1000);}}

Android 跳转到高德、百度、腾讯地图进行导航相关推荐

  1. 微信公众号h5实现高德/百度/腾讯地图导航

    最近做了个微信公众号h5需求是这样的 1.点击地图进入地图详情 2.地图详情包括开始导航与地图(高德,百度,腾讯)选择,点击开始导航自动跳转该地图app 首先先理一下功能: 1:第一张图是直接显示坐标 ...

  2. vue 高德地图 不同区域显示不同颜色_老司机频繁掉沟里,高德百度腾讯地图导航到底该怎么选?...

    导航类app发展至今,基本形成了三分天下的局面:高德.百度.腾讯,然而事实真的是三家平分天下么?三款不同的地图导航软件各有优缺点,至于什么路况选择哪个软件导航似乎更是一门玄学? 很多人想知道高德地图. ...

  3. android 跳转腾讯地图导航,Android 跳转到百度、高德、腾讯地图导航

    项目中遇到的一个需求,跳转外部App进行步行导航.分别是百度.高德.腾讯. 东西不难但是每次都要去官方文档找(有时候会更新一些字段). 所以在此做下记录和分享. 腾讯地图 try { LatLng l ...

  4. android 通过scheme唤起百度、高德、腾讯地图路线规划功能,唤起滴滴出行打车功能

    import android.content.Context; import android.content.Intent; import android.net.Uri;import java.ut ...

  5. [html] 如何使用H5唤起原生地图APP(百度、高德、腾讯地图等)

    [html] 如何使用H5唤起原生地图APP(百度.高德.腾讯地图等) <iframe src="sinaweibo://qrcode"> 或 <a href=& ...

  6. 高德百度腾讯之间经纬度的转换

    高德百度腾讯之间经纬度的转换 文章目录 高德百度腾讯之间经纬度的转换 前言 一.正文 1.直接上代码 结果图 总结 前言 提示:这里可以添加本文要记录的大概内容: 常用地图转换工具类(各个地图API采 ...

  7. server.transfer 无法跳转页面_H5 腾讯地图无法导航

    uni-app 打包H5腾讯地图无法导航 前言: 最近几天用uni-app开发安卓和iOS应用,打包成APP安装包后,APP内做地图导航没有问题,APP内使用的是高德地图:但是打包成为H5页面后,运行 ...

  8. uniapp-微信小程序使用高德或腾讯地图的导航功能

    1.uniapp 打包成微信小程序后配置app.json文件 //开发过程中,需要在unpackage>>dist>>dev>>mp-weixin>>a ...

  9. 如何使用矢量图形数据导出可以在高德百度等互联网地图上加载的JSON格式数据

    本文以广东省行政区划为例介绍如何使用矢量图形数据导出可以在高德百度等互联网地图上加载的省级行政区划边界JSON数据. 第一步用GIS相关工具,如ArcGIS.MapGIS.QGIS等工具加载广东省域的 ...

  10. uniapp 小程序唤醒高德地图或腾讯地图进行导航

    uniapp 小程序唤醒高德地图或腾讯地图进行导航 methods: {mapFun(){uni.openLocation({latitude: 29.58832234563708,//纬度longi ...

最新文章

  1. 全面覆盖CV任务!这个国产“书生”只学10%内容,性能就超越同行
  2. 大数据WEB工具Hue
  3. java基础系列:集合基础(3)
  4. Highcharts数据表示(3)
  5. 35 岁程序员的独家面试经历
  6. 如何选择最佳云托管服务提供商
  7. 计算混响时间的意义_混响时间的测量方法和步骤
  8. 使用html+css实现-静态开源案例-品优购
  9. 7个人生工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理、二八原则
  10. 技术沙龙之IOS相机管理
  11. vue 临时会话sessionStorage
  12. MacOS 下恢复使用谷歌浏览器翻译功能
  13. 7 款基于 HTML5 Canvas 的超炫 3D 动画效果
  14. “躲不开”的科技革命,第一季:远离舒适区!
  15. 小熊维尼项目冲刺 第二天
  16. 岁月温柔-6 出院后忐忑不安的妈妈
  17. 晨风机器人插件编辑器_晨风机器人文本编辑器
  18. 【Windows编程】windows窗口创建过程详解
  19. android空指针异常Attempt to invoke virtual method
  20. 2018中小企业终端管理行业趋势报告

热门文章

  1. Rockchip WIFI 配置说明
  2. SparkSql之电影案例SQL编写
  3. R语言使用wilcox.test函数执行wilcox符号秩检验获取总体中位数(median)的置信区间(默认输出结果包括95%置信水平的置信区间)
  4. Makdown编辑器哪个好
  5. WPF MVVM设计模式下 相同Xaml绑定不同ViewModel问题
  6. 使用ONNXRuntime部署阿里达摩院开源DAMO-YOLO目标检测,一共包含27个onnx模型(代码开源)...
  7. IOS error:Images.xcassets: error: ERROR: Each TDDistiller instance can be distilled only one time!
  8. spring用到的设计模式
  9. wps表格宏被禁用如何解禁_(wps表格怎么设置宏)为什么每次打开excel文件都要提示启用或者禁用宏?...
  10. tkinter 小说编写器,文本编辑器,小说阅读器