爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 22730|回复: 61

MeteoInfo脚本示例:移动轨迹

[复制链接]

新浪微博达人勋

发表于 2015-1-5 10:38:47 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2023-3-26 09:12 编辑

江志红有一篇文章分析了2007年淮河流域强降水过程的水汽输送特征,利用了气团轨迹聚类分析技术。该文中轨迹起点不同,水平方向15个格点(2.5*2.5度),垂直方向3个高度。用了HYSPLIT自带的聚类分析工具进行聚类。其实不管HYSPLIT还是TrajStat中的聚类分析方法都要求所有参与聚类的轨迹都是同一起点(高度没有关系,目前的聚类算法中都没有考虑高度)。那么文中的聚类分析必然需要首先将不同起点的轨迹平移至同一起点(应该是研究区的中点),文章并没有相关的说明。不过从文章中图8b、10b来看5类平均轨迹应该是同一起点(图也不是很清楚)。

这种平移必定对之后的聚类分析有所影响,但从解决问题的角度来说也是可行的,可以对一个相对较大的区域的气团轨迹特征进行分析。因此写了一个脚本来实现气团轨迹的平移(假定气团轨迹已经转为shape文件,并加载为MeteoInfo的一个图层):

  1. #-----------------------------------------------------
  2. # Author: Yaqiang Wang
  3. # Date: 2021-9-14
  4. # Purpose: Move trajectory to a new start point
  5. # Note: Sample
  6. #-----------------------------------------------------
  7. import os
  8. from org.meteoinfo.geo.layer import VectorLayer
  9. from org.meteoinfo.geometry.shape import ShapeTypes, PointZ, PolylineZShape
  10. from org.meteoinfo.geometry.legend import LegendType

  11. # Get trajectory layer
  12. print 'Start...'
  13. trajLayer = miapp.getMapView().getLayer('JiuquanSpr.shp')

  14. #Create result trajectory layer
  15. print 'Create result trajectry layer...'
  16. layer = VectorLayer(trajLayer.getShapeType())
  17. layer.setLayerName('Moved_trajectories')
  18. for field in trajLayer.getFields():
  19.     layer.editAddField(field.getColumnName(), field.getDataType())

  20. #Move trajectories to new start position
  21. print 'Move trajectories...'
  22. newX = 105.0
  23. newY = 40.5
  24. i = 0
  25. for shape in trajLayer.getShapes():
  26.     point = shape.getPoints().get(0)
  27.     xd = newX - point.X
  28.     yd = newY - point.Y
  29.     npoints = []
  30.     for point in shape.getPoints():
  31.         npoint = PointZ()
  32.         npoint.X = point.X + xd
  33.         npoint.Y = point.Y + yd
  34.         npoint.M = point.M
  35.         npoint.Z = point.Z
  36.         npoints.append(npoint)
  37.     polyline = PolylineZShape()
  38.     polyline.setPoints(npoints)
  39.     sn = layer.getShapeNum()
  40.     layer.editInsertShape(polyline, sn)
  41.     for j in range(0, layer.getFieldNumber()):
  42.         layer.editCellValue(j, sn, trajLayer.getCellValue(j, i))
  43.     i += 1
  44. layer.updateLegendScheme(LegendType.SINGLE_SYMBOL, 'TrajID')

  45. #Add the moved layer
  46. print 'Add the layer...'
  47. miapp.getMapDocument().getActiveMapFrame().addLayer(layer)

  48. #Save the moved layer
  49. print 'Save the moved layer...'
  50. outDir = 'D:/Temp/test'
  51. fn = os.path.join(outDir, 'traj_moved.shp')
  52. #layer.saveFile(fn)

  53. print 'Finish !'


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

新浪微博达人勋

发表于 2015-1-5 18:16:06 | 显示全部楼层
王老师气团轨迹怎么转成shape文件呢?还有后边的加载为Meteoinfo的一个图层也看不大懂哦。新人请见谅啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-1-5 18:40:32 | 显示全部楼层
tan8935079 发表于 2015-1-5 18:16
王老师气团轨迹怎么转成shape文件呢?还有后边的加载为Meteoinfo的一个图层也看不大懂哦。新人请见谅啊{:eb ...

代码里把
#layer.saveFile(fn)
前面的#去掉即可保存图层为一个shape文件。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-1-5 21:07:27 | 显示全部楼层
王老师分析的好到位!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-1-5 22:12:30 | 显示全部楼层
tan8935079 发表于 2015-1-5 18:16
王老师气团轨迹怎么转成shape文件呢?还有后边的加载为Meteoinfo的一个图层也看不大懂哦。新人请见谅啊{:eb ...

TrajStat插件里有将气团轨迹转为shape文件的功能
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-1-6 08:44:22 | 显示全部楼层
同一起点?我怎么觉得是同一终点呢,轨迹是向前推的吧?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-1-6 09:12:56 | 显示全部楼层
游子 发表于 2015-1-6 08:44
同一起点?我怎么觉得是同一终点呢,轨迹是向前推的吧?

轨迹可以向前推也可以向后推,即所谓的前向轨迹和后向轨迹。

即便是向前推,也可以理解为向前推的起点,很难理解吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-1-26 11:22:17 | 显示全部楼层
感谢王老师的解决
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-9-2 21:22:31 | 显示全部楼层
王老师,我新下载的TrajStat对不同起点的轨迹实现了聚类,是否是新版本增加的功能?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-9-2 22:23:40 | 显示全部楼层
付亚男 发表于 2015-9-2 21:22
王老师,我新下载的TrajStat对不同起点的轨迹实现了聚类,是否是新版本增加的功能?

没有,只要轨迹节点数相同,总能算出聚类结果,但是结果是否合理就不得而知了。
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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