爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3696|回复: 1

MeteoInfoLab脚本示例:旋转格点场

[复制链接]

新浪微博达人勋

发表于 2016-1-1 16:00:43 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2020-4-11 10:29 编辑

这个例子演示了2维水平格点场的旋转。脚本主要有以下几个步骤:

1、用arange()函数创建格点长的经纬度坐标,再用meshgrid()函数将lon, lat数组变为2维,此时创建的格点场是东西、南北方向的“正矩形”。

2、旋转格点场:利用了矩阵旋转方法(具体可以网上搜索了解)。
2.1 构建一个包含旋转角度正、余玄的2*2矩阵(也就是2维数组)。
2.2 创建一个包含所有格点经纬度坐标的矩阵(xy = zeros([n, 2]),并将经纬度值赋入。由于是希望格点场以左下角为中心旋转,构建的矩阵的左下角要平移到(0, 0)。
2.3 利用矩阵乘积函数dot()将2.1和2.2中构建的两个矩阵相乘即可得到旋转后的矩阵。旋转后的矩阵需要进行和2.2中相反方向的平移。

脚本程序:
  1. #Plot
  2. axesm(tickfontsize=12)
  3. geoshow('country')

  4. #Original matrix
  5. lat = arange(10, 41, 5)
  6. lon = arange(70, 131, 5)
  7. lon, lat = meshgrid(lon, lat)
  8. scatterm(lon, lat, facecolor='b', size=8, edge=False)

  9. #Rotate matrix
  10. angle = 20 * pi / 180
  11. rotate = array([[cos(angle),sin(angle)], [-sin(angle),cos(angle)]])
  12. n = lon.size
  13. xy = zeros([n, 2])
  14. xy[:,0] = lon - 70
  15. xy[:,1] = lat - 10
  16. xy = dot(xy, rotate)    #Matrix multiplication
  17. xy[:,0] = xy[:,0] + 70
  18. xy[:,1] = xy[:,1] + 10
  19. scatterm(xy[:,0], xy[:,1], facecolor='r', size=8, edge=False)

  20. xticks(arange(0, 361, 10))
  21. yticks(arange(-90, 91, 10))
  22. title('Matrix rotate sample')
  23. xlim(50, 150)
  24. ylim(0, 70)


matrix_rotate.png


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

新浪微博达人勋

发表于 2016-1-5 08:56:23 | 显示全部楼层
{:5_213:}
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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