爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 22680|回复: 31

[源程序] [原创]适用于m_map的在地图上画箭头程序

[复制链接]

新浪微博达人勋

发表于 2015-8-23 21:29:11 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 sfhstcn2 于 2015-8-23 21:37 编辑

给大家来个实用价值不太高,但挺有意思的程序。该程序可以在m_map的地图投影下的图中添加箭头。用法如下:[ h1,h2,h3,h4 ] = m_arrow( lon,lat,arlth,arwth,arpos,arsty,col,lwth,lsty )。
lon和lat需要是维度相同的数组,分别表示所在点经度和纬度。具体用法和line(x,y)相同,不同点就在于在每条line上均添加了箭头。
lon=[x1,x2,x3],lat=[y1,y2,y3],那么将依次画(x1,y1)到(x2,y2)到(x3,y3)的直线+箭头;
又如
lon=[x11,x12;x21,x22],lat=[y11,y12;y21,y22],将分别画(x11,y11)到(x21,y21)和(x21,y21)到(x22,y22)的直线+箭头。
鉴于楼主的水平有限,后面那一堆控制参量没能设置成varargin,现就一一讲一下具体意义。
arlth表示箭头那一撇的长度,单位是地图上经纬度的°;
arwth表示箭头所张角度,单位还是°;
arpos表示箭头相对于直线所在的位置,任何实数都可以取,0表示在直线尾,1表示线头,以此类推(这是个神奇的变量);
arsty表示箭头的形状,鉴于作者水平,这里只有两种可选,0表示->这样的,1表示那种实心的;
col控制color;
lwth控制输出直线的线宽;
lsty控制输出直线的线型;
没有varargin,所以最好是把所有变量都写出来,就像这样:m_arrow(a,b,2,60,-.1,1,'k',3,'-');
当然也可以这样:[h1,h2,h3,h4]=m_arrow(a,b);其它变量用内定的很丑,不过可以控制句柄设置,h1~h3为line,h4为patch。
就像图1中的3个箭头,设置好地图投影后,只需要把它们的始终经纬度写好,就能画了。
m_proj('Equidistant cylindrical','lon',[70,130],'lat',[25,50]);
a = [94.6,94.5,100.2;93.3,97.7,101.4];
b = [48.9,39.7,34;44.7,37.7,30.6];
m_arrow(a,b,2,60,-.1,1,'k',3,'-');
另外,为啥arpos是个神奇的变量,因为我们看到,这样画出来的箭头特别是在线宽很宽的时候常会有一些直线冒头或者箭头缺角的现象,因此适量调整arpos就可以遮住那些丑的地方了。
最后关于图2那个弧形的箭头是怎么画的,其实我先做的3次样条插值spline画的弧线,然后取尾端的两组数来画箭头。
    Y = 16.5:.05:33.3;
    X = spline([16.5,24.2,33.3],[115,112,126.9],Y);
    m_plot(X,Y,'Color',[0.341 0.200 0.0745],'linewidth',3,'linestyle','-');
    L = length(X);
    m_arrow([X(L-1),X(L)],[Y(L-1),Y(L)],1.6,72,1,0,[0.341 0.200 0.0745],3,'-');
这样...还有个没法解决的问题,由于图片经纬度的长宽比,会使箭头拉伸变形,所以有些将就了...

500hPa天气图

500hPa天气图

水汽通量

水汽通量

m_arrow.m

1.81 KB, 下载次数: 77, 下载积分: 金钱 -5

评分

参与人数 1金钱 +22 贡献 +8 体力 +40 收起 理由
Aires + 22 + 8 + 40 赞一个!

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-8-23 21:37:25 | 显示全部楼层
@lhaikun@163.com,新帖攒点人气。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-8-23 23:57:31 | 显示全部楼层
这给整的可以啊 虽然看不懂 不明觉厉
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-8-24 00:44:26 | 显示全部楼层
这个帖子有意思...解决了很多人的难题。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-8-24 08:54:36 | 显示全部楼层
仔细看了下,你这图可以!大神,受小弟一拜
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-8-24 09:56:44 | 显示全部楼层
lhaikun@163.com 发表于 2015-8-23 23:57
这给整的可以啊 虽然看不懂 不明觉厉

其实这么作图有个好处,有些需要添加箭头等东西的地方,直接就在图上做了,不用后期P图了(矢量图要用AI)。必定有些时候会遇到图片修改的地方。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-8-24 10:29:26 | 显示全部楼层
sfhstcn2 发表于 2015-8-24 09:56
其实这么作图有个好处,有些需要添加箭头等东西的地方,直接就在图上做了,不用后期P图了(矢量图要用AI ...

恩 是的 看起来很不错,但是奏是不给你贡献,嘿嘿
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-8-25 13:00:43 | 显示全部楼层
谢谢分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-8-30 08:47:50 | 显示全部楼层
膜拜大神。。。好厉害的样子
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-8-30 11:44:23 | 显示全部楼层
谢谢分享,挺不错的东西
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表