在GEE中普通的List可以直接使用其自带的sort()方法排序,FeatureCollection也有自己的排序方法。对于元素是字典对象的数组如何排序,这里是一个简单的例子可以展示如何通过JavaScript实现对GEE的对象列表排序。
排序方法使用js原生的sort(...)排序方法,添加自定义的排序规则 sortByProp(…),通过这些自定义的规则可以实现对对对象列表排序,排序可以依照对象元素的多个key值。
var roi = ee.FeatureCollection('ft:1bvKTNQTx1N_iyzJGoo7tflhWMgtGzIFEOtr3mwsz');
var cdl_image = ee.Image('USDA/NASS/CDL/2014').select(0).rename('cdl');
var nlcd_image = ee.Image('USGS/NLCD/NLCD2011').select(0).rename('nlcd');
var areaStat = ee.Image.pixelArea().divide(1000 * 1000)
.addBands(cdl_image)
.reduceRegion({
reducer: ee.Reducer.sum().group(1),
geometry: roi,
scale: 30,
maxPixels: 2e7
});
print('area (km2)', areaStat);
/**
* asc 升序
* desc 降序
* item1,item2 元素
* prop 排序依据的元素以及对应的排序规则对象,
格式:{“aa”:”asc”, “bb”:”desc”}
规则说明:aa、bb...是排序依据的对象key,asc升序,desc降序
**/
function sortByProp(item1, item2, prop) {
for (var o in prop) {
if (item1[o] > item2[o]) {
return prop[o] === "asc" ? 1 : -1;
} else if (item1[o] < item2[o]) {
return prop[o] === "desc" ? 1 : -1;
}
}
return 0;
}
var groups = areaStat.get("groups");
// 使用异步方式获取数据
groups.getInfo(function(arr1){
var aa = [];
for(var i=0; i<arr1.length; i++) {
aa.push(arr1[i]);
}
print("raw list is: ");
print(aa);
print("+++++++++++++++");
var propOrders = {"group": "desc"};
// 调用js的sort排序方法
aa.sort(
function (a, b) {
return sortByProp(a, b, propOrders);
}
);
print("desc sort result");
print(aa);
// 获取数组列表的前五项
print("select 5 data");
print(aa.slice(0, 5));
});
// // 同步方法获取数据
// var arr1 = groups.getInfo();
// var aa = [];
// for(var i=0; i<arr1.length; i++) {
// aa.push(arr1[i]);
// }
// print("raw list is: ");
// print(aa);
// print("+++++++++++++++");
// var propOrders = {"group": "desc”};
// // 调用js的sort排序方法
// aa.sort(
// function (a, b) {
// return sortByProp(a, b, propOrders);
// }
// );
// print("desc sort result");
// print(aa);
// // 获取数组列表的前五项
// print("select 5 data");
// print(aa.slice(0, 5));