最近在做一个点云的林业参数提取,用到了shp冠层数据,使用Arcgis似乎不太方便计算多种参数,因此学习了matlab读取shp数据,显示并且增加字段的方法。
SHP数据的读取
matlab2019b存在 shaperead 函数,可以读取shp数据。
其中帮助文档如下:
S = shaperead(filename)
S = shaperead(filename, Name, Value)
[S,A] = shaperead( )
S 中储存了shp数据的形状以及边界信息,如:读取一个面状shp,其情况如下:
A 中存储了shp数据的属性表
如果不是[S, A]输出,则shp的属性表会叠加在S中
SHP数据的信息读取
shapeinfo可以读取shp数据的信息。
info = shapeinfo(filename)
但是似乎没有坐标系的信息。
SHP数据的显示
使用geoshow可以显示shp数据
由于geoshow的用法很多,这里不做过多的演示,直接使用:
s = shaperead('xx.shp');
geoshow(s)
SHP数据保存
shapewrite函数可以保存shp数据
shapewrite(S,filename)
shapewrite(S,filename,'DbfSpec',dbfspec)
如果是添加字段的话,shp读取读取出来是有一点像是table的struct格式,无法直接按照字段添加,因此,需要先将读取的S转换成table,为表格添加字段,再将表格转换为struct,进行保存。
下面是代码示列:
% 读取shp数据
s = shaperead('xx.shp');
% 转换成table格式
s = struct2table(s);
% 组织要添加的字段
% a,b,c为和shp数据一样多的字段数据
filed = table(a,b,c);
% 为shp补充字段
s = [s,filed];
% 转换为struct格式
s = table2struct(s);
% 保存shp
shapewrite(s,'s.shp')
接下来在gis中打开保存的shp就可以了