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)
            }
          }
        })
      })
    }
  })
}
相关推荐
IT_陈寒2 分钟前
JavaScript的this坑人实录,这次我真的记下来了
前端·人工智能·后端
开开心心就好1 小时前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
PedroQue993 小时前
0.8.2 新增 backFallback 配置,无 tabbar 页返回无忧
前端·uni-app
淡漠的蓝精灵3 小时前
web.py:一个简单到极致的 Python Web 框架
开发语言·前端·python·其他
开开心心就好4 小时前
竖式除法出题工具,整除余数混合模式
运维·服务器·前端·javascript·ocr·perl·1024程序员节
feasibility.4 小时前
世界模型WSM技术解读:SLAM内化为具身智能的状态记忆,纯RGB机器人导航反超RGB-D
人工智能·机器人·aigc·slam·导航·具身智能·世界模型
起个名字费劲死了4 小时前
Halcon学习一:骰子识别
前端·python·学习
大江东去浪淘尽千古风流人物4 小时前
【HexVIO】DSP卸载双目惯性VIO:Hexagon向量化前端与单帧融合调度深度解析
前端·状态模式·slam·dsp·vio·hexagon·移动端加速
其实防守也摸鱼4 小时前
Chrome 扩展安全攻防实录:从攻击面到防御实践
开发语言·前端·网络·chrome·安全·web安全·php
web打印社区4 小时前
Lodop排障总纲-常见报错一张表
开发语言·前端·javascript·chrome·websocket