close all;
clear all;
clc;
dbstop if error;
fnshp = 'D:\matlabmapdata\china\china.shp'; % 替换为你的 shp 文件路径
read = shaperead(fnshp);
% 设置地图投影和范围,适当扩大范围以尽量包含南海诸岛等区域
m_proj('mercator', 'lon', [65 145], 'lat', [-5 60]);
% 绘制地图
for k = 1:length(read)
% 获取多边形的顶点坐标信息
x = read(k).X;
y = read(k).Y;
% 判断x是否为向量形式,如果是则转换为列向量,确保后续操作维度一致
if isvector(x)
x = x(:);
elseif size(x, 2) == 1
x = x';
end
% 判断y是否为向量形式,如果是则转换为列向量,确保后续操作维度一致
if isvector(y)
y = y(:);
elseif size(y, 2) == 1
y = y';
end
% 对于闭合的多边形,需要将第一个顶点坐标再添加一次,以保证正确绘制(如果是多边形类型的数据)
if strcmp(read(k).Geometry, 'Polygon')
% 确保维度一致后再进行拼接
x = [x; x(1, :)];
y = [y; y(1, :)];
end
% 使用更严谨的方式处理单个顶点坐标情况(避免出现无法绘制的错误)
if size(x, 2) == 1
x = repmat(x, 1, 2);
y = repmat(y, 1, 2);
end
% 根据不同几何类型绘制地图元素
if strcmp(read(k).Geometry, 'Polygon')
patch('XData', x, 'YData', y, 'FaceColor', [0.7 0.7 0.7], 'EdgeColor', 'k');
elseif strcmp(read(k).Geometry, 'Point')
plot(read(k).X, read(k).Y, 'Marker', 'o', 'MarkerFaceColor', [0.7 0.7 0.7], 'MarkerEdgeColor', 'k');
elseif strcmp(read(k).Geometry, 'Line')
plot(read(k).X, read(k).Y, 'Color', 'k');
end
end
% 计算积冰潜势数据(这里使用模拟数据,你需要根据实际数据进行替换)
numDataPoints = 100;
lon = rand(numDataPoints, 1) * (135 - 73) + 73; % 经度范围大致在中国区域内
lat = rand(numDataPoints, 1) * (53 - 4) + 4; % 纬度范围大致在中国区域内
T = randn(numDataPoints, 1) * 10 - 10; % 模拟温度数据,符合正态分布,均值为 -10,方差适当调整
RH = rand(numDataPoints, 1) * 100; % 模拟相对湿度数据,范围在 0 - 100
CT = randn(numDataPoints, 1) * 20 - 30; % 模拟云顶温度数据,符合正态分布,均值为 -30,方差适当调整
WV = randn(numDataPoints, 1) * 3; % 模拟气流垂直速度数据,符合正态分布,均值为 0,方差适当调整
LWC = rand(numDataPoints, 1) * 1; % 模拟大气层液态水含量数据,范围在 0 - 1
iceIndices = zeros(numDataPoints, 1);
for i = 1:numDataPoints
iceIndices(i) = SCIP(T(i), RH(i), CT(i), WV(i), LWC(i));
end
% 根据积冰潜势数据绘制颜色图
[X, Y] = meshgrid(65:0.5:145, -5:0.5:60); % 调整网格分辨率,可根据需要进一步调整
Z = griddata(lon, lat, iceIndices, X, Y, 'linear'); % 尝试使用线性插值方法
% 先绘制积冰潜势颜色图
h_pcolor = pcolor(X, Y, Z);
shading flat;
colormap(jet); % 使用 jet 颜色映射,有蓝色到红色
colorbar; % 添加颜色条
% 设置颜色图的透明度,使其变淡且不遮挡地图,可根据需要调整透明度值
set(h_pcolor,'FaceAlpha',0.3);
hold on; % 保持当前图形,以便后续添加地图和网格
% 再绘制地图
for k = 1:length(read)
% 获取多边形的顶点坐标信息
x = read(k).X;
y = read(k).Y;
% 判断x是否为向量形式,如果是则转换为列向量,确保后续操作维度一致
if isvector(x)
x = x(:);
elseif size(x, 2) == 1
x = x';
end
% 判断y是否为向量形式,如果是则转换为列向量,确保后续操作维度一致
if isvector(y)
y = y(:);
elseif size(y, 2) == 1
y = y';
end
% 对于闭合的多边形,需要将第一个顶点坐标再添加一次,以保证正确绘制(如果是多边形类型的数据)
if strcmp(read(k).Geometry, 'Polygon')
% 确保维度一致后再进行拼接
x = [x; x(1, :)];
y = [y; y(1, :)];
end
% 使用更严谨的方式处理单个顶点坐标情况(避免出现无法绘制的错误)
if size(x, 2) == 1
x = repmat(x, 1, 2);
y = repmat(y, 1, 2);
end
% 根据不同几何类型绘制地图元素
if strcmp(read(k).Geometry, 'Polygon')
patch('XData', x, 'YData', y, 'FaceColor', [0.7 0.7 0.7], 'EdgeColor', 'k');
elseif strcmp(read(k).Geometry, 'Point')
plot(read(k).X, read(k).Y, 'Marker', 'o', 'MarkerFaceColor', [0.7 0.7 0.7], 'MarkerEdgeColor', 'k');
elseif strcmp(read(k).Geometry, 'Line')
plot(read(k).X, read(k).Y, 'Color', 'k');
end
end
hold on;
% 添加地图网格
m_grid('box','on','tickdir','out','xtick',65:10:145,'ytick',-5:10:60); % 设置合适的网格刻度间隔
% 获取地图数据的经纬度范围
lon_min = inf;
lon_max = -inf;
lat_min = inf;
lat_max = -inf;
for k = 1:length(read)
x = read(k).X;
y = read(k).Y;
lon_min = min(lon_min, min(x));
lon_max = max(lon_max, max(x));
lat_min = min(lat_min, min(y));
lat_max = max(lat_max, max(y));
end
% 根据地图范围设置合适的坐标轴范围,适当扩展边界,并确保坐标轴显示
axis([lon_min - 10 lon_max + 10 lat_min - 10 lat_max + 10]);
axis on; % 确保坐标轴显示开启
axis equal; % 设置坐标轴纵横比相等,避免因缩放比例不同导致显示问题
title('积冰潜势地理空间分布');
xlabel('经度');
ylabel('纬度');
这段代码是哪里出了问题呢?为什么网格显示不出来啊???
这个颜色如何能够再更为柔和一点?有没有大神能够帮忙解决一下这个问题呢!!!