uniapp打开导航软件并定位到目标位置的实现

javascript 复制代码
/**
 * 打开导航
 * @param location 经纬度(例如:"117.214713,39.116884")
 * @param address 地址
 */
export function mapNavigation(location, address) {
  const locationArr = location.split(',')
  const longitude = locationArr[0]
  const latitude = locationArr[1]
  let url = '' // app url
  let webUrl = '' // web url 用来为用户未安装导航软件时打开浏览器所使用url
  plus.nativeUI.actionSheet({ // 选择菜单
    title: '选择地图应用',
    cancel: '取消',
    buttons: [{
      title: '高德地图'
    }, {
      title: '百度地图'
    }] // 可选的地图类型
  }, (e) => {
    // 判断用户选择的地图
    switch (e.index) {
      // 下面是拼接url,不同系统以及不同地图都有不同的拼接字段
      case 1: // 打开高德地图
        if (plus.os.name == 'Android') { // 安卓
          url =
              `androidamap://viewMap?sourceApplication=appname&poiname=${address}&lat=${latitude}&lon=${longitude}&dev=0`
        } else { // 苹果
          url =
              `iosamap://viewMap?sourceApplication=applicationName&poiname=${address}&lat=${latitude}&lon=${longitude}&dev=0`
        }
        webUrl =
            `https://uri.amap.com/marker?position=${longitude},${latitude}&name=${address}&src=mypage&coordinate=gaode`
        break
      case 2: // 打开百度地图
        if (plus.os.name == 'Android') { // 安卓
          url =
              `baidumap://map/marker?location=${latitude},${longitude}&title=${address}&content=${address}&src=andr.baidu.openAPIdemo&coord_type=gcj02`
        } else { // 苹果
          url =
              `iosamap://map/marker?location=${latitude},${longitude}&title=${address}&content=${address}&src=ios.baidu.openAPIdemo&coord_type=gcj02`
        }
        webUrl =
            `http://api.map.baidu.com/marker?location=${latitude},${longitude}&title=${address}&content=${address}&output=html&src=webapp.baidu.openAPIdemo`
        break
    }
    // 如果选中
    if (url != '') {
      url = encodeURI(url)
      // 打开 app 导航
      plus.runtime.openURL(url, () => {
        // 毕竟用户可能没有安装app但一定安装的有浏览器
        // 如果失败则说明未安装 直接 打开网页版进行导航
        let chooseMap = ''
        if (e.index == 1) {
          chooseMap = '高德地图'
        } else if (e.index == 2) {
          chooseMap = '百度地图'
        } else {
          chooseMap = '腾讯地图'
        }
        uni.showModal({
          title: '提示',
          content: '检测到您本机暂未安装' + chooseMap + '应用,是否要选择使用浏览器打开?',
          confirmText: '确定',
          cancelText: '取消',
          showCancel: true,
          success: function(res) {
            if (res.confirm) {
              plus.runtime.openURL(webUrl)
            }
          }
        })
      })
    }
  })
}
相关推荐
智航GIS11 分钟前
10.4 Selenium:Web 自动化测试框架
前端·python·selenium·测试工具
前端工作日常20 分钟前
我学习到的A2UI概念
前端
徐同保1 小时前
为什么修改 .gitignore 后还能提交
前端
一只小bit1 小时前
Qt 常用控件详解:按钮类 / 显示类 / 输入类属性、信号与实战示例
前端·c++·qt·gui
Mr -老鬼1 小时前
前端静态路由与动态路由:全维度总结与实践指南
前端
颜酱2 小时前
前端必备动态规划的10道经典题目
前端·后端·算法
wen__xvn2 小时前
代码随想录算法训练营DAY10第五章 栈与队列part01
java·前端·算法
大怪v3 小时前
前端佬们!!AI大势已来,未来的上限取决你的独特气质!恭请批阅!!
前端·程序员·ai编程
Mr -老鬼3 小时前
功能需求对前后端技术选型的横向建议
开发语言·前端·后端·前端框架
qq_406176144 小时前
关于JavaScript中的filter方法
开发语言·前端·javascript·ajax·原型模式