You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python GEE Folium风场绘制:图层合并、陆地掩膜、透明度问题

GEE+Folium 10m海洋风速分布图修复方案

核心问题对应修复逻辑

  • 风速合成错误修复:u、v为风速的正交矢量分量,直接做算术加法不符合物理计算规则,合成风速标量值需通过公式 √(u² + v²) 计算,直接调用GEE内置的hypot()方法即可完成模长计算。
  • 海洋区域裁剪修复:加载全球高程数据集生成海洋掩膜,将风速图层的陆地区域像元设为透明,即可保留陆地区域底图正常显示,仅在海洋区域渲染风速图层。
  • 半透明效果失效修复:部分版本Folium的TileLayer仅传入opacity参数无法触发透明度渲染,需同时传入fillOpacity参数并设置相同透明度值即可生效。

修复后完整可运行代码

# -*- coding: utf-8 -*-
import ee
import folium
import webbrowser

# 初始化GEE
ee.Authenticate()
ee.Initialize()

# 加载GFS风速数据集
wind_col = ee.ImageCollection('NOAA/GFS0P25')
i_date = '2022-06-30'
f_date = '2022-07-01'

# 重写folium加载GEE图层方法,修复透明度问题
def add_ee_layer(self, ee_image_object, vis_params, name, opacity=0.3):
    map_id_dict = ee.Image(ee_image_object).getMapId(vis_params)
    folium.raster_layers.TileLayer(
        tiles=map_id_dict['tile_fetcher'].url_format,
        attr='Map Data © Google Earth Engine',
        name=name,
        overlay=True,
        control=True,
        opacity=opacity,
        fillOpacity=opacity  # 新增该参数解决透明度不生效问题
    ).add_to(self)

folium.Map.add_ee_layer = add_ee_layer

# 提取对应时次的u、v分量
wind_img_u = wind_col.select('u_component_of_wind_10m_above_ground').filterDate(i_date,f_date).first()
wind_img_v = wind_col.select('v_component_of_wind_10m_above_ground').filterDate(i_date,f_date).first()

# 1. 正确计算合成风速(矢量模长)
wind_speed = wind_img_u.hypot(wind_img_v)

# 2. 生成海洋掩膜,仅保留海洋区域的风速值
# 高程<=0的区域判定为海洋
ocean_mask = ee.Image('NOAA/NGDC/ETOPO1').select('bedrock').lte(0)
wind_speed_ocean = wind_speed.updateMask(ocean_mask)

# 风速可视化参数(合成风速为非负值,调整最小值为0)
wind_vis_params = {
    'min': 0,
    'max': 20,
    'palette': ['orange', 'yellow', 'green', 'yellow', 'orange']
}

# 创建底图
lat, lon = 45.77, 4.855
my_map = folium.Map(location=[lat, lon], zoom_start=5)

# 添加海洋风速图层,透明度0.3
my_map.add_ee_layer(wind_speed_ocean, wind_vis_params, '10m合成风速(海洋区域)', opacity=0.3)

# 添加图层控制
folium.LayerControl(collapsed=False).add_to(my_map)

# 保存并打开结果
save_path = "c:/data/weather.html"
my_map.save(save_path)
webbrowser.open(save_path)

补充说明

  • 合成风速为标量值,不存在负数,因此可视化参数最小值设为0,最大值可根据研究区域实际风速范围调整。
  • 如果需要展示风向而非单纯风速大小,可以替换为风羽图渲染逻辑,当前代码实现的是风速大小的填色渲染。
  • 海洋掩膜采用ETOPO1地形数据生成,近岸区域如果存在精度问题,可以替换为更高分辨率的岸线数据集做掩膜。

内容的提问来源于stack exchange,提问作者bitterjam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:48:15