Arcgis的shp文件通常分为3类, 点,线,面. 在此总结一下用matlab写shp文件的方法.
我们需要的是matlab的shapewrite函数.
通过help文件可以知道,shapewrite函数的基本用法: shapewrite(S,'S.shp');
这里的S是结构体类型,可以为结构体数组,以存储多个要素(点,线,面).
以polyline为例, S的组成为:
S.Geometry = 'Line';
S.BoundingBox = [Xmin, Ymin; Xmax, Ymax];
S.X = [x1, x2, x3, x4,...,NaN];
S.Y = [y1, y2, y3, y4,...,NaN];
以及每条线的属性, 如Id, 线长度等等,可以自己定义.
其中,Geometry 是固定的, X和Y为一条线上的所有点的坐标值,
如,一条线段, 起点为(0,0), 终点为(1,2), 则
S.Geometry = 'Line';
S.X = [0,1,NaN];
S.Y = [0,2,NaN];
S.BoundingBox=[0,0; 1,2];
所有polyline的X和Y都以NaN结束,因为线是不闭合的.
这里需要注意,当polyline有属性值时,例如,线的长度,S(1).Length = 3, S(2).Length = 5
S.Length需要转换为字符串, shapewrite函数才能在一个polyline中保存多条线. 即,
S(1).Length = num2str(S(1).Length);
S(2).Length = num2str(S(2).Length);
...
S(n).Length = num2str(S(n).Length);
否则会报错.
以上例子可总结为如下:
% 创建结构体S
S(1).Geometry = 'Line';
S(1).X = [0,1,2, NaN];
S(1).Y = [0,2,3, NaN];
S(1).BoundingBox=[0,0; 2,3];
S(1).Length = num2str(3.65);
S(2).Geometry = 'Line';
S(2).X = [6,4,3, NaN];
S(2).Y = [5,2,2, NaN];
S(2).BoundingBox=[3,2; 6,5];
S(2).Length = num2str(4.61);
%将S存储为polyline
shapewrite(S,'S.shp');
从Arcgis就可以打开S.shp文件,读取polyline S了.
点和面同理,如果不知道点和面的结构体组成,可以用shaperead在matlab中读取一个现有的点\面shp文件看看,仿照其结构创建shp文件.