在matlab中對中國地圖中的不同省份按照高度進行渲染


直接上優化后的代碼和效果圖

colour_totall=128; 

% 載入地圖數據 --各省的多邊形數據
shp_data=shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);% 省

%{
// matlab 2016b已經解決這個問題了
% 檢查數據發現中午名稱為亂碼,可能是由於字符編碼引起的,需要糾正文件導入時出現的亂碼
% 中文名稱記錄在相應的dbf文件中,可以使用Excel打開,並且不會出現亂碼,截取其中的中文保存為文本文件
% 然后在導入工作區,並將其保存為*.mat格式文件,隨用隨取。
% 依次替換sheng數據中的亂碼【算是變通之法,有誰知道更好的方法一定告訴我哦】
load chinese_name.mat % 省,省會,主要城市的正確中文
for i=1:length(sheng)
    sheng(i).NAME=sheng_chinese_name{i}; % 糾正中文顯示錯誤
end
unique(sheng_chinese_name) % 含有34個省(直轄市)的數據
length(sheng) % 共分為925個區塊
%}

% 使用importdata向導導入2011年全國31個省的人口數據
% data為人口數目 textdata為省名稱
d=importdata('gaodu.txt');
data=d.data; % 海拔高度
province_arr=d.textdata; % 相對應的省的名稱

% 定義地圖參數
% 針對不同省份,分別設置不同的顏色(FaceColor)
mycolormap=summer(colour_totall); %  定義顏色

% 生成不同區域按大小的顏色,按照人口數目多少分別指定不同的顏色.人口越多,顏色越突出
geo_name={shp_data.NAME}';
max_height = max(data);
n=length(data); % provice num
symbol_spec=cell(1,n); % 預定義變量可以加快處理速度
for i=1:n
    height_tmp=data(i);
    c_index=floor( colour_totall * height_tmp / max_height );
    c_index(c_index<1)=1;
    tmp_pn=province_arr{i};
    geoidx= find(strncmp(tmp_pn, geo_name, length(tmp_pn)) == 1);
    if numel(geoidx) > 0
        province_name=geo_name( geoidx(1) );
        symbol_spec{i} = {'NAME', char(province_name), 'FaceColor', mycolormap( c_index, :) };
    end
end


% 顯示地圖
figure
ax=worldmap('china'); % 使用worldmap的坐標軸作圖
setm(ax,'grid','off') % 關閉grid
setm(ax,'frame','off') % 關閉邊框
setm(ax,'parallellabel','off') % 關閉坐標軸標記
setm(ax,'meridianlabel','off') % 關閉坐標軸標記

% 最關鍵的兩個語句
symbols=makesymbolspec('Polygon',{'default','FaceColor',[0.9 0.9 0.8],...
    'LineStyle','--','LineWidth',0.2,...
    'EdgeColor',[0.8 0.9 0.9]},...
    symbol_spec{:}...
    );
geoshow(shp_data,'SymbolSpec',symbols); % 此處用mapshow投影會不正確

% 圖的標注
% 在圖像右側顯示bar
colormap(summer(colour_totall))
hcb=colorbar('EastOutside');
step=round(max_height/11);
set(hcb,'YTick',(0:.1:1))
set(hcb,'YTickLabel',num2cell(0:step:max_height))

% 給圖像加標題
title('中國各省海拔分布圖(單位:m)')

 

Source Code are here:

china_elevation_draw.rar

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM