百度地图-相同marker点聚合后获取聚合点里面的数据

因为公司的业务 录入很多像xx县xx镇xx村xx组这样的人员数据,所以就会有很多的重复的marker点 但却是表示不同的人员数据。上线后才发现很多这样的聚合点根本点都点不开。百度了一下,发现聚合点下面的数据根本无法拿到。当时就只是简单快速的处理了下,将相同的点乘以一个不大不小的随机数,让点的经纬度不再重合。但是这样处理了就导致很多位置都偏移了,运营虽然提过这个问题,但是后面搁置了。
直到最近又做了一个类似的项目,遇到了同样的问题。这次的处理方式是:点击聚合点的时候画一个圆,然后判断点是否在聚合点里面。分享一下:

1. 准备工作:将代码敲到实现聚合点,像下图
在这里插入图片描述
2. 给聚合点绑定点击事件 在markerClusterer.js里面,并在点击的时候画一个圆。

MarkerClusterer.prototype._redraw = function () {
        this._clearLastClusters();
        this._createClusters();
        var map=this._map;
        for(var i=0,cluster;cluster=this._clusters[i];i++){//遍历所有的聚合点对象
            cluster._clusterMarker.onclick=function(e){//在每个聚合点对象的视图对象上绑定事件
                var point = new BMap.Point(e.point.lng, e.point.lat);
                var circle = new BMap.Circle(point,50,{
                        strokeColor: "transparent",
                        strokeWeight: 1,
                        fillColor: "green",
                        fillOpacity: 0.1
                });
                map.addOverlay(circle);
                //判断坐标是否在圆形内
                mapObj.isCircle(circle);
            }
        }
    };

3.拿到所有点数据里面重复的数据,组成一个新数组:newArry:[{obj1},{obj2},…]

4.判断点是否在圆形区域内,并且拿到点里面的数据,拿到之后显示在页面上
~需要引入<script type="text/javascript" src="http://api.map.baidu.com/library/GeoUtils/1.2/src/GeoUtils_min.js"></script>
~点击的时候循环newArry数组,使用百度API判断点是否在圆形区域if(BMapLib.GeoUtils.isPointInCircle(point,circle))

//拿到相同的聚合点里面的数据
clustereEeffect.prototype.isCircle=function(circle){
    //1.先拿到所有点数据里面重复的数据
    var repeat=this.sortArr(testPoint, 'lat');//返回一个新的数组,将相同对象添加到同一个数组
    //console.log(repeat);
    //拿到重复的对象
	var newArry=[];
	for (var i in repeat){
		if(repeat[i].length>1){
			newArry.push(repeat[i][0]);
		}
    }
    console.log(newArry)
    //2.判断点是否在圆形区域内
    for (var k in newArry){
		var point = new BMap.Point(newArry[k].lng,newArry[k].lat);// 创建点坐标
		if(BMapLib.GeoUtils.isPointInCircle(point,circle)){
            console.log("该point 在 circle内");
			var getArray=this.getPointData(point.lng,point.lat,testPoint);
			console.log(getArray);
			var liHtml="<a href='javascript:;' οnclick='mapObj.hideSameBox()'>关闭</a>";
			for (var i in getArray) {
				liHtml+="<li>"+getArray[i].name+"</li>"
			}
			$("#same_data").html(liHtml);
			$("#same_data").show();
		}else
		{
			console.log("该point不在circle内");
		}
	}
};

5.效果如图
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值