利用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:

相關文章
相關標籤/搜索