天天看點

用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檔案.

繼續閱讀