前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Google Earth Engine(GEE)——容易犯的错误4(errorMargin、reduceToVectors、reduceRegions() )

Google Earth Engine(GEE)——容易犯的错误4(errorMargin、reduceToVectors、reduceRegions() )

作者头像
此星光明
发布2024-02-02 08:13:56
1650
发布2024-02-02 08:13:56
举报

使用非零 errorMargin

对于可能的几何运算,在给定计算精度的情况下,尽可能使用最大的误差容限。误差幅度指定在几何操作期间(例如在重新投影期间)允许的最大允许误差(以米为单位)。指定较小的误差幅度可能会导致需要对几何图形(带坐标)进行密集化,这可能会占用大量内存。为您的计算指定尽可能大的误差范围是一种很好的做法:

代码语言:javascript
复制
var ecoregions = ee.FeatureCollection('RESOLVE/ECOREGIONS/2017');

var complexCollection = ecoregions.limit(10);
Map.centerObject(complexCollection);
Map.addLayer(complexCollection);

var expensiveOps = complexCollection.map(function(f) {
  return f.buffer(10000, 200).bounds(200);
});
Map.addLayer(expensiveOps, {}, 'expensiveOps');

使用小规模比例来进行reduceToVectors()

如果要将栅格转换为矢量,请使用适当的比例。指定一个非常小的比例会大大增加计算成本。将比例设置得尽可能高,以获得所需的精度。例如,要获取代表全球陆地的多边形:

代码语言:javascript
复制
var etopo = ee.Image('NOAA/NGDC/ETOPO1');

// 估算陆地边界大于-100米的
var bounds = etopo.select(0).gt(-100);

// Non-geodesic polygon.请注意在全局缩减中使用非测地线多边形。
var almostGlobal = ee.Geometry.Polygon({
  coords: [[-180, -80], [180, -80], [180, 80], [-180, 80], [-180, -80]],
  geodesic: false
});
Map.addLayer(almostGlobal, {}, 'almostGlobal');

var vectors = bounds.selfMask().reduceToVectors({
  reducer: ee.Reducer.countEvery(),
  geometry: almostGlobal,
  // 将比例设置为给定的最大可能
  // 计算所需的精度。
  scale: 50000,//这里你可以尝试分辨率设置小一些,发现计算时间会陡增
});
Map.addLayer(vectors, {}, 'vectors');

不要reduceToVectors()reduceRegions()

不要使用FeatureCollection返回的reduceToVectors()作为的输入reduceRegions()。相反,在调用之前添加要reduce的波段reduceToVectors()

代码语言:javascript
复制
var etopo = ee.Image('NOAA/NGDC/ETOPO1');
var mod11a1 = ee.ImageCollection('MODIS/006/MOD11A1');

// 大致的陆地边界。
var bounds = etopo.select(0).gt(-100);

// Non-geodesic polygon.
var almostGlobal = ee.Geometry.Polygon({
  coords: [[-180, -80], [180, -80], [180, 80], [-180, 80], [-180, -80]],
  geodesic: false
});

var lst = mod11a1.first().select(0);

var means = bounds.selfMask().addBands(lst).reduceToVectors({
  reducer: ee.Reducer.mean(),
  geometry: almostGlobal,
  scale: 1000,
  maxPixels: 1e10
});
print(means.limit(10));

请注意,减少另一个区域内一个图像的像素的其他方法包括 reduceConnectedComponents() 和/或分组 reducers

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用非零 errorMargin
  • 使用小规模比例来进行reduceToVectors()
  • 不要reduceToVectors()与reduceRegions()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档