Разделить коллекцию объектов по системному индексу в Google Earth Engine? - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь экспортировать большую коллекцию объектов из GEE. Я понимаю, что API-интерфейс Python позволяет сделать это проще, чем Java, но, учитывая временные ограничения на мои исследования, я хотел бы посмотреть, смогу ли я извлечь коллекцию объектов по частям, а затем добавить отдельные CSV-файлы после экспорта.

Я пытался использовать функцию фильтрации для выполнения задачи, которую я видел ранее с коллекциями изображений. Вот небольшой пример того, что я пытаюсь сделать

Учитывая набор пространственных объектов из 10 пространственных точек, называемых «точками», я попытался создать новый набор пространственных объектов, который включает только первые пять точек:

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

Когда я выполняю эту функцию, я получаю следующую ошибку: «Произошла внутренняя ошибка сервера»

Я не уверен, почему этот код не выполняется должным образом. Если вы знаете больше, чем я, об этой проблеме, пожалуйста, посоветуйте альтернативные подходы к разбиению моего образца или о том, где скрывается ошибка в моем коде.

Большое спасибо!

1 Ответ

0 голосов
/ 03 июля 2019

system: индекс на самом деле является идентификатором, данным GEE для функции, и он не должен использоваться как индекс в массиве.Я думаю, что JS должно быть достаточно для экспорта большой коллекции объектов, но есть способ сделать то, что вы хотите сделать, не полагаясь на system: index, поскольку это может быть непоследовательным.

Во-первых, это было бы хорошей идеейзнать количество функций, с которыми вы имеете дело.Это происходит потому, что, как правило, когда вы используете size (). GetInfo () для больших коллекций объектов, пользовательский интерфейс может зависнуть, и иногда вкладка перестает отвечать на запросы.Здесь я определил куски и 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")
}
...