worldmap和usamap是axesm的子类,worldmap是用于生成世界地图坐标区域,usamap用于生成美国地图坐标区域,本文先在worldmap函数基础上讲解如何导入各种数据绘制各种类型图片,略提一下如何使用usamap,再讲解axesm的各种属性以满足更多元化的地图绘制需求,并在最后总结地图绘制其他可用函数。

Mapping Toolbox工具箱安装

请通过如下步骤安装工具箱:

  1. 点击附加功能:

  2. 搜索Mapping Toolbox,并点击进入介绍界面:

  3. 点安装一路点确定:

worldmap及usamap
首先是最简单的海岸线世界地图:

% 创建世界地图坐标区域
worldmap('World')% 导入海岸线数据
load coastlines% 绘制海岸线
plotm(coastlat,coastlon)


附带陆地区域、湖泊、河流、城市的世界地图:

% 创建世界地图坐标区域
ax=worldmap('World');
setm(ax,'Origin',[0 180 0])% 绘制陆地
land=shaperead('landareas.shp','UseGeoCoords',true);
geoshow(ax,land,'FaceColor',[0.5 0.7 0.5])
% 绘制湖泊
lakes=shaperead('worldlakes.shp','UseGeoCoords',true);
geoshow(lakes,'FaceColor','blue')
% 绘制河流
rivers=shaperead('worldrivers.shp','UseGeoCoords',true);
geoshow(rivers, 'Color', 'blue')
% 绘制城市
cities=shaperead('worldcities.shp','UseGeoCoords',true);
geoshow(cities,'Marker','.','Color','red')

可以看到绘制的主要流程就是:

  • 创建地图坐标区域(通过axesm、worldmap、usamap)
  • 导入数据(通过load或者shaperead)
  • 通过geoshow、plotm、scatterm绘制图像(大部分普通坐标区域axes中出现的函数加个m就变成了用于地图坐标区域的函数)

worldmap创建地图坐标区域部分:

大家肯定想知道worldmap()里面支持哪些参数,这个连官网都没有写,事实上只要无参数运行一下函数worldmap()就会蹦出来一个地区选择框,大家可以试一下啊:

同时worldmap函数支持直接输入经纬度范围,例如:

latlim=[-50 50];
lonlim=[160 -30];
worldmap(latlim,lonlim)

数据导入部分:

其中可以通过load导入的MATLAB自带数据有:

  • coastlines - 世界海岸线经纬度矢量
  • conus - 用于连接的美国(conus)、五大湖、州际边界的经纬度阵列
  • geoid60c - 全球大地水准面高度网格(以米为单位)/度
  • greatlakes - 显示结构阵列中的北美五大湖
  • korea5c - 朝鲜半岛的地形和水深测量
  • koreaEQdata - 地震位置和震级
  • layermtx - 用于教学的地理定位地形网格
  • mapmtx - 用于教学的地理定位地形网格
  • moonalb20c - 克莱门汀全球月球反照率图
  • moontopo60c - 月球的克莱门汀激光雷达地形
  • oceanlo - 显示结构数组中的海洋遮罩多边形
  • russia - 网格化土地、水域、边界、外部区域
  • seatempm -全球多通道海面温度网格
  • stars - 4500+颗恒星的天体坐标和星等
  • usamtx - 美国各州的数据网格,每度五个单元格
  • usgslulegend - USGS 土地利用类别列表

其中可以通过shaperead导入的MATLAB自带数据有:

  • landareas.shp - 全球陆地区域多边形
  • tsunamis.shp - 全球1950-2006 年中到大型海啸的百分比
  • usastatehi.shp - 高分辨率多边形美国各州形状
  • usastatelo.shp - 低多边形美国各州形状
  • worldcities.shp - 全球318个城市或人口稠密位置坐标
  • worldlakes.shp - 世界上 37 个最大的多边形湖泊和内陆海域
  • worldrivers.shp - 世界主要河流的线条形状
  • boston_placenames.shp - 美国马萨诸塞州波士顿地名
  • boston_roads.shp - 美国马萨诸塞州波士顿道路
  • concord_hydro_area.shp - 美国马萨诸塞州康科德水域
  • concord_hydro_line.shp - 美国马萨诸塞州康科德水路
  • concord_roads.shp - 美国马萨诸塞州康科德道路
    这些信息来自:

\mcr\toolbox\map\mapdata\Contents.m

局部区域陆地绘制

首先绘制个南极洲,南极洲的陆地信息可以从landareas.shp中提取 :

% 创建世界地图坐标区域并将区域设置为南极洲
worldmap('antarctica')% 从陆地区域数据文件中获取南极洲大陆数据并绘图
antarctica = shaperead('landareas.shp', 'UseGeoCoords', true,...'Selector',{@(name) strcmp(name,'Antarctica'), 'Name'});
patchm(antarctica.Lat, antarctica.Lon, [0.5 1 0.5])

除此之外其他面积较大,可以通过如上方式获取的区域还有:

‘Antarctica’‘Africa and Eurasia’‘North and South America’‘Greenland’‘Australia’‘Baffin Island’‘Ellesmere Island’‘New Guinea’‘Great Britain’‘Borneo’‘Honshu’‘Victoria Island’‘Celebes’‘New Zealand North Island’‘Sumatra’‘Madagascar’‘Iceland’‘New Zealand South Island’‘Newfoundland’‘Luzon’‘Devon Island’‘Ireland’‘Cuba’‘Java’‘Mindanao’

例如我绘制中国附近的亚欧非大陆陆地:

% 创建世界地图坐标区域并将区域设置为中国
worldmap('China')% 从陆地区域数据文件中获取亚欧非大陆数据并绘图
antarctica = shaperead('landareas.shp', 'UseGeoCoords', true,...'Selector',{@(name) strcmp(name,'Africa and Eurasia'), 'Name'});
patchm(antarctica.Lat, antarctica.Lon, [0.5 0.7 0.5])% 加个海岸线美化一下
load coastlines
plotm(coastlat,coastlon)

映射贴图

南美洲和中太平洋的大地水准面高度:

要绘制高度映射图只需要将geoshow的’DisplayType’属性设置为’surface’。

注意,官网的写法,[geoid60c,geoid60cR] = egm96geoid 2020a已经被移除,如果是之后的版本,请不要按照官网而是按照如下写法进行书写。

% 大地水准面高度数据及海岸线数据导入
load geoid60c.mat
load coastlines% 创建某经纬度范围世界地图坐标区域
latlim=[-50 50];
lonlim=[160 -30];
worldmap(latlim,lonlim)% 绘制图像
geoshow(geoid60c,geoid60cR,'DisplayType','surface')
geoshow(coastlat,coastlon,'Color','k')

要是觉得不好看,可以增添陆地区域和更改颜色,例如像下面这么做:

% 大地水准面高度数导入
load geoid60c.mat% 创建某经纬度范围世界地图坐标区域
latlim=[-50 50];
lonlim=[160 -30];
ax=worldmap(latlim,lonlim);% 设置颜色
C=[222,238,209;126,190,174;144,213,220;33,118,155;30,69,128;20,49,127]./255;geoshow(ax,geoid60c,geoid60cR,'DisplayType','surface')
colormap(C) % 应用颜色land=shaperead('landareas.shp','UseGeoCoords',true);
geoshow(ax,land,'FaceColor',[0.5 0.7 0.5])

我们发现有些大地水准面高度比0要高,就会画到板块上面,同时颜色插值不够密集,简单处理一下:

% 大地水准面高度数导入
load geoid60c.mat% 创建某经纬度范围世界地图坐标区域
latlim=[-50 50];
lonlim=[160 -30];
ax=worldmap(latlim,lonlim);% 设置颜色并插值细化
C=[222,238,209;126,190,174;144,213,220;33,118,155;30,69,128;20,49,127]./255;
C1(:,1)=interp1(0:5,C(:,1),0:.5:5,'linear')';
C1(:,2)=interp1(0:5,C(:,2),0:.5:5,'linear')';
C1(:,3)=interp1(0:5,C(:,3),0:.5:5,'linear')';% 下面减了个100为了让最大值也小于0
geoshow(ax,geoid60c-100,geoid60cR,'DisplayType','surface')
colormap(C1) % 应用颜色land=shaperead('landareas.shp','UseGeoCoords',true);
geoshow(ax,land,'FaceColor',[0.5 0.7 0.5])

纹理贴图

朝鲜半岛为例:

要绘制颜色映射图只需要将geoshow的’DisplayType’属性设置为’texturemap’。

% 导入数据并绘制贴图版地图
load korea5c
worldmap(korea5c,korea5cR);
geoshow(korea5c,korea5cR,'DisplayType','texturemap')% 修改颜色
demcmap(korea5c)

这个demcmap是一个可以描述为一个需要同时设置海洋色带和陆地色带的colormap,下面是MATHWORKS自带的例子:

load korea5c
worldmap(korea5c,korea5cR);
geoshow(korea5c,korea5cR,'DisplayType','texturemap')cmapsea=[.8  0 .8;  0 0 .8];
cmapland=[.7  0  0; .8 .8 0; 1  1 .8];
demcmap(korea5c,32,cmapsea,cmapland)

颜色可能不是太好看哈,下面给个我自己弄的配色:


load korea5c
worldmap(korea5c,korea5cR);
geoshow(korea5c,korea5cR,'DisplayType','texturemap')cmapsea=[20,49,127;30,69,128;33,118,155;144,213,220]./255;
cmapland=[10,133,102;197,226,102]./255;
demcmap(korea5c,32,cmapsea,cmapland)

线路图绘制

以美国马萨诸塞州康科德道路道路为例

roads=shaperead('concord_roads.shp');
lineStyle = makesymbolspec('Line',...{'CLASS',[1 3], 'LineStyle',':'},...{'CLASS',[4 6],'LineStyle','-.'});
mapshow(roads,'SymbolSpec',lineStyle);

各种路径一共有六类,不但可以为不同设置线性,还可以设置颜色,粗细等各种信息:

roads=shaperead('concord_roads.shp');
lineStyle=makesymbolspec("Line", ...{'CLASS',2,'Color','#A2142F'}, ...{'CLASS',3,'Color','#77AC30'}, ...{'CLASS',6,'Color','#0072BD'}, ...{'Default','Color','k'});
mapshow(roads,'SymbolSpec',lineStyle);

roads=shaperead('concord_roads.shp');
lineStyle=makesymbolspec("Line", ...{'CLASS',[1 3],'LineStyle',':','LineWidth',2}, ...{'CLASS',[4 6],'LineStyle','-.','LineWidth',0.25});
mapshow(roads,'SymbolSpec',lineStyle);

usamap

usamap("conus");states=shaperead("usastatelo.shp",'UseGeoCoords',true);
% 俩州离太远画不开,不要
for i=length(states):-1:1if states(i).Name=="Alaska"||states(i).Name=="Hawaii"states(i)=[];end
endfaceColors=makesymbolspec('Polygon',{'INDEX',[1 numel(states)],'FaceColor',...polcmap(numel(states))});
geoshow(states, 'DisplayType','polygon','SymbolSpec', faceColors)

再换个颜色叭

usamap("conus");states=shaperead("usastatelo.shp",'UseGeoCoords',true);
% 俩州离太远画不开,不要
for i=length(states):-1:1if states(i).Name=="Alaska"||states(i).Name=="Hawaii"states(i)=[];end
end% 插值定义颜色
C=[222,238,209;126,190,174;144,213,220;33,118,155;30,69,128;20,49,127]./255;
C1(:,1)=interp1(0:5,C(:,1),linspace(0,5,numel(states)),'linear')';
C1(:,2)=interp1(0:5,C(:,2),linspace(0,5,numel(states)),'linear')';
C1(:,3)=interp1(0:5,C(:,3),linspace(0,5,numel(states)),'linear')';faceColors=makesymbolspec('Polygon',{'INDEX',[1 numel(states)],'FaceColor',C1});
geoshow(states, 'DisplayType','polygon','SymbolSpec', faceColors)

axesm

创建一个robinson样式,带框的地图坐标区域:

axesm('MapProjection','robinson','Frame','on')

创建好的axesm可以通过setm修改样式:

axesm('MapProjection','robinson','Frame','on')
setm(gca,'FLineWidth',3,'Grid','on')

展示一下所有类型的地图:

mapType={'balthsrt', 'behrmann', 'bsam', 'braun', 'cassinistd', 'cassini', 'ccylin', 'eqacylin', 'eqdcylin', 'giso', 'gortho', 'gstereo', 'lambcyln',...
'mercator', 'miller', 'pcarree', 'tranmerc', 'trystan', 'utm', 'wetch', 'apianus', 'collig', 'craster', 'eckert1', 'eckert2', 'eckert3', 'eckert4',...
'eckert5', 'eckert6', 'flatplrp', 'flatplrq', 'flatplrs', 'fournier', 'goode', 'hatano', 'kavrsky5', 'kavrsky6', 'loximuth', 'modsine', 'mollweid',...
'putnins5', 'quartic', 'robinson', 'sinusoid', 'wagner4', 'winkel', 'eqaconicstd', 'eqaconic', 'eqdconicstd', 'eqdconic', 'lambertstd', 'lambert',...
'murdoch1', 'murdoch3', 'polyconstd', 'polycon', 'vgrint1', 'bonne', 'werner', 'breusing', 'eqaazim', 'eqdazim', 'globe', 'gnomonic', 'ortho',...
'stereo', 'ups', 'vperspec', 'wiechel', 'aitoff', 'bries', 'hammer'};for i=1:72subplot(9,8,i)axesm('MapProjection',mapType{i},'Frame','on','FLineWidth',3,'Grid','on')tightmap
end

展示一些网格设置:

% 某些视角下的地图坐标区
axesm('MapProjection','ortho','Frame','on',...'grid','on','Origin',[40,40,14])

MLineLimit是经线的纬度范围,MLineException是不受经线长度范围影响的经线,通过设置这两个参数可以不让所有经线都汇集到极地以显的杂乱。

% 某些视角下的地图坐标区,经线的纬度范围[-75 75]
axesm('MapProjection','ortho','Frame','on',...'grid','on','Origin',[40,40,14],...'MLineLimit',[-75 75])

% 某些视角下的地图坐标区,其他经线的纬度范围[-75 75],四条经线绘制完全
axesm('MapProjection','ortho','Frame','on',...'grid','on','Origin',[40,40,14],...'MLineLimit',[-75 75],...'MLineException',[-90,0,90,180])

与之相对应的还有PLineLimit、PLineException

% 某些视角下的地图坐标区
axesm('MapProjection','ortho','Frame','on',...'grid','on','Origin',[40,40,14],...'PLineLimit',[-75 75])

更多详细信息可以去这里查看:The Map Grid - MATLAB & Simulink - MathWorks 中国

来个用axesm绘图的实例:

% 某些视角下的地图坐标区,其他经线的纬度范围[-75 75],四条经线绘制完全
axesm('MapProjection','ortho','Frame','on',...'grid','on','Origin',[40,40,14],...'MLineLimit',[-75 75],...'MLineException',[-90,0,90,180])
% 导入海岸线数据
load coastlines% 绘制海岸线
plotm(coastlat,coastlon)

一些地图绘制可用简易函数

subplot

首先值得一提的是subplot函数依旧适用:

例如:

load korea5csubplot(1,2,1)
worldmap('China')
antarctica = shaperead('landareas.shp', 'UseGeoCoords', true,...'Selector',{@(name) strcmp(name,'Africa and Eurasia'), 'Name'});
patchm(antarctica.Lat, antarctica.Lon, [0.5 0.7 0.5])subplot(1,2,2)
worldmap('Europe')
antarctica = shaperead('landareas.shp', 'UseGeoCoords', true,...'Selector',{@(name) strcmp(name,'Africa and Eurasia'), 'Name'});
patchm(antarctica.Lat, antarctica.Lon, [0.5 0.7 0.5])

tightmap

取消图像的白边,非常好用

subplot(1,2,1)
axesm('MapProjection','robinson','Frame','on','Grid','on')subplot(1,2,2)
axesm('MapProjection','robinson','Frame','on','Grid','on')
tightmap

边框标签网格快速开关函数

边框,网格,经线标签,纬线标签快速设置,类似hold on\grid on:

framem on
gridm on
mlabel on
plabel on
%
framem off
gridm off
mlabel offf
plabel off

colormap

还可以设置其他自带颜色

% 大地水准面高度数据及海岸线数据导入
load geoid60c.mat
load coastlinessubplot(1,2,1)
% 创建某经纬度范围世界地图坐标区域
latlim=[-50 50];
lonlim=[160 -30];
ax1=worldmap(latlim,lonlim);% 绘制图像
geoshow(geoid60c,geoid60cR,'DisplayType','surface')
colormap(ax1,summer)
geoshow(coastlat,coastlon,'Color','k')subplot(1,2,2)
% 创建某经纬度范围世界地图坐标区域
latlim=[-50 50];
lonlim=[160 -30];
ax2=worldmap(latlim,lonlim);% 绘制图像
geoshow(geoid60c,geoid60cR,'DisplayType','surface')
colormap(ax2,pink)
geoshow(coastlat,coastlon,'Color','k')

colorbar

% 导入数据并绘制贴图版地图
load korea5c
worldmap(korea5c,korea5cR);
geoshow(korea5c,korea5cR,'DisplayType','texturemap')% 修改颜色
demcmap(korea5c)% 添加颜色栏
colorbar

MATLAB绘制地图超详细教程相关推荐

  1. Python数据可视化之Plotnine库超详细教程系列

    Python数据可视化之Plotnine库超详细教程系列(一):概述 一.Plotnine库简介 ggplot2包奠定了R语言数据可视化在数据科学中的地位,数据可视化一直是Python的短板,即使有M ...

  2. tensorflow的regress(超详细教程)

    tensorflow的regress(超详细教程) 运行结果 代码如下: """ Know more, visit my Python tutorial page: ht ...

  3. AD从原理图到PCB超详细教程

    AD超详细教程 前言 一.建立一个工程模板 二.原理图 1.设计原理图. 2.使用AD自带库和网上开源原理图库 3.画原理图库 4.编译原理图 三.PCB 1.确定元器件尺寸大小 2.绘制PCB Li ...

  4. CocosCreator像素鸟小游戏实现(有源码)超详细教程 TS实现小游戏 零基础开发

    CocosCreator像素鸟小游戏实现(有源码)超详细教程 TS实现小游戏 大家中秋国庆快乐哈 前言 老规矩先看效果 源码的获取方式在最下面 对于本游戏来说canvas这样设置最佳哦 游戏实现思路: ...

  5. 10分钟教你用python打造贪吃蛇超详细教程

    更多精彩尽在微信公众号[程序猿声] 10分钟教你用python打造贪吃蛇超详细教程 在家闲着没妹子约, 刚好最近又学了一下python,听说pygame挺好玩的.今天就在家研究一下, 弄了个贪吃蛇出来 ...

  6. geoserver 发布 矢量切片(pbf)并用openlayers 6.14 /leaflet 1.8 加载展示 (二)(小白必备:超详细教程)

    上一篇讲了 如何利用geoserver 发布矢量切片,接下来我们说 如何去展示,既然做我们就作全面吧,谁让我们gis 就是这么苦逼呢,哈哈. 环境: geoserver 2.21 vue 2.0 op ...

  7. Python实现飞机大战-第二部分(附源码、素材、超详细教程)

    飞机大战第二部分 1.前言 2.飞机射击 2.1.添加子弹的相关设置 2.2.创建文件bullet.py 2.3.修改game_functions.py 2.4.修改mian.py 2.5.射击效果 ...

  8. 手把手从零开始搭建k8s集群超详细教程

    本教程根据B站课程云原生Java架构师的第一课K8s+Docker+KubeSphere+DevOps同步所做笔记教程 k8s集群搭建超详细教程 1. 基本环境搭建 1. 创建私有网络 2. 创建服务 ...

  9. 安装64位Oracle 10g超详细教程

    安装64位Oracle 10g超详细教程 1. 安装准备阶段 1.1 安装Oracle环境 经过上一篇博文的过程,已经完成了对Linux系统的安装,本例使用X-Manager来实现与Linux系统的连 ...

  10. mysql超详细教程_MySQL8.0.23安装超详细教程

    前言 最近在做一个人脸识别的项目,需要用数据库保存学生信息与前段交互. MySQL的优点 1.mysql性能卓越,服务稳定,很少出现异常宕机. 2.mysql开放源代码且无版权制约,自主性及使用成本低 ...

最新文章

  1. 南京大学计算机考研机试,2018南大CS考研机试答案
  2. 对CAS机制的理解(一)
  3. 重装win7后修改桌面路径到D盘
  4. java联接pg库_成为Java流大师–第5部分:将联接的数据库表转换为流
  5. ARM中断返回地址详细分析
  6. spring cloud的RefreshScope注解进行热部署
  7. python读hadoop_python读取hdfs并返回dataframe教程
  8. java调用外部命令实例
  9. UVA10191 Longest Nap【排序】
  10. 天池NLP赛道top指南
  11. AutoCAD二次开发基础(二):曲线操作
  12. Android 配置https抓包
  13. 精美摘抄,献给每一位喜欢文学的人
  14. 上海泛微面经(从Java开发到项目实施岗)
  15. 使用git push没有报错,但是远程仓库没有更新的问题
  16. 可怕!Facebook 竟能识别出性工作者!你怎么看?
  17. usb启动pe和Linux,打造自己的多功能USB启动盘——grub2引导WinPE、Archlinux安装镜像和Ubuntu liveCD...
  18. 小米随身wif linux平台配置
  19. 《微型计算机原理与接口技术》复习笔记(四)
  20. 2020年戴森设计大奖国际20强揭晓

热门文章

  1. Redis入门整合springboot
  2. 【项目管理一点通】(13) 如何写周报和日报
  3. vasp544编译安装
  4. Tableau Desktop 2021中文免费版下载(包含其它历史版本)
  5. Process实操教程 | 中介效应检验
  6. Linux用户和密码
  7. PostgreSQL命令导入sql文件
  8. 国内做得好的进销存软件有哪些啊?
  9. 【全网最全面C语言教程】C语言从入门到精通
  10. Borland Delphi7 企业版注册方法