利用javascript实现二维数组的筛选

  背景:ajax

在项目中,我须要对解析后的nc文件数据进行筛选,选出符合要求的点,绘制相应的polygon。api

代码:ajax获取某一时刻的数据数组

var url ="/api/config/PostCoordinates/"+times+"/0";
$.ajax({
type:"GET",
url:url,
success:function(data){
//画polygon
createPolygon(data);
},
error:function(data){
console.log(data);
}
});url

绘制polygon的方法,数据解析完成后,发现数据的是有规则的,每一行的维度都是同样的,那么为了筛选出边界点,我须要将维度不同的第一个点拿到,并将其push到数组中。同时,在实际的效果中,我发现生成的polygon并非我想要的。这样我发现利用arcgis绘制polygon的过程是按照点的添加顺序来绘制的,于是我不能只接将符合要求的点push到数组中,我还须要作进一步的操做,将同一行的最后一个点的数据放在另外一个数组中,并倒叙取出,再push到最终的数组中。代码以下:3d

//画polygon
function createPolygon(data){blog

//设置polygon的颜色填充
var polySymbolRed = new esri.symbol.SimpleFillSymbol(
esri.symbol.SimpleLineSymbol.STYLE_SOLID,
new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID,
new Color([0, 0, 0, 0]),3),
new Color([255, 106, 106,0.3])
);io


var polygon = new Polygon(new SpatialReference({wkid:4326}));console

//定义数组
var ring = new Array();var pts,pts2;
var result = new Array();
for(var i=0;i<data.length-1;i++){function

//数据点的第一个和最后一个点push到数组中
if(i==0||i==data.length-1){
pts = new Point(data[i].winddir,data[i].windspeed,sr);
ring.push(pts);
}cgi

//将维度不同的第一个点,和前一个点push到不一样的数组中
if(data[i].windspeed!=data[i+1].windspeed){
pts2 = new Point(data[i+1].winddir,data[i+1].windspeed,sr);
ring.push(pts2);
pts = new Point(data[i].winddir,data[i].windspeed,sr);
result.push(pts);
}
}

//倒叙取出同一行的最后一个点的数据
for(var j=result.length-1;j>0;j--){
console.log("result is "+result[j]);
ring.push(result[j]);
}
//绘制polygon
polygon.addRing(ring);
var gra = new esri.Graphic(polygon,polySymbolRed);
map.graphics.add(gra);
}

部分数据以下,windspeed是维度,winddir为经度,数组长度580:

最终的效果以下,粉红色的部分就是从nc文件中解析出来的数据绘制的polygon:

相关文章
相关标签/搜索