MATLAB TIFF转Shape、TIFF和Shape的读写

本文介绍了如何使用MATLAB进行地理TIFF文件的读取和写入,以及将TIFF转换为Shapefile。通过geotiffread和geotiffwrite函数处理TIFF,shaperead和shapewrite函数处理Shapefile。同时提供了从TIFF到Shapefile的具体转换步骤,包括像素定位、坐标转换和数据结构转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 读TIFF

[A,R] = geotiffread(‘Filename.tif’);
info = geotiffinfo(‘Filename.tif’);

  • 写TIFF

geotiffwrite(‘Filename’,A,R,‘GeoKeyDirectoryTag’,info.GeoTIFFTags.GeoKeyDirectoryTag)

  • 读Shape

A = shaperead(‘Filename.shp’);

  • 写Shape

shapewrite(Map,‘Filename’); % 这里的Map为结构体,且需带有数据类型(点线面)
% 若要将数组A写为Shape
A = num2cell(A);
fields = {‘X’,‘Y’,‘Z’};
A = cell2struct(A,fields,dim); % fields为N×1时,dim=1;当fields为1×M时,dim=2
[A.Geometry] = deal(‘Point’); % 以点为例
shapewrite(A,‘Filename’);

  • Tiff2Shp

[A,R,~] = geotiffread(‘Filename.tif’);
[I,J] = ind2sub(size(A),find(A>0)); % pixel value >0
Map_XY 

### 获取MODIS反射率数据并计算叶面积指数 #### 下载MODIS地表反射率产品 为了获取MODIS地表反射率产品,可以访问NASA的LAADS DAAC (Level 1 and Atmosphere Archive & Distribution System Distributed Active Archive Center) 或者 Earthdata Login网站。这些平台提供了多种MODIS地表反射率产品的下载服务,例如MOD09GA(Terra卫星)MYD09GA(Aqua卫星),它们包含了多个波段的地表反射率数据[^1]。 ```bash wget --load-cookies ~/.urs_cookies --save-cookies ~/.urs_cookies --keep-session-cookie --auth-no-challenge=on \ --content-disposition 'https://ladsweb.modaps.eosdis.nasa.gov/archive/allData/6/MOD09GA/YYYY/MM/DD/' ``` 这段命令展示了如何使用`wget`工具自动化批量下载指定日期范围内的MODIS Level-2G表面反射率栅格图像文件(.hdf),其中YYYY代表年份, MM表示月份而DD则是具体的一天。 #### 处理与预处理反射率数据 在接收到原始HDF格式的数据之后,通常需要将其换为更易于操作的形式如GeoTIFF,并执行一些必要的预处理步骤来提高后续分析的质量: - **去除云污染**:应用质量控制标志筛选掉受云影响较大的像素; - **大气校正**:补偿由于太阳角度、地形遮蔽等因素造成的偏差; - **重投影与裁剪**:调整空间参考系使之与其他地理信息系统兼容,并限定研究区域边界; 对于上述提到的大气效应修正以及几何变换等功能,在Python编程环境中可以通过GDAL库配合专门设计用来读写HDF4/EOS文件结构的pyhdf扩展模块轻松实现[^2]。 ```python from pyhdf.SD import SD, SDC import numpy as np import gdal import osr def hdf_to_tiff(hdf_file_path, tif_file_path): file = SD(hdf_file_path, SDC.READ) datasets_dic = file.datasets() for idx,sds in enumerate(datasets_dic.keys()): data2D = file.select(sds).get() driver = gdal.GetDriverByName('GTiff') dataset = driver.Create(tif_file_path+str(idx)+'.tif', data2D.shape[1], data2D.shape[0], 1, gdal.GDT_Float32) sr = osr.SpatialReference() sr.ImportFromEPSG(4326) # WGS84坐标系统 dataset.SetProjection(sr.ExportToWCT()) dataset.SetGeoTransform([min_lon,min_res,max_lat,-max_res]) dataset.GetRasterBand(1).WriteArray(data2D) del dataset file.end() # 调用函数完成化过程 hdf_to_tiff('/path/to/input.hdf','/output/path/') ``` 此代码片段定义了一个名为`hdf_to_tiff()`的方法接收两个字符串类型的参数分别指向源.HDF文件路径及目标.TIF输出位置,内部实现了简单的遍历所有子数据集并将之逐个保存成独立影像的操作逻辑。 #### 利用ProSAIL模型估算LAI 一旦获得了高质量的地表反射率图层,则可借助诸如ProSAIL这样的物理建模软件包来进行植被特性参数估计工作。该程序能够模拟不同条件下冠层水平上的光谱响应特征曲线,从而允许研究人员依据实测得到的多光谱或高光谱观测资料反向求解出最有可能匹配实际状况的那一组生理生态因子组合——即所谓的最佳拟合解法。在这个过程中,用户需设定初始猜测区间给定待估变量取值上下限,并反复迭代直至达到收敛条件为止。 ```matlab % MATLAB伪代码展示调用prosail.m脚本的方式 addpath(genpath('./prosail')); options = prosail_options(); options.niter = 5e3; options.lai_min = 0; options.lai_max = 7; [simulated_reflectance,params]=prosail(radiative_transfer_model,... leaf_optical_properties,... canopy_structure_parameters,... soil_background,... % Input measured surface reflectances here... [],[],[],[],[],... options); disp(['Estimated LAI:', num2str(params.LAI)]); ``` 以上MATLAB样例说明了怎样配置选项设置并通过传递测量到的真实世界表面反射率数值至`prosail()`核心接口内启动一次完整的运行周期最终输出所预测出来的平均单木叶片总面积除以地面单位面积的结果也就是常说的Leaf Area Index(LAI)[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值