朋友遇到了几个问题,寻求帮助,帮他解决同时做个总结,遇到类似问题可以参考。
他的需求,.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()