爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
楼主: MeteoInfo

MeteoInfo介绍

  [复制链接]

新浪微博达人勋

 楼主| 发表于 2012-10-1 22:32:30 | 显示全部楼层

格式是可以转换的,参考此帖:全球高精度海岸线数据的处理
http://bbs.06climate.com/forum.p ... 115&fromuid=106

重要的是数据必须是封闭的。不知道你要做多大范围的mask,如果范围大的话(比如全球的),没必要用精度这么高的数据,计算起来会很慢。MeteoInfo软件带的110m-land.shp就是很好的做海陆mask的数据。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-2 16:20:15 | 显示全部楼层
MeteoInfo 发表于 2012-10-1 22:32
格式是可以转换的,参考此帖:全球高精度海岸线数据的处理
http://bbs.06climate.com/forum.php?mod=vie ...

你好,我下载了数据以后发现一个问题,每组数据都是用nan 分隔开,有些是封闭的,有些则不是的,如果都是闭合的话,我自己完全可以用 Fortran来做,但一半是闭合的数据,而另一半则不是闭合的数据,而且其中还掺杂了国界线呢,所以请问楼主的具体思路是如何来处的呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-2 16:21:34 | 显示全部楼层
至于 meteoinfo 我的兴趣倒不是很大,只是想知道你的具体思路是如何处理coastline extractor 的数据的呢?拜托了,多谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-10-2 16:43:32 | 显示全部楼层
haobang008 发表于 2012-10-2 16:21
至于 meteoinfo 我的兴趣倒不是很大,只是想知道你的具体思路是如何处理coastline extractor 的数据的呢?拜 ...

相关的帖子已经说得很清楚了,如果不愿意尝试,也无可奈何。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-2 16:55:29 | 显示全部楼层
MeteoInfo 发表于 2012-10-2 16:43
相关的帖子已经说得很清楚了,如果不愿意尝试,也无可奈何。

我只是想知道你的具体思路,而不是说MeteoInfo 的问题,就是你的思路是如何做的,如何将不是闭合的图形设置的呢?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-2 16:56:12 | 显示全部楼层
你的算法是如何的啊,其实无论 Meteoinfo还是Fortran,本质上不都是一样的吗?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-10-3 09:15:39 | 显示全部楼层
haobang008 发表于 2012-10-2 16:56
你的算法是如何的啊,其实无论 Meteoinfo还是Fortran,本质上不都是一样的吗?

算法其实就是判断一个点是否在多边形内,可以用射线法判断,具体你可以google一下,应该有很多相关的代码。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2012-10-3 09:44:19 | 显示全部楼层
嗯,这才说道点子上,我现在纠结的是我要处理的点并不是闭合的图形,我把具体的数据粘到下面,你可以看下:文件中每一组数据用nan 隔开,但是至于为什么隔开,可能是为了画图方便吧,每组nan 隔开的书不会组成一个闭合的图形,那我应该怎么处理了?(数据参见附加呢)

data_1_bad.dat

7.01 MB, 下载次数: 1, 下载积分: 金钱 -5

coastline extractor 下载

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

新浪微博达人勋

发表于 2012-10-3 09:44:44 | 显示全部楼层
MeteoInfo 发表于 2012-10-3 09:15
算法其实就是判断一个点是否在多边形内,可以用射线法判断,具体你可以google一下,应该有很多相关的代码 ...

这次真心麻烦你了,呵呵
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2012-10-3 14:15:22 | 显示全部楼层
haobang008 发表于 2012-10-3 09:44
这次真心麻烦你了,呵呵

写了一个脚本将你提供的coastline数据生成一个线图层,基本可以肯定coastline数据不适合做mask,线条很零碎(见下图中的彩色线,每条零碎的线用不同颜色显示),想要形成封闭的区域几乎不可能。不知道你为什么这么执着要用coastline数据?我之前说过,MeteoInfo带的110m-land.shp很适合做海陆mask,你如果愿意的话可以试试。
Image00923.png
Image00922.png

具体代码:
  1. #--------------------------------------------------------        
  2. # Author: Yaqiang Wang                                          
  3. # Date: 2012-10-3                                                
  4. # Purpose: Read and plot coastline data  
  5. # Note: Sample                                                   
  6. #-----------------------------------------------------------  
  7. #---- Import clr and classes
  8. import clr
  9. clr.AddReferenceByPartialName("System")
  10. clr.AddReferenceByPartialName("System.Drawing")
  11. from System import *
  12. from System.Drawing import *
  13. from System.Collections.Generic import *
  14. clr.AddReference("MeteoInfoC.dll")
  15. from MeteoInfoC import *
  16. from MeteoInfoC.Data.MapData import *
  17. from MeteoInfoC.Geoprocess import *
  18. from MeteoInfoC.Layer import *
  19. from MeteoInfoC.Shape import *
  20. from MeteoInfoC.Legend import *
  21. from MeteoInfoC.Drawing import *
  22. import os.path

  23. #---- Create a line layer
  24. print 'Create polyline layer...'
  25. lLayer = VectorLayer(ShapeTypes.Polyline)
  26. lLayer.LayerName = "Coast_Line"
  27. lLayer.Visible = True
  28. lLayer.EditAddField("ID", String)

  29. #---- Read data file
  30. print 'Read data file...'
  31. fn = "D:\\Temp\\ascii\\data_1_bad.dat"
  32. tf = open(fn)
  33. plist = List[PointD]()
  34. tf.readline()
  35. i = 0
  36. for aline in tf:
  37.         if aline.strip()[0:3] == 'nan':
  38.                 aPolyline = PolylineShape()
  39.                 aPolyline.Points = plist
  40.                 shapeNum = lLayer.ShapeNum
  41.                 if lLayer.EditInsertShape(aPolyline, shapeNum):
  42.                         lLayer.EditCellValue("ID", shapeNum, shapeNum)               
  43.                 plist = List[PointD]()
  44.                 print "Line %i" % (shapeNum)
  45.         else:
  46.                 datalist = aline.split()
  47.                 lat = float(datalist[1])
  48.                 lon = float(datalist[0])
  49.                 aPoint = PointD(lon, lat)
  50.                 plist.Add(aPoint)
  51.        
  52. lLayer.UpdateLegendScheme(LegendType.SingleSymbol, "ID")

  53. mipy.MapDocument.ActiveMapFrame.AddLayer(lLayer)   
  54. print 'Finished!'
复制代码



密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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