爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9621|回复: 12

MeteoInfo脚本示例:创建点图层并判断点是否在某区域内

[复制链接]

新浪微博达人勋

发表于 2012-9-22 15:48:18 | 显示全部楼层 |阅读模式

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

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

x
借用坛友的问题:如何判断点是否在某区域内?这里提供一个更完整的脚本程序来生成一个等间隔网格点图层,判断每个点是否在青藏高原内并在点图层中赋相应的属性('Y' or 'N'),输出内部的点的坐标,设置点图层的LegendScheme(区域内的点红色,外面的点绿色)。可以很直观的验证判断结果。

运行结果:
Image00917.png

Image00916.png

脚本代码:
  1. #---- Import clr and classes
  2. import clr
  3. clr.AddReferenceByPartialName("System")
  4. clr.AddReferenceByPartialName("System.Drawing")
  5. from System import *
  6. from System.Drawing import *
  7. clr.AddReference("MeteoInfoC.dll")
  8. from MeteoInfoC import *
  9. from MeteoInfoC.Data.MapData import *
  10. from MeteoInfoC.Geoprocess import *
  11. from MeteoInfoC.Layer import *
  12. from MeteoInfoC.Shape import *
  13. from MeteoInfoC.Legend import *

  14. #---- Open layer
  15. mapdir = "D:\\MyProgram\\CSharp\\MeteoInfoDev\\MeteoInfo\\bin\\Debug\\Map\"
  16. aFile = mapdir + "tibet_ASCII.wmp"
  17. aLayer = MapDataManage.OpenLayer(aFile)

  18. #---- Add layer
  19. mipy.MapDocument.ActiveMapFrame.AddLayer(aLayer)
  20. mipy.MapDocument.ActiveMapFrame.MoveLayer(aLayer.Handle, 0)

  21. #---- Create a grid point and determine grid points are in or out of Tibet
  22. nLayer = VectorLayer(ShapeTypes.Point)
  23. nLayer.LayerName = "New_Point_Layer"
  24. nLayer.Visible = True
  25. fieldName = "Inside"
  26. nLayer.EditAddField(fieldName, String)

  27. print 'The points inside Tibet are:'
  28. tibetArea = aLayer.ShapeList[0]
  29. sLon = 62.0
  30. sLat = 25.0
  31. delt = 1.0
  32. for i in range(0, 45):
  33.   lon = sLon + i * delt
  34.   for j in range(0, 24):
  35.     aPS = PointShape()   
  36.     lat = sLat + j * delt
  37.     aPoint = PointD(lon, lat)
  38.     aPS.Point = aPoint
  39.     shapeNum = nLayer.ShapeNum
  40.     print "Shape Number: %d" % (shapeNum)
  41.     nLayer.EditInsertShape(aPS, shapeNum)
  42.     if GeoComputation.PointInPolygon(tibetArea, aPoint):
  43.       nLayer.EditCellValue(fieldName, shapeNum, "Y")
  44.       print "Lon: %5.1f, Lat: %5.1f" % (lon, lat)
  45.     else:
  46.       nLayer.EditCellValue(fieldName, shapeNum, "N")

  47. aLS = nLayer.CreateLegendScheme(LegendType.UniqueValue, fieldName)
  48. aLS.LegendBreaks[0].DrawOutline = False
  49. aLS.LegendBreaks[0].Color = Color.Green
  50. aLS.LegendBreaks[1].DrawOutline = False
  51. aLS.LegendBreaks[1].Color = Color.Red
  52. nLayer.LegendScheme = aLS
  53. print "Layer Name: %s" % (nLayer.LayerName)
  54. mipy.MapDocument.ActiveMapFrame.AddLayer(nLayer)   
  55. print 'Finished!'
复制代码



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

新浪微博达人勋

发表于 2012-9-25 21:08:30 | 显示全部楼层
必须顶起来
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-9-26 08:13:14 | 显示全部楼层
楼主的脚本编辑器不错哦,能不能共享下?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-9-26 08:16:50 | 显示全部楼层
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-5 19:24:23 | 显示全部楼层
这个算法的核心思想是?求赐教
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-12-23 23:21:51 | 显示全部楼层
本帖最后由 流云飞袖 于 2012-12-24 10:14 编辑

很好,很强大
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-12-24 09:43:25 | 显示全部楼层
流云飞袖 发表于 2012-12-23 23:21
点文件的格式什么?

这个程序里的格点是程序里自动生成的,不存在格式问题。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-12-26 10:49:33 | 显示全部楼层
MeteoInfo 发表于 2012-9-26 08:16
最新版的MeteoInfo软件里就有呀,Tools -> Script 菜单。

王老师,自己的二次开发里面怎么运行脚本程序呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-12-26 10:52:07 | 显示全部楼层
清晨的雨 发表于 2014-12-26 10:49
王老师,自己的二次开发里面怎么运行脚本程序呢?

好像你用C#开发,查阅一下如何将IronPython嵌入到C#中的资料。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-5-5 20:23:52 | 显示全部楼层
楼主,我想问问怎么用MeteoInfo提取某一地区的边界数据啊?
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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