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)
            }
          }
        })
      })
    }
  })
}
相关推荐
jonyleek2 小时前
独立租户,统一底座:基于Vue3打造的JVS开源多租户框架设计与实现
低代码·前端框架·开源·vue·软件开发·轻应用
顾安r5 小时前
11.8 脚本网页 星际逃生
c语言·前端·javascript·flask
Hello.Reader5 小时前
Data Sink定义、参数与可落地示例
java·前端·网络
im_AMBER6 小时前
React 17
前端·javascript·笔记·学习·react.js·前端框架
谷歌开发者7 小时前
Web 开发指向标 | Chrome 开发者工具学习资源 (六)
前端·chrome·学习
一晌小贪欢7 小时前
【Html模板】电商运营可视化大屏模板 Excel存储 + 一键导出(已上线-可预览)
前端·数据分析·html·excel·数据看板·电商大屏·大屏看板
发现你走远了7 小时前
连接模拟器网页进行h5的调试(使用Chrome远程调试(推荐)) 保姆级图文
前端·chrome
街尾杂货店&8 小时前
css - 实现三角形 div 容器,用css画一个三角形(提供示例源码)简单粗暴几行代码搞定!
前端·css
顺凡8 小时前
删一个却少俩:Antd Tag 多节点同时消失的原因
前端·javascript·面试
小白路过8 小时前
CSS transform矩阵变换全面解析
前端·css·矩阵