Modbus主站设备(Master)编程实战:用Python+pymodbus搞定128个从站轮询与避坑指南
2026/5/6 12:40:32
目录
一、区域定义与地图初始化
二、数据集加载
三、年份筛选与数据计算
四、数据导出到 Google Drive
五、代码关键特性与注意事项
六、运行结果
若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!
本代码基于 Google Earth Engine(GEE)平台,利用 ECMWF(欧洲中期天气预报中心)发布的 ERA5-LAND 月度聚合数据集,自动提取 2024 年全球指定区域(北纬 90° 至南纬 60°、东经 180° 至西经 180°)的三类径流数据,并将其导出为 GeoTIFF 格式存储到 Google Drive 中,数据单位最终转换为毫米(mm),具体包括:
var geometry = ee.Geometry.Polygon( [[[-180, 90], [-180, -60], [180, -60], [180, 90]]], null, false); Map.centerObject(geometry, 3);ee.Geometry.Polygon():GEE 中用于创建多边形区域的核心函数,参数为顶点坐标数组、投影信息(此处为null,默认采用 GEE 内部投影)、是否闭合(false表示按顶点顺序自动闭合)。Map.centerObject(geometry, 3):将地图视图中心定位到上述定义的区域,第二个参数3为地图缩放级别(GEE 缩放级别 1-20,数值越小视野越广,3 级可显示全球全貌),方便在 GEE 编辑器中可视化查看研究区域。var runoff = ee.ImageCollection("ECMWF/ERA5_LAND/MONTHLY_AGGR");ee.ImageCollection():GEE 中用于加载影像集合(多幅影像组成的数据集)的函数,参数为数据集的 GEE 内置 ID。ECMWF/ERA5_LAND/MONTHLY_AGGR是 ERA5-LAND 数据集的月度聚合版本,与原始逐小时数据相比,已提前完成月度尺度的统计聚合,包含降水、蒸发、径流等多个水文气象变量,适合长时间尺度的区域水文分析。for (var year = 2024; year <= 2024; year++) { var yearly = runoff.filterDate(year + '-01-01', year + '-12-31'); // 总径流计算(关键步骤示例) var runoffSum = yearly.select('runoff_sum').sum().multiply(1000).rename('runoff_sum_' + year).clip(geometry); // 地下径流、地表径流计算逻辑与总径流一致,仅筛选的变量名不同 }for循环限定数据提取的时间范围,若需扩展到多年(如 2000-2024 年),可修改循环条件为var year = 2000; year <= 2024; year++。yearly = runoff.filterDate(...):对加载的月度影像集合按时间筛选,提取指定年份 1 月 1 日至 12 月 31 日的所有月度影像(共 12 幅,对应全年 12 个月)。select('runoff_sum'):从月度影像集合中筛选出 “总径流总和” 对应的波段(ERA5-LAND 数据集中,不同变量以不同波段存储,runoff_sum为总径流波段名,sub_surface_runoff_sum为地下径流波段名,surface_runoff_sum为地表径流波段名)。sum():对筛选后的 12 幅月度影像进行像素级求和运算,得到全年的径流总和(原始单位为米,m)。multiply(1000):单位转换,将米(m)转换为毫米(mm)(1m=1000mm),符合水文数据常用单位习惯。rename(...):为计算后的影像波段重命名,添加年份后缀(如runoff_sum_2024),避免多年份数据导出时波段名冲突。clip(geometry):按之前定义的geometry区域对影像进行裁剪,只保留目标区域内的数据,去除区域外的无效值,减少数据存储量。以总径流数据导出为例,地下径流、地表径流导出逻辑完全一致,仅参数细节不同:
Export.image.toDrive({ image: runoffSum, description: year + '_runoff_sum_mm', fileNamePrefix: year + '_runoff_sum_mm', folder: 'ERA5L-runoff-mm', region: geometry, scale: 5000, crs: 'EPSG:4326', maxPixels: 1e13 });Export.image.toDrive():GEE 中用于将单幅影像导出到 Google Drive 的核心函数,参数以键值对形式传入,定义导出的各项配置。image:指定待导出的影像对象(此处为计算后的全年总径流影像runoff_sum)。description:导出任务的描述名称(在 GEE 任务列表中显示,便于区分不同任务)。fileNamePrefix:导出文件的前缀名,最终导出的 GeoTIFF 文件名为 “前缀名.tif”(如2024_runoff_sum_mm.tif)。folder:Google Drive 中存储文件的文件夹名称(需提前在 Google Drive 中创建,或由导出任务自动创建)。region:导出的数据区域,与之前裁剪的geometry保持一致,确保导出范围准确。scale:导出影像的空间分辨率,单位为米(m),此处5000表示影像像素大小为 5000m×5000m(约 25 平方公里 / 像素),ERA5-LAND 数据集的原生空间分辨率为 0.1°(约 11km),此处设置为 5km 是平衡分辨率与数据量的选择。crs:导出影像的投影坐标系,EPSG:4326为 WGS84 地理坐标系(经纬度投影),是全球通用的地理坐标系,便于后续在 ArcGIS、QGIS 等软件中处理。maxPixels:允许导出的最大像素数量,GEE 默认限制导出像素数为 1e13(10 万亿),此处设置为 1e13 是为了避免因全球范围数据量过大导致导出失败(5km 分辨率的全球区域像素数约为 1e8 级别,远小于 1e13)。关键特性:
geometry参数可调整研究区域(如某一流域、某一国家),修改scale参数可调整导出分辨率。注意事项:
ERA5L-runoff-mm的文件夹,否则导出文件会存储在 Google Drive 根目录,不利于文件管理。runoff_sum)是固定的,修改时需参考 GEE 数据集的官方文档,避免因波段名错误导致数据提取失败。若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!