- 积分
- 55945
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
需要先下载MeteoInfo Java最新版本(1.1.6R2或以上):http://www.meteothinker.com/Downloads.aspx
这一讲给出一个实际的MeteoInfo脚本程序。脚本里的主要内容包括:
1. 脚本说明注释。Jython里的注释用的是#号,给脚本程序增加说明注释是一个好习惯,比如加上脚本作者、日期、目的等信息。
2. 导入需要用到的类。面向对象编程里的最基本的要素就是“类”(class),类里面封装了变量、属性、方法等。当然MeteoInfo的功能也都是封装在一个个类里面。为了更好的组织类,用到了“包”(Package),包可以理解为目录,而类是目录中的一个个文件。比如:
from org.meteoinfo.layout import MapLayout
其中org.meteoinfo.layout是包, 而MapLayout是该包里的一个类。MeteoInfo库中所有的类和包可以在库API帮助文档中找到(http://www.meteothinker.com/Documentation.aspx)。
3. 加载图形所需的地理底图数据。这个脚本加载了世界各国行政区域的shape文件并生成一个图层。
4. 打开气象数据文件。这里演示了打开MeteoInfo软件带的一个示例GrADS格式数据model.ctl文件。
5. 获取所需的格点数据。这里演示了获取"PS"变量的格点数据
6. 利用格点数据生成等值线填色图层。
7. 调整图形参数并输出图层。
8. 显示图形窗体。(通常并不需要,这里只是为了演示)。
具体的细节以后会仔细讲解。脚本程序如下:
- #-----------------------------------------------------
- # Author: Yaqiang Wang
- # Date: 2014-11-22
- # Purpose: Read GrADS data and plot
- # Note: Sample
- #-----------------------------------------------------
- #---- Import classes
- print 'Import classes...'
- from org.meteoinfo.layout import MapLayout
- from org.meteoinfo.data.mapdata import MapDataManage
- from org.meteoinfo.data.meteodata import MeteoDataInfo, DrawMeteoData
- from org.meteoinfo.legend import LegendManage, LegendType, GridLabelPosition
- from org.meteoinfo.layout import LegendStyles
- from org.meteoinfo.shape import ShapeTypes
- from org.meteoinfo.global import Extent
- import os.path
- from java.awt import Color
- from javax.swing import JFrame
- #---- Set directories
- print 'Set directories...'
- baseDir = 'D:/MyProgram/Distribution/java/MeteoInfo/MeteoInfo'
- dataDir = os.path.join(baseDir, 'sample/GrADS')
- mapDir = os.path.join(baseDir, 'map')
- figDir = 'D:/Temp/test'
- #---- Create MapLayout object
- mapLayout = MapLayout()
- mapFrame = mapLayout.getActiveMapFrame()
- #---- Load country layer
- print 'Load country layer...'
- countryLayer = MapDataManage.loadLayer(os.path.join(mapDir, 'country1.shp'))
- lb = countryLayer.getLegendScheme().getLegendBreaks().get(0)
- lb.setDrawFill(False)
- lb.setOutlineColor(Color.blue)
- mapFrame.addLayer(countryLayer)
- #---- Open GrADS data
- print 'Open GrADS data...'
- mdi = MeteoDataInfo()
- mdi.openGrADSData(os.path.join(dataDir, 'model.ctl'))
- #---- Set time index
- mdi.setTimeIndex(2)
- #---- Get pressure grid data
- gdata = mdi.getGridData('PS')
- gdata.extendToGlobal()
- #---- Create pressure shaded layer
- print 'Create pressure shaded layer...'
- pressLayer = DrawMeteoData.createShadedLayer(gdata, 'Pressure', 'PS', True)
- #---- Add layer
- mapFrame.addLayer(pressLayer)
- #--- Move pressure layer to bottom
- mapFrame.moveLayer(pressLayer, 0)
- #---- Add title
- title = mapLayout.addText('MeteoInfo script demo', 350, 30, 'Arial', 16)
- #---- Zoom layout map
- print 'Zoom layout map...'
- mapLayout.getActiveLayoutMap().zoomToExtentLonLatEx(Extent(0, 360, -90, 90))
- #---- Set mapframe
- mapFrame.setGridXDelt(30)
- mapFrame.setGridYDelt(30)
- #---- Add legend
- legend = mapLayout.addLegend(150, 440)
- legend.setLegendStyle(LegendStyles.Bar_Horizontal)
- legend.setLegendLayer(pressLayer)
- #---- Output figure
- print 'Output figure...'
- mapLayout.paintGraphics()
- mapLayout.exportToPicture(os.path.join(figDir, 'pressure_test.png'))
- frame = JFrame('MeteoInfo Script Sample', size = (800, 600))
- frame.add(mapLayout)
- frame.visible = True
- print 'Finished!'
运行结果:
|
|