14 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数(一)

发布于:2024-07-12 ⋅ 阅读:(81) ⋅ 点赞:(0)

14 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数(一)


0. 引言

   通过前面篇节已经将m_map绘图工具中大多绘图有关的函数进行过介绍,已经能够满足基本的绘图需求,下面几节介绍下m_map中关于数据类型转换的一些函数,在特定应用场景下也是极为重要的。首先介绍下面几种数据转换函数:。

1. 关于m_ll2xy和m_xy2ll

   m_ll2xy函数用于将经纬度坐标转换为地图投影坐标,m_xy2ll函数m_ll2xy函数的逆过程,用于将投影坐标转换为经纬度坐标。需要在地图上标记点或绘制特定区域时这两个命令就极为重要了。

  m_ll2xy函数的一般形式为:

[X,Y,I]=m_ll2xy(lon,lat,varargin)
[long,lat]=m_xy2ll(X,Y)

  其中:

  • lon和lat 为经纬度坐标向量;
  • x和y为平面投影坐标,向量长度和lon和lat向量的长度一致;
  • varargin为可选参数,以输入’clip’, ( ‘on’ | ‘off’ | ‘patch’ | ‘point’ )等一些属性值,用于对超出研究范围的区域的Nan值进行处理;

  m_ll2xy函数m_xy2ll函数函数使用示例,经过m_ll2xy、m_xy2ll的互转之后,lon和lon2数值一致,表明在坐标转换上二者功能可逆,经过m_ll2xy函数转换后的坐标具备平面坐标特征;

m_proj('miller', 'lon', [-180 180], 'lat', [-90 90]); %

lon = linspace(-180, 180, 10);
lat = linspace(-90, 90, 10);

[x,y] = m_ll2xy(lon, lat);
[lon2,lat2] = m_xy2ll(x,y);
m_grid
scatter(lon2,lat2)

2. 关于m_lldist

  m_lldist函数用于计算两个地球表面上的点之间的球面距离。这个函数可以计算两点之间的大圆距离(最短距离)或测地线距离(大圆弧长度)。

  m_lldist函数一般形式为:

[dist,lons,lats] = m_lldist(long,lat,N)

  其中:

  • long,lat 球面上两点A、B的经纬度坐标;
  • N 是用于近似大圆弧的点的数量;
  • dist 为A、B两点间的大圆弧距离;
  • [lons lats] A-B路径中的坐标点;

  m_lldist函数使用示例

m_proj('miller','lat',[-77 77]);   
m_coast('patch',[.7 1 .7],'edgecolor','none'); 
m_grid('box','fancy','linestyle','-','gridcolor','w','backcolor',[.2 .65 1]);
    
cities={'Cairo','Washington','Buenos Aires'}; 
lons=[ 30+2/60  -77-2/60   -58-22/60];
lats=[ 31+21/60  38+53/60  -34-45/60]; 
for k=1:3
    [range,ln,lt]=m_lldist([-123-6/60 lons(k)],[49+13/60  lats(k)],40); 
    m_line(ln,lt,'color','r','linewi',2); 
    m_text(ln(end),lt(end),sprintf('%s - %d km',cities{k},round(range)));
end
title('Great Circle Routes','fontsize',14,'fontweight','bold');
    
set(gcf,'color','w');   % Need to do this otherwise 'print' turns the lakes black

3. 关于m_xydist

  m_xydist 函数用于计算地图投影坐标系下两点之间的直线距离。

  m_xydist 函数一般形式

dist = m_xydist(x,y)

  其中,x、y为坐标向量,表示投影坐标上的两点;dist 为两点之间的直线距离:

  m_xydist函数适用示例

lon1 = -73.98;
lat1 = 40.78;
lon2 = -122.40;
lat2 = 37.77;
distance = m_xydist([lon1 lon2], [lat1, lat2]);
fprintf('直线距离为 %f 单位\n', distance);
输出结果为>> 直线距离为 3954.971314 单位

4 关于m_fdist

  m_fdist函数用于计算椭球上给定点在某方位/距离上的位置。

  m_fdist函数一般形式为:

[lon2,lat2,a21] = m_fdist(lon1,lat1,a12,s,spheroid)

其中:

  • lon1,lat1 球面上的1点坐标;
  • a12,s 第2个点的方位角a12和距第一个点的距离s;
  • spheroid 坐标系,默认为WGS84坐标系统;
  • lon2,lat2,a21 返回第二个点的坐标和相对于第一个点的方位角;

  m_fdist函数使用示例

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

[lon2 lat2 a21] = m_fdist(-121.98, 48.78,30,2);
fprintf('坐标点[-121.98, 48.78]方位角30°距离2m的点的坐标和相对与该点的方位角: %.2f  %.2f  %.2f \n', lon2,lat2,a21);

在这里插入图片描述

5 关于m_idist

  m_idist函数用于计算地图上两点之间的距离或方位。具体来说,m_idist 用于在地图投影上计算两个点之间的直线距离、大圆距离或方位角。

  m_idist函数的一般形式为:

[s,a12,a21] = m_idist(lon1,lat1,lon2,lat2,spheroid)
% lon1,lat1,lon2,lat2 两点坐标
% spheroid 默认WGs84坐标系

  m_idist函数使用示例

m_proj('mercator', 'lon', [69.5 105.5], 'lat', [24.5 40.5]);

% 计算两点之间的距离和方位角
[dist, az] = m_idist(70, 80,27,28);

% 显示结果
fprintf('Distance between New York and Los Angeles: %.2f km\n', dist);
fprintf('Azimuth from New York to Los Angeles: %.2f degrees\n', az);

  打印结果

>> Distance between New York and Los Angeles: 6114934.62 km
>> Azimuth from New York to Los Angeles: 227.39 degrees

6. 总结

   本篇介绍了m_map中数据转换的有关函数,对各函数的功能及使用方法进行描述。希望对绘图的你有所帮助






😜
😜😜
😜😜😜😜


网站公告

今日签到

点亮在社区的每一天
去签到