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

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】206. Reverse Linked List 链表反转

    链表反转,一发成功~ /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; ...

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

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

  3. sublime自动保存设置

    首选项——用户设置 (Preferences:Settings - User) 行末添加"save_on_focus_lost": true 注意用逗号分隔 保存即可 save_o ...

  4. 使用CompletionService结合ExecutorService批处理调用存储过程任务实例

    此实例为java多线程并发调用存储过程实例,只做代码记载,不做详细描述 1.线程池构造初始化类CommonExecutorService.java package com.pupeiyuan.go; ...

  5. 14.并发与异步 - 2.任务Task -《果壳中的c#》

    线程是创建并发的底层工具,因此具有一定的局限性. 没有简单的方法可以从联合(Join)线程得到"返回值".因此必须创建一些共享域.当抛出一个异常时,捕捉和处理异常也是麻烦的. 线程 ...

  6. git操作笔记《二》:github更新缓慢问题的解决办法

    从GitHub上拉取代码速度十分之慢,百度了一下,说是github的某些域名的dns解析被污染了. 解决方法: 方案一:可以花钱购买VPN服务,但是这对于学生党来说是不划算的. vpn 方案二:绕过d ...

  7. 权限管理——shiro

    1.shiro整合spring a.导入依赖 <properties> <shiro.version>1.2.4</shiro.version> </prop ...

  8. Elasticsearch学习笔记一

    Elasticsearch Elasticsearch(以下简称ES)是一款Java语言开发的基于Lucene的高效全文搜索引擎.它提供了一个分布式多用户能力的基于RESTful web接口的全文搜索 ...

  9. 修改终端terminal

    修改终端路径 显示的颜色 (1)在home目录中,新建 .dircolors: $vi .dircolors 输入下面内容 DIR 00;36 保存退出. (2)在 .bashrc文件中 $vi .b ...

  10. Data Science Project

    https://drivendata.github.io/cookiecutter-data-science/