爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5632|回复: 6

MeteoInfo脚本教程(五):标注

[复制链接]

新浪微博达人勋

发表于 2014-11-27 19:50:36 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 MeteoInfo 于 2014-11-29 23:45 编辑

MeteoInfo是一个GIS软件,矢量图层不仅有图形信息还有属性信息,这些属性信息可以很方便地标注在地图上,增加地图的可读性。气象上最常用的站点的标注,这里给出一个Demo脚本程序将中国省会城市名标注出来。正确运行此脚本需要下载最新的MeteoInfo Java 1.1.7R1版本,主要是为了Jython对中文的支持,详细信息见此贴:http://bbs.06climate.com/forum.php?mod=viewthread&tid=30872&extra=page%3D1

矢量图层(VectorLayer)有一个属性是LabelSet类,里面有各类标注的设置参数,主要设置要标注的属性字段、字体、颜色、偏移等信息。

为了在脚本编辑器中正确显示中文,需要将其字体设置为中文字体,通过脚本编辑器窗体的“Options -> Set Font”菜单可以设置字体。脚本程序如下:
  1. # coding=utf-8#-----------------------------------------------------
  2. # Author: Yaqiang Wang
  3. # Date: 2014-11-26
  4. # Purpose: Label the point 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 java.awt import Font
  15. from java.awt import GraphicsEnvironment
  16. from javax.swing import JFrame

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

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

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

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

  39. print 'Load city layer...'
  40. cityLayer = MapDataManage.loadLayer(os.path.join(mapDir, 'res1_4m.shp'))
  41. lb = cityLayer.getLegendScheme().getLegendBreaks().get(0)
  42. lb.setSize(6)
  43. lb.setColor(Color.red)
  44. labset = cityLayer.getLabelSet()
  45. labset.setFieldName('NAME')
  46. font = Font(u'楷体', Font.PLAIN, 16)
  47. labset.setLabelFont(font)
  48. labset.setYOffset(15)
  49. cityLayer.addLabels()
  50. mapFrame.addLayer(cityLayer)

  51. #---- Add title
  52. title = mapLayout.addText('MeteoInfo' + u'脚本示例', 350, 30, u'黑体', 16)

  53. #---- Zoom layout map
  54. print 'Zoom layout map...'
  55. mapLayout.getActiveLayoutMap().zoomToExtentLonLatEx(Extent(70, 140, 15, 55))

  56. #---- Set mapframe
  57. mapFrame.setGridXDelt(10)
  58. mapFrame.setGridYDelt(10)
  59. mapLayout.paintGraphics()

  60. frame = JFrame('MeteoInfo Script Sample', size = (800, 600))
  61. frame.add(mapLayout)
  62. frame.visible = True
  63. print 'Finished!'



运行结果如下:
Image00059.png


本帖被以下淘专辑推荐:

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

新浪微博达人勋

发表于 2014-11-28 18:46:24 | 显示全部楼层
继续跟,学习
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-24 17:52:32 | 显示全部楼层
王老师,我运行这个脚本显示“  File "<string>", line None  SyntaxError: Non-ASCII character in file '<iostream>', but no encoding declared; see http://www.python.org/peps/pep-0263.html for details”
我只改了路径,别的没动——MI版本1.2.8R9
不知道这是什么原因

test3.py

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

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

新浪微博达人勋

 楼主| 发表于 2015-10-24 23:56:23 | 显示全部楼层
当未来 发表于 2015-10-24 17:52
王老师,我运行这个脚本显示“  File "", line None  SyntaxError: Non-ASCII character in file '', but n ...

在Python程序里用到非ASCII字符时需要声明编码,所以下面这一行不能去掉。
# coding=utf-8
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-25 14:46:17 | 显示全部楼层
MeteoInfo 发表于 2015-10-24 23:56
在Python程序里用到非ASCII字符时需要声明编码,所以下面这一行不能去掉。
# coding=utf-8

好了,多谢王老师
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-10-28 10:37:50 | 显示全部楼层
感谢楼主分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-12-30 16:23:29 | 显示全部楼层
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

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

本版积分规则

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

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

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