前言

本需求主要是获取用户当前定位,并将定位返回的经纬度坐标请求到后端接口,后端返回距离用户最近的门店,并且前端把门店标记在地图上。

关于坐标系

我们通常用经纬度来表示一个地理位置,但是由于一些原因,我们从不同渠道得到的经纬度信息可能并不是在同一个坐标系下。

高德地图、腾讯地图以及谷歌中国区地图使用的是GCJ-02坐标系
百度地图使用的是BD-09坐标系
底层接口(HTML5 Geolocation或ios、安卓API)通过GPS设备获取的坐标使用的是WGS-84坐标系

地图选择

由于后端数据库保存的门店经纬度数据是爬取高德地图获得的,然而前端高德地图是需要收费才可使用,如果选择百度地图,就会出现坐标系不一致的问题,从而导致搜索附近门店结果不正确,需要对坐标进行转换,权衡之后最终选择了腾讯地图。

效果演示

一、引入js

目前腾讯官方并没有在npm上发布腾讯地图插件,所以咱还是参考官网用js引入的方法
index.html

二、创建一个地图容器

<template><div id="container"></div>
</template>

三、vue默认数据

data(){return {center:[lat: "23.168403",lng: "113.458454"], // 地图中心tMap:null, // 地图实例zoom:12, // 设置地图缩放级别markerArr: [], // 标记列表marker: "", // 覆盖物实例list:[] // 请求后端获取到的数据}
}

三、初始化地图容器

mounted() {this.tMap = new TMap.Map("container", {center: new TMap.LatLng(this.center.lat, this.center.lng), //设置地图中心点坐标zoom: this.zoom, //设置地图缩放级别viewMode: "2D",});
}

四、获取用户定位

created() {this.getLocation();
}
methods:{// 获取用户定位getLocation() {var geolocation = new qq.maps.Geolocation("你的key","myMap" // 你的应用名称);geolocation.getLocation(this.showPositionFun, this.errorPositionFun);},// 用户授权定位showPositionFun(position) {if (position) {this.center.lng = position.lng;this.center.lat = position.lat;this.tMap.setCenter(new TMap.LatLng(this.center.lat, this.center.lng)); // 重新更新地图中心this.showPosition = true;} else {this.showPosition = false;}this.getList(this.center); // 如有定位信息,传给后端接口获取附近的门店},// 定位失败errorPositionFun() {this.showPosition = false;this.getList(); // 如没有定位信息,请求后端接口获取默认数据},
}

五、地图添加点标记

// 请求接口获取到的数据list
this.list.forEach(item=> {// 获取一个随机不重复的字符串做为idlet id = new Date().getTime() + parseInt(Math.random() * 10000);this.markerArr.push({id: id,longitude: item.longitude,latitude: item.latitude,styleId: "marker",properties: {title: "marker",},});
})
// 只要点标记markerArr发生变化,就重新渲染点覆盖物
watch: {markerArr: {handler(newValue) {let tmp = [];for (let m = 0; m < newValue.length; m++) {let item = newValue[m];item.position = new TMap.LatLng(item.latitude, item.longitude);tmp.push(item);}this.marker = new TMap.MultiMarker({map: this.tMap,styles: {// 点标记样式marker: new TMap.MarkerStyle({width: 20, // 样式宽height: 30, // 样式高anchor: { x: 10, y: 30 }, // 描点位置}),},geometries: tmp,});},deep: true,},
},

六、查询条件发生变化,渲染下一群覆盖物之前,先清除现有的点覆盖物

onChange() {this.marker.setGeometries([]);
}

七、点击列表选择某个定位,跳转到详情页并导航
为列表每一项绑定click事件,并传入当前的item

goMap(item) {window.location.href = `https://apis.map.qq.com/uri/v1/marker?marker=coord:${item.latitude},${item.longitude};title:${item.name};addr:${item.address}&referer=${TMAP_KEY}`;
},

更多跳转参数请参考腾讯地图文档
https://lbs.qq.com/webApi/uriV1/uriGuide/uriWebMarker

vue 腾讯地图展示用户定位附近的门店相关推荐

  1. 手机端或PC端利用高德地图和腾讯地图获取用户当前位置信息

    目录 一.简介 二.高德地图 三.腾讯地图 四.总结 一.简介 最近在项目中,有需要使用到获取用户当前地理位置信息的功能,获取当前用户位置保存到数据库中的场景,并且需要支持多种地图定位方式,我这里采用 ...

  2. 使用vue+腾讯地图API GL实现地图选房的功能

    使用vue+腾讯地图API GL实现地图选房的功能 背景介绍 公司最近想做一个地图选房的功能,在网上找了很久也没有找到这方面的demo,就只好硬着头皮自己写一个地图选房的功能 腾讯地图的官方文档.首先 ...

  3. 腾讯地图实时精准定位

    最近写项目的时候遇到一个问题,需要用到实时定位,H5页面怎么实时定位.然后就是各种百度和文档,试用了很多方法,都不太理想,终于找到一个比较中肯的方法. 我用的是腾讯地图,使用的话去腾讯地图注册账号申请 ...

  4. 腾讯地图获取用户Ip地址

    腾讯地图获取用户IP地址## <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js&quo ...

  5. 腾讯地图获取当前定位的经纬度、地址的详细名称和地图上的显示

    具体步骤: 1.申请腾讯地图的开发者key  https://lbs.qq.com/console/mykey.html?console=mykey 2.引用腾讯地图的 cdn 链接 前端定位组件:h ...

  6. 腾讯地图—WebService API定位的使用

    这里主要介绍服务端IP定位 腾讯位置服务WebService API开发指南 一.简介 开发指南对WebService API介绍: 腾讯地图WebService API 是基于HTTPS/HTTP协 ...

  7. C#腾讯地图Web端定位地址搜索及手机导航

    前段时间项目涉及到腾讯地图的业务,这里马克一下. 一开始做腾讯地图功能完全是懵逼的,一搜网上做百度地图居多,问为什么不用百度地图,原因是后面会衔接微信,百度定图定位会有偏差,网上一搜,果真有不少网友吐 ...

  8. android地图选点,【百度地图】Android实现地图展示、定位、选点、地点查询和地点模糊查询功能...

    1.集成百度地图sdk 请查看百度地图开放平台,这里有很详细的教程. 2.地图展示功能 将地图控件放入到当前页面的布局中即可,如下: MapView 在页面代码中,通过id获取到MapView的对象, ...

  9. h5如何唤起地图App(vue+腾讯地图)

    一.创建腾讯地图的key 地址:腾讯位置服务 - 立足生态,连接未来 二.腾讯地图文档 url接口:URI API(地图调起) | 腾讯位置服务 注:特别注意灰色部位,弄错了就多整好几个小时(瞎几把整 ...

最新文章

  1. 2D 游戏引擎 AlloyGameEngine
  2. 攻击者怎样使用HTML和CSS隐藏“外部发件人”电子邮件警告
  3. 有关cvUpdateMotionHishtory,cvCalcMotionGradient等函数的使用
  4. scanf和gets的差别
  5. mysql100多个字段如何优化_MySQL 调优/优化的 100 个建议
  6. mvc:annotation-driven 注解的作用
  7. button jsp隐藏_关于在同一JSP页面通过隐藏域传值的问题?
  8. mysql数据库教程全解_MySQL数据库基础教程详解
  9. OC代码调用C++代码的回调函数步骤
  10. 面向对象(Python):学习笔记之类属性和类方法
  11. C++ boost 正则表达式用法
  12. qt界面中Pushbutton添加图片的三种显示效果
  13. iOS14隐私适配:根据不同的场景需求设置不同的定位精确度
  14. 不懂中医的才攻击中医
  15. 论文那些事儿:《Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks》
  16. Django——关于related查找
  17. ps导出gif+html,ps怎么导出gif格式的动图
  18. Hadoop第三天--linux指令
  19. FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'D:/tjn/tra
  20. 前端学习——这十本书一定要看

热门文章

  1. STM32F103C8T6硬件SPI控制6针/7针0.96寸OLED显示屏
  2. 【解答】多台西门子PLC之间可不可以无线通讯
  3. 使用qemu在windows系统下搭建树莓派3b环境运行RT-Thread
  4. 蓝牙是局域物联网最佳方案?「桂花网」获千万美元B+轮融资
  5. Java基础—— Java的语言基础
  6. HC-SR04超声波测距块讲解(附32单片机源码)
  7. 2022年山西省11地市高新技术企业申报奖励补助政策及认定条件流程
  8. 基于WebGL架构的3D可视化平台—粮仓3D场景
  9. 手游服务器如何修改d盘,把steam上的游戏从d盘改到c盘的方法 | 手游网游页游攻略大全...
  10. centos——开机显示 give root password for maintenance