WEB使用VUE3实现地图导航跳转

news2025/1/8 12:41:12

我们在用手机查看网页时可以通过传入经纬度去设置目的地然后跳转到对应的地图导航软件,如果没有下载软件则会跳转到下载界面

注意:

  1. 高德地图是一定会跳转到一个新网页然后去询问用户是否需要打开软件
  2. 百度和腾讯地图是直接调用软件的
  3. 这个方法有缺陷,因为我们判断用户是否下载软件是通过监听用户的行为,判断页面是否发生变化来决定的,但是某些移动操作系统,如iOS,在使用深度链接时可能总是提示用户确认是否打开第三方应用。(此时我们如果不去点击确认打开第三方应用,过两秒后页面也会自动跳转到对应的下载界面)这种行为是由操作系统控制的,可能没有办法绕过它。第三方应用程序的行为也起着作用。如果应用程序不能正确处理深度链接,它可能总是提示用户打开应用程序,即使它已经安装了。

不幸的是,由于这种行为受到移动操作系统和第三方应用的影响,可能没有一个放之四海而皆通的解决方案,这种行为可能会因不同的设备和应用版本而有所不同。当你在应用中实现深度链接时,测试和考虑你所瞄准的特定应用行为是很重要的。

代码

<template>
  <div class="app-container">
    <div>
      <span>南京热河路:</span>
      <el-select
        v-model="form.guestType"
        clearable
        @change="(e) => navigateToMap(form.guestType)"
      >
        <el-option label="高德地图" value="gaode"> </el-option>
        <el-option label="腾讯地图" value="tencent"></el-option>
        <el-option label="百度地图" value="baidu"> </el-option>
      </el-select>
    </div>
  </div>
</template>

<script setup>
import { ref } from "vue";

const data = reactive({
  form: {},
});

const { form } = toRefs(data);

const userLocation = ref({});
const appOpenedFlag = ref(false);

// 获取用户当前位置
function getCurrentLocation() {
  navigator.geolocation.getCurrentPosition((position) => {
    userLocation.value = {
      lat: position.coords.latitude,
      lng: position.coords.longitude,
    };
  });
}

// 生成导航链接
function navigateToMap(type) {
  getCurrentLocation();
  let url = "";
  const destination = "32.088169,118.74247";

  const longitude = 118.74247;
  const latitude = 32.088169;
  const destinationName = "目的地位置";

  switch (type) {
    case "gaode":
      url = `https://uri.amap.com/navigation?to=${longitude},${latitude},${destinationName}&mode=car&policy=2&src=myLocation&coordinate=gaode&callnative=1`;
      break;
    case "baidu":
      url = `baidumap://map/direction?origin=${userLocation.value.lat},${userLocation.value.lng}&destination=${destination}&mode=driving&src=yourAppName`;
      break;
    case "tencent":
      url = `qqmap://map/routeplan?type=drive&fromcoord=${userLocation.value.lat},${userLocation.value.lng}&tocoord=${destination}&referer=yourAppName`;
      break;
  }

  appOpenedFlag.value = false;
  window.location.href = url;

  // 检查用户在打开应用程序后是否返回到网页
  setTimeout(() => {
    if (!appOpenedFlag.value) {
      redirectToDownloadPage(type);
    }
  }, 2000);
}

// 回调函数,用于在应用程序成功打开时设置标志
window.addEventListener("visibilitychange", () => {
  if (document.visibilityState === "visible") {
    appOpenedFlag.value = true;
  }
});

// 重定向到下载页面
function redirectToDownloadPage(type) {
  switch (type) {
    case "gaode":
      window.location.href = "https://www.amap.com/";
      break;
    case "baidu":
      window.location.href = "https://map.baidu.com/";
      break;
    case "tencent":
      window.location.href = "https://map.qq.com/";
      break;
  }
}
</script>

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1030861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Excel打开后关闭就马上跳出 Visual c++ Runtime Error R6025

环境&#xff1a; Win10 专业版 Excel 2016 绿盾加密环境 问题描述&#xff1a; Excel打开后关闭就马上跳出 visual c runtime error R6025 runtime error! program:c:\program files\microsoft office\office14\excle.exe r6025 -pure virtual function call 解决方案…

电脑如何录屏?推荐3个方法

随着电脑技术的不断发展&#xff0c;屏幕录制成为了一项重要的技能&#xff0c;无论是为了制作教育教程、分享游戏成就&#xff0c;还是记录计算机上的重要操作。电脑录屏能够让您捕捉屏幕上的所有活动&#xff0c;这对于培训、演示和内容创作非常有用。在本文中&#xff0c;我…

JAXB(Java Architecture for XML Binding)下载、使用

简介 JAXB&#xff08;Java Architecture for XML Binding&#xff09;就是XML数据绑定的java架构。JAXB可以根据XML Schema生成java类&#xff0c;也能根据java类生成XML Schema&#xff0c;XML数据绑定指定了XML请求和XML响应如何映射成java对象。 JAXB提供了API和工具&…

有了Spring为什么还需要SpringBoot呢

目录 一、Spring缺点分析 二、什么是Spring Boot 三、Spring Boot的核心功能 3.1 起步依赖 3.2 自动装配 一、Spring缺点分析 1. 配置文件和依赖太多了&#xff01;&#xff01;&#xff01; spring是一个非常优秀的轻量级框架&#xff0c;以IOC&#xff08;控制反转&…

WPF中DataGrid控件绑定数据源

步骤 创建数据源&#xff1a;首先&#xff0c;我们需要创建一个数据源&#xff0c;可以是一个集合&#xff08;如List、ObservableCollection等&#xff09;&#xff0c;也可以是一个DataTable对象。数据源中的每个元素代表一行数据。 设置DataGrid的ItemsSource属性&#xff…

el-select的某一项选中后显示id

环境: vue3element-plus 今天在使用elementui的下拉组件的时候发现有一个选项在选中后显示的是id.找了会没看到问题,后来想到会不会是没有设置key的原因(之前看到说vue3可以不用设置key),果然加上key就可以了

电容笔哪个厂家的产品比较好?开学季值得买电容笔

现在&#xff0c;几乎每个人都有一个ipad平板&#xff0c;可以帮助你解决很多工作和学习上的难题&#xff0c;比如工作时的整理文档&#xff0c;做一些简单的PPT&#xff0c;以及在学习上记录笔记等等。所以&#xff0c;用一支好用的电容笔来搭配iPad是非常重要的。在这里&…

【2023华为杯A题】WLAN网络信道接入机制建模(代码、思路.....)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

sed的不同执行方式

1. 命令行执行多条sed命令 1.1 命令行通过多条-e选项 sed -e command1 -e command2 -e command3 匹配root或nobody&#xff0c;或mail&#xff1a; sed -n -e /^root/ p -e /^nobody/ p -e /^mail/p /etc/passwd 1.2 用\换行 Shell的换行符依然有效&#xff0c;这有利于…

【vue】vue+easyPlayer 实现宫格布局及视频播放

由于业务需要&#xff0c;ant-design-vue框架集成easyPlayer.js作为视频播放器。EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、HTTP-FLV、HLS&#xff08;m3u8&#xff09;、WS视频直播与视频点播等多种协议&#xff0c;支持H.264、H.265、AAC等多种音视频编码格…

在线安装qt5.15之后任意版本

下载qt现在安装包&#xff1a; window安装包链接 进入cmd&#xff0c;用命令行打开安装包&#xff0c;并指定组件下载地址&#xff08;这个是关键&#xff0c;之前用的是腾讯镜像&#xff0c;出现了版本灰色无法选中问题&#xff09; .\qt-unified-windows-x64-4.6.1-online…

代码签名:保护你的软件的安全性和完整性

代码签名是一种数字签名技术&#xff0c;用于保护软件的完整性和身份。它通过使用一个密钥对软件代码进行签名&#xff0c;确保代码在下载和安装过程中没有被篡改。代码签名证书是一种数字证书&#xff0c;用于证明代码签名者的身份和代码的完整性。以下是代码签名证书如何保护…

【多思路附源码持续更新】2023年华为杯(中国研究生数学建模)竞赛C题

赛题 若官网拥挤&#xff0c;数据集和赛题下载地址如下&#xff1a; https://download.csdn.net/download/weixin_47723732/88364777 大规模创新类竞赛评审方案研究 现在创新类竞赛很多&#xff0c;其中规模较大的竞赛&#xff0c;一般采用两阶段&#xff08;网评、现场评审&a…

网页编辑软件Whisk mac中文版功能介绍

Whisk for Mac中文版是一款网页编辑器&#xff0c;Whisk mac版具有实时预览&#xff0c;可在您键入时更新。Whisk是您工具包中用于HTML&#xff0c;PHP&#xff0c;CSS和javascript编程的必备应用程序。 Whisk for Mac功能介绍 预览窗格使用与Safari相同的引擎快速按输入内容呈…

vue框架实现表情打分效果

本来今天要实现这个功能 但是在网上查了一下 就csdn上有一个符合要求的 但是他竟然收费,痛心疾首啊 太伤白嫖党的心的 所以我手写了一个这个类似功能的代码 希望能帮到有这个需求的同学们 技术栈是VUE3 用其他技术栈的也可以看 因为逻辑很简单都一样的 // 问卷的虚拟数据 con…

wait函数

#include <sys/types.h> #include <sys/wait.h> pid_t wait(int *wstatus); 功能&#xff1a;等待任意一个子进程结束&#xff0c;如果该子进程结束了&#xff0c;此函数会回收子进程的资源 参数&#xff1a; -int *wstatus&#xff1a;进程退出时的状态信息&…

CentOS在应用程序菜单中创建快捷方式

背景&#xff1a; 在CentOS系统中&#xff0c;安装一些应用软件的时候&#xff0c;我们可能会自定义安装路径&#xff1b;这样在安装完应用程序后&#xff0c;在“Application”下&#xff0c;可能找不到对应的快捷键&#xff1b;这是就需要手动去创建跨界方式。 应用&#xf…

【笔记】离线Ubuntu20.04+mysql 5.7.36 + xtrabackup定时增量备份脚本

一、环境 ● Ubuntu版本查看 lsb_release -a● mysql 版本查看 mysql --version我的是ubuntu 20.04&#xff0c;mysql是5.7.36&#xff0c;所以要用 install_percona-xtrabackup-24 二、原理 备份 通过ubuntu自带的定时器运行增量备份脚本备份文件可以存储在映射后的其他…

成集云 | 用友NC集成旺店通ERP(旺店通主管供应链)| 解决方案

源系统成集云目标系统 方案介绍 用友NC是用友NC产品的全新系列&#xff0c;是面向集团企业的世界级高端管理软件。它以“全球化集团管控、行业化解决方案、全程化电子商务、平台化应用集成”的管理业务理念而设计&#xff0c;采用J2EE架构和先进开放的集团级开发平台…

SQL Server 数据库变成单个用户怎么办

参考技术A 1、首先我们打开SQL SERVER的管理控制台&#xff0c;找到一个要设置角色的用户。 2、下面我们将为这个用户赋予创建数据库的角色&#xff0c;我们先用这个用户登录管理工具看一下是否具有创建用户的权限。 3、进行数据库创建的时候&#xff0c;提示如下的错误&…