MATLAB—地图

Posted 箬笠蓑衣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(\'中国各省人口分布图(单位:)\')

 

 

 

 

 

 

 

 

  

 

  

  

 

  

以上是关于MATLAB—地图的主要内容,如果未能解决你的问题,请参考以下文章

在Android Studio片段之间切换时地图片段不隐藏

使用片段的谷歌地图

1.Dijkstra算法求解格栅地图路径matlab代码

1.Dijkstra算法求解格栅地图路径matlab代码

1.Dijkstra算法求解格栅地图路径matlab代码

1.Dijkstra算法求解格栅地图路径matlab代码