14 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数(一)
- 0. 引言
- 1. 关于m_ll2xy和m_xy2ll
- 2. 关于m_lldist
- 3. 关于m_xydist
- 4 关于m_fdist
- 5 关于m_idist
- 6. 总结
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
中数据转换的有关函数,对各函数的功能及使用方法进行描述。希望对绘图的你有所帮助
😜
😜😜
😜😜😜😜