
LonghaoWang
2023/04/01阅读:78主题:橙心
GEE批量删除Asset里的ImageCollection
引言
众所周知,GEE的内存是经常容易超限的,使得在做运算的时候不得不导出中间结果到Asset里
如果你的代码涉及到Join
,Array
等相关函数或运算,这些函数非常占用内存,一般需要导出中间结果
将图像批量导出到Asset比较简单,只需要创建一个ImageCollection:

然后下载一个Open Earth Engine扩展,写循环批量导出,一键RUN ALL就可以。

但是后续数据删除就很麻烦了,当你点击Delete:

会要求你删除完ImageCollection中所有的Image才行

如图所示我现在有900多张Image,一个一个点击删除要点击到猴年马月。
现在我探索了两种方法,供大家使用:
GEE JS批量删除
第一种是利用Javascript写个批量删除的函数
循环删除代码
该函数通过将ImageCollection转换为List,逐个获取ID,循环调用ee.data.deleteAsset(assetId)
直至删除完全
var pkgs = {};
pkgs.rmAsset = function(ImgCollection, ImageCollectionID ){
var n = ImgCollection.size().getInfo();
var colList = ImgCollection.toList(n);
var assetFolder = ImageCollectionID + '/';
for (var i = 0; i < n; i++) {
var img = ee.Image(colList.get(i));
var id = img.id().getInfo()
var assetId = assetFolder+id;
ee.data.deleteAsset(assetId);
}
}
exports = pkgs;
该函数已经共享了,可以通过以下语句调用:
var pkg_delete = require('users/wanglonghao/pkgs:pkg_asset');
pkg_delete.rmAsset(imageCollection, AssetID)
其中ImageCollection
是你要把准备删除的Asset里的ImageCollection导入:

AssetID
是准备删除的Asset里的ImageCollection的ID,即下图的ID直接复制成字符串

函数运行
最后不断弹出窗口提示你是否确认删除,加载一个按键精灵脚本就可以挂机删除了:

最后删除完之后就可以移除整个ImageCollection了:

GEE python批量删除
如果Javascript需要不断点击,而python就省却了这一步骤:
循环删除代码
首先授权GEE账号
import ee
ee.Authenticate()
粘贴code token,直到successfully

获取AssetID相关信息,还是直接复制上面的ImageCollection ID:
assetID='projects/pml_evapotranspiration/test/Yangtze/Albedo_raw'
!earthengine asset info {assetID}

获取AssetID对应目录下的全部内容,有点像Linux操作:
assetList=!earthengine ls {assetID}
print(assetList)

这里是输出了一个子AssetID的List,这样循环整个List删除就行了:
for i in range(len(assetList)):
deleteFile = assetList[i]
!earthengine rm {deleteFile}

-
这样就会后台批量删除,而不用一个个点击确定
-
由于网络问题,删除太多影像可能导致会遗漏一些
-
如本次删除了900多张就遗漏了两张

再重复运行一边就可以了:

作者介绍
