目录
有一个月没写博客了,最近在写项目,需要用到腾讯位置服务,获取附近商家位置。这里我就记录一下,实现过程。
申请地址:腾讯位置服务 - 立足生态,连接未来
官网教程:微信小程序JavaScript SDK | 腾讯位置服务
点击创建应用,然后创建Key
这样我们就获得了key了
下载链接: https://mapapi.qq.com/web/miniprogram/JSSDK/qqmap-wx-jssdk1.2.zip
安全域名设置,在小程序管理后台 -> 开发 -> 开发管理 -> 开发设置 -> “服务器域名” 中设置request合法域名,添加https://apis.map.qq.com
在项目中创建utils目录将下载好JavaScriptSDK放入其中,并在uniapp中导入。
- import QQMapWX from '@/utils/qqmap-wx-jssdk.js'
- const qqmapsdk = new QQMapWX({
- //填写你申请的key
- key: 'XXXXX-A466V-XXXXX-XXXXX-XXXXX-XXXXX'
- })
- export default {
- data() {
- return {
- //商家列表
- markers:[],
- //自身经纬度
- from:{},
- //页码值
- page_index: 1,
- //每页显示多少条数据
- page_size: 10,
- //分页总条数
- total:100,
- }
-
- },
- methods: {
- /* 下面的方法是获取当前用户的地址,根据地址获取当前最近的门店 */
- getUserLocation(){
- //获取当前地理位置
- let that = this
- uni.getLocation({
- type: 'wgs84',
- success(res) {
- that.from.latitude = res.latitude
- that.from.longitude = res.longitude
- that.getViennaList()
- },
- fail: (err) => {
- uni.showToast({
- title: '无法获取当前位置!',
- icon:'error',
- duration:1500
- });
- //默认经纬度
- that.from.latitude = 28.326165
- that.from.longitude = 112.935354
- that.getViennaList()
- }
- })
- },
- getViennaList(){
- //获取商家位置
- let that = this
- qqmapsdk.search({
- //关键字改成所需商家名称
- keyword: "书亦烧仙草",
- //自身经纬度对象
- location: that.from,
- //分页(可忽略)
- page_index: that.page_index,
- page_size: that.page_size,
- success: (res) =>{
- var mks = []
- for (var i = 0; i < res.data.length; i++) {
- mks.push({ // 获取返回结果,放到mks数组中
- title: res.data[i].title,
- id: res.data[i].id,
- latitude: res.data[i].location.lat,
- longitude: res.data[i].location.lng,
- address: res.data[i].address,
- distance:''
- })
- }
- that.changeWidth(mks);
- },
- fail: (err) => {
- uni.showToast({
- title: '无法获取商店位置!',
- icon:'error',
- duration:1500
- });
- }
- })
- },
- //计算距离
- changeWidth(mks){
- let _this = this
- qqmapsdk.calculateDistance({
- from:_this.from,
- to: mks,
- success:(res) =>{
- for (var i = 0; i < res.result.elements.length; i++) {
- let hw = res.result.elements[i].distance //拿到距离(米)
- if (hw && hw >1 && hw <1000) { //拿到正确的值
- hw = hw + '米'
- } else if(hw && hw !== -1){
- hw = (hw / 2 / 500).toFixed(1) + '公里'
- }else{
- hw = "距离太近或请刷新重试"
- }
- mks[i].distance = hw
- }
- _this.markers = [..._this.markers,...mks]
- console.log(_this.markers);
- //存入缓存中
- uni.setStorageSync("markers",_this.markers)
- },
- fail: (error) =>{
- uni.showToast({
- title: error,
- icon:'error',
- duration:1500
- });
- },
- });
- },
- },
- created() {
- //判断缓存是否存在附近门店信息有的话不加载
- if(uni.getStorageSync("markers")==''){
- this.getUserLocation();
- }
- }
说明:附近的门店信息已经被我们存入markers数组当中了,并且按距离从小到大排列好的!