在Matlab中对形状文件多边形着色

在Matlab中对形状文件多边形着色,matlab,gis,matlab-figure,shapefile,Matlab,Gis,Matlab Figure,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

我已将国家的形状文件及其状态导入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字段中,边界的坐标(lat/long)存储在X和Y中。因此,每个状态都有一个相关的值,我需要以图形方式将其指定为颜色,就像下图所示。有什么办法吗

谢谢

好的,这是答案。(也许“这是一个不清楚的问题”的人应该避免评论,一般来说,他们很少提供任何帮助,就像在这篇文章中。Thx!:)

1) 打开shapefile

filename = 'C:\...FILESHAPEFILE.shp';
S = shaperead(filename);
lenS = size(S,1);
2) 创建具有适当颜色含义的颜色向量

Cols = hot(lenS);
3) 设置结构内部状态的顺序

idxStateOrder = [2 4 3 1];
4) 在结构数组中的“状态”上循环。查找并删除NaN,以便fill命令正常工作

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

完成…

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

例如:


在ArcGis和QGis中非常简单。您可能不清楚。请使用
fill
填充二维多边形形状。
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)