爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 9207|回复: 15

[源程序] surfer脚本编程作图

[复制链接]

新浪微博达人勋

发表于 2020-5-15 15:15:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 liumiaomiao 于 2020-5-15 15:20 编辑

    有个问题请教大家,为啥我用脚本编程做的图和正常按照菜单一步步操作做出的图,不一样额,网格化方法和滤波方法都选的是克里格和九点平均滤波啊。是我的代码有问题吗,附上代码。一直找不到原因,请大侠出手啊!万分感谢!
'网格化数据
GridFile = BaseName + ".grd"     'yMax=bln文件中高程数据的最大值     SurferAutomap.GridData( DataFile:=path+file, xCol:=2, yCol:=6,zCol:=4,xDupTol:=10,yDupTol:=10,yMin:=800,yMax:=1260,Algorithm:=srfKriging,OutGrid:=path+GridFile)'网格化数据,网格范围根据读入数据的实际情况来定,分别为x,y方向的最小值最大值   
  '9节点平均值滤波,为什么滤波后图件与未自动化图件滤波后不一致?   
FilterFile = BaseName + "fil"+".grd"   
SurferAutomap.GridFilter(InGrid:=GridFile,Filter:=srfFilter9PixelAvg,OutGrid:= path+FilterFile)



360截图16171117104144125.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2020-5-17 19:14:40 来自手机 | 显示全部楼层
DupMethod: Surfer.SrfDupMethod.srfDupFirst
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-5-18 08:56:14 | 显示全部楼层
本帖最后由 liumiaomiao 于 2020-5-18 13:53 编辑
xyangtian 发表于 2020-5-17 19:14
DupMethod: Surfer.SrfDupMethod.srfDupFirst

你好,这个方法我在griddata()那里添加了。这个参数是啥意思了,不太明白。而且添加后,两种方法的成的图还是有区别


密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-5-18 14:27:35 | 显示全部楼层
本帖最后由 liumiaomiao 于 2020-5-18 17:21 编辑

改后的griddata语句
SurferAutomap.GridData( DataFile:=path+file, xCol:=2, yCol:=6,zCol:=4,DupMethod:= Surfer.SrfDupMethod.srfDupFirst,xDupTol:=10,yDupTol:=10,yMin:=800,yMax:=1260,Algorithm:=srfKriging,OutGrid:=path+GridFile),请问srfDupFirst这个参数是啥意思了,其实我是想设置spacing 这个参数,xDupTol:=10,yDupTol:=10,这个应该不是对应的语句,spacing设置为10,怎么用语句实现了。
111.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-5-18 20:44:40 | 显示全部楼层
liumiaomiao 发表于 2020-5-18 14:27
改后的griddata语句
SurferAutomap.GridData( DataFile:=path+file, xCol:=2, yCol:=6,zCol:=4,DupMethod: ...
  1.    NumCols: (maxidh - minidh) / Convert.ToInt32(NumCols.Text) + 1,      //x方向插值数据量

  2.                         NumRows: (0 - Convert.ToInt32(yMinBox.Text)) / Convert.ToInt32(NumRows.Text) + 1,        //y方向插值数据量
复制代码

直接设置插值数量:(最大值-最小值)/间距 +1
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-5-18 20:50:37 | 显示全部楼层
本帖最后由 xyangtian 于 2020-5-18 20:54 编辑
liumiaomiao 发表于 2020-5-18 08:56
你好,这个方法我在griddata()那里添加了。这个参数是啥意思了,不太明白。而且添加后,两种方法的成的图 ..

就是Z值的滤波方式吧,。
批注 2020-05-18 204853.jpg
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-5-19 12:00:35 | 显示全部楼层
本帖最后由 liumiaomiao 于 2020-5-19 16:55 编辑

重新检查了代码,原来是成图时选择滤波后的网格文件时没有加上路径,脚本找错网格文件了。改了后,对比发现脚本成图几乎和菜单成图一样的效果。

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-5-19 12:26:32 | 显示全部楼层
本帖最后由 liumiaomiao 于 2020-5-20 11:56 编辑

在griddata()中可以设置网格化的范围,我是想根据读入数据的实际情况来定网格范围,分别为x,y方向的最小值最大值,y方向我直接设置为固定值。但X方向总是提示这个错误“xMin must be < xMax”。代码如下,我把设置x方向范围的语句删了,运行正常了。好像不写就是按照默认的最小值和最大值设置的。
retValue = SurferAutomap.GridData3( DataFile:=path+file, xCol:=2,yCol:=6,zCol:=4,DupMethod:= srfDupFirst,xmin:=HorizontalMinValue,xmax:=HorizontalMaxValue,yMin:=800,yMax:=1260,Algorithm:=srfKriging,OutGrid:=path+GridFile,xsize:=10,ysize:=10)
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-5-20 17:05:12 | 显示全部楼层
本帖最后由 liumiaomiao 于 2020-5-20 17:31 编辑
xyangtian 发表于 2020-5-18 20:50
就是Z值的滤波方式吧,。

你好。请问你知道surfer 脚本里面有没有合并表格的命令了,就是把一个表格的内容追加到另外一个表格内容的后面的命令。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-5-21 16:10:28 | 显示全部楼层
本帖最后由 liumiaomiao 于 2020-5-22 17:22 编辑
liumiaomiao 发表于 2020-5-20 17:05
你好。请问你知道surfer 脚本里面有没有合并表格的命令了,就是把一个表格的内容追加到另外一个表格内容 ...

surfer里面合并表格的命令是object.Merge( FileName, Row, Col, Options, FileFormat )。但是这个语句需要每次指定一个文件名字,有什么办法一次性导入大量相同格式的文件呢。请走过路过的高手帮帮忙啊!


      
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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