标签:
需求如下:地图上加载上万个点。使用marker发现点太多页面会卡死,研究发现可以使用聚合及海量点实现。
js代码如下:
//聚合实现代码 function ss(markerArr){//markerArr数据库数据查询的结果 var markers = []; var pt = null; var i = 0; for (; i < markerArr.length; i++) { pt = new BMap.Point(markerArr[i].longitude, markerArr[i].latitude); markers.push(new BMap.Marker(pt)); } var markerClusterer = new BMapLib.MarkerClusterer(map, {markers:markers}); } //海量点实现代码 function sss(){ var points = []; // 添加海量点数据 for (var i = 0; i < markerArr.length; i++) { points.push(new BMap.Point(markerArr[i].longitude, markerArr[i].latitude)); } var options = { size: 6, shape: 2, color: '#d340c3' }; basestationPointCollection = new BMap.PointCollection(points, options); // 初始化PointCollection basestationPointCollection.addEventListener('click', function (e) { var basestationName="";//名称 var basestationType="";//地址 //关于自定义信息 修改json [[经度,维度,1,名称,地址,电话]] //循环查出值 for (var i = 0; i < markerArr.length; i++) { points.push(new BMap.Point(markerArr[i].longitude,markerArr[i].latitude)); if(markerArr[i].longitude==e.point.lng&&markerArr[i].latitude==e.point.lat){//经度==点击的,维度 basestationName=markerArr[i].basestationName; basestationType=markerArr[i].basestationType; break; } } var point = new BMap.Point(e.point.lng, e.point.lat); var opts = { width: 250, // 信息窗口宽度 height: 70, // 信息窗口高度 title:"", // 信息窗口标题 enableMessage: false,//设置允许信息窗发送短息 } var infowindow = new BMap.InfoWindow("基站名称:"+basestationName+"<br/>基站类型:"+basestationType); map.openInfoWindow(infowindow, point); }); map.addOverlay(basestationPointCollection); // 添加Overlay } //地图上自定义控件:自定义多选框 function showMap(){ map = new BMap.Map("information_date",{minZoom:6,maxZoom:17}); // 创建地图实例 if(city==""){ map.centerAndZoom("西安",14); // 初始化地图,设置中心点坐标和地图级别。 }else{ map.centerAndZoom(city,14); // 初始化地图,设置中心点坐标和地图级别。 } map.enableScrollWheelZoom(true); //启用滚轮放大缩小 //向地图中添加缩放控件 var ctrlNav = new window.BMap.NavigationControl({ anchor: BMAP_ANCHOR_TOP_LEFT, type: BMAP_NAVIGATION_CONTROL_LARGE }); map.addControl(ctrlNav); //向地图中添加比例尺控件 var ctrlSca = new window.BMap.ScaleControl({ anchor: BMAP_ANCHOR_BOTTOM_LEFT }); map.addControl(ctrlSca); // 定义一个控件类,即function function ZoomControl(){ // 默认停靠位置和偏移量 this.defaultAnchor = BMAP_ANCHOR_TOP_RIGHT; this.defaultOffset = new BMap.Size(10, 10); } // 通过JavaScript的prototype属性继承于BMap.Control ZoomControl.prototype = new BMap.Control(); // 自定义控件必须实现自己的initialize方法,并且将控件的DOM元素返回 // 在本方法中创建个div元素作为控件的容器,并将其添加到地图容器中 ZoomControl.prototype.initialize = function(map){ // 创建一个DOM元素 var div = document.createElement("div"); var business = div.appendChild(document.createElement("input")); div.appendChild(document.createTextNode("营业厅信息")); div.appendChild(document.createElement("br")) var cell = div.appendChild(document.createElement("input")); div.appendChild(document.createTextNode("4G工参信息")); div.appendChild(document.createElement("br")) var basestation = div.appendChild(document.createElement("input")); div.appendChild(document.createTextNode("规划基站信息")); business.type="checkbox"; business.name="message"; business.id="bus" business.checked="checked"; cell.type="checkbox"; cell.name="message"; cell.id="cel" cell.checked="checked"; basestation.type="checkbox"; basestation.name="message"; basestation.id="bas"; basestation.checked="checked"; // 设置样式 div.style.cursor = "pointer"; // div.style.border = "1px solid gray"; div.style.backgroundColor = "white"; div.style.width='120px' // 绑定事件,点击一次放大两级 business.onclick = function(e){//营业厅 if(document.getElementById("bus").checked){//是否被选中 showMapMessage(true,false,false); }else{ showHall(); } } cell.onclick = function(e){//4G工参 if(document.getElementById("cel").checked){//是否被选中 showMapMessage(false,false,true); }else{ showCell(); } } basestation.onclick = function(e){//规划基站 if(document.getElementById("bas").checked){//是否被选中 showMapMessage(false,true,false); }else{ showBasestation(); } } // 添加DOM元素到地图中 map.getContainer().appendChild(div); // 将DOM元素返回 return div; } // 创建控件 var myZoomCtrl = new ZoomControl(); // 添加到地图当中 map.addControl(myZoomCtrl); }
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=密钥"></script> <script type="text/javascript" src="http://api.map.baidu.com/library/TextIconOverlay/1.2/src/TextIconOverlay_min.js"></script> <script type="text/javascript" src="http://api.map.baidu.com/library/MarkerClusterer/1.2/src/MarkerClusterer_min.js"></script> <script type="text/javascript"> var path = "<%=request.getContextPath()%>"; var hall = "<%=request.getContextPath()%>/common/my_resource/picture/hall.png"; </script> </head> <body style="height:100%; width:100%"> <!-- 数据div --> <div id="information_date" ></div> </body>
标签:
原文地址:http://blog.csdn.net/yeyujiao8888/article/details/51331141