GEE笔记-1-基本操作

1 操作

1.1 注释

ctrl+/

1.2 组件

教程: 【摘自 https://www.zhihu.com/column/c_123993183】

在这里插入图片描述

1.2.1 Map

  • .add(item) 添加组件到Map上,比如Panel等
  • .addLayer(eeObject, visParams, name, shown, opacity) 添加图层到Map上
  • .centerObject(object, zoom) 以object对象范围居中显示,同时设置缩放级别为zoom
  • .clear() 清理Map
  • .getBounds() 获取Map的边界
  • .getScale() 获取Map的分辨率
  • .getCenter() 获取Map的中心
  • .getZoom() 获取Map缩放级别
  • .insert(index, widget) 添加组件到制定的位置
  • .layers() 获取所有的图层
  • .remove(item) 移除组件
  • .setControlVisibility(xxxx) 设置Map地图上控件是否显示,可以设置缩放组件、全屏组件、地图类型组件等
  • .setCenter(lon, lat, zoom) 设置居中位置以及缩放级别
  • .setOptions(mapTypeId, styles, types) 设置地图的相关选项
  • .setZoom(zoom) 设置级别
  • .style() 获取样式
  • .widgets() 获取所有的组件
<think> 我们正在处理用户关于使用Google Earth Engine (GEE)和Sentinel-1数据提取水体的问题。 根据用户的问题,我们需要提供一种使用Sentinel-1 SAR数据在GEE中提取水体的方法。 常用的方法是利用SAR数据的后向散射特性:水体通常表现为低后向散射(暗),而陆地则较高。 一种简单的方法是设置一个阈值来区分水体和陆地。但为了更精确,我们可以使用Otsu方法自动确定阈值,或者使用更高级的方法。 然而,用户提到参考了NDWI(这是一个光学指数),但用户的问题是关于Sentinel-1(雷达数据)的,所以我们需要使用雷达指数。 在Sentinel-1数据中,常用的水体提取方法包括: 1. 利用单波段(如VH或VV)设置阈值。 2. 使用多时相数据减少噪声(如使用中值合成)。 3. 利用极化信息(如VH和VV的比值或差值)来增强水体信息。 我们还可以参考文献中常用的方法:例如,使用VH波段,因为水体的VH后向散射系数通常很低,而陆地上的植被和建筑物会表现出较高的值。 以下是一个在GEE中使用Sentinel-1数据提取水体的基本步骤: 1. 选择Sentinel-1数据(例如,使用GRD产品,IW模式,VH和VV波段)。 2. 对数据进行预处理(包括应用轨道边界掩膜、角度校正等,但GEE已经提供预处理数据)。 3. 选择时间范围并生成合成图像(例如,中值合成以减少噪声)。 4. 选择一个波段(通常VH波段对水体更敏感)并应用阈值分割。 5. 使用阈值将图像二值化(水体为1,非水体为0)。 6. 可选:使用形态学操作(如腐蚀膨胀)来优化结果。 7. 可选:结合数字高程模型(DEM)来消除地形阴影(但Sentinel-1不受光照影响,地形影响可能通过叠掩等出现,需要特别注意)。 注意:由于雷达数据的斑点噪声,通常需要进行滤波。GEE的Sentinel-1数据已经进行了多视和地形校正,但可能还需要额外的滤波(例如,使用lee滤波)?不过,在GEE中,我们可以直接使用提供的预处理数据,并且使用时间合成(如中值合成)也能减少噪声。 下面是一个示例代码框架,用于在GEE中提取水体: ```javascript // 定义区域和时间 var region = ee.Geometry.Polygon([[...]]); // 用户需要定义自己的区域 var startDate = '2020-01-01'; var endDate = '2020-12-31'; // 加载Sentinel-1影像集,选择GRD数据,IW模式,VH和VV波段 var s1 = ee.ImageCollection('COPERNICUS/S1_GRD') .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VH')) .filter(ee.Filter.listContains('transmitterReceiverPolarisation', 'VV')) .filter(ee.Filter.eq('instrumentMode', 'IW')) .filter(ee.Filter.eq('orbitProperties_pass', 'ASCENDING')) // 或者DESCENDING,根据需求 .filterDate(startDate, endDate) .filterBounds(region); // 生成中值合成图像 var composite = s1.median(); // 选择VH波段(根据研究,VH波段对水体更敏感) var vh = composite.select('VH'); // 使用Otsu方法自动确定阈值(这里我们手动设置一个阈值,但也可以使用Otsu算法) // 手动阈值示例:根据文献,阈值通常在-20到-25dB之间 var threshold = -20; // 单位dB,可以根据具体区域调整 // 创建水体掩膜(小于阈值的为水体) var water = vh.lt(threshold).rename('water'); // 显示结果 Map.addLayer(water, {min:0, max:1, palette:['white', 'blue']}, 'Water Mask'); ``` 但是,手动阈值可能不准确,我们可以使用Otsu算法来自动确定阈值。GEE提供了`ee.Algorithms.OtsuThreshold()`,但注意它需要一张双峰直方图的图像。我们可以这样使用: ```javascript // 使用Otsu算法确定阈值 var histogram = vh.reduceRegion({ reducer: ee.Reducer.histogram(255, 2), // 设置直方图分段数和范围 geometry: region, scale: 10, maxPixels: 1e13 }); var threshold = ee.Algorithms.OtsuThreshold(histogram.get('VH')); var water = vh.lt(threshold).rename('water'); ``` 然而,由于整个区域可能不是双峰的(比如大面积水域或大面积陆地),我们可以考虑在子区域内计算阈值,或者使用其他方法。 此外,为了减少噪声,我们可以在生成掩膜后应用形态学操作(如先腐蚀再膨胀)以去除小斑点: ```javascript // 定义形态学操作的内核(核大小根据实际情况调整) var kernel = ee.Kernel.circle({radius: 1}); // 1像素半径 // 先进行开运算(腐蚀后膨胀)去除小斑点 var water_clean = water .focal_min({kernel: kernel, iterations: 1}) // 腐蚀 .focal_max({kernel: kernel, iterations: 1}); // 膨胀 Map.addLayer(water_clean, {min:0, max:1, palette:['white', 'blue']}, 'Clean Water Mask'); ``` 最后,注意:Sentinel-1数据中,风浪较大的水面后向散射会增强,可能被误分为陆地。因此,选择平静天气的影像或者使用多时相中值合成有助于减少这种影响。 以上方法是一个基础框架,实际应用中可能需要根据具体区域进行调整。 引用说明:在遥感领域,使用SAR数据进行水体提取已有大量研究[^1]。 </think>### 使用Google Earth Engine提取Sentinel-1水体的方法 在Google Earth Engine (GEE) 中,利用Sentinel-1 SAR数据提取水体主要基于**水体在雷达影像中的低后向散射特性**(通常呈现深色)。以下是具体实现步骤: #### 方法步骤 1. **数据准备与预处理** ```javascript // 定义时空范围 var region = ee.Geometry.Point([经度, 纬度]).buffer(10000); // 示例区域 var startDate = '2023-01-01'; var endDate = '2023-12-31'; // 加载Sentinel-1 GRD数据 var s1 = ee.ImageCollection('COPERNICUS/S1_GRD') .filterBounds(region) .filterDate(startDate, endDate) .filter(ee.Filter.eq('orbitProperties_pass', 'ASCENDING')) // 选择升轨数据 .select(['VV', 'VH']); // 选择垂直极化波段 ``` 2. **生成中值合成影像(减少噪声)** ```javascript var composite = s1.median().clip(region); ``` 3. **水体提取阈值法** - **原理**:水体在VV极化通道的后向散射系数通常 $<-20\ \text{dB}$ ```javascript var water = composite.select('VV').lt(-20); // VV < -20dB的区域判为水体 ``` 4. **优化处理(可选)** ```javascript // 形态学滤波(去除小斑点) water = water.focal_min(50).focal_max(50); // 结合地形数据排除阴影(需加载SRTM数据) var slope = ee.Terrain.slope(ee.Image('USGS/SRTMGL1_003')); water = water.updateMask(slope.lt(5)); // 忽略坡度>5°的区域 ``` 5. **可视化与导出** ```javascript Map.addLayer(water.selfMask(), {palette: ['blue']}, 'Water Mask'); Export.image.toDrive({ image: water, description: 'Water_Extraction', region: region, scale: 10 }); ``` #### 技术要点 - **极化选择**:$VH$ 波段对水面粗糙度更敏感,$VV$ 波段受风浪影响小,通常首选$VV$[^1] - **阈值调整**:干旱区建议阈值 $ -18\ \text{dB}$,湿润区可用 $ -22\ \text{dB}$ - **时相选择**:优先选择无风/少雨时期的影像 - **精度验证**:可联合Landsat光学影像的NDWI结果交叉验证[^2] > **注意**:SAR水体提取在风浪天气(高后向散射)和镜面反射(极低后向散射)区域可能出现误判,建议结合多时相分析。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值