读入与输出shp文件——Matlab

本文介绍如何使用Matlab自带的mappingbox工具箱轻松读取和写入shp文件,包括创建struct并利用shapewrite函数输出完整的shp文件集,适合地理信息系统(GIS)领域的研究人员和开发者。

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

Matlab自带有mapping box工具箱,该工具箱具有很多与地图相关的功能,如下图,详情请访问Matlab官网帮助.
在这里插入图片描述
读写shp文件也是非常容易的事情。shp文件在Matlab中被视为一个struct,每个字段的属性值则是struct的一个元胞。

读入shp文件

在命令行窗口输入:

Map = shaperead('Example.shp') 

结果如图:
在这里插入图片描述

输出shp文件

与读入shp相比,输出shp文件相比麻烦一些,需要自己建立一个struct,然后利用shapewrite函数将struct写入shp文件中。
主要包含步骤为:

%前面的部分为必要的字段
Map.Geometry = '';%元素类型,Point,Line,Polygon等
Map.BoundingBox = [minx,miny,maxx,maxy];
Map.X = [];%坐标X
Map.Y = [];%坐标Y

%保存相关字段,至少需要一个,如果没有其他字段值的话,
%在输出时不会输出dbf文件,导致shp文件不完整,没办法使用.
Map.Id = ;
Map.Location = ;
……

shapewrite(Map,filename); %生成shp,dbf,shx三个文件

例如:

for i=1:5
	Map(i).Geometry = 'Polygon';
	Map(i).BoundingBox = [100*i,100*i;100*i+100,100*i+100];
	Map(i).X = [100*i,100*i+100,100*i+100,100*i,NaN];
	Map(i).Y = [100*i,100*i,100*i+100,100*i+100,NaN];
	Map(i).Id = i;
end
shapewrite(Map,'Example.shp');

保存的struct如图所示,
在这里插入图片描述

将Example.shp导入Arcmap:
在这里插入图片描述

### 如何在MATLAB中读取并膨胀SHP文件 #### 读取SHP文件 为了在 MATLAB 中操作 SHP 文件,可以利用 `shaperead` 函数来导入 Shapefile 数据。此函数能够解析地理空间矢量数据,并将其转换成结构体数组的形式以便进一步处理。 ```matlab % 定义路径至 shapefile 文件位置 shapeFileName = 'path_to_your_file.shp'; % 使用 shaperead 函数加载 shapefile 数据 s = shaperead(shapeFileName); ``` 上述代码片段展示了如何指定要打开的文件名以及调用 `shaperead` 来获取存储于变量 s 的几何对象列表[^1]。 #### 膨胀多边形边界 对于已经读入内存中的每一个多边形,可以通过创建缓冲区的方式实现膨胀效果。这通常涉及到计算给定距离下的外部轮廓线。MATLAB 提供了 `bufferm` 或者更现代的方法是使用 Mapping Toolbox 中的 `polybuffer` 函数来进行此类变换: ```matlab for i = 1:length(s) % 获取当前形状的 X 和 Y 坐标向量 x = [s(i).X; s(i).X(1)]; % 封闭环路 y = [s(i).Y; s(i).Y(1)]; % 应用 polybuffer 创建宽度为 d 的缓冲区 (d>0 表示向外扩展) bufferDistance = 500; % 设定所需扩张的距离单位 bufferedPolygon = polybuffer(polyshape(x,y), bufferDistance, 'Method','euclidean'); % 更新原始图形结构体内的坐标信息 s(i).X = double(bufferedPolygon.Vertices(:,1)); s(i).Y = double(bufferedPolygon.Vertices(:,2)); end ``` 这段脚本遍历所有由 `shaperead` 返回的对象,并依次应用 `polybuffer` 方法增加它们各自的面积范围。注意这里假设输入的是平面直角坐标系下测量得到的数据;如果是基于经纬度,则可能需要考虑投影差异的影响。 #### 可视化结果 最后一步是对修改后的数据集进行绘图展示,确认膨胀的效果是否符合预期。 ```matlab figure; geoshow([s.X], [s.Y]); % 绘制更新后的多边形集合 title('Expanded Polygons from Shapefile Data'); axis equal; grid on; ``` 通过这种方式可以在 MATLAB 环境内完成对 SHP 文件的操作流程——从读取到变形再到最终呈现出来。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值