09 - matlab m_map地学绘图工具基础函数 - 绘制区域填充、伪彩色、加载图像和绘制浮雕效果的有关函数

09 - matlab m_map地学绘图工具基础函数 - 绘制区域填充、伪彩色、加载图像和绘制浮雕效果的有关函数


0. 引言

   本篇介绍下m_map区域填充函数(m_hatch)、绘制伪彩色图的函数(m_pcolor)、地图上加载图像函数(m_image)、绘制阴影浮雕效果函数(m_shadedrelief)。

1. 关于m_pcolor

  m_pcolor函数用于在地图上绘制伪彩色图。它类似于matlab的pcolor函数,但是可以在地图投影上绘制。

  m_pcolor函数一般形式为:

function [h]=m_pcolor(long,lat,data,varargin)

  其中:long、lat绘图区域经纬度坐标点;data绘图数据,每个数据点的值决定了对应位置的颜色。

  下面是一个简单示例,使用了GLDAS水文数据为数据源,测试数据在网盘中,提取码为n67r。

% 解析数据
ncFilePath = 'GLDAS_NOAH10_M.A200602.021.nc4';
lon = ncread(ncFilePath,'lon');
lat = ncread(ncFilePath,'lat');    
soilmoi_data = ncread(ncFilePath,'SoilMoi0_10cm_inst'); 
[LN,LT]=meshgrid(lon,lat);

% 定义投影
m_proj('mercator','long',[69.5 105.5],'lat',[24.5 40.5]);

% 在地图上绘制伪彩色图
m_pcolor(LN,LT, soilmoi_data');

% 添加边界
m_gshhs('ic','color',[.5 .5 .5]) % 中等分辨率海岸线
m_gshhs('ir2','color','k')   % 中等分辨率河流
m_grid('linestyle','none','tickdir','out');
colorbar;

2. 关于m_image

  m_image函数用于在地图投影上显示图像。这个函数可以将图像数据投影到地图坐标系上,以便与其他地图数据进行比较或叠加。借助谷歌地图、高德地图等一些列地理数据库API,可以将一些卫星数据加载到绘图区域

  m_image函数一般形式为:

m_image(lon,lat,C,varargin)

  其中,lon、lat图像数据配准到地图上的位置;C图像的颜色数据矩阵,可以是RGB彩色图像,也可以是灰度图像;varargin可选参数,如resolution可以控制图像显示精度,通过插值方式将图像的显示像素转化到 N ∗ N N*N NN

  m_map官网提供了一个加载谷歌地图的示例,经过尝试未能复现,这里用了一个普通图片作为,将图片加载到地图的指定位置,以下是一个简单示例

clc;clear;
% % 读取图像文件
lms=[ -123-[14 8]/60  49+[10 13.5]/60 ];
m_proj('utm','lat',lms(3:4),'lon',lms(1:2));

imageData = imread('m_coast.jpg');
% 定义图像在地图上的经纬度范围
lonRange = [-123.12 -123.23];
latRange = [49.16 49.22];
% 在地图上显示图像
m_image(lonRange, latRange, imageData);
% 添加网格
m_grid('linestyle','none','tickdir','out');

3. 关于m_shadedrelief

  m_shadedrelief函数用于在地图投影上绘制阴影浮雕效果以展示地形。这个函数可以帮助你将地图呈现为立体感强烈的样式,增强地图的视觉效果。

  m_shadedrelief函数一般形式为:

[Truecol,x,y]=m_shadedrelief(x,y,Z,varargin)

  其中,x、y为水平竖直方向向量,z为高度数据,x y z的单位需统一;varargin为可选参数。需要注意的是m_shadedrelief函数调用之前必须先执行caxiscolormap两个函数,且为了显示立体效果,需要计算对位点的度。

  m_shadedrelief函数的一些可选参数比较讲究,理解比较浅,需要进一步了解的可以在m_map中查看有关资料或注释。

  下面是来自官网的一个示例,数据的链接可以在网盘中获取,提取码为:tgvf。

clat=[48+46/60 49+5/60];clon=[-125-15/60 -124-55/60]; % Barkley Sound
%% Read data from a netcdf file
fname='barkley_sound_1_navd88_2016.nc';
lat=ncread(fname,'lat');
lon=ncread(fname,'lon');
ilat=lat>=clat(1) & lat<=clat(2);
ilon=lon>=clon(1) & lon<=clon(2);
Z=ncread(fname,'Band1',[ find((ilon),1,'first') find((ilat),1,'first')],...
                       [ sum(ilon) sum(ilat)],[1 1]);

m_proj('equidistant','lon',clon,'lat',clat);   % Projection

%   The shaded relief version (right hand plot))

subplot(1,2,2);
caxis([-300 1210]);  % 1210 chosen by manual adjustment
                     % since  'waterline" appears to be at about Z=2 (vertical datum for
                     % bathymetry is 'lowest normal tide')
colormap([m_colmap('blues',32);m_colmap('gland',128)]);   % Colormap sizes chosen because...
                                                          % ... 32/128 = (300+2)/(1210-2)
m_shadedrelief(lon(ilon),lat(ilat),Z');   
m_grid('box','fancy','grid','none','fontsize',14);
m_contfbar( [.3 .7],.98, Z',[-300:1210],...
            'axfrac',.02,'endpiece','no','levels','match','edgecolor','none');          
% The normal contour version (left hand plot))

subplot(1,2,1);
m_contourf(lon(ilon),lat(ilat),Z',[-300:25:-25 2 50:50:200 300:100:1200 1210]);
caxis([-300 1210]);   
colormap([m_colmap('blues',32);m_colmap('gland',128)]);
m_grid('box','fancy','tickdir','out','grid','none','fontsize',14);
m_contfbar( [.3 .7],.98, Z',[-300:25:-25 2 50:50:200 300:100:1200 1210],...
            'axfrac',.02,'endpiece','no','levels','match');     

在这里插入图片描述

  对比两幅图,第二幅图加了阴影浮雕效果,视觉效果更好

4. 关于m_hatch

  m_hatch函数用于在地图上填充指定区域。这个函数通常与其他 m_map 函数一起使用,比如 m_contourf 用于填充等值线区域,m_patch 用于绘制多边形区域等。

m_hatch(lon,lat,hatchpattern)

  其中,lon 和 lat 分别是指定区域的经度和纬度坐标,hatchpattern是填充图案的类型,常用的填充图案包括:

  • 'single', 45, 5 用单线条填充,线条朝向45°,控制每2根单线条之间的间距为5;
  • 'cross', 45, 5 用交叉线填充,线条朝向45°,控制每2根单线条之间的间距为5;
  • 'speckle',7,1 斑点填充到研究区内,离内边界7个单位的距离作为填充区域,填充散点的密度为1;
  • 'outspeckle',7,1 斑点填充到研究区外,离外边界7个单位的距离作为填充区域,填充散点的密度为1;

  除此之外,还有一些控制线条样式、颜色等的参数也可以被设置。

  下面为m_hatch函数的使用示例,并展示了四种不同图案填充的效果:

bndry_lon=[-128.8 -128.8 -128.3 -128 -126.8 -126.6 -128.8];
bndry_lat=[49      50.33  50.33  50   49.5   49     49];

clf;
m_proj('lambert','long',[-130 -121.5],'lat',[47 51.5],'rectbox','on');

m_gshhs_i('color','r');              % Coastline...
m_gshhs_i('speckle','color','k');    % with speckle added

m_line(bndry_lon,bndry_lat,'linewi',2,'color','m');     % Area outline ...
% m_hatch(bndry_lon,bndry_lat,'single',30,5,'color','k'); % 单线填充
% m_hatch(bndry_lon,bndry_lat,'speckle',7,1,'color','k'); % 区域内斑点填充
% m_hatch(bndry_lon,bndry_lat,'outspeckle',7,1,'color','k'); % 区域外斑点填充
m_hatch(bndry_lon,bndry_lat,'cross',30,5,'color','k'); % 双线填充

m_grid('linewi',2,'linest','none','tickdir','out','fontsize',12);
title({'Speckled Boundaries','for nice B&W presentation','(best in postscript format)'});
m_text(-128,48,{'Pacific','Ocean'},'fontsize',18);
    
m_northarrow(-122.5,50.2,.8,'type',3,'linewi',2);  
contour
image
shadedrelief
pcolor

5. 结语

  本篇介绍m_map中绘制多边形区域函数(m_patch)、区域填充函数(m_hatch)、绘制伪彩色图的函数(m_pcolor)、地图上加载图像函数(m_image)、绘制阴影浮雕效果函数(m_shadedrelief),通过示例展示了各函数的基本用法,对于绘制常见地学图已经够用了,后面若发现还有其它相关函数再进行补充希望对绘图的你有所帮助






😜
😜😜
😜😜😜😜

  • 16
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咋(za)说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值