我已将该国家的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中。因此,每个状态都有一个值,我需要以图形方式分配给每个状态其中一个作为颜色,如下图所示。任何想法如何做到这一点?
谢谢!
答案 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
完成...