Google Earth Engine(GEE)——容易犯的错误3(不必要的情况下不要使用clip())

本文讨论了在使用遥感影像处理时,如何避免不必要地使用clip()函数以减少计算时间。建议仅在需要时进行裁剪,并推荐使用reduceRegion()时指定区域,或使用clipToCollection()处理复杂集合。同时,避免在大型或复杂集合上使用featureCollection.geometry(),以优化内存使用和计算效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

clip()不必要地使用会增加计算时间。clip()除非对您的分析有必要,否则请避免 。如果您不确定,请不要剪辑。一个错误使用剪辑的例子:

- 不要不必要地剪辑输入!

var table = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017');
var l8sr = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR');

var chad = table.filter(ee.Filter.eq('country_na', 'Chad')).first();

// Do NOT clip unless you need to.
var unnecessaryClip = l8sr
    .select('B4')                           // Good.
    .filterBounds(chad.geometry())          // Good.使用边界顾虑比较好
    .filterDate('2019-01-01', '2019-12-31') // Good.
    .map(function(image) {
      return image.clip(chad.geometry());   // NO! Bad! Not necessary.这个操作非必要的
    })
    .median()
    .reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: chad.geometry(),
      scale: 30,
      maxPixels: 1e10,
    });
print(unnecessaryClip);

//对于clip()我们一般只是再导出结果的时候,或者自己的研究区数据的时候才会使用!

可以完全跳过剪切输入图像,因为在reduceRegion()调用中指定了区域 :

- 在输出上指定区域。

var noClipNeeded = l8sr
    .select('B4')                           // Good.
    .filterBounds(chad.geometry())          // Good.
    .filterDate('2019-01-01', '2019-12-31') // Good.
    .median()
    .reduceRegion({
      reducer: ee.Reducer.mean(),
      geometry: chad.geometry(), // 这里可以代替,应为你的研究区就是这个所以放进来就好,另外你自己上传的矢量文件后面一定要加入.geometry()否则有可能会报错!
      scale: 30,
      maxPixels: 1e10,
    });
print(noClipNeeded);

如果您需要剪辑复杂的集合,请使用clipToCollection() 

如果您确实需要剪辑某些内容,并且要用于剪辑的几何图形位于集合中,请使用clipToCollection()

var ecoregions = ee.FeatureCollection('RESOLVE/ECOREGIONS/2017');
var image = ee.Image('JAXA/ALOS/AW3D30_V1_1');

var complexCollection = ecoregions
    .filter(ee.Filter.eq('BIOME_NAME',
                         'Tropical & Subtropical Moist Broadleaf Forests'));
Map.addLayer(complexCollection, {}, 'complexCollection');

var clippedTheRightWay = image.select('AVE')//这里在裁剪的时候一般都会提示让你选择波段,如果全部裁剪的化会加大计算量
    .clipToCollection(complexCollection);
Map.addLayer(clippedTheRightWay, {}, 'clippedTheRightWay', false);

不要在大型和/或复杂的集合上使用featureCollection.geometry()或 featureCollection.union(),这可能会占用更多内存。这一点就是如果你的矢量集合中有很多元素,那么会严重的占用内存

不要使用复杂的集合作为reducer的区域 

如果您需要进行空间缩减,以便减速器汇集来自 a 中多个区域的输入FeatureCollection,请不要 将其featureCollection.geometry()作为geometry输入提供给减速器。相反,使用clipToCollection()一个足够大的区域来包含集合的边界。例如:

var ecoregions = ee.FeatureCollection('RESOLVE/ECOREGIONS/2017');
var image = ee.Image('JAXA/ALOS/AW3D30_V1_1');

var complexCollection = ecoregions
    .filter(ee.Filter.eq('BIOME_NAME', 'Tropical & Subtropical Moist Broadleaf Forests'));

var clippedTheRightWay = image.select('AVE')
    .clipToCollection(complexCollection);
Map.addLayer(clippedTheRightWay, {}, 'clippedTheRightWay');
//这里使用裁剪后的集合,而不是直接使用量很大的集合,这要那个有助于提高计算速度
var reduction = clippedTheRightWay.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: ee.Geometry.Rectangle({
    coords: [-179.9, -50, 179.9, 50],  // Almost global.
    geodesic: false
  }),
  scale: 30,
  maxPixels: 1e12
});
print(reduction); // If this times out, export it.

Google Earth Engine (GEE) 的 JavaScript 环境中,如果你想筛选一波段(例如波段B02)值相同的所有影像并进行某种计算,可以按照以下步骤操作: 1. **获取需要筛选的波段**: 首先,选择你要比较的波段,假设波段名为'B02': ```javascript var bandToCompare = image.select('B02'); ``` 2. **创建一个值数组**: 使用 `reduce(ee.Reducer.toList())` 函数对所有影像中该波段的值进行汇总,得到一个数组: ```javascript var valuesList = imageCollection.map(bandToCompare.reduce(ee.Reducer.toList())); ``` 3. **筛选具有相同波段值的影像**: 使用 `where` 函数找出所有波段值相等的影像,这里假设你想要找到第一个出现的相同值: ```javascript var sameValueImgs = valuesList.map(function(valuesListPerImage) { return imageCollection.filter(ee.Filter.inList('system_index', valuesListPerImage)); }); ``` 这里的 `system_index` 可能是你想要基于某个属性进行筛选的字段。 4. **进行计算**: 对筛选后的影像集合进行计算,例如计算均值、总和或其他统计量: ```javascript var result = sameValueImgs.flatten().reduce(ee.Reducer.mean(), 'B02'); ``` 5. **获取最终结果**: 结果将是所有匹配波段值的影像在指定波段的平均值(在这个例子中)。 ```javascript var finalResult = result.clip(aoi); // aoi是你感兴趣的地理区域 ``` 请注意,如果有多组相同波段值,上述代码只会返回一组影像。对于每组影像,你可能需要遍历多次来处理所有相关的组合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此星光明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值