1. 循环遍历创建标注(如果标注过多会造成浏览器卡顿状态,可以采用创建海量标注方式)
function getNearbySite(lng, lat) { $.ajax({ url: ``, method: 'get', data: { }, success: function (res) { // console.log(res) //获取站点x,y res.stations.forEach((ele, index) => { var obj = {} obj.x = ele.longitude obj.y = ele.latitude pointArr.push(obj) var points = new BMap.Point(pointArr[index].x, pointArr[index].y);//创建坐标点 markerFun(points, index, ele.type); }) }, dataType: 'json' }) } function markerFun(points, i, type) { var label var icon = new BMap.Icon("./images/map_04.png",new BMap.Size(30,30)); //自定义标注 var markers = new BMap.Marker(points, { icon: icon }); label = new BMap.Label(i, { offset: new BMap.Size(5, 5) }); //创建标记,修改label样式,(可以用来存放需要传递的数据 label.setStyle({ background: "none", color: '#fff'});//对label 样式隐藏 markers.setLabel(label); //把label设置到maker上 //点击标注触发click事件 markers.addEventListener('click', function (e) { $("#id").html(e.target.getTitle()); //这里就可以获取到marker的id }); map.addOverlay(markers); //将标注添加到地图中 }
2. 创建海量标注点(海量标注点不可以自定义标注样式)
var pointArr = [] //暂存经纬度 res.stations.forEach((ele, index) => { var obj = {} obj.x = ele.longitude obj.y = ele.latitude pointArr.push(obj) //根据数组创建海量点 if (document.createElement('canvas').getContext) { // 判断当前浏览器是否支持绘制海量点 var points = [] points.push(new BMap.Point(pointArr[index].x, pointArr[index].y)); var options = { shape: BMAP_POINT_SHAPE_WATERDROP, //标注点形状 color:'#0f0', SizeType: BMAP_POINT_SIZE_HUGE } var pointCollection = new BMap.PointCollection(points, options); // 初始化PointCollection map.addOverlay(pointCollection); // 添加Overlay pointCollection.addEventListener('click', function (e) { alert('q') }); } else { alert('请用chrome、safari、IE8+以上浏览器查看'); } })
在切换类型的时候,需要删除之前类型创建的标注重新渲染
map.clearOverlays()//创建新的标注之前先删除旧的
来源:https://www.cnblogs.com/xhrr/p/11233694.html