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

如何通过GDAL将GeoTIFF转换为带Lon/Lat的CSV文件?

解决方法

场景1:XYZ文件的x/y本身就是经纬度(仅需修改列名)

如果你的GeoTIFF采用的是地理坐标系(如WGS84, EPSG:4326),GDAL导出的XYZ文件里的x就是经度、y就是纬度,只是列名不符合需求。直接用Pandas重命名列即可:

import pandas as pd

# 读取XYZ文件(替换为你的文件名)
df = pd.read_csv('output.xyz', sep=' ', header=None, names=['x', 'y', 'value'])

# 重命名列
df.rename(columns={'x': 'lon', 'y': 'lat'}, inplace=True)

# 保存为标准CSV
df.to_csv('final_output.csv', index=False)

场景2:XYZ文件的x/y是投影坐标(需转换为经纬度)

如果GeoTIFF用的是投影坐标系(如UTM、高斯-克吕格),x/y是平面坐标,需要转换成WGS84经纬度。可以用pyproj库完成坐标转换:

步骤1:获取原影像的投影EPSG编码

先通过GDAL读取原GeoTIFF的投影信息,提取对应的EPSG编码(也可手动输入已知的编码):

from osgeo import gdal

ds = gdal.Open('input.tif')
proj = ds.GetProjection()
# 示例:假设原投影是UTM 50N,对应EPSG:32650
src_crs = 'EPSG:32650'  # 替换为你的影像实际投影EPSG
dst_crs = 'EPSG:4326'  # 目标坐标系:WGS84经纬度

步骤2:批量转换坐标并输出CSV

import pandas as pd
from pyproj import Transformer

# 读取XYZ文件
df = pd.read_csv('output.xyz', sep=' ', header=None, names=['x', 'y', 'value'])

# 创建坐标转换器
transformer = Transformer.from_crs(src_crs, dst_crs, always_xy=True)

# 将投影坐标转为经纬度
df['lon'], df['lat'] = transformer.transform(df['x'].values, df['y'].values)

# 丢弃原投影坐标列,保存最终CSV
df.drop(columns=['x', 'y'], inplace=True)
df.to_csv('final_output.csv', index=False)

额外优化:直接用GDAL生成带经纬度列名的XYZ

可以跳过后续列名修改步骤,直接在GDAL导出XYZ时指定列名:

gdal_translate -of XYZ -co COLUMN_NAMES="lon,lat,value" input.tif output.xyz

导出的XYZ文件直接使用lon、lat作为列名,读取后可直接保存为标准CSV。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:39:57