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

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. spring面向切面编程示例(xml配置形式vs@注解形式)

    一.xml配置形式 1.在Spring配置文件中增加面向切面配置当调用com.activemq.service.impl.ConsumerServiceImpl接口实现类的任意方法时执行切面类中的方法 ...

  2. 【原创】大叔经验分享(12)如何程序化kill提交到spark thrift上的sql

    spark 2.1.1 hive正在执行中的sql可以很容易的中止,因为可以从console输出中拿到当前在yarn上的application id,然后就可以kill任务, WARNING: Hiv ...

  3. 【原创】大叔问题定位分享(2)spark任务一定几率报错java.lang.NoSuchFieldError: HIVE_MOVE_FILES_THREAD_COUNT

    最近用yarn cluster方式提交spark任务时,有时会报错,报错几率是40%,报错如下: 18/03/15 21:50:36 116 ERROR ApplicationMaster91: Us ...

  4. 第四章:Oracle12c 数据库在linux环境安装

    一:搭建yum 仓库 对于新手可以参考此文:<Vmware Workstation _linux yum 仓库搭建>.<CentOS7.2 创建本地YUM源和局域网YUM源> ...

  5. git remote: HTTP Basic: Access denied Mac 使用Sourcetree 密码输错 再次输入解决方案

    删除下面的key即可

  6. 2017-2018-2 20155309南皓芯 Exp4 恶意代码分析

    实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. 答:我会使用sysmon工具来进行监控 ...

  7. [原创]iFPGA-Cable FT2232H JTAG & UART调试器

    iFPGA-Cable FT2232H JTAG & UART调试器 [特性] 采用FT2232H,双通道接口: 支持UART: 支持JTAG,Digilent SMT-1,TCK最大时钟频率 ...

  8. 手把手带你使用JS-SDK自定义微信分享效果

    https://www.cnblogs.com/backtozero/p/7064247.html

  9. websocket-heartbeat-js心跳检测库正式发布

    前言: 两年前写了一篇websocket心跳的博客——初探和实现websocket心跳重连.  阅读量一直比较大,加上最近考虑写一个自己的npm包,因此就完成了一个websocket心跳的检测库.在这 ...

  10. 【java】-- 多线程快速入门

    1.什么是进程?什么是线程?两者区别? 1.每个正在系统上运行的程序都是一个进程,每个进程包含一到多个线程,多线程处理就是允许一个进程中在同一时刻执行多个任务. 2.线程是一组指令的集合,或者是程序的 ...