在Matlab中对形状文件多边形着色
我已将国家的形状文件及其状态导入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
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)