Matlab利用M_map和mapshow绘制网格地图

Matlab利用M_map和mapshow绘制网格地图

最近在做利用网格数据绘制’Lambert‘投影的地图,之前没有系统的利用matlab做过相关的工作,花了几天时间,问了专业的同学,最终整理了两种画图的方法。

1、M_map工具箱画图

首先,系统里要安装有m_map的工具箱。我下载的是1.4b版本的,具体下载方法百度可以搜索到。
(1)下载相关网址https://www.eoas.ubc.ca/~rich/map.html 
(2)下载好需要把工具箱解压移动到自己安装matlab的’toolbox’里。

安装位置:

安装位置
(3)代码记录

// An highlighted block
var foo = 'bar';
%% 画图
lat_lon=csvread('D:\学习资料\处理数据\lat_londata.csv');
lat=lat_lon(:,1);
lon=lat_lon(:,2);
lat=reshape(lat,122,252);
lon=reshape(lon,122,252);%这一步处理是因为我数据里面的经纬度是两列数据,需要将经纬度处理成二维数组

%% 设置投影,坐标系网格等等...
m_proj('Lambert','longitudes',[-75 -6],'latitudes',[58 85]);
m_grid('xlim',[-70,-10],'xtick',-70:10:-10,'ylim',[60,80],'ytick',60:10:80,...
    'linewidth',1,'tickdir','in','box','fancy',...
    'fontsize',10,'fontweight','bold');hold on;%
GL=shaperead('D:\学习资料\格陵兰岛\greenland\greenland.shp','UseGeoCoords',true);

%% 绘制shp文件(plot是面,patch是线)
boux=[GL(:).Lon];bouy=[GL(:).Lat];
m_plot(boux,bouy,'color',[0.85,0.85,0.85],'Linewidth',0.1);
m_patch(boux,bouy,[0.85,0.85,0.85]);%'yellow''k-'%这两句代码是mapshow的功能

hold on

%% 填色环节,注意A数据是我自己需要使用的栅格数据,和Lon以及lat是对应关系
m_pcolor(lon,lat,A);

hold on;

(4)注意点
m_map是工具箱,因此使用的时候注意使用到的函数都是‘m_’开头的,例如填色的时候千万不能使用pcolor,而使用worldmap画框的画,则用pcolorm填色。其他的函数暂时还没注意到。
数据边框没处理好是我自己数据的问题,下面的shp文件画出来被填色遮挡住了,此外,这是格陵兰岛0.25度网格绘制的结果最终呈现结果还不错,数据边框没处理好是我自己数据的问题,下面的shp文件画出来被填色遮挡住了,此外,这是格陵兰岛0.25度网格绘制的结果

2、geoshow-worldmap画图

这个是matlab自带的功能,也需要和上文的工具箱的函数完全分开!!
这里也是分了两种画图的方法
不说了,直接上代码=v=
方法一:先创建坐标轴。坐标轴的参数可以参照下面链接
(1)https://zhuanlan.zhihu.com/p/526463769
(2)https://ww2.mathworks.cn/help/map/ref/axesm-properties.html 官方帮助文档

// An highlighted block
ax1=axesm('MapProjection','Lambert','MapLatLimit',[58 85],'MapLonLimit',[-75 -10],...
    'Frame','on','flinewidth',2,'Grid','on', 'FontName', 'Times', 'FontSize', 10,...
    'MLineLocation',10,'PLineLocation',10,'ParallelLabel','on','MeridianLabel','on');%创建坐标轴

setm(gca,'flinewidth',2,'Grid','on', 'GLineWidth', 1,'FontName','times new roman','Frame','on');%修改轴的属性,看了帮助文档就可以知道,其实这句代码里面的参数完全可以合并到上一句axesm里面了哈哈,只不过自己学习,写着看看效果。“注意,定义好坐标轴也就不需要再用worldmap打开一个范围内的坐标轴了,就是这两段函数和wordlmap是两种方法,选择一种即可”


GL=shaperead('D:\学习资料\格陵兰岛\greenland\greenland.shp','UseGeoCoords',true);
geoshow(GL,'facecolor',[0.85,0.85,0.85],'Edgecolor',[0.85,0.85,0.85]);%这里

axis off;%不加这段代码的话,图就太丑了,轴的刻度线就超过了画图范围
hold on


lat_lon=csvread('D:\学习资料\处理数据\lat_londata.csv');
lat=lat_lon(:,1);
lon=lat_lon(:,2);
lat=reshape(lat,122,252);
lon=reshape(lon,122,252);

t=geoshow(lat,lon,A,'DisplayType','texturemap');
set(t,'FaceAlpha','texturemap','AlphaData',double(~isnan(A)));
hold on



在这里插入图片描述
在这里插入图片描述

3、geoshow的第二种画图方法

其实呈现的结果都是一样的,只不过是geoshow函数的形式不同

// An highlighted block
refvec=[4 89.625 -73.125];%286.875
t=geoshow(gca,A,refvec,'displaytype','texturemap');
set(t,'FaceAlpha','texturemap','AlphaData',double(~isnan(A)));
hold on

refvec只是定义了一个画图的范围,具体表示含义如下
在这里插入图片描述

4、画图中的注意点

(1)我使用的格网数据里包括了NaN值,在m_map里函数自动不填色,但是在geoshow里面会填上其他的颜色,影响作图效果,经过查阅资料,这句代码可以完美解决,但是具体的参数含义目前没有搞明白,其他解决方案可见https://ww2.mathworks.cn/matlabcentral/answers/253209-hide-nans-in-geoshow

// An highlighted block
set(t,'FaceAlpha','texturemap','AlphaData',double(~isnan(A)));

(2)利用geoshow画图的时候,试图修改经纬度轴线为黑白相交的线,查了一上午完全没发现解决办法,所以对于我画图的结果m_map和geoshow的唯一画图的区别也就是这里吧= =.如果有知道怎么解决的,请私信或者评论区教教我,不胜感激
在这里插入图片描述

  • 23
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值