天天看点

用matlab写Arcgis的shp文件

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文件.

继续阅读