爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4995|回复: 4

MeteoInfo脚本教程(七):格点数据

[复制链接]

新浪微博达人勋

发表于 2014-12-1 11:53:30 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2014-12-1 12:00 编辑

MeteoInfo里有两个最重要的数据类:GridData(格点数据)和StationData(站点数据)。气象模式输出的数据通常是格点数据,对某一变量而言可以有4维数据(空间三维和时间维)。从MeteoDataInfo对象中获取GridData的方法是getGridData(String variableName),可以通过setTimeIndex和setLevelIndex方法设置时间和高度维,从而获取水平的2维GridData数据。其实也可以通过其它设置获取其它的2维或1维格点数据,比如剖面格点数据,这个以后再讲。

有了GridData数据后可以用DrawMeteoData类的一些静态方法来创建相应的图层达到绘制数据的目的。从GridData数据创建图层的方法主要如下:
    DrawMeteoData.createContourLayer(GridData data,String layerName,String fieldName, Bollean isSmooth)    ->    生成等值线图层(VectorLayer,Polyline)
    DrawMeteoData.createShadedLayer(GridData data,String layerName,String fieldName, Bollean isSmooth)    ->    生成等值线填色图层(VectorLayer,Polygon)
    DrawMeteoData.createRasterLayer(GridData data,String layerName)    ->    生成栅格图层(RasterLayer)
    DrawMeteoData.createGridFillLayer(GridData data,String layerName,String fieldName)    ->    生成格点填色图层(VectorLayer,Polygon)
    DrawMeteoData.createGridPointLayer(GridData data,String layerName,String fieldName)    ->    生成格点点图层(VectorLayer,Point)


下面是一个Demo脚本:
  1. #-----------------------------------------------------
  2. # Author: Yaqiang Wang
  3. # Date: 2014-11-30
  4. # Purpose: Get and plot grid data
  5. # Note: Sample
  6. #-----------------------------------------------------
  7. #---- Import classes
  8. print 'Import classes...'
  9. from org.meteoinfo.layout import MapLayout
  10. from org.meteoinfo.data.mapdata import MapDataManage
  11. from org.meteoinfo.data.meteodata import MeteoDataInfo, DrawMeteoData
  12. from org.meteoinfo.layout import LegendStyles
  13. from org.meteoinfo.global import Extent
  14. import os
  15. from java.awt import Color
  16. from javax.swing import JFrame

  17. #---- Set directories
  18. print 'Set directories...'
  19. baseDir = 'D:/MyProgram/Distribution/java/MeteoInfo/MeteoInfo'
  20. dataDir = os.path.join(baseDir, 'sample')
  21. mapDir = os.path.join(baseDir, 'map')

  22. #---- Create MapLayout object
  23. mapLayout = MapLayout()
  24. mapFrame = mapLayout.getActiveMapFrame()

  25. #---- Load country layer
  26. print 'Load country layer...'
  27. countryLayer = MapDataManage.loadLayer(os.path.join(mapDir, 'country1.shp'))
  28. lb = countryLayer.getLegendScheme().getLegendBreaks().get(0)
  29. lb.setDrawFill(False)
  30. lb.setOutlineColor(Color.blue)
  31. mapFrame.addLayer(countryLayer)

  32. #---- Create MeteoDataInfo object
  33. mdi = MeteoDataInfo()

  34. #---- Open a GrADS data file
  35. fn = os.path.join(dataDir, 'GrADS/model.ctl')
  36. mdi.openGrADSData(fn)

  37. #---- Get grid data
  38. mdi.setTimeIndex(2)
  39. mdi.setLevelIndex(3)
  40. gdata = mdi.getGridData('Z')
  41. gdata.extendToGlobal()

  42. #---- Create shaded layer from the grid data
  43. layer = DrawMeteoData.createContourLayer(gdata, 'Z_contour', 'Z', True)
  44. #layer = DrawMeteoData.createShadedLayer(gdata, 'Z_shaded', 'Z', True)
  45. #layer = DrawMeteoData.createRasterLayer(gdata, 'Z_raster')
  46. #layer = DrawMeteoData.createGridFillLayer(gdata, 'Z_gridfill', 'Z')
  47. #layer = DrawMeteoData.createGridPointLayer(gdata, 'Z_gridpoint', 'Z')

  48. #---- Add layer
  49. mapFrame.addLayer(layer)

  50. #--- Move pressure layer to bottom
  51. mapFrame.moveLayer(layer, 0)

  52. #---- Add title
  53. title = mapLayout.addText('MeteoInfo script demo', 350, 30, 'Arial', 16)

  54. #---- Zoom layout map
  55. print 'Zoom layout map...'
  56. mapLayout.getActiveLayoutMap().zoomToExtentLonLatEx(Extent(0, 360, -90, 90))

  57. #---- Set mapframe
  58. mapFrame.setGridXDelt(30)
  59. mapFrame.setGridYDelt(30)

  60. #---- Add legend
  61. legend = mapLayout.addLegend(150, 440)
  62. legend.setLegendStyle(LegendStyles.Bar_Horizontal)
  63. legend.setLegendLayer(layer)

  64. frame = JFrame('MeteoInfo Script Sample', size = (800, 600))
  65. frame.add(mapLayout)
  66. frame.visible = True
  67. print 'Finished!'




Image00759.png


本帖被以下淘专辑推荐:

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

新浪微博达人勋

 成长值: 19710
发表于 2014-12-1 19:09:31 | 显示全部楼层
色标会不会少一个标值?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-12-1 19:20:45 | 显示全部楼层
兰溪之水 发表于 2014-12-1 19:09
色标会不会少一个标值?

不少,对于等值线来说,每条线是固定值而不是区间值。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 19710
发表于 2014-12-1 19:57:33 | 显示全部楼层
MeteoInfo 发表于 2014-12-1 19:20
不少,对于等值线来说,每条线是固定值而不是区间值。

我错了,等值线。。。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2024-9-23 08:49:25 | 显示全部楼层
王老师,想请教您一下。java二次开发,画降水色斑图,调用clip方法,layer.clip(jjjMap);,layer是色斑图的图层,jjjMap是京津冀地图的图层,报了错TopologyException: found non-noded intersection between LINESTRING ( 116.82000012309558 42.679323430660034, 116.82000011879595 42.67932341079954 ) and LINESTRING ( 116.82 42.67932286206939, 116.82000020243557 42.67932379713915 ) [ (116.82000011908272, 42.67932341212417, NaN) ]。没有交点。这个是怎么回事呢。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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