Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >H5中唤起百度或高德地图并规划路径

H5中唤起百度或高德地图并规划路径

作者头像
牛老师讲GIS
发布于 2024-12-30 02:48:20
发布于 2024-12-30 02:48:20
22201
代码可运行
举报
运行总次数:1
代码可运行

概述

本文分享在H5中唤起手机中的高德地图或百度地图APP,并传入起始位置规划路径。

效果

image.png
image.png

实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  <link rel="stylesheet" href="lib/mapbox-gl.css" type="text/css">
    <style>
      html,
      body,
      #map {
        width: 100%;
        height: 100%;
        overflow: hidden;
        margin: 0;
        padding: 0;
      }
      .tool {
        position: absolute;
        top: 1rem;
        right: 1rem;
        z-index: 9;
      }
      #location {
        position: absolute;
        bottom: 1rem;
        left: 1rem;
        z-index: 9;
        padding: 0.3rem 1rem;
        background-color: white;
        width: calc(100% - 4rem);
        text-align: center;
        border-radius: 0.3rem;
      }
    </style>
  </head>
  <body>
    <div id="map" class="map">
      <div id="location"></div>
      <div class="tool">
        <button id="amap">高德</button>
        <button id="bdmap">百度</button>
      </div>
    </div>
   <script src="lib/mapbox-gl.js"></script>
    <script>
      const map = new mapboxgl.Map({
        container: "map",
        center: [114.06705183665042, 22.65447650819611],
        zoom: 3,
      });

      let center = [];

      function showPosition(position) {
        const { latitude, longitude } = position.coords;
        document.getElementById("location").innerHTML =
          "Latitude: " + latitude + ", Longitude: " + longitude;
        map.flyTo({
          center: [longitude, latitude],
          zoom: 15,
        });
        center = [longitude, latitude];
        new mapboxgl.Marker({
            color: '#ff0000',
        }).setLngLat([longitude, latitude]).addTo(map);
      }

      function getMapScheme(from, to, mapType = "gaode") {
        const u = navigator.userAgent;
        const isAndroid = u.indexOf("Android") > -1 || u.indexOf("Adr") > -1; //android终端
        const andriodBaidu = (to) => {
          return `bdapp://map/direction?destination=name:${to.name}|latlng:${to.latitude},${to.longitude}&coord_type=gcj02&mode=driving&src=andr.jianghu.jianhao`;
        };
        const iOSBaidu = (to) => {
          return `baidumap://map/direction?destination=name:${to.name}|latlng:${to.latitude},${to.longitude}&coord_type=gcj02&mode=driving&src=ios.jianghu.jianhao`;
        };
        const andriodGaode = (to) => {
          return `amapuri://route/plan/?sourceApplication=mhc&dlat=${to.latitude}&dlon=${to.longitude}&dname=${to.name}&dev=0&t=0`;
        };
        const iOSGaode = (to) => {
          return `iosamap://path?sourceApplication=mhc&dlat=${to.latitude}&dlon=${to.longitude}&dname=${to.name}&dev=0&t=0`;
        };
        if (mapType == "baidu") {
          if (isAndroid) {
            return andriodBaidu(to);
          } else {
            return iOSBaidu(to);
          }
        } else if (mapType == "gaode") {
          if (isAndroid) {
            return andriodGaode(to);
          } else {
            return iOSGaode(to);
          }
        }
      }

      function showError(error) {
        switch (error.code) {
          case error.PERMISSION_DENIED:
            document.getElementById("location").innerHTML =
              "User denied the request for Geolocation.";
            break;
          case error.POSITION_UNAVAILABLE:
            document.getElementById("location").innerHTML =
              "Location information is unavailable.";
            break;
          case error.TIMEOUT:
            document.getElementById("location").innerHTML =
              "The request to get user location timed out.";
            break;
          case error.UNKNOWN_ERROR:
            document.getElementById("location").innerHTML =
              "An unknown error occurred.";
            break;
        }
      }
      map.on("load", () => {
        if ("geolocation" in navigator) {
          navigator.geolocation.getCurrentPosition(showPosition, showError);
        } else {
          document.getElementById("location").innerHTML =
            "Geolocation is not supported by this browser.";
        }

        const from = { name: '我的位置', longitude: center[0], latitude: center[1] }; // 出发地,不传则默认当前位置
        const to = { name: '宝安体育馆', longitude: 113.87486718701842, latitude:22.562459090345357 }; // address:目的地

        const gdUrl = getMapScheme(from, to, "gaode")
        const bdUrl = getMapScheme(from, to, "baidu")
        document.getElementById("location").innerHTML =
            `${gdUrl}<br>${bdUrl}`;
        document.getElementById("amap").setAttribute('href', gdUrl)
        document.getElementById("bdmap").setAttribute('href', bdUrl)
      });
    </script>
  </body>
</html>

注意:不能微信中打开,在手机自带的浏览器或安装的其他浏览器中才可以打开。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
关于IOS10系统内微信公众号地图的显示问题
调用方式1:引用封装好的JS模块,调起前端的定位组件,通过封装好的接口获取位置信息。
小马哥学JAVA
2022/11/21
6700
H5(drag,百度地图使用,requestFullscreen,H5应用缓存)
1.拖拽元素 <script type="text/javascript"> /*有拖拽属性,就有属性对应的拖拽事件*/ //拖拽开始 var box = document.querySelector('.box'); box.ondragstart = function(){ console.log('拖拽开始了') } //拖拽结束 box.ondragend=function(){ console.log('拖拽
天天_哥
2018/09/29
1.9K0
第182天:HTML5——地理定位
HTML5 Geolocation API 用于获得用户的地理位置。 鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的。
半指温柔乐
2018/09/11
2K0
第182天:HTML5——地理定位
手机端网页使用html5地理定位获取位置失败的解决办法
网上有很多关于html5 geolocation 获取地理定位的方法,我试了下,只有在IE edge浏览器可以成功获取到,在chrome,firefox,手机端的safari,QQ浏览器,微信浏览器,都返回一样的错误信息: POSITION_UNAVAILABLE 网上的方法大概是这样的: if(navigator.geolocation){ navigator.geolocation.getCurrentPosition(onSuccess , onError); }else{ ale
蓓蕾心晴
2018/04/12
5.3K0
获取地理位置
可根据获取到的经纬度查询到所在的地理位置。 <p><button onclick="geoFindMe()">Show my location</button></p> <div id
ProsperLee
2018/10/24
2.1K0
获取地理位置
❤️使用 HTML、CSS 和 JS 的简单倒数计时器 ❤️
在本文中,我使用了简单的 JavaScript 代码创建了一个倒数计时器和大家分享。
海拥
2021/09/14
5.6K0
❤️使用 HTML、CSS 和 JS 的简单倒数计时器 ❤️
从零开始学 Web 之 HTML5(三)网络监听,全屏,文件读取,地理定位接口,应用程序缓存
于是就变成了 webkitRequestFullScreen(), mozRequestFullScreen(), msRequestFullScreen()。由于使用的方法不同,所以要做兼容性处理。
Daotin
2018/08/31
8930
从零开始学 Web 之 HTML5(三)网络监听,全屏,文件读取,地理定位接口,应用程序缓存
HTML5的Geolocation API
Geolocation API用于将用户当前地理位置信息共享给信任的站点,这涉及用户的隐私安全问题,所以当一个站点需要获取用户的当前地理位置,浏览器会提示用户是“允许” or “拒绝”。
meteoric
2018/11/15
1.6K0
高德地图调用
3、大家创建一个springboot工程,根据自己需要导入一些坐标,我的坐标如下:
java后端指南
2021/05/13
1.9K0
高德地图调用
高德地图开放平台 原
平台地址:http://lbs.amap.com/api/javascript-api/example/amap-ui-districtcluster/custom-cluster-marker
晓歌
2018/08/15
8.1K0
高德地图开放平台
                                                                            原
腾讯位置服务开发应用-使用教程,案例分享,知识总结
作为一名在职岗位为【前端开发工程师】的程序员,我开发的应用程序经常需要获取用户位置信息,需要再某些场合下使用展示地图以及地图商的某些地点,需要获取行政区划列表(省市区)以及地址详情信息,需要在地图上规划一条(动态)路线,轨迹回放,小车移动,需要创建信息窗口,用于地点的摘要性信息的展示。
腾讯位置服务
2021/07/29
3.1K0
腾讯位置服务开发应用-使用教程,案例分享,知识总结
MUI框架中使用百度地图(全网独一份最详细的图文教程)
如果还没有注册的童鞋可以先去百度地图开放平台注册一下账号,如果不明白可以参考:https://blog.csdn.net/qq_17623363/article/details/103234119
手撕代码八百里
2020/07/29
1.7K0
MUI框架中使用百度地图(全网独一份最详细的图文教程)
vue接入腾讯地图(二)【标注&定位实战】
https://cloud.tencent.com/developer/article/1692367
腾讯位置服务
2020/09/11
4.4K0
HTML5新特性
本章的主要内容有: ---- [1] 用于媒体回放的 video 和audio 元素 [2] HTML5拖放 [3] canvas简单应用 [4] Web存储: localStorage 和 SessionStorage [5] Input输入类型 [6] 表单类型 [7] 表单属性 [8] 地理定位 (geolocation) [9] Web Workers: Worker [10] 服务器发送事件 EventSource ---- [1] 用于媒体回放的 video 和audio 元素 video 支持
echobingo
2018/04/25
1.7K0
HTML5新特性
百度地图自定义marker(图标),layer(覆盖层)
本文只要涉及的内容有,web中动态引入百度地图,基于百度地图的本地搜索(公交,地铁,停车场),自定义marker,layer,接入微信内置地图(微信中使用第三方导航)。
j_bleach
2019/07/02
4.7K0
百度地图自定义marker(图标),layer(覆盖层)
cordova插件- Geolocation
添加插件 $ cordova plugin add cordova-plugin-geolocation 插件的使用 Methods navigator.geolocation.getCurrent
roc
2018/03/30
1K0
cordova插件- Geolocation
【进阶系列】地理位置专题
        HTML5 Geolocation(地理定位)用于定位用户的位置。
江中散人_Jun
2023/10/16
1K0
【进阶系列】地理位置专题
基于高德地图开发 Web 应用
前段时间换了工作,从以前的 996 变成了现在的 965,周末有了一些空闲时间,于是就想着写一些文章和大家分享一下。思考了很久,最终确定了主题为前端高德地图的教程。
拿我格子衫来
2022/01/24
4.9K2
基于高德地图开发 Web 应用
Nest + Redis + 地图,实现附近的充电宝
这两天国庆节,大家出去玩可能会借用共享充电宝。它也是基于你的位置来搜索附近充电宝:
神说要有光zxg
2023/10/03
3870
Nest + Redis + 地图,实现附近的充电宝
Swift 打开三方地图 腾讯地图、百度地图、高德地图、Apple 地图
在info.plist 添加LSApplicationQueriesSchemes
菜菜不吃蔡
2020/09/11
3.6K0
推荐阅读
相关推荐
关于IOS10系统内微信公众号地图的显示问题
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验