网站后台怎么替换图片,做ppt一般在什么网站好,如何做2级网站,工信部网站实名认证怎么做在前面的章节中#xff0c;我们已经学习了如何加载影像数据。现在#xff0c;让我们进一步探讨如何在 Google Earth Engine (GEE) 中进行数据处理。数据处理通常包括图像预处理、裁剪、过滤、重采样等操作。
栅格影像的处理
栅格影像处理包括了裁剪、波段选择、重采样、合成…在前面的章节中我们已经学习了如何加载影像数据。现在让我们进一步探讨如何在 Google Earth Engine (GEE) 中进行数据处理。数据处理通常包括图像预处理、裁剪、过滤、重采样等操作。
栅格影像的处理
栅格影像处理包括了裁剪、波段选择、重采样、合成等基本操作。这部分以卫星影像为例介绍 GEE 中如何处理影像数据。
图像裁剪 (Clipping)
裁剪图像是数据处理中常见的步骤通常我们只需要分析某个特定区域的数据。GEE 提供了 clip 函数可以根据给定的几何区域裁剪图像。
import ee
import folium# 初始化 Earth Engine
ee.Initialize()# 加载 Landsat 图像
image ee.Image(LANDSAT/LC08/C02/T1/LC08_044034_20140318)# 创建几何区域多边形用于裁剪图像
region ee.Geometry.Polygon([[[-122.5, 37.2], [-121.8, 37.7], [-121.8, 37.2]]
])# 裁剪图像到指定区域
clipped_image image.clip(region)# 定义可视化参数RGB波段
vis_params {bands: [B4, B3, B2] # 红、绿、蓝波段
}# 定义添加 Earth Engine 图层到 folium 地图的函数
def add_ee_layer(self, ee_image_object, vis_params, name):将 Earth Engine 图像添加到 folium 地图中。参数:self: folium 地图对象ee_image_object: 需要添加的 Earth Engine 图像vis_params: 可视化参数波段选择等name: 图层名称map_id_dict ee.Image(ee_image_object).getMapId(vis_params)folium.raster_layers.TileLayer(tilesmap_id_dict[tile_fetcher].url_format, # 获取图像的 URL 模板attrGoogle Earth Engine, # 数据来源namename, # 图层名称overlayTrue, # 叠加到现有图层controlTrue # 在图层控制中显示).add_to(self)# 将自定义的图层添加函数绑定到 folium.Map 类
folium.Map.add_ee_layer add_ee_layer# 创建 folium 地图并添加裁剪后的 Landsat 图像
map folium.Map(location[37.5, -122.3], zoom_start10) # 设置初始中心点和缩放级别
map.add_ee_layer(clipped_image, vis_params, Clipped Landsat Image) # 添加裁剪后的图像层# 显示地图
map
clip用于根据指定的几何形状裁剪图像使其只保留感兴趣区域的数据。ee.Geometry.Polygon定义了一个多边形区域作为裁剪的边界。
裁剪图像后只剩下指定区域的数据这对于更高效的数据处理非常重要。
选择波段 (Band Selection)
卫星影像通常包含多个波段每个波段记录了不同波长范围的反射率。我们可以通过选择波段来提取特定的信息。例如Landsat 8 影像包括可见光、红外和热红外波段下面介绍如何选择特定波段进行处理。
# 选择图像的红色、绿色和蓝色波段
selected_bands image.select([B4, B3, B2])# 添加选择后的波段图像到地图
map.add_ee_layer(selected_bands, vis_params, Selected Bands)# 显示地图
mapselect选择图像中的指定波段可以是单个波段或多个波段的组合。B4, B3, B2分别表示红色、绿色和蓝色波段。
通过波段选择我们可以聚焦于影像的特定部分如植被、土壤或水体的反射特性。
图像重采样 (Resampling)
重采样用于改变影像的空间分辨率。GEE 提供了多种重采样方法如最近邻重采样 (nearest) 和双线性重采样 (bilinear)。以下是如何对影像进行重采样的示例
# 对图像进行双线性重采样
resampled_image image.resample(bilinear)# 添加重采样后的图像到地图
map.add_ee_layer(resampled_image, vis_params, Resampled Image)# 显示地图
mapresample用于设置图像的重采样方法bilinear 表示双线性插值。nearest最近邻插值通常用于分类影像。
重采样后影像的分辨率可能会发生变化这可以用于不同分辨率数据的融合或在不同尺度上的分析。
多图像合成 (Image Composite)
在实际应用中通常需要将多时相的影像合成一个新的影像去除云层或其他噪声。GEE 中的 ImageCollection 对象允许对多个影像进行合成。
# 创建一个 Landsat 影像集合
collection ee.ImageCollection(LANDSAT/LC08/C02/T1) \.filterBounds(region) \.filterDate(2020-01-01, 2020-12-31) # 使用中值合成方法去除云层
composite collection.median()# 添加合成影像到地图
map.add_ee_layer(composite, vis_params, Landsat Composite) # 添加图层控制
folium.LayerControl().add_to(map) # 显示地图
mapImageCollection表示影像的集合可以根据时间范围或空间范围进行过滤。median对影像集合使用中值合成的方法去除异常值如云层。
合成影像对于长期时间序列分析非常有用例如研究某地区的植被变化趋势。
矢量数据的处理
矢量数据通常代表离散的地理对象如边界、道路、河流等。在 GEE 中矢量数据处理包括几何操作、空间过滤和属性查询等。
空间过滤 (Spatial Filtering)
空间过滤可以帮助我们在某一特定区域内筛选矢量数据。例如以下代码展示了如何根据地理位置筛选一个国家的边界。该地图为问题地图请勿在生产实践中使用
import ee # 导入 Google Earth Engine API
import folium # 导入 Folium 库用于绘制交互式地图# 初始化 Earth Engine
ee.Initialize()# 创建一个 Folium 地图设置中国中心点及缩放级别
map folium.Map(location[37.5, 104.0], zoom_start5)# 加载 FAO 全球国家边界数据集
countries ee.FeatureCollection(FAO/GAUL/2015/level0)# 过滤出中国边界ADM0_NAME 字段用于匹配国家名称
china countries.filter(ee.Filter.eq(ADM0_NAME, China))# 将中国边界数据转换为 GeoJSON 格式用于 folium 绘图
china_geojson china.getInfo()# 将中国边界的 GeoJSON 数据添加到 folium 地图
folium.GeoJson(china_geojson, # GeoJSON 数据nameChina Boundary, # 图层名称style_functionlambda x: { # 设置样式color: blue, # 边界线颜色weight: 2, # 边界线宽度fillOpacity: 0.1 # 填充透明度确保区域具有透明效果}
).add_to(map)# 添加图层控制使用户可以在地图上切换图层
folium.LayerControl().add_to(map)# 显示地图
mapfilter根据特定的条件筛选出符合条件的几何对象或特征集。ee.Filter.eq用于进行属性等值比较筛选出名称为 ‘China’ 的国家边界。
几何操作 (Geometric Operations)
GEE 支持多种几何操作如缓冲区生成、相交、合并等。以下代码展示了如何生成一个几何对象的缓冲区
import ee # 导入 Google Earth Engine API
import folium # 导入 Folium 库用于绘制交互式地图# 初始化 Earth Engine确保所有 Earth Engine 操作能正常执行
ee.Initialize()# 创建一个 Folium 地图设置中心点为中国某位置并指定缩放级别为6
map folium.Map(location[30, 120], zoom_start6)# 创建一个点对象指定坐标为 (120, 30)这是浙江省附近的一个点
point ee.Geometry.Point([120, 30])# 生成该点的10公里缓冲区buffer 参数单位为米因此 10 公里等于 10000 米
buffer point.buffer(10000)# 将缓冲区转换为 GeoJSON 格式以便用于在 folium 地图上显示
buffer_geojson buffer.getInfo()# 使用 folium.GeoJson 将生成的缓冲区添加到地图中
folium.GeoJson(buffer_geojson, # GeoJSON 数据nameBuffer Zone, # 图层名称为 Buffer Zonestyle_functionlambda x: { # 定义缓冲区的样式color: red, # 缓冲区边界颜色为红色weight: 2, # 边界线宽度为 2fillOpacity: 0.4 # 填充透明度为 0.4确保区域内部可见}
).add_to(map)# 添加图层控制器允许用户切换查看不同的图层
folium.LayerControl().add_to(map)# 显示地图
map # 在 Jupyter Notebook 或相关环境中显示地图buffer生成几何对象的缓冲区单位为米。ee.Geometry.Point创建一个点对象可以代表特定的地理位置。
几何操作对于空间分析非常有用例如计算某个点周围的影响区域或分析相邻几何对象的关系。
矢量数据属性查询
矢量数据中通常包含丰富的属性信息如行政区划的名称、人口等。我们可以对这些属性进行查询和处理。
# 获取中国边界的属性信息
china_properties china.first().toDictionary()# 打印属性信息
print(china_properties.getInfo())first返回矢量集合中的第一个特征。toDictionary将特征的属性转化为字典格式方便查询和处理。
通过属性查询我们可以深入挖掘矢量数据的属性字段用于统计分析或分类。
气候数据的处理与分析
气候数据通常以时间序列栅格数据的形式提供在分析时我们
可能需要计算气候变量的均值、累积量或趋势。以下以 ERA5 数据为例介绍气候数据的处理与分析。
计算气候变量的年均值
import ee # 导入 Google Earth Engine API
import folium # 导入 Folium 库用于绘制交互式地图# 初始化 Earth Engine确保所有操作能正常执行
ee.Initialize()# 创建一个 Folium 地图中心点设在美国加州初始缩放级别为 10
map folium.Map(location[37.5, -122.3], zoom_start10)# 定义将 Earth Engine 图像添加到 Folium 地图的函数
def add_ee_layer(self, ee_image_object, vis_params, name):将 Earth Engine 图像添加到 folium 地图中。参数:self: folium 地图对象ee_image_object: 需要添加的 Earth Engine 图像vis_params: 可视化参数如波段选择等name: 图层名称map_id_dict ee.Image(ee_image_object).getMapId(vis_params) # 获取图像的 Map IDfolium.raster_layers.TileLayer(tilesmap_id_dict[tile_fetcher].url_format, # 获取图像的 URL 模板attrGoogle Earth Engine, # 数据来源namename, # 图层名称overlayTrue, # 叠加到现有图层controlTrue # 在图层控制中显示).add_to(self)# 将自定义函数添加到 folium.Map 类中
folium.Map.add_ee_layer add_ee_layer# 加载 ERA5 气候数据集并筛选2020年的数据选择总降水量字段
era5 ee.ImageCollection(ECMWF/ERA5/DAILY) \.filterDate(2020-01-01, 2020-12-31) \.select(total_precipitation)# 计算年平均降水量图像
annual_mean_precip era5.mean()# 设置可视化参数
vis_params {min: 0, # 最小值max: 0.01, # 最大值palette: [blue, purple, cyan] # 色带表示不同的降水量
}# 使用自定义函数将年均降水量图像添加到地图中
map.add_ee_layer(annual_mean_precip, vis_params, Annual Mean Precipitation)# 添加图层控制允许用户切换查看不同的图层
folium.LayerControl().add_to(map)# 显示地图
map # 在 Jupyter Notebook 或相关环境中显示地图mean对时间序列进行均值计算生成一个新的影像。
计算气候数据的累积量
在气候分析中累积量计算是常用的方法之一。例如对于降水数据我们可能需要计算某一时间段内的累积降水量。下面以 ERA5 数据集为例展示如何计算年内的累积降水量。
import ee # 导入 Google Earth Engine API
import folium # 导入 Folium 库用于绘制交互式地图# 初始化 Earth Engine确保所有操作能正常执行
ee.Initialize()# 创建一个 Folium 地图中心点设在美国加州初始缩放级别为 10
map folium.Map(location[37.5, -122.3], zoom_start10)# 定义将 Earth Engine 图像添加到 Folium 地图的函数
def add_ee_layer(self, ee_image_object, vis_params, name):将 Earth Engine 图像添加到 Folium 地图中。参数:self: folium 地图对象ee_image_object: 需要添加的 Earth Engine 图像vis_params: 可视化参数如波段选择等name: 图层名称map_id_dict ee.Image(ee_image_object).getMapId(vis_params) # 获取图像的 Map IDfolium.TileLayer(tilesmap_id_dict[tile_fetcher].url_format, # 获取图像的 URL 模板attrGoogle Earth Engine, # 数据来源namename, # 图层名称overlayTrue, # 叠加到现有图层controlTrue # 在图层控制中显示).add_to(self)# 将自定义函数添加到 folium.Map 类中
folium.Map.add_ee_layer add_ee_layer# 加载 ERA5 降水数据集筛选出 2020 年的数据并选择总降水量字段
era5 ee.ImageCollection(ECMWF/ERA5/DAILY) \.filterDate(2020-01-01, 2020-12-31) \.select(total_precipitation)# 计算全年累积降水量
annual_precip_total era5.sum()# 设置可视化参数
precip_vis_params {min: 0, # 最小值max: 1, # 最大值单位为米palette: [lightblue, blue, darkblue] # 色带表示不同的降水量
}# 使用自定义函数将全年累积降水量图像添加到地图中
map.add_ee_layer(annual_precip_total, precip_vis_params, Annual Precipitation Total)# 添加图层控制器允许用户切换查看不同图层
folium.LayerControl().add_to(map)# 显示地图
map # 在 Jupyter Notebook 或相关环境中显示地图sum对时间序列中的每个像素进行累加生成累积量影像。total_precipitationERA5 数据中的降水量变量以米为单位。
计算累积量可以帮助我们理解特定时间段内的总气候影响例如研究某地的年降水量是否异常。
总结
通过本教程的学习我们已经详细介绍了在 Google Earth Engine 中进行数据处理的主要步骤和方法。涵盖了栅格影像的预处理、矢量数据的操作、气候数据的分析。Google Earth Engine 提供了强大的工具可以处理各种类型的地理空间数据并进行复杂的分析和建模。
随着你的深入探索你可以将这些基础操作与更高级的分析结合起来解决实际的环境监测、土地覆盖变化、气候变化等问题。