You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Google Earth Engine中利用陆水掩码筛选六边形网格陆地单元

Google Earth Engine 陆地区域六边形网格筛选方案

问题解答

  1. 利用水陆信息筛选FeatureCollection的方法
    通过对每个六边形网格单元,在陆水掩码图像上统计陆地面积占比,保留陆地占比大于0的单元(或根据需求设置阈值,比如占比超过10%),排除纯水域网格。

  2. 是否需要转换陆水掩码为几何?
    不需要转换为几何,直接使用ee.Image类型的陆水掩码即可操作。核心思路是:

  • 先定义陆地区域的掩码(比如MOD44W里water_mask为0代表陆地)
  • 遍历FeatureCollection中的每个网格,用reduceRegion计算该网格内陆地的面积或占比
  • 给每个Feature添加陆地占比属性,再基于该属性筛选
  1. 若需转换几何的方案(不推荐)
    如果一定要转,可将陆水掩码的陆地区域转成Polygon/MultiPolygon类型的FeatureCollection,方法是使用ee.Image.reduceToVectors(),但这种方法处理大范围数据时效率极低,远不如直接统计属性高效。

  2. 适合的过滤器类型
    使用filterMetadata()过滤器,基于每个网格计算出的陆地占比属性进行筛选,比如筛选陆地占比大于0的单元。

修正后的代码示例

// 导入覆盖欧洲的六边形网格FeatureCollection
var hexGrid = ee.FeatureCollection('你的六边形网格资产ID');

// 加载MODIS陆水掩码数据集
var waterMask = ee.Image('MODIS/006/MOD44W')
  .select('water_mask')
  .eq(0); // 0表示陆地,1表示水域,生成陆地掩码

// 定义函数:给每个网格添加陆地占比属性
var addLandRatio = function(feature) {
  // 计算网格内陆地的面积
  var landArea = waterMask.reduceRegion({
    reducer: ee.Reducer.sum(),
    geometry: feature.geometry(),
    scale: 250, // MOD44W的分辨率是250m
    maxPixels: 1e10
  }).get('water_mask');
  
  // 计算网格总面积
  var gridArea = feature.geometry().area();
  
  // 计算陆地占比(避免除以0)
  var landRatio = ee.Number(landArea).divide(gridArea).max(0);
  
  // 返回添加了属性的Feature
  return feature.set({'land_ratio': landRatio});
};

// 给所有网格添加陆地占比属性
var hexGridWithRatio = hexGrid.map(addLandRatio);

// 筛选陆地占比大于0的网格(排除纯水域)
var filteredGrid = hexGridWithRatio.filterMetadata('land_ratio', 'greater_than', 0);

// 可视化结果
Map.addLayer(filteredGrid, {color: 'green'}, '陆地六边形网格');

原filterBounds无效的原因

filterBounds()仅判断网格的几何范围是否与陆地掩码的几何有交集,但纯水域网格可能因边缘与陆地掩码的边界相交而被保留,无法准确排除纯水域单元。通过统计网格内的陆地占比,能精准判断网格是否包含陆地。

内容的提问来源于stack exchange,提问作者Lulu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 20:20:16