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

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

  • [0. 引言](#0. 引言)
  • [1. 关于m_pcolor](#1. 关于m_pcolor)
  • [2. 关于m_image](#2. 关于m_image)
  • [3. 关于m_shadedrelief](#3. 关于m_shadedrelief)
  • [4. 关于m_hatch](#4. 关于m_hatch)
  • [5. 结语](#5. 结语)

0. 引言

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

1. 关于m_pcolor

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

m_pcolor函数一般形式为:

matlab 复制代码
function [h]=m_pcolor(long,lat,data,varargin)

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

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

matlab 复制代码
% 解析数据
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函数一般形式为:

matlab 复制代码
m_image(lon,lat,C,varargin)

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

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

matlab 复制代码
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函数一般形式为:

matlab 复制代码
[Truecol,x,y]=m_shadedrelief(x,y,Z,varargin)

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

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

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

matlab 复制代码
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 用于绘制多边形区域等。

matlab 复制代码
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函数的使用示例,并展示了四种不同图案填充的效果:

matlab 复制代码
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),通过示例展示了各函数的基本用法,对于绘制常见地学图 已经够用了,后面若发现还有其它相关函数再进行补充 。++希望对绘图的你有所帮助++

😜

😜😜

😜😜😜😜

相关推荐
咋(za)说11 天前
07 - matlab m_map地学绘图工具基础函数 - 绘制等高线
m_map绘图工具·matlan地图绘制·m_elev函数·m_contour函数·m_contourf函数·绘制等高线·绘制等高线填充
咋(za)说14 天前
03 - matlab m_map地学绘图工具基础函数 - 设置坐标系(m_coord)
matlab·m_map绘图工具·m_coord坐标系初始化·地理/地磁坐标系设置·m_map函数