python的gdal库,读取tif影像为DataFrame,或将DataFrame转为tif

将tif转为DataFrame存为csv

此数据为modis的LAI产品,仅有LAI一个波段

"""
author: Shuai-jie Shen 沈帅杰
CSDN: https://blog.csdn.net/weixin_45452300
公众号: AgBioIT
"""
from osgeo import gdal
import pandas as pd

gdal.AllRegister()

filePath = r'C:\Users\Administrator\遥感文件\MOD15A2H.006_Lai_500m_doy2020097_aid0001.tif'
dataset = gdal.Open(filePath)
adfGeoTransform = dataset.GetGeoTransform()
nXSize = dataset.RasterXSize  # 列数
nYSize = dataset.RasterYSize  # 行数
im_data = dataset.ReadAsArray(0,0,nXSize,nYSize)
index = []  # 纬度
columns = []  # 经度
for j in range(nYSize):
    lat = adfGeoTransform[3] + j * adfGeoTransform[5]
    index.append(lat)
for i in range(nXSize):
    lon = adfGeoTransform[0] + i * adfGeoTransform[1]
    columns.append(lon)
data = pd.DataFrame(im_data, index=index, columns=columns)
data.to_csv('LAI2020097DF.csv')

将csv文件逆转为tif

from osgeo import gdal,osr
import numpy as np
var = 'LAI2020097DF'
# data = r'C:\Users\13290\Desktop\soil data\{}.nc'.format(var)
# f = nc.Dataset(data)
data = pd.read_csv('LAI2020097DF.csv')
data = data.set_index('Unnamed: 0')
var_lon = data.columns.map(float)
var_lat = data.index
# data = f[var][0, :]
data_arr = np.asarray(data)
# data_arr = data_arr[::-1]  # 因为我的数据维度是正序排列,需要逆序一下
# 影像的左上角和右下角坐标
LonMin, LatMax, LonMax, LatMin = [var_lon.min(), var_lat.max(), var_lon.max(), var_lat.min()]
# 分辨率计算
N_Lat = len(var_lat)
N_Lon = len(var_lon)
Lon_Res = (LonMax - LonMin) / (float(N_Lon) - 1)
Lat_Res = (LatMax - LatMin) / (float(N_Lat) - 1)
 
# 创建.tif文件
driver = gdal.GetDriverByName('GTiff')
out_tif_name = r'C:\Users\Administrator\Desktop\同化数据处理\henan{}.tif'.format(var)
out_tif = driver.Create(out_tif_name, N_Lon, N_Lat, 1, gdal.GDT_Float32)  # 创建框架
 
# 设置影像的显示范围
# Lat_Res一定要是-的
geotransform = (LonMin, Lon_Res, 0, LatMax, 0, -Lat_Res)
out_tif.SetGeoTransform(geotransform)
 
# 获取地理坐标系统信息,用于选取需要的地理坐标系统
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)  # 定义输出的坐标系为"WGS 84",AUTHORITY["EPSG","4326"]
out_tif.SetProjection(srs.ExportToWkt())  # 给新建图层赋予投影信息
 
# 数据写出
out_tif.GetRasterBand(1).WriteArray(data_arr)  # 将数据写入内存,此时没有写入硬盘
out_tif.FlushCache()  # 将数据写入硬盘
out_tif = None  # 注意必须关闭tif文件
  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值