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

如何在Python中保持CRS不变重采样GeoTIFF(解决0x0数据集错误)

解决GDAL重采样时“创建0x0数据集”错误的方法

错误原因

你的源数据采用WGS84(EPSG:4326,地理坐标系,单位为度),但你设置的xres=1000和yres=1000直接使用了米作为单位,GDAL会将其识别为度——1000度的分辨率远大于你的数据范围(从地理变换参数看,数据的经纬度范围仅零点几度),因此计算出的输出行列数为0,触发报错。你之前在QGIS中转到EPSG:7390(投影坐标系,单位为米)时能成功重采样,正是因为此时分辨率单位匹配。


方案1:转换到投影坐标系后重采样(推荐)

由于你需要的1000米是长度单位,在地理坐标系下直接设置会导致单位不匹配,建议先转换到EPSG:7390(或其他适配区域的投影坐标系),再执行重采样:

from osgeo import gdal

infn = '/path/to/source.tif'
outfn = '/path/to/target.tif'

# 转换到EPSG:7390并设置1000米分辨率
ds = gdal.Warp(
    outfn,
    infn,
    dstSRS='EPSG:7390',
    xRes=1000,
    yRes=1000,
    resampleAlg='near'
)
ds = None

方案2:在原WGS84坐标系下计算对应1000米的度分辨率

若坚持不更改CRS,需将1000米转换为度单位(不同纬度的转换系数不同,以下基于数据中心纬度-17°计算):

from osgeo import gdal
import math

infn = '/path/to/source.tif'
outfn = '/path/to/target.tif'

# 计算1000米对应的度分辨率
lat_center = -17
xres_deg = 1000 / (111320 * math.cos(math.radians(lat_center)))
yres_deg = 1000 / 110574

resample_alg = 'near'

ds = gdal.Warp(outfn, infn, xRes=xres_deg, yRes=yres_deg, resampleAlg=resample_alg)
ds = None

注意事项

  • 地理坐标系(如WGS84)的分辨率单位是度,直接使用米数值会导致范围溢出,必须转换单位后再设置
  • 投影坐标系(如EPSG:7390)的单位是米,设置1000米分辨率更为直观且精度稳定,推荐优先使用该方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:55:33