场景:根据地理定位获取不同地区的充电桩位置,要求

1.平移的时候,跟随坐标变化展示不同区域的坐标点信息

2.不同的缩放等级,14以下,展示聚合点数据,14以上,展示真正的站点信息;

3.点击聚合点的时候,当前地图会放大,直到缩放等级大于14为止,最终的结果是展示真正的站点信息而不是聚合点

实现原理:

map组件提供了bindregionchange函数,可以监听视野变化,目前测试下来(不知道还有没有别的),能够引起视野变化的有:

1.改变经纬度

2.改变缩放等级

因此,利用这两点,可以达到我们的需求。

定义一个函数getLngLat,这个函数,获取当前的缩放等级与中心点坐标,然后根据当前的缩放等级,来决定是调用站点信息接口,还是聚合站点列表接口

getLngLat: function() {
var that = this;
this.mapCtx = wx.createMapContext("map");
// //获取缩放等级
this.mapCtx.getScale({
...
});
//获取中心坐标点
that.mapCtx.getCenterLocation({
...
});
//根据缩放等级来请求,如果是最低的等级,直接请求详情列表,如果缩放等级很大,请求集合数据
if (scale >= 14) { 
that.searchStation(res.latitude, res.longitude);//请求具体站点接口
} else {
that.getStationList(res.longitude, res.latitude, scale);//请求聚合信息接口
}
}
});
 
然后在bindregionchange函数中执行他
// 视野发生事件
regionchange(e) {
let that = this;
if (e.type == 'end') {
this.getLngLat();
} else {}
}
这样就解决了平移以及根据当前缩放等级来请求不同的接口的问题
 
然后,如果展示的是聚合点,要点击能继续放大地图
 
这点的实现思路是,由于聚合点和真正的站点信息都是markers,那么监听markers的点击事件,当点击的时候,获取当前的缩放等级,如果大于14,就说明是站点的信息,直接弹出站点详情,如果小于14,说明是聚合点,
前面我们说过,当缩放等级或者经纬度变化的时候,bindregionchange函数会被触发,因此在这个函数中,把获取到的scale ,setData到当前,就会自动执行bindregionchange里的getLngLat函数,(获取当前的缩放等级,获取中心点坐标,根据坐标与缩放等级请求不同的接口)
 
//地图标记点击事件
markertap: function(e) {
 
//如果当前的scale大于等于14,直接展示站点信息,否则就放大
// //获取缩放等级
this.mapCtx.getScale({
success: function(res) {
let scale = parseInt(res.scale);
if (scale < 14) {
that.setData({
scale_c: scale+1//改变当前的缩放等级,为了触发bindregionchange函数
})
} else {
},
});
},
 然后开始测试
 
接下来重点来了!!!
 
按照上面的写法,在模拟器上测试的时候,点击聚合点,会一直缩小,直到scale==3为止。。。。
大写的懵,感觉实现没问题啊,查了很久发现,在模拟器上获取的scale,和真机上是不一样的啊,请同志们一定要在真机上测试啊!!!!
这是个bug吧。。。
 
恩,最后我放弃了模拟器,反正客户又不用看模拟器,手机正常就行。。。
 

bug&坑:

bindregionchange中,不能直接setData 经纬度和scale,否则会一直闪现

模拟器和真机上,返回的scale不一致,建议真机测试

再次注意:

一定要仔细检查传参啊,很多小问题都是最基础的造成的。。。。

资料参考:

微信小程序腾讯地图bindregionchange事件导致图标闪烁的解决方法:

https://blog.csdn.net/u013631121/article/details/81225865

感谢

微信小程序--地图组件与api-模拟器上返回的scale 与真机上不同--bindregionchange触发图标一直闪现问题的更多相关文章

  1. 微信小程序-地图组件

    map 地图. 标记点 标记点用于在地图上显示标记的位置,不能自定义图标和样式 覆盖物 覆盖物用于在地图上显示自定义图标,可自定义图标和样式 地图组件的经纬度必填, 如果不填经纬度则默认值是北京的经纬 ...

  2. 微信小程序在组件中获取界面上的节点信息wx.createSelectorQuery

    节点信息查询 API 可以用于获取节点属性.样式.在界面上的位置等信息. 最常见的用法是使用这个接口来查询某个节点的当前位置,以及界面的滚动位置. 示例代码: const query = wx.cre ...

  3. 微信小程序地图组件

    index.wxml <map id="map" markers="{{markers}}" longitude="{{longitude}}& ...

  4. 微信小程序地图开发总结

    最近在做一个微信小程序地图插件,通过传入起始位置名称和经纬度信息,就可以跳转到路线规划插件页面中,在该页面中,可以根据起始位置查询自驾,公共交通,步行等方式的路线信息,并且在地图上显示路线信息,在这个 ...

  5. 微信小程序的组件总结

    本文介绍微信小程序的组件 视图容器 基础内容 表单组件 导航组件 媒体组件 视图容器 view 布局容器 <view hover-class='bg'>222</view> 可 ...

  6. 微信小程序 MinUI 组件库系列之 price 价格组件

    MinUI 是基于微信小程序自定义组件特性开发而成的一套简洁.易用.高效的组件库,适用场景广,覆盖小程序原生框架.小程序组件化框架等,并且提供了高效的命令行工具.MinUI 组件库包含了很多基础的组件 ...

  7. 微信小程序image组件binderror使用例子(对应html、js中的onerror)

    官方文档  binderror HandleEvent 当错误发生时,发布到 AppService 的事件名,事件对象event.detail = {errMsg: 'something wrong' ...

  8. 微信小程序倒计时组件开发

    今天给大家带来微信小程序倒计时组件具体开发步骤: 先来看下最终效果: git源:http://git.oschina.net/dotton/CountDown 分步骤-性子急的朋友,可以直接看最后那段 ...

  9. 微信小程序--地图上添加图片

    如何在微信小程序地图添加上,添加图片? 在微信小程序中,地图的层级最高,所以我们没有办法,通过定位,在地图上添加图片等信息; 处理办法: 添加控件:controls; 其中有个属性position,进 ...

随机推荐

  1. 【easy】112.path sum 113.-----------------

    求是否有从根到叶的路径,节点和等于某个值. /** * Definition for a binary tree node. * struct TreeNode { * int val; * Tree ...

  2. 27)django-form操作示例(动态Select数据,自定义字段验证,全局验证等)

    1)普通传递select数据 # -*- coding:utf-8 -*- __author__ = 'shisanjun' from django import forms from django. ...

  3. P4735 最大异或和

    题目链接 题目描述 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. Q l r x:询问操作,你需要找到 ...

  4. mysql数据库基本语句

    我们除了可以在mysql数据库或phpmyadmin中登陆数据库我们还可以使用linux中命令进行创建,下面我来给大家介绍一个简单的数据库创建方法吧. 首选用putty连接linux服务器,进行命令行 ...

  5. pta总结1

    7-1 打印沙漏 (20 分) 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 所谓"沙漏形状",是指每行输出奇数个符 ...

  6. 会话技术、Cookie技术与Session技术

    一.会话技术  1. 存储客户端状态 会话技术是帮助服务器记住客户端状态(区分客户端)的.  2. 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话.会话技术就是记录这 ...

  7. Scala模式匹配| 隐式转换

    1. 模式匹配 Scala中的模式匹配类似于Java中的switch语法,但是更加强大.模式匹配语法中,采用match关键字声明,每个分支采用case关键字进行声明,当需要匹配时,会从第一个case分 ...

  8. Vim使用心得

    马上就要联赛啦. 学习一下vim 这是一个vim文档 http://vimcdoc.sourceforge.net/doc/ 这是一个优秀的vimrc配置 http://www.cnblogs.com ...

  9. centos7 yum安装LAMP

    说明:我安装后的版本号分别是: apache : Apache/2.4.6 (CentOS)mysql:5.6.42php:5.6.39 一.配置网络. 我们首先需要让我们的虚拟机能够连接上外网,这样 ...

  10. Unity项目导入的error

    5.6.3error 如下:An assembly with the same name `UnityEngine.UI' has already been imported. Consider re ...