从数据库中获取到4组数据,每组数据包括了四个参数:lng,lat,GpsStatus,Time,分别将每组数据带入函数addFeature中,addFeature函数的作用是判断点是否在警戒区域内,并用不同的颜色表示,在地图上在相应位置添加点。现在遇到的问题是:在函数processCompleted()内部,能够实现4组点是否在警戒区域的判断,但是传入的pointVector点只是最后一个点,相当于地图上只有最后一个点,4次判断的结果依次在这一个点上展现。
而且在项目中,需要实时展现所有点的位置和判断其是否在警戒区域内,如果一个点一个点来实现的话,可能会造成延迟。如果采用闭包,我一直没搞明白怎么来实现。
具体代码如下:烦请高手帮忙解决一下!
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
data=xmlhttp.responseText;//后台传回的数据
//console.log(data);
cc=data.split(";"); //把后台传回的数据以分号分割开,每组数据分别放入数组
//console.log(cc);
var n=cc.length-1;//获取后台传回几组数据,
for (i=0;i<cc.length-1;i++)
{
detail=cc[i].split(",");//将每组数据分别存储在数组detail中
denumber = detail[0];
lng = detail[1];
lat = detail[2];
GpsStatus=detail[3];
Time = detail[4];
addFeature(lng,lat,GpsStatus,Time);//调用画点函数
}
}
}
function addFeature(lng,lat,GpsStatus,Time){
point = new SuperMap.Geometry.Point(lng,lat);
pointVector = new SuperMap.Feature.Vector(point);
pointVector.time=Time;
var queryParam, queryByGeometryParameters, queryService;
queryParam = new SuperMap.REST.FilterParameter({name: "Landuse@XuChangStationMapSix"});//查询数据集名称或者图层名称,图层名称格式:数据集名称@数据源别名
queryByGeometryParameters = new SuperMap.REST.QueryByGeometryParameters({//Geometry查询参数类。 该类用于设置 Geometry查询的相关参数。
queryParams: [queryParam],//查询过滤条件参数数组。
geometry: point,//用于查询的几何对象。
spatialQueryMode: SuperMap.REST.SpatialQueryMode.INTERSECT//空间查询模式。INTERSECT相交。
});
queryService = new SuperMap.REST.QueryByGeometryService(url, {//Geometry 查询服务类.Geometry 查询服务类构造函数。url,服务的访问地址。
eventListeners: {//需要被注册的监听器对象。
"processCompleted": processCompleted,
"processFailed": processFailed
}
});
queryService.processAsync(queryByGeometryParameters);}
function processCompleted(queryEventArgs) { //console.log(point);
var i, result = queryEventArgs.result;
//console.log(queryEventArgs.result.recordsets.length);
if (result && result.recordsets) {
for (i=0, recordsets=result.recordsets, len=recordsets.length; i<len; i++) {
console.log(i);console.log(len);console.log(queryEventArgs.result.recordsets[i].features.length);
if (recordsets[i].features.length>0) //如果点在警戒区域内,将点设为红色,否则为蓝色
pointVector.style = {fillColor: "red",strokeColor: "yellow",pointRadius:6};
else
pointVector.style = {fillColor: "blue",strokeColor: "yellow",pointRadius:6};
vectorLayer.addFeatures(pointVector);
}
}
}