在Matlab中着色Shapefile多边形

时间:2014-06-19 19:55:33

标签: matlab gis matlab-figure shapefile

我已将该国家的shapefile及其状态导入matlab:它具有以下结构:

S=
354x1 struct array with fields:
    Geometry
    BoundingBox
    X
    Y
    ID_0
    ISO
    NAME_0
    ID_1
    NAME_1
    ID_2
    NAME_2
    VARNAME_2
    NL_NAME_2
    HASC_2
    CC_2
    TYPE_2
    ENGTYPE_2
    VALIDFR_2
    VALIDTO_2
    REMARKS_2
    Shape_Leng
    Shape_Area

状态名称存储在NAME_2字段中,边界的坐标(纬度/经度)存储在X和Y中。因此,每个状态都有一个值,我需要以图形方式分配给每个状态其中一个作为颜色,如下图所示。任何想法如何做到这一点?

Sample Picture

谢谢!

2 个答案:

答案 0 :(得分:1)

MATLAB中有一个直接函数可以完成该任务。 doc polysplit。

例如:

lat = [45.6 -23.47 78 NaN 43.9 -67.14 90 -89]';
lon = [13 -97.45 165 NaN 0 -114.2 -18 0]';
[latc,lonc] = polysplit(lat,lon)

答案 1 :(得分:0)

好的,这就是答案。 (也许“这是一个不明确的问题”人们应该避免评论,平均而言他们很少提供任何帮助,就像在这篇文章中一样.Thx!:)

1)打开shapefile

filename = 'C:\...FILESHAPEFILE.shp';
S = shaperead(filename);
lenS = size(S,1);

2)创建具有正确颜色含义的颜色矢量。

Cols = hot(lenS);

3)设置结构S

内的状态顺序
idxStateOrder = [2 4 3 1];

4)循环结构数组内的“States”。查找并删除NaN,以便填充命令正常工作。

for i = 1 : lenS
    idxState = idxStateOrder(i); % In case the States are not ordered inside S.
    XX = S(idxDept).X;
    YY = S(idxDept).Y;
    idxNan = find(isnan(XX) == 1); XX(idxNan) = []; YY(idxNan) = []; % Find and remove NaNs
    idxNan = find(isnan(YY) == 1); XX(idxNan) = []; YY(idxNan) = []; % Find and remove NaNs
    fill(XX,YY,Cols(i,:))   % This line "paints" each State with the proper color in teh vector Cols.
    hold on
end

完成...