第125期:高德地图中创建了4000个自定义Marker

lxf2023-02-17 01:53:09

封面图

第125期:高德地图中创建了4000个自定义Marker

从高德地图官网中截得一个画面

场景

前两天在做一个热力图的效果,需求是用高德地图绘制热力图,然后热力图支持点击事件,然后获取后端返回的具体的点坐标信息,根据这个信息去取别的信息弹框展示,大致就这么个需求。

然后,查看文档的时候,发现:地图的点击事件和热力图的点击事件不是一回事儿

简而言之:地图支持点击事件,获取地图上的坐标;但是,热力图没有点击事件,所以无法获取热力图中具体的点的信息

获取不到具体的点的信息,下面的业务逻辑就无从谈起。

跟后端商量了了一下,最终的解决方案改为:

点击地图,拾取地图坐标后找出距离这个坐标最近的点,然后弹框展示后续的业务逻辑。

这样一来,业务逻辑就顺理成章的完成了。

另一个需求

恰逢另外一个同学也有一个热力图的需求,考虑到他那边上线安排比较着急,热力图又不能支持点击事件,获取不到具体的信息,所以用了另外一个方案:用自定义Marker将所有的点标记出来

功能发布之后,第二天后端人员反馈地图有严重的卡顿现象

然后就开始排查原因,如下图:

第125期:高德地图中创建了4000个自定义Marker

这个图是有2000个点的时候,地图的缩放功能还算是比较流畅;但是当坐标数量增加到4000左右,地图已经相当卡顿了。

第125期:高德地图中创建了4000个自定义Marker

4200个点

为什么会这样呢? 打开控制台,找到Marker的Dom元素,我们会发现:Marker其实是用固定定位标记在地图上的一堆Dom元素

Marker

第125期:高德地图中创建了4000个自定义Marker

这样一来,马上就真相大白了:这么多Dom节点,无限制的触发DOM的回流机制浏览器必定是吃不消的,何况4000个点,只是数据中很少的一部数据。

总结

  • 当没有合适的技术方案时,可以使用一些其他方案暂时代替,先支持业务,后进行优化迭代
  • 地图的自定义Marker使用场景时,理论上也是有数量限制的,宜少不宜多。

其实我想知道这么多点,是怎么绘制到地图上的,分批创建吗? 有可能吧~