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

如何将GeoTIFF转为DataFrame并保留经纬度坐标列?

问题描述

从USDA下载的GeoTIFF文件(投影为NAD_1983_Contiguous_USA_Albers,对应EPSG:5070),需要转换为包含经纬度对+对应数值的DataFrame。原代码生成的x、y是投影坐标系下的数值,而非经纬度。

解决方案

核心思路是先将栅格数据从EPSG:5070转换为经纬度常用的WGS84(EPSG:4326),再转换为DataFrame:

步骤1:转换投影到WGS84

利用rioxarray的rio.reproject方法,将数据转换为EPSG:4326坐标系,此时x/y会对应经度/纬度。

步骤2:转换为长格式DataFrame

使用xarray的to_dataframe方法直接转换,再整理列名。

完整代码

import rioxarray
import pandas as pd

# 读取GeoTIFF文件
fl = 'data/cpc2021/corn/cpccorn2021/condition/cornCond21w24.tif'
da = rioxarray.open_rasterio(fl, masked=True)

# 转换投影到WGS84(EPSG:4326,经纬度坐标系)
da_wgs84 = da.rio.reproject("EPSG:4326")

# 转换为DataFrame,移除多余的band维度
df = da_wgs84.squeeze(dim="band").to_dataframe(name="value").reset_index()

# 可选:过滤无数据的行
df = df.dropna(subset=["value"])

# 查看结果
print(df.head())

代码说明

  • rio.reproject("EPSG:4326"):将原投影(EPSG:5070)转换为全球通用的经纬度坐标系,此时x对应经度,y对应纬度。
  • squeeze(dim="band"):移除多余的band维度(输入文件仅含1个波段)。
  • to_dataframe(name="value"):直接将xarray的坐标和数值转换为DataFrame,列名分别为x(经度)、y(纬度)、value(栅格数值)。
  • dropna(subset=["value"]):可选操作,移除无数据的栅格点,减少无效数据。

输出示例

转换后的DataFrame结构如下:

xyvalue
-127.360951.723833.250000
-127.271751.723833.100000
.........

得到的x、y即为覆盖美国本土的经纬度坐标,每个坐标对应一个栅格数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:30:53