爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6452|回复: 6

MeteoInfo脚本教程(四):加载地图图层

[复制链接]

新浪微博达人勋

发表于 2014-11-25 21:04:04 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2014-11-25 21:54 编辑

加载地图图层要用到MeteoInfo库中的MapDataManage类,该类位于org.meteoinfo.data.mapdata包中。类中的方法可以分为两类:静态方法和非静态方法。要使用某个类中的非静态方法,首先要创建该类的对象,然后再利用该对象去引用非静态方法。而静态方法的使用较为简单,无需创建类的对象,直接用类名去引用静态方法。下面举个简单的例子:
    MapLayout类的getActiveMapFrame方法是非静态方法,因此必须先创建MapLayout的对象然后再使用该方法:
        mapLayout = MapLayout()
        mapFrame = mapLayout.getActiveFrame()   
    MapDataManage类中的loadLayer方法是静态方法,调用的时候无需创建MapDataManage对象:
        layer = MapDataManage.loadLayer(layerFileName)

MapDataManage类中的静态方法loadLayer是用来加载地图图层的,只有一个参数即文件路径,可以加载shape文件和MeteoInfo支持的一个图像格式。MeteoInfo中的图层分为三类:矢量图层(VectorLayer)、栅格图层(RasterLayer)和图像图层ImageLayer。其中矢量图层根据图元类型又可以大致分为点(Point)、线(Polyline)、面(Polygon)三类。

从地图数据文件中加载了图层之后需要加到MapLayout(是地图图形绘制的面板)中,创建MapLayout对象的时候后自动添加一个MapFrame对象用于管理和绘制图层(实际上是MapFrame中的MapView来具体负责),一个MapLayout对象中至少要有一个MapFrame,也可以有多个MapFrame,比如加入南海脚图的话需要两个MapFrame,但活动的MapFrame有且只有一个,可以通过MapLayout类中的getActiveMapFrame方法来获取。MapFarme的addLayer方法可以将之前加载的图层加入。

下面是一个实际的脚本示例程序,演示加载一个图像图层、一个面图层、一个线图层和一个点图层,并将它们加入到MapFame中绘制出来的例子:
  1. #-----------------------------------------------------
  2. # Author: Yaqiang Wang
  3. # Date: 2014-11-25
  4. # Purpose: Load layer
  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.global import Extent
  12. import os.path
  13. from java.awt import Color
  14. from javax.swing import JFrame

  15. #---- Set directories
  16. print 'Set directories...'
  17. baseDir = 'D:/MyProgram/Distribution/java/MeteoInfo/MeteoInfo'
  18. mapDir = os.path.join(baseDir, 'map')

  19. #---- Create MapLayout object
  20. mapLayout = MapLayout()
  21. mapFrame = mapLayout.getActiveMapFrame()

  22. #---- Load layers
  23. print 'Load image layer...'
  24. fn = os.path.join(mapDir, 'GLOBALeb3colshade.jpg')
  25. imageLayer = MapDataManage.loadLayer(fn)
  26. mapFrame.addLayer(imageLayer)

  27. print 'Load country layer...'
  28. fn = os.path.join(mapDir, 'country1.shp')
  29. countryLayer = MapDataManage.loadLayer(fn)
  30. lb = countryLayer.getLegendScheme().getLegendBreaks().get(0)
  31. lb.setDrawFill(False)
  32. lb.setOutlineColor(Color.black)
  33. mapFrame.addLayer(countryLayer)

  34. print 'Load river layer...'
  35. fn = os.path.join(mapDir, 'rivers.shp')
  36. riverLayer = MapDataManage.loadLayer(fn)
  37. lb = riverLayer.getLegendScheme().getLegendBreaks().get(0)
  38. lb.setColor(Color.blue)
  39. lb.setSize(1.5)
  40. mapFrame.addLayer(riverLayer)

  41. print 'Load city layer...'
  42. cityLayer = MapDataManage.loadLayer(os.path.join(mapDir, 'res1_4m.shp'))
  43. lb = cityLayer.getLegendScheme().getLegendBreaks().get(0)
  44. lb.setSize(6)
  45. lb.setColor(Color.red)
  46. mapFrame.addLayer(cityLayer)

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

  49. #---- Zoom layout map
  50. print 'Zoom layout map...'
  51. mapLayout.getActiveLayoutMap().zoomToExtentLonLatEx(Extent(70, 140, 15, 55))

  52. #---- Set mapframe
  53. mapFrame.setGridXDelt(10)
  54. mapFrame.setGridYDelt(10)
  55. mapLayout.paintGraphics()

  56. frame = JFrame('MeteoInfo Script Sample', size = (800, 600))
  57. frame.add(mapLayout)
  58. frame.visible = True
  59. print 'Finished!'


脚本运行结果如下:
Image00056.png



本帖被以下淘专辑推荐:

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

新浪微博达人勋

发表于 2014-11-26 08:52:51 | 显示全部楼层
heh
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2014-12-10 19:58:54 | 显示全部楼层
写得很详细
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-12-15 15:50:08 | 显示全部楼层
下载试试  谢谢楼主
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-12-26 10:01:56 | 显示全部楼层
谢谢王老师
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-8-18 15:06:39 | 显示全部楼层
谢谢老师!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-8-21 16:37:25 | 显示全部楼层
谢谢分享
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

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

本版积分规则

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

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

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