在Google Earth Engine中按系统索引拆分功能集?

时间:2019-07-01 17:36:29

标签: gis google-earth-engine

我正在尝试从GEE导出大型功能集。我意识到Python API比Java更容易实现此功能,但是由于研究时间有限,我想看看是否可以分块提取要素集合,然后在导出后附加单独的CSV文件。

我尝试使用过滤功能来执行任务,这是我以前看到的用于图像收集的功能。这是我正在尝试做的一个小例子

给出一个称为“点”的10个空间点的要素集合,我试图创建一个仅包含前五个点的新要素集合:

var points_chunk1 = points.filter(ee.Filter.rangeContains('system:index',0,5));

执行此功能时,出现以下错误:“发生内部服务器错误”

我不确定为什么此代码未按预期执行。如果您比我对这个问题了解更多,请提供有关拆分样本的替代方法或代码中的错误潜伏之处的建议。

非常感谢!

1 个答案:

答案 0 :(得分:0)

system:index实际上是GEE为该功能指定的ID,不应像数组中的index那样使用。我认为JS应该足以导出大型功能集,但是有一种方法可以不依赖system:index来完成您想做的事情。

首先,了解您要处理的功能数量是一个好主意。这是因为通常在将 size()。getInfo()用于大型功能部件集合时,UI可能会冻结,并且有时选项卡会变得无响应。在这里,我定义了块和collectionSize。它应该在客户端定义,因为我们要在循环中进行导出,这在服务器大小循环中是不可能的。在循环中,您可以简单地从不同点开始创建要素的子集,方法是将要素转换为列表并将子集改回要素集合。

var chunk = 1000;
var collectionSize = 10000
for (var i = 0; i<collectionSize;i=i+chunk){
  var subset = ee.FeatureCollection(fc.toList(chunk, i));
  Export.table.toAsset(subset, "description", "/asset/id")
}