news 2026/6/15 19:37:05

基于 GEE 的 NASA FLDAS 风速数据实现研究区平均风速空间格局与频次分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 GEE 的 NASA FLDAS 风速数据实现研究区平均风速空间格局与频次分析

目录

一、基础设置模块

(一)研究区导入与地图配置

(二)时间参数定义

二、数据加载与预处理模块

三、统计计算模块

(一)整体平均风速计算

(二)逐月平均风速统计

四、可视化模块

(一)直方图绘制与面板展示

(二)图例创建

(三)平均风速影像可视化

五、核心技术亮点、设计思路和输出结果说明

六、运行结果


若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!

本代码基于 Google Earth Engine(GEE)平台开发,核心用途是对 2006-2007 年研究区的风速数据进行处理、分析与可视化。通过加载 NASA FLDAS 数据集的风速数据,完成研究区裁剪、时间筛选、统计计算(整体平均、逐月平均),并以地图图层、直方图、图例的形式呈现结果,实现了风速数据从获取到可视化的全流程处理。

一、基础设置模块

(一)研究区导入与地图配置

var roi = table; Map.addLayer(roi, {}, '研究区 ROI'); Map.centerObject(roi, 6);
  • 定义研究区边界roi,数据源为预设的table(通常是 GEE 中导入的矢量边界数据,如行政区、自定义研究范围等)。
  • 通过Map.addLayer()将研究区边界添加到地图画布,图层名称为 “研究区 ROI”,第二个参数{}为图层样式配置(此处使用默认样式)。
  • Map.centerObject(roi, 6)将地图视角自动定位到研究区中心,第二个参数6为地图缩放级别(数值越大视角越近,范围越小)。

(二)时间参数定义

var timeParams = { startYear: 2006, endYear: 2007, startDate: '2006-01-01', endDate: '2007-12-31', months: ee.List.sequence(1, 12), years: ee.List.sequence(2006, 2007) };
  • 以对象timeParams统一管理所有时间相关参数,方便后续调用和修改。
  • 明确数据时间范围为 2006 年 1 月 1 日至 2007 年 12 月 31 日,通过ee.List.sequence()生成 1-12 月的月份列表和 2006-2007 年的年份列表,为后续逐月统计做准备。
  • 设计优势:参数集中管理,若需扩展时间范围(如增加 2008 年数据),仅需修改endYearyears序列,无需改动后续逻辑代码。

二、数据加载与预处理模块

var windDataset = ee.ImageCollection("NASA/FLDAS/NOAH01/C/GL/M/V001") .filterBounds(roi) .filterDate(timeParams.startDate, timeParams.endDate) .select('Wind_f_tavg') .map(function(image) { return image.clip(roi); });
  • 数据来源:加载 NASA FLDAS 数据集(全球陆面数据同化系统),数据集 ID 为"NASA/FLDAS/NOAH01/C/GL/M/V001",该数据集包含全球陆面多种气象、水文变量,此处聚焦风速数据。
  • 数据筛选:
    • filterBounds(roi):筛选研究区范围内的数据,剔除研究区外的无效数据,提升计算效率。
    • filterDate(...):按预设时间范围筛选 2006-2007 年的数据。
    • select('Wind_f_tavg'):选择数据集中的风速变量(Wind_f_tavg表示近地面平均风速),排除其他无关变量(如温度、降水等)。
  • 数据裁剪:通过map()函数遍历影像集合中的每一幅影像,使用clip(roi)将影像裁剪至研究区边界,确保后续分析仅针对目标区域。

三、统计计算模块

(一)整体平均风速计算

var meanWind = windDataset.mean();
  • 功能说明:对筛选、裁剪后的 2006-2007 年所有风速影像计算平均值,得到研究区这段时间内的整体平均风速影像meanWind
  • 原理:GEE 中ImageCollection.mean()会对集合内所有影像的对应像素逐一计算均值,生成单幅汇总影像,反映长时间序列的平均状态。

(二)逐月平均风速统计

var monthlyStats = ee.FeatureCollection( timeParams.years.map(function(y) { return timeParams.months.map(function(m) { var monthly = windDataset .filter(ee.Filter.calendarRange(y, y, 'year')) .filter(ee.Filter.calendarRange(m, m, 'month')); var monthlyMean = monthly.mean(); var stats = monthlyMean.reduceRegion({ reducer: ee.Reducer.mean(), geometry: roi, scale: 11000, maxPixels: 1e9 }); return ee.Feature(null, { year: y, month: m, wind_speed: stats.get('Wind_f_tavg') }); }); }).flatten() );
  • 功能说明:统计 2006-2007 年每个月的研究区平均风速,生成包含 “年份、月份、风速值” 的要素集合,用于后续直方图绘制。
  • 关键步骤拆解:
    • 嵌套map()遍历:外层遍历年份列表(2006、2007),内层遍历月份列表(1-12),实现对每个 “年 - 月” 组合的筛选。
    • 月度影像筛选:filter(ee.Filter.calendarRange(y, y, 'year'))filter(ee.Filter.calendarRange(m, m, 'month'))筛选出当前年、当月的风速影像集合。
    • 月度均值计算:monthly.mean()得到当月的平均风速影像monthlyMean
    • 区域统计:reduceRegion()对当月平均风速影像进行区域统计,参数说明:
      • reducer: ee.Reducer.mean():统计方式为计算区域内所有像素的均值(即研究区当月平均风速)。
      • geometry: roi:统计范围为研究区。
      • scale: 11000:统计的空间分辨率为 11000 米(与原始数据集分辨率匹配,避免重采样误差)。
      • maxPixels: 1e9:允许处理的最大像素数(避免因研究区过大导致计算超限)。
    • 结果封装:将 “年份(y)、月份(m)、风速值(stats.get ('Wind_f_tavg'))” 封装为ee.Feature,最终通过flatten()展平嵌套列表,生成一维要素集合monthlyStats

四、可视化模块

(一)直方图绘制与面板展示

var histogram = ui.Chart.feature.histogram({ features: monthlyStats, property: 'wind_speed', maxBuckets: 20 }).setOptions({ title: '2006-2007 月平均风速直方图', hAxis: { title: '风速 (m/s)' }, vAxis: { title: '频数' }, legend: { position: 'none' } }); var panel = ui.Panel({ style: { width: '450px', position: 'bottom-right', padding: '8px' } }); panel.add(histogram); Map.add(panel);
  • 功能说明:基于逐月平均风速数据绘制直方图,展示风速值的分布特征,并在地图上添加可视化面板。
  • 关键解析:
    • 直方图生成:ui.Chart.feature.histogram()用于生成要素集合的直方图,参数说明:
      • features: monthlyStats:数据源为逐月统计的要素集合。
      • property: 'wind_speed':统计的属性字段为 “风速值”。
      • maxBuckets: 20:直方图的柱形数量最多为 20 个(控制图表精度,避免柱形过多导致杂乱)。
    • 图表样式配置:setOptions()设置图表标题、横纵轴标签(横轴为风速,单位 m/s;纵轴为频数),隐藏图例(单变量直方图无需图例)。
    • 面板创建与添加:ui.Panel()创建一个位于地图右下角、宽度 450px 的面板,将直方图添加到面板后,通过Map.add(panel)挂载到地图上,方便用户查看。

(二)图例创建

var visualizationParams = { windSpeed: { min: 0.3750263580093698, max: 8.113219716238905, palette: ['#0e0e0e', '#281dc8', '#38913b', '#5af7ff', '#10ff22', '#f5ff62', '#ff640a'] } }; function createLegend() { var legend = ui.Panel({ style: { padding: '8px 15px', position: 'bottom-left', backgroundColor: 'rgba(255, 255, 255, 0.9)', width: '220px' } }); legend.add(ui.Label({ value: '平均风速 (m/s)', style: { fontWeight: 'bold', fontSize: '16px', margin: '0 0 10px 0' } })); var palette = visualizationParams.windSpeed.palette; var min = visualizationParams.windSpeed.min; var max = visualizationParams.windSpeed.max; var step = (max - min) / (palette.length - 1); palette.forEach(function(color, i) { var value = min + step * i; var item = ui.Panel({ layout: ui.Panel.Layout.flow('horizontal') }); item.add(ui.Label({ style: { backgroundColor: color, padding: '8px', margin: '0 6px 0 0', border: '1px solid #999' } })); item.add(ui.Label({ value: value.toFixed(2) + (i < palette.length - 1 ? ' - ' + (value + step).toFixed(2) : '+'), style: { fontSize: '14px' } })); legend.add(item); }); legend.add(ui.Label({ value: '数据来源: NASA FLDAS', style: { fontSize: '11px', margin: '10px 0 0 0' } })); return legend; }
  • 功能说明:创建地图图层的图例,用于解释平均风速影像的颜色对应的风速范围,提升地图可读性。
  • 关键解析:
    • 可视化参数定义:visualizationParams统一配置风速影像的可视化规则,包括风速最小值(min)、最大值(max)和颜色调色板(palette),颜色从深黑(低风速)渐变到橙色(高风速),便于直观区分风速等级。
    • 图例面板创建:createLegend()函数生成一个位于地图左下角、半透明白色背景的图例面板,包含标题、颜色块、数值范围标签和数据来源说明。
    • 颜色与数值匹配:通过计算步长step = (max - min) / (palette.length - 1),将颜色调色板与风速范围逐一对应,例如第一个颜色块对应0.38 - 1.57 m/s(保留两位小数),最后一个颜色块对应7.00+ m/s

(三)平均风速影像可视化

Map.addLayer( meanWind, visualizationParams.windSpeed, 'Mean Wind Speed(平均风速)' ); Map.add(createLegend());
  • 功能说明:将整体平均风速影像添加到地图,并挂载图例,完成最终的地图可视化。
  • 关键解析:
    • Map.addLayer()的三个参数分别为:待可视化的影像(meanWind)、可视化配置(visualizationParams.windSpeed,即之前定义的颜色和数值范围)、图层名称(中英文结合,便于识别)。
    • Map.add(createLegend())将创建好的图例添加到地图,与风速影像配套展示,让用户能快速解读地图上不同颜色代表的风速大小。

五、核心技术亮点、设计思路和输出结果说明

模块化设计:

代码按“基础设置→数据加载→统计计算→可视化”的逻辑拆分模块,每个模块功能独立,参数集中管理(如timeParamsvisualizationParams),便于后续维护和功能扩展(如修改时间范围、更换可视化颜色)。

GEE 核心功能应用:

  • 影像集合处理:灵活运用filterBounds()filterDate()select()map()mean()等方法,实现数据的筛选、裁剪、汇总。
  • 区域统计:reduceRegion()结合ee.Reducer.mean(),高效计算研究区平均风速,通过scale参数确保统计精度与原始数据匹配。
  • 交互式可视化:利用ui.Chart绘制统计图表,ui.Panel创建自定义面板,createLegend()生成个性化图例,提升结果展示的直观性和交互性。

性能优化考量:

  • 数据筛选先行:先通过filterBounds()filterDate()剔除无效数据,再进行裁剪和计算,减少处理的数据量。
  • 合理设置参数:maxPixels: 1e9避免因研究区过大导致计算超限,scale: 11000匹配原始数据集分辨率,避免不必要的重采样开销。

输出结果说明:

  • 地图图层:研究区边界图层、2006-2007 年整体平均风速影像图层(颜色对应风速等级)。
  • 直方图面板:位于地图右下角,展示逐月平均风速的分布情况,可直观查看风速的集中区间(如多数月份风速集中在 2-4 m/s)。
  • 图例面板:位于地图左下角,标注颜色对应的风速范围和数据来源,帮助用户解读地图信息。

六、运行结果

研究区平均风速空间格局与频次分析结果可视化
研究区月平均风速直方图

若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 13:16:19

6、Linux网络配置与管理全解析

Linux网络配置与管理全解析 1. IP路由选择机制 在IP实现中,当寻找到达目标的最佳路由时,可能会找到多个匹配目标地址的路由条目。例如,默认路由能匹配所有目标,但发往本地连接网络的数据报也会匹配其本地路由。那么IP如何确定使用哪条路由呢?这就需要借助子网掩码。 子…

作者头像 李华
网站建设 2026/6/15 0:02:13

人人拥有AI科学家!一文读懂Deep Research的今生与未来

深度研究&#xff08;Deep Research&#xff09;&#xff0c;让人工智能&#xff08;AI&#xff09;系统从“生成文本”进化为“发现知识”&#xff0c;进而完成复杂的开放式任务。目前&#xff0c;Deep Research 已被广泛应用于文本生成、科研、软件工程等领域中&#xff0c;帮…

作者头像 李华
网站建设 2026/6/15 15:58:03

力扣二叉树的三种遍历

这篇文章类比三种遍历的写法&#xff0c;每个遍历利用两种方法&#xff0c;分别是递归和迭代&#xff0c;帮助更好的学习二叉树的相关知识。一、前序两种方法&#xff1a;1.递归/*** Definition for a binary tree node.* function TreeNode(val, left, right) {* this.val…

作者头像 李华
网站建设 2026/6/15 15:51:15

29、优化Azure应用程序扩展与静态内容分发

优化Azure应用程序扩展与静态内容分发 1. Azure应用程序扩展 在Azure中,有多种服务的扩展方式值得关注,包括Azure App Service、Azure Functions和Azure Service Fabric。 1.1 Azure Function扩展控制 对于Azure Function App,你可以通过在应用设置中提供 WEBSITE_MAX_…

作者头像 李华
网站建设 2026/6/14 19:36:46

C / C++ 调用 DLL 的几种常见方法

C / C 调用 DLL 的几种常见方法&#xff08;详解 示例&#xff09; 在 Windows 平台开发中&#xff0c;DLL&#xff08;Dynamic Link Library&#xff0c;动态链接库&#xff09; 是非常核心的一种代码复用方式。 无论是&#xff1a; 调用第三方 SDK拆分大型工程插件化设计…

作者头像 李华
网站建设 2026/6/15 17:56:26

基于SSM的一站式酒店管理系统

基于SSM的一站式酒店管理系统设计与实现 一、系统开发背景与核心价值 随着旅游业与商务出行的持续升温&#xff0c;酒店行业迎来规模化发展的同时&#xff0c;也面临着管理效率低、服务流程不规范、客户体验参差不齐等问题。传统酒店管理模式依赖人工记录订单、统计房源、核对账…

作者头像 李华