(2023进阶版)vue+h5 通过高德地图(原生) 获取当前位置定位

2023-10-28

前言:因为也是用的上一个版本的代码,为了描述清楚所以就直接复制文章来更改了,这一版更加完善简洁,高德地图精确度也更高
(2021年写过的一版上线了挺长时间,2023年突然被应用市场下架,说流程走不通,就卡在获取定位失败。改了之后已上线运行

  • 经抓包发现,在本地、测试、预生产环境,利用经纬度获取地点这一块,发起了api请求https://restapi.amap.com/v3/geocode/regeo?key=。可正常返回地点信息,按照代码逻辑走
  • 正式环境,会将https://restapi.amap.com/v3/geocode/regeo?key= 直接被替换这个链接restapi.amap.com/v3/assistant/coordinate/convert?key= regeo根本没请求,所以后续代码逻辑走不通

项目需求是:获取到当前城市定位,然后显示该城市的服务项
之前做了一版百度地图,因为商业原因,公司选择了高德地图,所以要对地图进行更换。百度地图原生点这里
也不算顺利,之前做的记录都不存在了。
vue-amap是基于高德原生封装好的供vue使用,对图层的操作会更便捷一些。vue-amap点这里
上一版高德地图原生js指路

当前的需求,只需拿到当前定位。所以可以使用原生js

1.index.html文件

  • 用cdn引入
 <script  type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=你的key&plugin=AMap.Geolocation"></script>

2.vue.config.js文件

  • 将cdn引入vue项目里
 externals: {
      // 'BMap':"BMap",
      AMap: 'AMap', // 高德地图配置
      AMapUI: 'AMapUI'
    }

3.使用的页面设置

  • 不用设置 import AMap form’AMap’
    踩得最大的坑就是这个,不晓得为什么网上这多人引入
    一会‘AMap’ is not defined
    一会出现 To install it, you can run: npm install --save AMap
    光是为解决出现的引入问题就花了大半时间

  • 尤其与之对应的 .getCurrentPosition方法更是花样报错,把所有报错轮了一遍。有博主说是在https环境下才能获取成功
    在这里插入图片描述

  • (更新):融合了HTML5 Geolocation定位接口、精确IP定位服务,以及安卓定位sdk定位。定位流程如下:

  • 开发者开启了sdk辅助定位,安卓手机上会优先尝试调用sdk的定位接口,

  • 失败之后优先调用浏览器原生定位接口进行定位

  • 浏览器定位失败之后尝试进行精确IP定位

  • IP定位获取当前城市定位

前文也说了,高德地图进行升级了,定位失败率降低,则思路如下:

  • 上一版通过定位拿到城市边缘经纬度再去请求城市中心这个操作只作为备用选项,为了防止失败。
  • 如果获取不到精确定位会返回状态码error,则在error情况下,进行城市信息获取
  • 如果获取到定位则直接进行业务逻辑编写
  • 新增了 needAddress 属性,当定位成功,可以获取返回定位信息。相应的信息也要处理。该属性藏得很深,反正找到了两份不同的文档吧
 getAmap(){
       
        const that = this;
        AMap.plugin("AMap.Geolocation", () => {
          var geolocation = new AMap.Geolocation({
            // 是否使用高精度定位,默认:true
            enableHighAccuracy: true,
            //是否使用安卓定位sdk用来进行定位,需要安卓端sdk配合
            useNative: true,
            // 设置定位超时时间,默认:无穷大
            timeout: 10000,
            needAddress : true,
          });

          geolocation.getCurrentPosition((status, result) => {  //获取用户当前的精确位置
            if (status == "complete") {
             
				 let data=result.addressComponent 
				 //重点:设置了needAddress属性 定位返回的信息回包含addressComponent对象,里面返回的内容跟regeo请求返回addressComponent 对象一致。
				 if(data.adcode){
               	//业务逻辑代码
              }else {
                that.surePosition(result.position[0],result.position[1]) //防止返回信息不同
            }
            else {
              geolocation.getCityInfo((status, result) => {   //只能获取当前用户所在城市和城市的经纬度
                if (status == "complete") {
                 //业务逻辑代码
                }else {
                  that.showCity = '未获取定位'
                  
                }
              })
            }
          })
        })
      },

4.进行api请求

  • 获取到了大致经纬度与城市,最好再一次进行逆地址编码请求
  • 逆地址编码请求结果更详细更确定城市地址。
  • extensions=all可以不设置,但设置了会获得地标信息商圈这种信息
surePosition(re0,re1){
        const that = this;
        let key='你的key'
        axios.get(`https://restapi.amap.com/v3/geocode/regeo?key=${key}&location=${re0+','+re1}&extensions=all`)
          .then( (response) => {
            console.log('response'+response.data)
            if(response.data.status){
             //业务逻辑代码
              } else {
                that.showCity = '未获取定位'
                
              }
            }
          })
      },
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(2023进阶版)vue+h5 通过高德地图(原生) 获取当前位置定位 的相关文章

随机推荐

  • 前端面试题汇总(vue+html基础)最新最全

    一 HTML基础部分 1 什么是盒子模型 重要 在网页中 一个元素占有空间的大小由几个部分构成 其中包括元素的内容 content 元素的内边距 padding 元素的边框 border 元素的外边距 margin 四个部分 这四个部分占有
  • FDbus

    文章目录 介绍 背景 特点 FDBus 中间件模型 FDBus 寻址和组网 Server地址 Server命名和地址分配 name server使用如下规则分配server地址 多主机组网 host server的工作原理 client 与
  • 时序分解

    时序分解 Matlab实现CEEMD互补集合经验模态分解时间序列信号分解 目录 时序分解 Matlab实现CEEMD互补集合经验模态分解时间序列信号分解 效果一览 基本介绍 程序设计 参考资料 效果一览 基本介绍 Matlab实现CEEMD
  • Spring源码之事件监听机制(下)

    文章目录 前言 一 手写事件监听机制框架 1 准备 2 事件监听接口 3 事件管理器 4 事件发布器 5 需求 6 编码 二 观察者模式 1 概述 2 UML图 3 Coding验证 小结 前言 这篇文章接的是上篇文章Spring源码之事件
  • java 抓取网页_JAVA使用爬虫抓取网站网页内容的方法

    本文实例讲述了JAVA使用爬虫抓取网站网页内容的方法 分享给大家供大家参考 具体如下 最近在用JAVA研究下爬网技术 呵呵 入了个门 把自己的心得和大家分享下 以下提供二种方法 一种是用apache提供的包 另一种是用JAVA自带的 代码如
  • 函数齐次性

    比如一个系统 输入为x 其响应为f x 当输入为ax 其响应为af x 即 f ax af x 则称系统具有一次齐次性 其中a为任意常数 一般地 在数学里面 如果一个函数的自变量乘以一个系数 那么这个函数将乘以这个系数的k次方 我们称这个函
  • Win10聚焦锁屏壁纸保存

    前言 Win10聚焦锁屏每天都会推荐新的壁纸 其中有些质量超高的优秀壁纸 用户自然想下载保存下来 下文介绍如何保存 若用户仅想保存当天的聚焦锁屏壁纸 则推荐方法1 若用户想保存以前的聚焦锁屏壁纸 则推荐方法2 方法1 从微软商店下载软件 注
  • 51单片机OLED收银电子秤称重计价清零去皮金额累计HX711

    实践制作DIY GC0061 收银电子秤称重计价清零去皮金额累计 一 功能说明 基于51单片机设计 收银电子秤称重计价清零去皮金额累计 二 功能介绍 STC89C52单片机 AT89C51 52 OLED HX711 5Kg电子秤 4 4矩
  • 解决ubuntu进行远程连接时出现密码认证失败的问题

    问题描述 1 当我们将mobaxterm 新建会话时 如果用户名设置为root超级用户 我们会发现 root用户登陆不进去 他会跳出来一个窗口 说是ssh服务器拒绝了密码 2 这个问题就困扰到我了 找了很多帖子 都说要改 etc ssh s
  • ps 和 kill 命令详解

    1 作用kill命令用来中止一个进程 2 格式kill s signal p a pid kill l signal 3 参数 s 指定发送的信号 p 模拟发送信号 l 指定信号的名称列表 pid 要中止进程的ID号 Signal 表示信号
  • 第一章 网络子系统初始化--基于Linux3.10

    下载地址 http download csdn net detail shichaog 8620701 网络初始化函数调用顺序 Linux系统启动那些事 基于Linux 3 10内核 提到系统启动时会调用一系列的初始化函数 初始化函数使用i
  • JavaEE学习记录day10 IO流01 File类、字节流

    1 File类 1 1File类概述和构造方法 应用 File类介绍 它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于File而言 其封装的并不是一个真正存在的文件 仅仅是一个路径名而已 它可以是存在的 也可以
  • shell在while循环中使用ssh命令提前退出的问题

    我想编写一个xcall sh脚本 用于快速向集群中的所有节点执行相同的命令 集群的节点信息放在hosts文件中 root localhost cat hosts 10 4 7 81 root 10 4 7 82 root 10 4 7 83
  • elementUI el-table表格列排序的三种方法

    1 官方排序
  • 算术表达式的validation

    经典的基于单调栈的表达式求值算法是没有validate表达式是否正确的 1 2 1 2 都是可以evaluate出来的 因为它们的op栈和operand栈都是一样的 和json validator一样 框架都是都是输入字符驱动的状态转移 合
  • 解决同步验证码模拟登录问题

    1 如何识别验证码 前言 识别验证码借助第三方库很好识别 主要是获得验证码识别后又相当一次request请求 这就会导致与当前页面的验证码不同 即使成功识别也会因为验证码的不统一而登录不了 1 1模拟登录 通过selenium自动化测试工具
  • cohens d 的effect值

    Very small 0 01 Sawilowsky 2009 Small 0 20 Cohen 1988 Medium 0 50 Cohen 1988 Large 0 80 Cohen 1988 Very large 1 20 Sawil
  • DMA简单总结

    文章目录 一 基础概念 1 1 DMA Direct Memory Access 直接存储器访问 目的减少CPU资源占用 二 典型DMA硬件模型 2 1 基本硬件特性 通道数 源 目标类型 地址与累加方式 数据位宽 搬移长度 循环模式 中断
  • MyBatis-Plus 字段为Null时不更新解决方案,MyBatis-Plus 更新空字段

    Copyright 蕃薯耀 2022 06 25 https www cnblogs com fanshuyao 一 问题描述 使用这两个方法 不会对实体中值为Null的属性 字段 进行更新 this updateById entity t
  • (2023进阶版)vue+h5 通过高德地图(原生) 获取当前位置定位

    前言 因为也是用的上一个版本的代码 为了描述清楚所以就直接复制文章来更改了 这一版更加完善简洁 高德地图精确度也更高 2021年写过的一版上线了挺长时间 2023年突然被应用市场下架 说流程走不通 就卡在获取定位失败 改了之后已上线运行 经