美文网首页matlab在生态遥感中的应用生态遥感的学习笔记
基于Matlab的栅格地理数据处理-快速入门系列(1)

基于Matlab的栅格地理数据处理-快速入门系列(1)

作者: 画长空_yin | 来源:发表于2019-10-19 16:24 被阅读0次

    尽管matlab在处理栅格地理数据上面具有极大的便捷性,但目前关于引导生态,地理相关学科的学生使用matlab进行栅格地理数据处理的教程较少,更多的初学者采用Arcgis来完成栅格地理数据处理,但在二次扩展或自定义自己想要的功能方面,Matlab比起ArcGis更为快捷和方面,介绍matlab处理栅格地理数据较为经典的一本书是陈彦光老师的《基于Matlab的地理数据分析 》,该书讲述了地理数据分析常用的算法如多元分析,Hurst指数分析等,在实例中仅仅是针对单点长时间数据的excel数据,而不是针对整个栅格数据,缺乏栅格数据的输入和输出,在进行栅格数据应用时,代码需要进行重新加工处理,同时该书中也是直接给出了代码,但关于在处理地理数据时的编程思维并没有仔细说明。在该系列教程中,画长空会详细的讲述基于matlab读入各种类型的栅格数据,读入数据后数据的详细说明,数据的展示,经常用来操作数据的函数,针对栅格地理数据的编程思维方法。

    Matlab 处理栅格地理数据的优势

    Matlab全称是Mmatrix Laboratory,翻译过来就是矩阵实验室,能够快速的处理矩阵数据,而栅格地理数据是由一个一个像元或格点组成的,每个格点都存在着一个值,当读入到matlab中去时,直接就是一个矩阵的形式,非常方便matlab来进行处理,而且栅格地理数据的常用格式是tif数据,matlab通过importdata数据可以直接读入,常见的国际地理生态数据集如CRU,TRMM等都可以通过matlab的内置程序直接读入,形成一个一个矩阵,因此Matlab能够非常方便快捷的读入栅格地理数据。读入进去后,我们的数据就是一个一个的矩阵,matlab中有大量实用方便的函数对矩阵进行操作,而且比起arcpy等matlab针对栅格地理数据处理更加容易入门和上手实编。

    Matlab 导入栅格地理数据

    matlab在导入栅格数据时候常常会配合ArcGis和Envi进行使用,matlab通过importdata导入tif格式的数据类型最为方便,前面的教程中都有用到这一读取方式。在进行批量读取时,需要我们的数据命名存在规律,假设我们的存储路径是"D:\matlab\example",在example文件夹下面的降水数据命名是 2000pre.tif, 2001pre.tif一直到2018pre.tif, 如果把数据全部读入进去,先建立个大矩阵,然后读取时对年份进行循环,具体如下

    a=importdata('D:\matlab\example\2001pre.tif');
    [m,n]=size(a)
    begin_year=2000;
    end_year=2018;
    lon=end_year-begin_year+1
    datasum=zeros(m*n,lon);
    k=1;
    for i=begin_year:end_year
        filename=["D:/matlab/example",int2str(i),'pre.tif'];
        data=importdata(filename);
       data=reshape(data,[],1);
       datasum(:,k)=data;
        k=k+1;
    end
    

    该程序建立后,当需要读取其他数据集时,只需要改变下开始年份和结束年份,读入的a变量,以及存储路径和filename,代码的复用性高。上述读取全部19年降水数据的基本逻辑是,首先读取进去其中一个,获取到该数据的行列号(size函数),设置好开始和结束年份以及时间长度,提前设置个大矩阵来存储读取结果,读取时,采用循环读取,单个栅格数据读取后,变成一列数据,19年数据最后变成了19列数据,这样每一行就是每个格点的时间序列。在后续处理中,只要对行进行循环,就可以处理全部的数据。建议能够根据自己的数据重新写该段代码。
    当我们的栅格数据类型是GRID格式(Arcgis中的栅格数据格式)需要采用Arcgis来进行转换成tif格式,当数据格式是envi专有的tif或dat格式时,需要在envi中转换为普通的tif格式才能够读入到matlab中,特别注意一点是envi的tif格式无法读入到matlab中,尽管它们都是tif格式,但envi专有的tif格式与普通的tif格式存在着差异。
    假如我们的格式是矢量格式的话,可以通过Arcgis转换成栅格数据,但需要注意的是分辨率和范围要转换成和你要处理的其他栅格数据是一致的,实现方式是设置环境变量中的投影,范围和分辨率,比如我们的土地利用是矢量的,栅格数据是1km的降水和气温,要统计每种土地利用类型下的降水和气温,首先要把矢量的土地利用也转换成1km的栅格数据,同时保证范围和投影一致。
    当不同来源的栅格数据分辨率不一致,或投影不一致或范围不一致时,会导致数据的行列号不一致,如果导入matlab中进行处理则会造成错误,处理方法可以以一个为基准,用这个来裁剪其他栅格数据,设置环境变量中的投影,范围和分辨率和基准数据一致。在我已有的教程中,读者在应用时常常也碰到这个问题,只需通过上述方法解决即可。
    常见的国际数据集是以nc格式出现的,关于该数据类型的读取方法,可以查看前面的教程,都有详细的说明

    相关文章

      网友评论

        本文标题:基于Matlab的栅格地理数据处理-快速入门系列(1)

        本文链接:https://www.haomeiwen.com/subject/oocnmctx.html