解决matlab中.mat数据在python中读取并输出为.tif栅格格式(解决基于python将.mat数据转tif数据)

朋友遇到了几个问题,寻求帮助,帮他解决同时做个总结,遇到类似问题可以参考。

他的需求,.mat数据输出栅格。
问题1:用arcgis实现,arcgis中栅格放大颜色与缩小时候不同,导致作图差异。
问题2:如何快速将.mat转换为栅格不采用arcgis,采用python。
问题3,python栅格中行列的问题(易错)

分析:
出现问题1很可能是投影问题,但是转换成功却无法解决,arcgis经常出现实际上成功,属性显示投影坐标一致但是实际上未成功。故为了解决他的问题,直接采用python实现。

解决:
1、原先的思路,将.mat数据转成ASCII数据,后通过ASCII转换成栅格。(同样的数据他的电脑可以这样转换,但是我的不行,路径改英文反正各种方法全部试了一变)
在这里插入图片描述
2、python实现代码
首先看下朋友给的ASCII文件
在这里插入图片描述
实现代码如下:
在代码中,我常会犯错关于栅格的行列与输出行列的问题。

import pandas as pd  # pandas数据分析的核心库
import os
import numpy as np
import codecs
from osgeo import gdal
import scipy.io as scio

dataFile = r'D:\***\matlab_tk5.mat'
data = scio.loadmat(dataFile)
print(data)
load_YF_map_mean=data["tk5"]
#L1=load_YF_map_mean[0]#列3011
#L2=load_YF_map_mean[:,0]#行2127

# 设置生成分辨率(格网大小)
pixelWidth, pixelHeight = 50, -50
# 设置栅格的原点和行列号(这里对应他的ASCII文件)
xOrigin = 505278.3083209
yOrigin = 2474900.2388
cols = 3011
rows = 2127
cc = np.zeros((cols, rows))
for j in range(0, 3011)  #这里易错
    for i in range(0, 2127)
        cc[j, i] = load_YF_map_mean[i, j]
        
# 输出成geoTIFF
driver = gdal.GetDriverByName('GTiff')
outRaster = driver.Create('tk5.tif' , cols, rows, 1, gdal.GDT_Float32)
outRaster.SetGeoTransform((xOrigin, pixelWidth, 0, yOrigin, 0, pixelHeight))
outband = outRaster.GetRasterBand(1)
outband.WriteArray(np.transpose(cc))  # np.transpose(cc)

# 设置投影信息
outband.FlushCache()
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值