百度地图聚合点new BMapLib.MarkerClusterer()用法及map.clearOverlays()不能清除聚合点问题

时候是我们需要在地图上添加覆盖物,但如果数据太多可能出现这种情况

这种看起来总觉得不舒服(密集恐惧症)

所以可以换成用聚合点

一下子清爽了很多,聚合点放大后还是可以显示普通点。

用法代码

 
  1. <!DOCTYPE html>

  2. <html>

  3. <head>

  4. <meta charset="utf-8" />

  5. <title></title>

  6. <link rel="stylesheet" href="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.css" />

  7. <link rel="stylesheet" href="<%=request.getContextPath()%>/pages/jsp/mapset/heatmap/css/DrawingManager_min.css" />

  8. <link rel="stylesheet" href="http://api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css" />

  9. <script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>

  10. <script type="text/javascript" src="https://api.map.baidu.com/api?v=2.0&ak=1XjLLEhZhQNUzd93EjU5nOGQ"></script>

  11. <script type="text/javascript" src="<%=request.getContextPath()%>/pages/jsp/area/js/baidu/MarkerTool_min.js"></script>

  12. <script type="text/javascript" src="<%=request.getContextPath()%>/pages/jsp/mapset/heatmap/heatmap_js/DrawingManager_min.js"></script>

  13. <script type="text/javascript" src="http://api.map.baidu.com/library/SearchInfoWindow/1.4/src/SearchInfoWindow_min.js"></script>

  14. <script src="<%=request.getContextPath()%>/pages/js/distanceTool.js" type="text/javascript" charset="utf-8"></script>

  15. <!--引入聚合点文件-->

  16. <script type="text/javascript" src="https://api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay_min.js"></script>

  17. <script type="text/javascript" src="https://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script>

  18. </head>

  19. <body>

  20. <div id="map" style="width:800px;height:500px;"></div>

  21. <script>

  22. var map = new BMap.Map('map');

  23. var poi = new BMap.Point(112.53, 37.87);

  24. map.enableScrollWheelZoom();

  25. map.centerAndZoom(poi, 12);

  26. //添加比例尺

  27. map.addControl(new BMap.ScaleControl());

  28. //初始化打点数据

  29. var markers=[];

  30. //初始化点聚合

  31. var markerClusterer=new BMapLib.MarkerClusterer(map, {markers:markers});

  32.  
  33.  
  34. //每次拖动屏幕,重新获取聚合点

  35. map.addEventListener("dragend",function(){

  36. var zoom=map.getZoom();

  37. console.log(zoom)

  38. if(zoom>17){

  39. //获取屏幕边界及四个点坐标

  40. var bound=map.getBounds();

  41. var minLat=bound.Xd;

  42. var maxLat=bound.Vd;

  43. var minLng=bound.Le;

  44. var maxLng=bound.He;

  45. var def=''+minLng+','+maxLat+','+maxLng+','+minLat+','+maxLng+','+maxLat+','+minLng+','+maxLat+','+minLng+','+maxLat+'';

  46. //此处用的后台接口,用于获取打点数据

  47. getStationsInPolygon(def,maxLng, minLng, maxLat, minLat)

  48.  
  49. }

  50. });

  51.  
  52. function getStationsInPolygon(areaDef, maxLng, minLng, maxLat, minLat) {

  53. $.ajax({

  54. url : '/floating/resource/selectDataPromote', // 请求连接

  55. type : "post", // 请求类型

  56. data : {

  57. "interfaceName" : "getStationsInPolygonNew",

  58. "areaDef" : areaDef,

  59. "maxLng" : maxLng,

  60. "minLng" : minLng,

  61. "maxLat" : maxLat,

  62. "minLat" : minLat

  63. }, // post时请求体

  64. dataType : 'json', // 返回请求的类型,有text/json两种

  65. async : false, // 是否异步

  66. success : function(data) {

  67. if (data.success) {

  68. //清除以前的点

  69. markerClusterer.clearMarkers(markers);

  70. //清除数组的数据

  71. markers=[];

  72. console.log(markers)

  73. //添加数据

  74. for (var i=0; i<data.data.length; i++) {

  75. var point = new BMap.Point(data.data[i].lacLong, data.data[i].lacLat);

  76. var marker = new BMap.Marker(point); // 创建标注

  77. markers.push(marker)

  78. }

  79. //添加聚合点

  80. markerClusterer.addMarkers(markers)

  81. console.log(markerClusterer)

  82. } else {

  83. alert("获取基站信息失败!");

  84. }

  85. } // 请求成功回调函数

  86. });

  87. }

  88.  
  89. //一键清除

  90. function clearAll() {

  91. //清除覆盖物

  92. map.clearOverlays();

  93. //清除聚合点

  94. markerClusterer.clearMarkers(markers);

  95. }

  96.  
  97.  
  98. </script>

  99. </body>

  100. </html>

总之就是初始化 var markerClusterer=new BMapLib.MarkerClusterer(map, {markers:markers});

每次获取数据后清空markers数组再添加新数据,可以先清空原覆盖物 markerClusterer.clearMarkers(markers),

或者markerClusterer.clearMarkers(),markers不需要写,因为初始化时就已经绑定数组了; 

添加聚合点覆盖物  markerClusterer.addMarkers(markers)

就是这么简单。

注意:

清空覆盖物不能单纯使用  map.clearOverlays(),这样只能清除普通的点。而对于聚合点而言,只是暂时消失,鼠标一拖动或者放大缩小就又出现了。

要用 markerClusterer.clearMarkers()  的方法才能真正清除

注意var markerClusterer=new BMapLib.MarkerClusterer(map, {markers:markers}) 只需要在全局中初始化一次

以后每次改变聚合点图时只需要改变数组,清除聚合点,再重新画点就可以 markerClusterer.addMarkers(markers)

原文地址:https://blog.csdn.net/lianzhang861/article/details/81387293

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值