87,903
社区成员
发帖
与我相关
我的任务
分享
//外部若干全局数组,下面为例子,只是为了说明有多个全局的数组,数组元素个数也不一定是100
var g_arr1=new array(100);
var g_arr2=new array(100);
var g_arrn=new array(100);
function ShowMarkers(bClearMarkers) {
var typeArray = new Array(100);
var nameArray = new Array(100);
var infoArray = new Array(100);
var brngArray = new Array(100);
var points = [];//将大数组分成小数组存放。
for (; i < 5; i++) {
points[i] = [];
points[i].push(1); points[i].push(2); points[i].push(3); points[i].push(n);//只是说明里面保存了多个坐标点
}
var ajaxLen = points.length;
//闭包和回调。
for (; j < ajaxLen; j++) {
(function () {
var jj = j;
//回调函数,添加marker。
var callback = function (data) {//data是经过转换后的坐标数组
//具体的显示/刷新设备位置信息代码,此处省略。因为注释掉一样泄漏内存
callback = null;//清理内存。
data = null;
jj = null;
}
convertor.translate(points[j], 1, 5, callback);//坐标转换新的数据图标添加到地图上。此函数为异步函数,需要等待百度服务器返回转换过后的坐标
})();
}
}
//几个全局数组,保存最新的站点信息
var pointsArrayMarker = new Array();
var nameArrayMarker = new Array();
var typeArrayMarker = new Array();
var infoArrayMarker = new Array();
var brngArrayMarker = new Array();
var ArrayMarker = new Array();
function ShowMarkers(bClearMarkers) {
if (bClearMarkers == "1")
{
DeleteMarkers();
}
var typeArray = new Array();
for (var i = 0; i < typeArrayMarker.length; i++) {
if (refreshArrayMarker[i] == '0')
continue;
typeArray.push(typeArrayMarker[i]);
}
var nameArray = new Array();
for (var i = 0; i < nameArrayMarker.length; i++) {
if (refreshArrayMarker[i] == '0')
continue;
nameArray.push(nameArrayMarker[i]);
}
var infoArray = new Array();
for (var i = 0; i < infoArrayMarker.length; i++) {
if (refreshArrayMarker[i] == '0')
continue;
infoArray.push(infoArrayMarker[i]);
}
var brngArray = new Array();
for (var i = 0; i < brngArrayMarker.length; i++) {
if (refreshArrayMarker[i] == '0')
continue;
brngArray.push(brngArrayMarker[i]);
}
var len = pointsArrayMarker.length;
var points = [];//将大数组分成小数组存放。
var ajaxId = 0;//第几组请求
var i = 0;
var j = 0;
var ajaxLen = 0;//要发起几次请求。
var gap = 10;
var iCountRefresh = 0;
//数组分装
for (; i < len; i++) {
if (refreshArrayMarker[i] == '0') {
continue;
}
if (iCountRefresh % gap == 0) {
ajaxId = Math.floor(iCountRefresh / gap);
points[ajaxId] = [];
}
iCountRefresh++;
points[ajaxId].push(pointsArrayMarker[i]);
}
ajaxLen = points.length;
//闭包和回调。
for (; j < ajaxLen; j++) {
(function () {
//var jj = j; //闭包特点:内部函数可以访问外部函数变量
//回调函数,添加marker。
var callback = function (data) {
var ajaxId = jj;
//var len = pointsArrayMarker.length, i;
var len = typeArray.length, i;
var base = ajaxId * gap; //本数组在原始大数组中的起始位。
if (data.status === 0) {
var dateLen = data.points.length;
for (i = 0; i < dateLen; i++) {
if (bClearMarkers == "1")
{
var marker = new BMap.Marker(data.points[i]);
if (typeArray[base + i] == '1') {
marker.setIcon(iconGreen);
marker.setRotation(brngArray[base + i]);
marker.setShadow(iconGreen);
}
else if (typeArray[base + i] == '0') {
marker.setIcon(iconGrey);
marker.setRotation(brngArray[base + i]);
marker.setShadow(iconGrey);
}
map.addOverlay(marker);
var label = new BMap.Label(nameArray[base + i], { offset: new BMap.Size(20, -5) });
marker.setLabel(label);
ArrayMarker.push(marker);
var sContent = GetStringHtmlInfoWindow(nameArray[base + i], infoArray[base + i]);
AddInfoWindow(marker, sContent);
if ((bShowMarkerInfoWindow == 1) && (nameMarkerInfowindow == nameArray[base + i])) {
marker.V.click();
}
}
else
{
var ii = 0;
for (ii = 0; ii < ArrayMarker.length; ii++)
{
if (ArrayMarker[ii].getLabel().content == nameArray[base + i])
break;
}
if (ii != ArrayMarker.length) {
ArrayMarker[ii].setPosition(data.points[i]);
if (typeArray[base + i] == '1') {
ArrayMarker[ii].setIcon(iconGreen);
ArrayMarker[ii].setRotation(brngArray[base + i]);
//ArrayMarker[ii].setShadow(iconGreen);
}
else if (typeArray[base + i] == '0') {
ArrayMarker[ii].setIcon(iconGrey);
ArrayMarker[ii].setRotation(brngArray[base + i]);
//marker.setShadow(iconGrey);
}
var sContent = GetStringHtmlInfoWindow(nameArray[base + i], infoArray[base + i]);
ArrayInfowindow[ii].setContent(sContent);
}
}
}
}
callback = null;//清理内存。
data = null;
jj = null;
}
convertor.translate(points[j], 1, 5, callback);//坐标转换新的数据图标添加到地图上。
})();
}
ClearMarkerArray();//清空最上面全局数组
}
//省略载入百度地图相关代码
var points = new Array();
points.push(new BMap.Point(114.532752, 30.49466));
points.push(new BMap.Point(114.532652, 30.49466));
points.push(new BMap.Point(114.532552, 30.49466));
points.push(new BMap.Point(114.532452, 30.49466));
points.push(new BMap.Point(114.532352, 30.49466));
function ShowMarkers()
{
var callback = function (data) {
}
convertor.translate(points, 1, 5, callback);//坐标转换新的数据图标添加到地图上。
}
setInterval(ShowMarkers,200);