使用Python中的GEE(Google Earth Engine)库中的sampleRegions方法从影像中提取像素值至点

79 篇文章 ¥59.90 ¥99.00
本文介绍了如何使用Google Earth Engine (GEE) 的Python库中的sampleRegions方法,从遥感影像中提取特定点位置的像素值。通过示例展示了如何安装库、初始化GEE、选择Landsat 8影像数据,定义点位置,以及调用sampleRegions方法提取红波段像素值。此方法适用于遥感数据分析的预处理和研究。

在遥感数据分析中,我们经常需要从遥感影像中提取出特定位置的像素值。Google Earth Engine(GEE)是一个功能强大的云平台,提供了丰富的遥感数据和分析工具。在GEE中,我们可以使用Python的GEE库来访问和处理遥感数据。

在本文中,我们将介绍如何使用GEE库中的sampleRegions方法将影像的像素值提取至给定的点位置。这个方法可以用来提取点位的光谱信息,以进行后续的分析和应用。

首先,我们需要安装并导入必要的库。确保已经安装了geemap和earthengine-api库。

import geemap.eefolium as geemap
import ee

接下来,我们需要初始化GEE库,并登录到我们的GEE账号。

ee.Initialize()

然后,我们可以选择一个感兴趣的遥感影像数据集。在这里,我们以Landsat 8的遥感影像为例。

<think>我们使用Google Earth Engine (GEE)Python API来提取特定区域的PM2.5数据。以下是详细步骤: ### 1. 安装必要的 确保已安装`earthengine-api`和`geemap`。可以使用以下命令安装: ```bash pip install earthengine-api geemap ``` ### 2. 身份验证和初始化 在开始之前,需要进行GEE身份验证和初始化: ```python import ee # 触发身份验证流程(只需第一次运行或令牌过期时) ee.Authenticate() # 初始化Earth Engine ee.Initialize() ``` ### 3. 定义感兴趣区域(ROI) 我们可以通过多种方式定义ROI,例如: - 使用经纬度坐标手动绘制矩形 - 导入已有的矢量边界(如GeoJSON) - 在地图上交互式绘制 #### 示例1:使用矩形区域 ```python # 定义一个矩形区域(经度,纬度) roi = ee.Geometry.Rectangle([116.0, 39.0, 117.0, 40.0]) # 北京附近 ``` #### 示例2:交互式选择区域(使用geemap) ```python import geemap Map = geemap.Map() Map.centerObject(ee.Geometry.Point([116.0, 39.0]), 8) # 中心和缩放级别 Map ``` 然后使用地图绘制工具(如矩形绘制)选择区域,并获取该区域的几何对象: ```python # 假设已经绘制了一个矩形,名称为'ROI' roi = Map.draw_last_feature.geometry() # 注意:运行前需先绘制 ``` ### 4. 加载PM2.5数据集 GEE提供了多个PM2.5数据集。这里我们使用全球高分辨率PM2.5数据集(Global Annual PM2.5 Grids): ```python # 加载数据集(示例数据集,具体名称需查阅GEE数据目录) pm25_dataset = ee.ImageCollection("NASA/ORNL/DAYMET_V3/annual/pm25") ``` 注意:请根据实际需求选择合适的数据集。例如,如果需要月数据,可以选择其他数据集。 ### 5. 过滤时间和区域 假设我们提取2010年到2020年的数据: ```python # 设置时间范围 start_date = '2010-01-01' end_date = '2020-12-31' # 过滤时间 filtered_pm25 = pm25_dataset.filterDate(start_date, end_date) # 过滤区域 filtered_pm25 = filtered_pm25.filterBounds(roi) ``` ### 6. 计算区域统计(可选) 如果我们只需要区域内的统计(如均),可以: ```python # 定义一个缩减区域(使用roi几何)和缩减尺度(单位:米) scale = 1000 # 根据数据集分辨率设定 # 计算每幅图像的均 def calculate_mean(image): mean_dict = image.reduceRegion( reducer=ee.Reducer.mean(), geometry=roi, scale=scale, maxPixels=1e10 ) # 返回图像及其均,并保留时间信息 return image.set(mean_dict).set('date', image.date().format('YYYY-MM-dd')) # 映射到整个图像集合 stats_collection = filtered_pm25.map(calculate_mean) # 获取统计信息列表 stats_list = stats_collection.aggregate_array('pm25').getInfo() dates_list = stats_collection.aggregate_array('date').getInfo() # 打印结果 for date, value in zip(dates_list, stats_list): print(f"Date: {date}, PM2.5 mean: {value}") ``` ### 7. 导出为CSV(如果需要详细信息) 如果我们想导出整个区域的时间序列数据(如每幅图像的均): ```python # 将集合转换为FeatureCollection(用于导出) export_collection = stats_collection.map( lambda image: ee.Feature(None, { 'date': image.get('date'), 'pm25_mean': image.get('pm25') }) ) # 导出到Google Drive task = ee.batch.Export.table.toDrive( collection=export_collection, description='PM25_export', fileFormat='CSV' ) task.start() ``` ### 8. 导出图像(如果需要整个区域的图像数据) ```python # 选择需要导出的图像(例如第一幅) first_image = filtered_pm25.first() # 导出到Google Drive task = ee.batch.Export.image.toDrive( image=first_image.select('pm25'), # 选择PM2.5波段 description='PM25_image_export', scale=1000, # 分辨率 region=roi, fileFormat='GeoTIFF' ) task.start() ``` ### 注意事项: 1. 数据集名称:上述示例使用了`NASA/ORNL/DAYMET_V3/annual/pm25`,但实际上GEE中可能有多个PM2.5数据集,请根据需求选择。例如: - `MODIS/061/MCD19A2_GRANULES`(气溶胶光学厚度,可转换为PM2.5) - `COPERNICUS/S5P/OFFL/L3_AER_AI`(哨兵5P气溶胶指数) - 或者使用GHAP(Global High-Resolution PM2.5)数据集(如果可用) 2. 分辨率:导出的图像分辨率(`scale`参数)应至少等于数据集的分辨率,否则会重采样。 3. 区域大小:区域不能太大,否则在计算统计时会超出计算限制。可以使用`maxPixels`参数调整。 ### 完整代码示例(矩形区域) ```python import ee import geemap # 初始化 ee.Authenticate() ee.Initialize() # 定义区域(示例:北京矩形) roi = ee.Geometry.Rectangle([116.0, 39.0, 117.0, 40.0]) # 加载PM2.5数据集(示例数据集,请替换为实际数据集) pm25 = ee.ImageCollection("NASA/ORNL/DAYMET_V3/annual/pm25") # 过滤时间和区域 filtered = pm25.filterDate('2010-01-01', '2020-12-31').filterBounds(roi) # 计算区域均(时间序列) def calculate_mean(image): mean = image.reduceRegion(ee.Reducer.mean(), roi, 1000, maxPixels=1e10) return image.set(mean).set('date', image.date().format('YYYY-MM-dd')) collection = filtered.map(calculate_mean) # 获取结果 dates = collection.aggregate_array('date').getInfo() pm25_means = collection.aggregate_array('pm25').getInfo() # 打印 for d, p in zip(dates, pm25_means): print(f"{d}: {p}") # 导出到Google Drive(可选) # 参考步骤7或8 ``` ### 参考文献 Google Earth Engine提供了强大的云端处理能力,可以极大地减少本地数据处理负担[^1]。 §§相关问题§§ 1. Google Earth Engine中有哪些可用的PM2.5数据集? 2. 如何将导出的PM2.5数据在Python中进行可视化? 3. 如何处理Google Earth Engine任务执行失败的问题? 4. 如何使用GEE Python API提取长时间序列的PM2.5数据并进行趋势分析? </think>要使用 Google Earth Engine Python API 提取特定区域的 PM2.5 数据,遵循以下步骤: ### 1. 环境配置和数据加载 ```python import ee import geemap import pandas as pd # 身份验证和初始化 ee.Authenticate() ee.Initialize(project='your-project-id') # 替换为你的GEE项目ID # 加载PM2.5数据集(示例使用全球高分辨率数据集) pm25_collection = ee.ImageCollection('NASA/ORNL/DAYMET_V3/annual/pm25') ``` ### 2. 定义感兴趣区域(ROI) ```python # 方法1:坐标定义矩形区域(北京示例) roi = ee.Geometry.Rectangle([116.0, 39.0, 117.0, 40.0]) # 方法2:交互式地图选择 Map = geemap.Map(center=[40, 116], zoom=6) Map.add_layer(pm25_collection.first(), {'min': 0, 'max': 100}, 'PM2.5') Map # 在地图上绘制多边形后获取区域 # roi = Map.draw_last_feature.geometry() ``` ### 3. 时间范围筛选和时间序列提取 ```python # 设置时间范围(2010-2020年) filtered = pm25_collection.filterDate('2010-01-01', '2020-12-31') # 创建提取PM2.5均的函数 def extract_pm25_mean(image): mean_dict = image.reduceRegion( reducer=ee.Reducer.mean(), geometry=roi, scale=1000, # 分辨率 maxPixels=1e9 ) return image.set(mean_dict).set('date', image.date().format('YYYY-MM-dd')) # 应用函数并获取结果 stats_collection = filtered.map(extract_pm25_mean) stats_list = stats_collection.aggregate_array('pm25').getInfo() dates_list = stats_collection.aggregate_array('date').getInfo() # 转换为DataFrame pm25_df = pd.DataFrame({'Date': dates_list, 'PM2.5': stats_list}) ``` ### 4. 结果导出 ```python # 导出到CSV pm25_df.to_csv('pm25_data.csv', index=False) # 导出为地理栅格数据(可选) task = ee.batch.Export.image.toDrive( image=filtered.mean().clip(roi), description='PM25_export', scale=1000, region=roi, fileFormat='GeoTIFF' ) task.start() ``` ### 5. 可视化(可选) ```python # 时间序列图 pm25_df.plot(x='Date', y='PM2.5', title='年度PM2.5变化趋势') # 空间分布图 annual_mean = filtered.mean() vis_params = {'min': 0, 'max': 100, 'palette': ['blue','green','yellow','red']} Map.add_layer(annual_mean.clip(roi), vis_params, 'PM2.5 Annual Mean') Map ``` ### 关键说明: 1. **数据集选择**: - 使用 `NASA/ORNL/DAYMET_V3/annual/pm25` 获取年度数据 - 其他选项: - `MODIS/061/MCD19A2_GRANULES`(气溶胶光学厚度) - `COPERNICUS/S5P/OFFL/L3_AER_AI`(哨兵5P气溶胶指数) 2. **参数调整**: - `scale` 应与数据集分辨率匹配(通常1000-10000米) - 大区域需增加 `maxPixels` 参数 3. **提取模式**: - 区域统计(均/最大等) - 逐像素提取(导出为栅格) - 时间序列分析 Google Earth Engine 提供强大的云端处理能力,可高效处理全球环境数据[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值