MATLAB—地图
一、画亚洲地图
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('中国各省人口分布图(单位:)')