在 Google Earth Engine 中按系统索引拆分要素集合?

C. *_*ley 3 gis google-earth-engine

我正在尝试从 GEE 导出大量功能集合。我意识到 Python API 比 Java 更容易实现这一点,但考虑到我的研究时间限制,我想看看是否可以分段提取特征集合,然后在导出后附加单独的 CSV 文件。

我尝试使用过滤功能来执行该任务,我以前见过在图像集合中使用过该功能。这是我想做的一个小例子

给定一个由 10 个空间点(称为“点”)组成的特征集合,我尝试创建一个仅包含前五个点的新特征集合:

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

当我执行此函数时,收到以下错误:“发生内部服务器错误”

我不确定为什么这段代码没有按预期执行。如果您比我更了解这个问题,请建议分割我的样本的替代方法,或者我的代码中的错误潜伏在哪里。

非常感谢!

小智 5

system:index 实际上是 GEE 为该功能提供的 ID,它不应该像数组中的索引一样使用。我认为 JS 应该足以导出大型功能集合,但是有一种方法可以在不依赖 system:index 的情况下完成您想做的事情,因为这可能不一致。

首先,最好了解您正在处理的功能的数量。这是因为,通常当您对大型要素集合使用size().getInfo()时,UI 可能会冻结,有时选项卡会变得无响应。这里我定义了 chunks 和 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")
}
Run Code Online (Sandbox Code Playgroud)