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

news/2024/11/2 13:33:58/

前言:因为也是用的上一个版本的代码,为了描述清楚所以就直接复制文章来更改了,这一版更加完善简洁,高德地图精确度也更高
(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({// 是否使用高精度定位,默认:trueenableHighAccuracy: 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 = '未获取定位'}}})},

http://www.ppmy.cn/news/490866.html

相关文章

下载插件-4K Video Downloader

这款插件小编自己还是蛮喜欢的&#xff0c;有兴趣的小伙伴可以体验学习下。 一、简单介绍 提供视频下载服务&#xff0c;让您以高质量的方式获取所需内容。无论是视频、播放列表、频道还是字幕&#xff0c;您都可以轻松下载并保存为多种格式&#xff0c;如MP4、MKV、M4A、MP3、…

杰理-动态修改蓝牙配对名

杰理-动态修改蓝牙配对名 bt_modify_name("修改的名称");

杰理之蓝牙耳机PCB LAYOUT说明【篇】

1&#xff09; 优先保证地回路的连通性&#xff0c;避免地回路走线过长过细。 2&#xff09;VMCU、VDDIO、BTAVDD、DVDD等电源退耦电容尽量靠芯片管脚放置&#xff0c;且地线回路要尽量短 3&#xff09; 重点关注DCDC电源部分布局&#xff0c;要求远离天线并注意地回路走线

分享一款智能蓝牙灯控专用BLE5.1广播发射芯片MS2583

随着物联网在人们日常生活中的广泛应用和日趋成熟&#xff0c;智能家居已经点燃了人们生活的火花。 作为智能家居的一个重要组成部分&#xff0c;智能照明产品现在在市场上随处可见。 英尚微分享一款智能蓝牙灯控专用BLE5.1广播发射芯片MS2583。 巨微MS2583包含8位单片机和低…

MS1656蓝牙芯片用于智能植物灯案例

植物灯是为植物所用的灯具。植物灯模拟植物需要太阳光进行光合作用的原理&#xff0c;对植物进行补光或者完全代替太阳光。光环境是植物生长发育不可缺少的重要物理环境因素之一&#xff0c;通过光质调节&#xff0c;控制植株形态建成是设施栽培领域的一项重要技术。智能植物灯…

基于ST17H26的蓝牙控制灯开关

不想在晚上寻找电灯开关时被绊倒&#xff0c;在使用支持蓝牙功能的Android和IOS手机走进室内之前将其打开&#xff01; 天黑以后你下班回家吗&#xff1f;您是否厌倦了寻找放置不当的电灯开关&#xff1f;你是否懒得起床睡觉之前关掉灯&#xff1f;我们利用基于ST17H26蓝牙芯片…

蓝牙智能插座方案使用的MS1656单模超低功耗蓝牙芯片

智能插座是节约用电量的一种插座&#xff0c;节能插座的理念很早之前就已经生成&#xff0c;已经发展的比较广泛&#xff0c;但是技术上还有待于进步。有的高档节能插座不但节电,还能保护电器&#xff0c;可透过Wifi、Bluetooth等方式与手持装置连结&#xff0c;主要功能为远端…

分不清蓝牙适配器、蓝牙接收器和蓝牙发射器?伦茨科技为你讲解

蓝牙适配器 蓝牙适配器指数码产品适用蓝牙设备的接口转换器。蓝牙适配器采用了全球通用的短距离无线连接技术&#xff0c;使用与微波、遥控器以及有些民用无线通讯器材相同的2.4GHz附近免付费、免申请的无线电频段&#xff0c;为避免此频段电子装置众多而造成的相互干扰&#…