一、畫亞洲地圖
1、worldmap()
(1)
clear all worldmap('World')
clear all worldmap('World')%世界地圖 load coast %載入海岸線 plotm(lat,long)%經緯度
(2)
clear all ax = worldmap('World'); setm(ax, 'Origin', [0 180 0])%更改經度,從0到180再到0 land = shaperead('landareas', 'UseGeoCoords', true);%陸地 geoshow(ax, land, 'FaceColor', [0.5 0.7 0.5])
clear all ax = worldmap('World'); setm(ax, 'Origin', [0 180 0])%更改經度,從0到180再到0 land = shaperead('landareas', 'UseGeoCoords', true); geoshow(ax, land, 'FaceColor', [0.5 0.7 0.5]) lakes = shaperead('worldlakes', 'UseGeoCoords', true); geoshow(lakes, 'FaceColor', 'blue') rivers = shaperead('worldrivers', 'UseGeoCoords', true); geoshow(rivers, 'Color', 'blue') cities = shaperead('worldcities', 'UseGeoCoords', true); geoshow(cities, 'Marker', '.', 'Color', 'red')
land = shaperead('landareas', 'UseGeoCoords', true)%陸地 后者參數x,y為經緯度 geoshow(land, 'FaceColor', [0.5 0.7 0.5])
(3)
clear all worldmap([-50 50],[160 -30]) %載入范圍 load geoid %載入水准面數據 geoshow(geoid, geoidrefvec, 'DisplayType', 'texturemap'); %畫圖顯示 load coast %載入海岸線 geoshow(lat, long) %顯示
2、shaperead函數
(1)
clear all landareas = shaperead('landareas.shp','UseGeoCoords',true); axesm ('mercator', 'Frame', 'on', 'Grid', 'on','origin',[0 120 0]); geoshow(landareas,'FaceColor',[1 1 .5],'EdgeColor',[.6 .6 .6]);
UseGeoCoords:可以選擇為true或者false(默認),即是否使用地理結構(GeoStruts)。如果數據已經被投影了就選擇false,如果還未被投影,可以選擇true以生成投影。
3、 geoshow的用法
geoshow是用來顯示地圖數據的函數,非常重要,大部分的地圖都使用該函數進行顯示。
(1) 基本用法:
1) geoshow(lat,lon)直接輸入經緯度,將以該經緯度為中心,生成一小片地圖。
2) geoshow(filename)直接輸入地圖文件名,生成該地圖
3) geoshow(_,Name,Value,)輸入相關屬性並設定參數,生成所需要的地圖。
(2) 常用屬性:
1) facecolor:定義了地圖表面的顏色,需要輸入三個參數且均在0至1之間。
2) edgecolor:定義了海岸線邊界的顏色,參數值同上。
clear all geoshow('maps\bou2_4p.shp','FaceColor','G') geoshow('maps\hyd1_4p.shp','FaceColor','b') geoshow('maps\hyd2_4p.shp','FaceColor','r')
clear all ax=worldmap([29.5 30.5],[122 123]);%載入地圖 geoshow(ax,'maps\bou2_4p.shp','FaceColor','G')%將邊界線載入地圖中
舟山群島附近
(3)
clear all figure worldmap('na');%北美地圖 states = shaperead('usastatehi', 'UseGeoCoords', true);%州界線 symspec = makesymbolspec('Polygon', ... {'Name', 'Alaska', 'FaceColor', 'red'}, ... {'Name', 'Hawaii', 'FaceColor', 'red'}); %hawaii和alaska設置為紅色 geoshow(states, 'SymbolSpec', symspec,... 'DefaultFaceColor', 'blue','DefaultEdgeColor', 'black');%邊界黑色,表面顏色藍色,
(4)
clear all load korea figure; worldmap(map, refvec)%空白地圖 geoshow(gca,map,refvec,'DisplayType','texturemap');%紋理貼圖 demcmap(map) S = shaperead('landareas','UseGeoCoords',true); geoshow([S.Lat], [S.Lon],'Color','black'); %邊界設置為黑色
()
clear all
ax=worldmap('china'); % 使用worldmap的坐標軸作圖
setm(ax,'grid','off') % 關閉grid
setm(ax,'frame','off') % 關閉邊框
setm(ax,'parallellabel','off') % 關閉坐標軸標記
setm(ax,'meridianlabel','off') % 關閉坐標軸標記
sheng=shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);
geoshow(sheng); %
關閉邊框,關閉坐標軸
4、 makesymbolspec函數
(1)
clear all
roads = shaperead('concord_roads.shp');
mapshow(roads);
clear all
roads = shaperead('concord_roads.shp');
geoshow(roads)
(2)
clear all
roads = shaperead('concord_roads.shp');
blueRoads = makesymbolspec('Line',{'Default','Color','r'});%紅色
mapshow(roads,'SymbolSpec',blueRoads);
clear all
roads = shaperead('concord_roads.shp');
blueRoads = makesymbolspec('Line',{'Default','Color','r'});
geoshow(roads,'SymbolSpec',blueRoads)
(3)
clear all
roads = shaperead('concord_roads.shp');
roadColors = ...
makesymbolspec('Line',{'CLASS',2,'Color','r'},...
{'CLASS',3,'Color','g'},...
{'CLASS',6,'Color','b'},...
{'Default','Color','k'});
mapshow(roads,'SymbolSpec',roadColors);
clear all
roads = shaperead('concord_roads.shp');
roadColors = ...
makesymbolspec('Line',{'CLASS',1,'Color','r'},...
{'CLASS',4,'Color','g'},...
{'CLASS',5,'Color','b'},...
{'Default','Color','k'});
geoshow(roads,'SymbolSpec',roadColors);
(4)
roads = shaperead('concord_roads.shp');
lineStyle = makesymbolspec('Line',...
{'CLASS',[1 3], 'LineStyle',':'},...
{'CLASS',[4 6],'LineStyle','-.'});
mapshow(roads,'SymbolSpec',lineStyle);
3、
(1)美國分州顏色
clear all
ax = worldmap('USA');
load coastlines
geoshow(ax, coastlat, coastlon,'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30])
美國地圖輪廓
clear all
ax = worldmap('USA');
load coastlines
geoshow(ax, coastlat, coastlon,'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30])
states = shaperead('usastatelo', 'UseGeoCoords', true);%州界線
geoshow(ax, states, 'DisplayType', 'polygon')
州默認顏色
clear all ax = worldmap('USA'); load coastlines geoshow(ax, coastlat, coastlon,'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30]) states = shaperead('usastatelo', 'UseGeoCoords', true);%州界線 faceColors = makesymbolspec('Polygon',{'INDEX', [1 numel(states)], 'FaceColor', ... polcmap(numel(states))}); % NOTE - colors are random,多邊形, geoshow(ax, states, 'DisplayType', 'polygon','SymbolSpec', faceColors)
(2)中國分省顏色
clear all
ax = worldmap('china');
setm(ax,'grid','off') % 關閉grid
setm(ax,'frame','off') % 關閉邊框
setm(ax,'parallellabel','off') % 關閉坐標軸標記,平行線
setm(ax,'meridianlabel','off') % 關閉坐標軸標記,子午線
states = shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);%州界線
faceColors = makesymbolspec('Polygon',{'INDEX', [1 numel(states)], 'FaceColor', ...
polcmap(numel(states))}); % NOTE - colors are random,多邊形,
geoshow(ax, states,'DisplayType', 'polygon', 'SymbolSpec', faceColors)
clear all
ax = worldmap('china');
%load coastlines
%geoshow(ax, coastlat, coastlon,'DisplayType', 'polygon', 'FaceColor', [.45 .60 .30])
%setm(ax,'grid','off') % 關閉grid
%setm(ax,'frame','off') % 關閉邊框
%setm(ax,'parallellabel','off') % 關閉坐標軸標記,平行線
%setm(ax,'meridianlabel','off') % 關閉坐標軸標記,子午線
states = shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);%州界線
faceColors = makesymbolspec('Polygon',{'INDEX', [1 numel(states)], 'FaceColor', ...
polcmap(numel(states))}); % NOTE - colors are random,多邊形,
geoshow(ax, states,'DisplayType', 'polygon', 'SymbolSpec', faceColors)
4、海拔高度的不同顏色顯示
%-- 分省中國地圖在MATLAB中的畫法 --% % Author: gaospecial@gmail.com % Date: 2012-6-5 14:04:01 % 地圖數據來源:國家基礎地理信息系統網站 % 人口數據來源:國家統計年鑒2011版 %% 載入地圖數據 clear all % 載入各省的多邊形數據 sheng=shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);% 本文件下的邊界省 % 檢查數據發現中午名稱為亂碼,可能是由於字符編碼引起的,需要糾正文件導入時出現的亂碼 % 中文名稱記錄在相應的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'); %d=importdata('renkou.txt'); data=d.data; % 海拔高度 textdata=d.textdata; % 相對應的省的名稱 %% 定義地圖參數 % 針對不同省份,分別設置不同的顏色(FaceColor),由人口數據決定顏色數據 % 定義顏色 k=128; mycolormap=summer(k); % 生成不同區域按大小的顏色,按照人口數目多少分別指定不同的顏色 % 人口越多,顏色越突出 geoname={sheng.NAME}';%省的名字,925個 max_data = max(data); n=length(data); mysymbolspec=cell(1,n); % 預定義變量可以加快處理速度 %% %高度和顏色對應起來,然后省份和顏色對應起來,利用歸一化排序,定位 for i=1:n count=data(i);%高度 mycoloridx=floor( k * count / max_data ); mycoloridx(mycoloridx<1)=1; myprovince=textdata{i};%省,31個 geoidx=strmatch(myprovince, geoname);%從925中挑31的位置 if numel(geoidx) > 0 province_name=geoname( geoidx(1) ); mysymbolspec{i} = {'NAME', char(province_name), 'FaceColor', mycolormap( mycoloridx, :) };%省份和顏色對應 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]},... mysymbolspec{:}... ); geoshow(sheng,'SymbolSpec',symbols); % 此處用mapshow投影會不正確
%% 圖的標注 % 在圖像右側顯示bar colormap(summer(k)) hcb=colorbar('EastOutside'); step=round(max_data/11);
set(hcb,'YTick',(0:.1:1)) set(hcb,'YTickLabel',num2cell(0:step:max_data))%設置高度 % 給圖像加標題 title('中國各省海拔分布圖(單位:m)')
5、人口的不同顏色顯示
%-- 分省中國地圖在MATLAB中的畫法 --% %% 載入地圖數據 clear all % 載入各省的多邊形數據 sheng=shaperead('maps/bou2_4p.shp', 'UseGeoCoords', true);% 本文件下的邊界省 %% 使用importdata向導導入2011年全國31個省的人口數據 % data為人口數目 textdata為省名稱 d=importdata('renkou.txt'); data=d.data; % 人口數據 textdata=d.textdata; % 相對應的省的名稱 %% 定義地圖參數 % 針對不同省份,分別設置不同的顏色(FaceColor) % 定義顏色 k=500; mycolormap=summer(k); % 生成不同區域按大小的顏色,按照人口數目多少分別指定不同的顏色 % 人口越多,顏色越突出 geoname={sheng.NAME}';% max_data = max(data);%最大人口 n=length(data);%31個省 mysymbolspec=cell(1,n); % 預定義變量可以加快處理速度 for i=1:n count(i)=data(i);%人口 mycoloridx(i)=round( k * count(i)/ max_data );%四舍五入 mycoloridx(mycoloridx<1)=1;% 0變1 myprovince{i}=textdata{i};%省 geoidx=strmatch(myprovince{i}, geoname); if numel(geoidx) > 0 %geoidx元素個數 province_name=geoname( geoidx(1) );%省名字 mysymbolspec{i} = {'NAME', char(province_name), 'FaceColor', mycolormap( mycoloridx(i), :) }; end end %% 顯示地圖 figure ax=worldmap([20 55], [70 140]); % 使用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]},... mysymbolspec{:}... ); geoshow(ax,sheng,'SymbolSpec',symbols); % 此處用mapshow投影會不正確 %% 圖的標注 % 在圖像右側顯示bar colormap(summer(k)) hcb=colorbar('southOutside'); step=round(max_data/10);%四舍五入 %set(hcb,'YTick',(0:.1:1)) set(hcb,'YTickLabel',num2cell(0:step:max_data)) % 給圖像加標題 title('中國各省人口分布圖(單位:)')