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)
            }
          }
        })
      })
    }
  })
}
相关推荐
2501_91600889几秒前
iOS 26 软件性能测试全流程,启动渲染资源压力对比与优化策略
android·macos·ios·小程序·uni-app·cocoa·iphone
宁雨桥11 分钟前
前端登录加密实战:从原理到落地,守护用户密码安全
前端·安全·状态模式
椒盐螺丝钉24 分钟前
TypeScript类型兼容性
运维·前端·typescript
_JinHao28 分钟前
Cesium Viewer对象详解——Cesium基础笔记(快速入门)
前端·javascript·笔记·3d·webgl
00后程序员张35 分钟前
iOS 26 兼容测试实战,机型兼容、SwiftUI 兼容性改动
android·ios·小程序·uni-app·swiftui·cocoa·iphone
r0ad1 小时前
从痛点到解决方案:为什么我开发了Chrome元素截图插件
前端·chrome
OEC小胖胖1 小时前
连接世界:网络请求 `wx.request`
前端·微信小程序·小程序·微信开放平台
jingling5551 小时前
解决微信小程序真机调试中访问本地接口 localhost:8080 报错
前端·微信小程序·小程序
en-route1 小时前
使用 Flask 构建 Web 应用:静态页面与动态 API 访问
前端·python·flask
IT_陈寒1 小时前
Vite 5年迭代揭秘:3个核心优化让你的项目构建速度提升200%
前端·人工智能·后端