tiftomat mattotif 通过georasterref
将mat文件存为tif(使用georasterref) 再从tif存为mat会发生变化吗?
答案是不会的 但是显示可能会造成假象
Mathworks并不推荐我们使用这个创建tif 原因会在后面揭晓
原因在这里:运行环境为matlab2018b
1.我们先把mat数据存为tif
S = load(‘G:\a.mat’);
BP = struct2cell(S);
prec1 = cell2mat(BP);
outp='G:\201831512rot.tif';
%我这个mat就是全世界的降水数据 所以我的经纬度【-180 180】 【-90 90】
refference=georasterref('RasterSize',size(prec1),'Lonlim',[-180 180],'Latlim',[-90,90])
geotiffwrite(outp,prec1,refference)
运行我们看看refference,长什么样子
我们可以看到我们的refference是从-180 -90 西经南纬开始的 但是我的数据真实是从西经北纬开始的。所以切记切记,使用函数要注意参数的意义,故上述代码是错误的。
真正用法 官方文档【分辨率 0 起始点中心值经度;0 分辨率 起始点中心值纬度】
[lonspacing 0 lon; 0 latspacing lat],其中:
lonspacing为正, RowsStartFrom为’west’。当 lonspacing为负时, RowsStartFrom是’east’。
latspacing为正, ColumnsStartFrom为’south’。当 latspacing为负时, ColumnsStartFrom是 ‘north’。
lat和lon分别是第一个单元中心或发布点的纬度和经度坐标。对于空间参考栅格A,第一个像元中心或发布点是与 关联的空间位置 A(1,1,:)。
世界文件矩阵定义了将固有坐标映射到地理坐标的变换
我的mat文件第一行第一列对应的是 -180,90 ,value值为0
正确代码
W =[0.1 0 -179.95; 0 -0.1 89.95]
R = georasterref (W,[1800 3600], "cells" )
% refference=georasterref('RasterSize',size(prec1),'Lonlim',[-180 180],'Latlim',[-90,90])
geotiffwrite(outp,prec1,R)
outp='G:\201831512rot2.tif';
% refference=georasterref('RasterSize',size(p2),'Lonlim',[-180 180],'Latlim',[-90,90])
geotiffwrite(outp,p2,R)
mat文件 我的mat文件起始点坐标是 -180,90 对应的是0
在ArcGIS加载该tif 这时左上角是西经180 北纬90
这个tif 列起始是北,将这个tif加载的ArcGIS中, ArcGIS是上北下南,故平铺完全符合
然后我们再把这个tif转为mat
filename =FileList(i,1).name;
dir_filename = [goaldir filename]
data1=strrep(filename,'.tif','.mat')
[SS,R] = geotiffread(dir_filename); %SS为tif数据的信息,是一个二维数组,R是tif数据的地理信息
info = geotiffinfo(dir_filename); % 读取tif数据的地理信息,为后面导出为tif数据提供地理信息
img = imread(dir_filename);
data2=strcat(path,'\',data1);
save(data2,'img');
是同一个mat
一定要注意 在ArcGIS 是上北下南 如果你的数据行头是南纬 将会被翻转