爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 3293|回复: 6

关于第六讲的ShadedActionPerformed求解

[复制链接]

新浪微博达人勋

发表于 2014-3-10 17:38:51 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 小寶 于 2014-3-10 21:00 编辑

1.png
第六讲的ShadedActionPerformed()这个方法生成上图
想用来改自己的图片
我的图片这样 ]S(X0U(%H`Z43C{DB%]853J.jpg
  1. #-----------------------------------------------------
  2. # Author: Yaqiang Wang
  3. # Date: 2013-10-29
  4. # Purpose: Read hdf4 data
  5. # Note: Sample
  6. #-----------------------------------------------------
  7. from org.meteoinfo.data.meteodata import MeteoDataInfo
  8. from org.meteoinfo.data.meteodata import Dimension
  9. from org.meteoinfo.data.meteodata import DimensionType
  10. from org.meteoinfo.data.meteodata import DrawMeteoData
  11. from org.meteoinfo.projection import ProjectionInfo
  12. from org.meteoinfo.legend import LegendManage
  13. from org.meteoinfo.legend import LegendType
  14. from org.meteoinfo.shape import ShapeTypes
  15. import os.path
  16. import jarray

  17. #Set data directory
  18. dataDir = 'e:/'

  19. #Create MeteoDataInfo object
  20. mdi = MeteoDataInfo()

  21. #Read hdf data file
  22. fn = dataDir + 'tend.HDF'
  23. if os.path.isfile(fn):
  24.         print fn
  25.         mdi.openNetCDFData(fn)
  26.         dataInfo = mdi.getDataInfo()
  27.         print mdi.getInfoText()
  28.         xmin = -180.0
  29.         ymin = -90.0
  30.         xnum = 360
  31.         ynum = 180
  32.         xdelt = 1.0
  33.         ydelt = 1.0
  34.         xlist = []
  35.         ylist = []
  36.         for i in range(0,xnum):
  37.                 xlist.append(xmin + xdelt * i)
  38.         for i in range(0,ynum):
  39.                 ylist.append(ymin + ydelt * i)

  40.         X = jarray.array(xlist, 'd')
  41.         Y = jarray.array(ylist, 'd')
  42.         xDim = Dimension(DimensionType.X)
  43.         xDim.setValues(X)
  44.         dataInfo.setXDimension(xDim)
  45.         yDim = Dimension(DimensionType.Y)
  46.         yDim.setValues(Y)
  47.         dataInfo.setYDimension(yDim)
  48.         var = dataInfo.getVariable('AOD_Mean_Tend')
  49.         dimList = [yDim, xDim]
  50.         var.setDimensions(dimList)
  51.         gData = mdi.getGridData(var.getName())
  52.         gData = gData.multiply(1)
  53.         aLS = LegendManage.createLegendSchemeFromGridData(gData, LegendType.GraduatedColor, ShapeTypes.Polygon)
  54.         aLayer = DrawMeteoData.createRasterLayer(gData, "Test_HDF", aLS)
  55.         aLayer.setProjInfo(dataInfo.getProjectionInfo())
  56.         mf = miapp.getMapDocument().getActiveMapFrame()
  57.         mf.addLayer(aLayer)
  58.         mf.moveLayer(aLayer, 0)

  59. print 'Finished!'
复制代码
用之前老师给的例子,但是这个jython代码 好像和java不一样,改动的时候不知道如何下手,改了几次都出错
我用的是java版 ,本版内部是不是很多用的是c#呀  为什么一些按键我都没有

tend.HDF

511.44 KB, 下载次数: 1, 下载积分: 金钱 -5

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

新浪微博达人勋

 楼主| 发表于 2014-3-10 20:40:40 | 显示全部楼层
本帖最后由 小寶 于 2014-3-10 21:09 编辑

MeteoInfo@MeteoInfo打扰了有空帮看下?
二次开发一定要安装第一讲那个软件?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-10 22:26:28 | 显示全部楼层
要生成等值线填充图层可以用DrawMeteoData类的createShadedLayer方法,由于要生成等值线并填充,此方法会比较慢,如果只是关注中国区域可以先将GridData的范围缩小(用GridData类的extract方法),然后再生成shaded图层,脚本代码如下:
  1. #-----------------------------------------------------
  2. # Author: Yaqiang Wang
  3. # Date: 2013-10-29
  4. # Purpose: Read hdf4 data
  5. # Note: Sample
  6. #-----------------------------------------------------
  7. from org.meteoinfo.data.meteodata import MeteoDataInfo
  8. from org.meteoinfo.data.meteodata import Dimension
  9. from org.meteoinfo.data.meteodata import DimensionType
  10. from org.meteoinfo.data.meteodata import DrawMeteoData
  11. from org.meteoinfo.projection import ProjectionInfo
  12. from org.meteoinfo.legend import LegendManage
  13. from org.meteoinfo.legend import LegendType
  14. from org.meteoinfo.shape import ShapeTypes
  15. import os.path
  16. import jarray

  17. #Set data directory
  18. dataDir = 'D:/Temp/hdf/'

  19. #Create MeteoDataInfo object
  20. mdi = MeteoDataInfo()

  21. #Read hdf data file
  22. fn = dataDir + 'tend.HDF'
  23. if os.path.isfile(fn):
  24.         print fn
  25.         mdi.openNetCDFData(fn)
  26.         dataInfo = mdi.getDataInfo()
  27.         print mdi.getInfoText()
  28.         xmin = -180.0
  29.         ymin = -90.0
  30.         xnum = 360
  31.         ynum = 180
  32.         xdelt = 1.0
  33.         ydelt = 1.0
  34.         xlist = []
  35.         ylist = []
  36.         for i in range(0,xnum):
  37.                 xlist.append(xmin + xdelt * i)
  38.         for i in range(0,ynum):
  39.                 ylist.append(ymin + ydelt * i)

  40.         X = jarray.array(xlist, 'd')
  41.         Y = jarray.array(ylist, 'd')
  42.         xDim = Dimension(DimensionType.X)
  43.         xDim.setValues(X)
  44.         dataInfo.setXDimension(xDim)
  45.         yDim = Dimension(DimensionType.Y)
  46.         yDim.setValues(Y)
  47.         dataInfo.setYDimension(yDim)
  48.         var = dataInfo.getVariable('AOD_Mean_Tend')
  49.         dimList = [yDim, xDim]
  50.         var.setDimensions(dimList)
  51.         gData = mdi.getGridData(var.getName())
  52.         #gData = gData.multiply(0.01)
  53.         gData = gData.extract(70.0, 140.0, 15.0, 60.0)
  54.         aLS = LegendManage.createLegendSchemeFromGridData(gData, LegendType.GraduatedColor, ShapeTypes.Polygon)
  55.         #aLayer = DrawMeteoData.createRasterLayer(gData, "Test_HDF", aLS)
  56.         aLayer = DrawMeteoData.createShadedLayer(gData, aLS, 'Test_HDF_Shaded', 'AOD', True)
  57.         aLayer.setProjInfo(dataInfo.getProjectionInfo())
  58.         mf = miapp.getMapDocument().getActiveMapFrame()
  59.         mf.addLayer(aLayer)
  60.         mf.moveLayer(aLayer, 0)

  61. print 'Finished!'


运行结果:
Image00001.png

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

新浪微博达人勋

 楼主| 发表于 2014-3-10 22:39:48 | 显示全部楼层
顺便问下 这些帮助文档哪里有? java的?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-3-10 22:50:06 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-3-11 13:10:50 | 显示全部楼层
本帖最后由 小寶 于 2014-3-11 13:12 编辑
MeteoInfo 发表于 2014-3-10 22:50
1、MeteoInfo网站:http://www.meteothinker.com/
2、本论坛
3、博客:http://hi.baidu.com/meteoinfo
...

1Y@N1JK[T}HHSO`6HT]PXSD.jpg

图一是原来的,标注的值也都可以每0.2个点标记一次
ST%HDDHC9O6GYFIV135IF.jpg

图2 是用等直线,发现虽然趋势不错,但是标注不对粉红色过多没有梯度的变化
9~71(Z{%B%H_LR24(CCH7J5.jpg

图3 我是改后的值,之前改过好多,就不贴了,这张主要是想表示第一图东北的高值点0.8-0.1
等值线改过好多标注值,可是大多都不怎么变化 就是一片粉色值,不知道这是为什么?









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

新浪微博达人勋

发表于 2014-3-11 15:22:52 | 显示全部楼层
小寶 发表于 2014-3-11 13:10
图一是原来的,标注的值也都可以每0.2个点标记一次

栅格图层(RasterLayer)和矢量图层(VectorLayer)是不同的。DrawMeteoData.createRasterLayer方法生成的是栅格图层,原始的格点数据保存在栅格图层中,更改图例会起到作用。DrawMeteoData.createShadedLayer方法生成的是矢量图层,保存的是多边形(Polygon)的坐标和属性信息,可以修改图例但图元形状并不能随图例改变。也就是说对于矢量图层需要在等值线分析的时候就把图例设置好。你可以先利用之前生成的图层编辑好图例,将图例保存保存为图例文件(.lgs),然后可以在脚本中加载图例文件,然后在生成等值线填充图层。

从文件加载图例可以参照下面的语句:
aLS = LegendScheme(ShapeTypes.Polygon)
aLS.importFromXMLFile('D:\\Temp\\rain1.lgs')
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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