使用Google Earth Engine生成带标注GIF时右侧异常边栏修复咨询
修复方案
导致GIF右侧出现异常边栏的核心原因及对应修复方法如下:
1. 修正跨180°经线的区域坐标
你当前定义的rect经度范围-269.648~-168.837超出了标准经度范围[-180,180],属于跨180°经线的俄罗斯远东区域,错误的坐标会导致投影计算异常出现边缘冗余。将经度转换为标准范围即可:
rect = ee.Geometry.Polygon( [[[90.3515625, 77.9156690], [90.3515625, 46.0122238], [191.1621094, 46.0122238], [191.1621094, 77.9156690]]], geodesic=False, )
添加geodesic=False避免GEE自动对多边形边缘做测地线弯曲处理。
2. 对整个影像集合做裁剪处理
你当前代码仅对第一帧影像单独做了裁剪,下载用的影像集合未做裁剪, mask外的无值区域渲染为异常边。需先将本地shapefile转为GEE支持的矢量对象,再对所有影像批量裁剪:
mask = gpd.read_file('Data/RUS_adm1.shp') # 转GEE矢量对象 mask_ee = geemap.gdf_to_ee(mask) # 批量裁剪所有影像 collection = ee.ImageCollection("MODIS/006/MOD13Q1")\ .filterDate('2020-01-01', '2020-12-31')\ .select('NDVI')\ .map(lambda img: img.clip(mask_ee))
3. 调整导出参数避免自动补边
当前dimensions仅指定了宽度600,GEE会自动按区域宽高比计算高度,比例不匹配时会自动补边。可以指定固定宽高两个值,保证和区域比例完全匹配:
# 先计算区域在3857投影下的宽高比,设置dimensions为[宽, 高],比如按比例设为[600, 520] args = {'dimensions': [600, 520], 'crs': 'EPSG:3857', 'region': rect, 'min': 0, 'max': 10000, 'palette': ['FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', '012E01', '011D01', '011301'], 'framesPerSecond': 1}
4. 兜底裁剪多余边缘
如果修改后仍有少量残留边,可以直接对生成的GIF做裁剪,去掉右侧冗余像素:
# x2根据实际边的宽度调整,比如原始宽度600,右边有20像素的边就设为580 geemap.crop_gif(out_gif, out_gif, x1=0, y1=0, x2=580, y2=520)
内容的提问来源于stack exchange,提问作者Katerkaskade
相关产品推荐
相关产品推荐

