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