matlab使用shp文件裁剪TIF影像并存储
时间: 2024-01-15 14:03:12 浏览: 692
可以使用MATLAB中的Mapping Toolbox来实现shp文件对TIF影像的裁剪和存储。以下是一个示例代码:
```matlab
% 读取shp文件
S = shaperead('shapefile.shp');
% 读取TIF文件
info = geotiffinfo('image.tif');
[A, R] = geotiffread('image.tif');
% 获取TIF影像在shp文件中的位置
[x, y] = meshgrid(R.XWorldLimits(1):R.CellExtentInWorldX:R.XWorldLimits(2), R.YWorldLimits(2):-R.CellExtentInWorldY:R.YWorldLimits(1));
IN = inpolygon(x, y, [S.X], [S.Y]);
% 对TIF影像进行裁剪
A(~IN) = NaN;
% 存储裁剪后的TIF影像
geotiffwrite('clipped_image.tif', A, R);
```
这段代码首先读取shp文件和TIF文件,然后使用`inpolygon`函数获取TIF影像在shp文件中的位置,接着对TIF影像进行裁剪,最后使用`geotiffwrite`函数将裁剪后的TIF影像存储到指定路径中。需要注意的是,`geotiffwrite`函数需要提供正确的空间参考信息,这里我们直接使用原始TIF影像的空间参考信息。
相关问题
matlab使用shp文件裁剪TIF影像
可以使用MATLAB中的Mapping Toolbox中的函数来实现shp文件对TIF影像的裁剪。
以下是一个简单的例子:
```matlab
% 读取shp文件
s = shaperead('example.shp');
% 读取TIF文件
[I, R] = geotiffread('example.tif');
% 将TIF文件的地理参考信息与shp文件匹配
refmat = worldfileread('example.tfw', 'planar', size(I));
RA = maprefcells(R, size(I), 'ColumnsStartFrom', 'north');
% 将shp文件转换成地理坐标系
x = [s.X];
y = [s.Y];
[x, y] = projinv(s(1).BoundingBox.CRS, x, y);
% 将shp文件转换成像素坐标系
[r, c] = map2pix(RA, x, y);
% 创建一个mask矩阵
mask = poly2mask(r, c, size(I, 1), size(I, 2));
% 裁剪TIF影像
I = I .* uint16(mask);
% 显示裁剪后的TIF影像
imshow(I);
```
这个例子假设你有一个名为`example.shp`的shp文件和一个名为`example.tif`的TIF影像。你需要将`example.tfw`文件放在与`example.tif`相同的文件夹中,并且该文件必须包含TIF文件的地理参考信息。你可以根据自己的实际情况修改这个例子,以适应你的数据。
Matlab利用shp文件裁剪tif数据
### 使用Shapefile裁剪GeoTIFF图像
为了在MATLAB中使用Shapefile (`.shp`) 文件裁剪GeoTIFF图像,可以遵循以下方法:
#### 准备工作
确保已安装必要的工具箱,如Mapping Toolbox和Image Processing Toolbox。
#### 加载Shapefile和GeoTIFF文件
首先加载Shapefile以及待处理的GeoTIFF文件。这可以通过`shaperead`函数读取Shapefile,并通过`geotiffread`读取GeoTIFF文件来实现[^1]。
```matlab
% 读取Shapefile
S = shaperead('boundary.shp');
% 获取GeoTIFF信息并读取影像数据
[Z, R] = geotiffinfo('image.tif');
A = geotiffread('image.tif', Z);
```
#### 创建多边形对象
基于Shapefile中的边界创建一个多边形对象用于后续操作。此过程涉及提取坐标并将它们转换成适合于掩膜运算的形式。
```matlab
lat = [S.Lat]; % 假设Shapefile中有Lat字段表示纬度
lon = [S.Lon]; % 同理Lon代表经度
inPoly = polyshape(lon,lat);
```
#### 计算栅格范围内的掩码矩阵
利用上述定义好的多边形,在目标GeoTIFF对应的地理范围内计算出一个二值化的掩码矩阵。该掩码将用来筛选掉不需要的部分。
```matlab
[xGrid,yGrid] = meshgrid(min(lon):max(lon),min(lat):max(lat));
mask = isinterior(inPoly,xGrid(:)',yGrid(:)');
maskMatrix = reshape(mask,size(xGrid));
```
#### 应用掩码到原始影像上
最后一步就是应用这个掩码至原图之上,从而得到被裁减后的结果图片。这里需要注意的是,由于不同投影方式可能导致的空间差异,可能还需要做额外调整以保证两者匹配良好。
```matlab
croppedImage = A .* double(maskMatrix);
figure;
imshow(croppedImage,R,'DisplayRange',[0 max(A(:))]);
title('Cropped GeoTIFF Image by Shapefile Boundary')
```
以上就是在MATLAB环境下运用Shapefile对GeoTIFF进行裁剪的具体流程说明。
阅读全文
相关推荐

















