爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4289|回复: 4

[数据转换] vb调用Surfer作图时如何消除等值线中的负值

[复制链接]

新浪微博达人勋

发表于 2015-6-6 14:45:53 | 显示全部楼层 |阅读模式

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

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

x
各位,请问Vb调用Surfer作图时如何消除等值线中的负值?在Surfer作图时可以按程老师的《Surfer作图如何消除等值线中的负值》消除等值线中的负值,但VB调用Surfer画等值线中,如何消除等值线中的负值?我试着用SurferApp.GridMath Function:=" C=max(a,0)", InGrid:=App.Path & "\da.grd", VariableName:="A", BlankHandling:=blankoutput, OutGrid=App.Path & "\dc.grd"也不行不通,根本没把dc.grd生成出来。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-6-6 21:08:30 | 显示全部楼层
我也用VB调用过surfer,以我的经验,这种问题基本上没人好回答,大家谁和谁调用的目的和用途不一样,所以照着帮助文档找的代码也不一样,我的建议是在帮助文档里搜索相关的说明,自己一步一步尝试,maybe第一千零一次尝试之后...........天亮了!呵呵,祝您成功!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-6-7 11:17:54 | 显示全部楼层
不知道楼主用的什么版本,在12版中,GridMath 的语法是:
  1. object.GridMath( Function, InGridA, InGridB, OutGridC, OutFmt )
复制代码


GridMath2 的语法是:
  1. object.GridMath2( Function, InGrids, OutGrid, OutFmt )
复制代码


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

新浪微博达人勋

发表于 2015-6-7 12:27:56 | 显示全部楼层
  1. ' ================================
  2. ' 演示如何剔除负值,把负值区变成空白
  3. ' Scripter + Surfer 12
  4. ' Use on your own risk.
  5. ' ================================
  6. Option Explicit
  7. Sub Main
  8.         Dim SurferApp As Object
  9.         Dim objGrd As Object

  10.         Dim inGrd As String
  11.         Dim outGrd As String
  12.         Dim GrdNoNeg As String
  13.         Dim blkValue As Double

  14.         '初始化应用程序
  15.         Set SurferApp=CreateObject("Surfer.Application")
  16.         SurferApp.Visible=True

  17.         '为了演示,先制造一个有负值的网格文件。
  18.         inGrd=SurferApp.Path+"\Samples\demogrid.grd"
  19.         outGrd=SurferApp.Path+"\Samples\DemoNeg.grd"
  20.         SurferApp.GridMath(Function:="c=a-70",InGridA:=inGrd,OutGridC:=outGrd)

  21.         '了解网格文件用什么值作为白化值。
  22.         Set objGrd=SurferApp.NewGrid
  23.         objGrd.LoadFile(outGrd, True)
  24.         blkValue=objGrd.BlankValue

  25.         '先用含负值的网格画个图,看看原始状态。
  26.         Dim objPlotDoc As Object
  27.         Dim objMapFrame As Object
  28.         Set objPlotDoc=SurferApp.Documents.Add(srfDocPlot)
  29.         Set objMapFrame=objPlotDoc.Shapes.AddContourMap(inGrd)
  30.         objMapFrame.Top=objMapFrame.Top+8.0

  31.         '用白化的方式剔除负值。
  32.         Dim FuncStr As String
  33.         FuncStr="c=if(a<0," & blkValue & ",a)"
  34.         GrdNoNeg=SurferApp.Path+"\Samples\DemoNoNeg.grd"
  35.         SurferApp.GridMath(Function:=FuncStr,ingrida:=outGrd,outgridc:=GrdNoNeg)

  36.         '用结果网格再画个图,与原图对比。
  37.         Set objMapFrame=objPlotDoc.Shapes.AddContourMap(GrdNoNeg)
  38.         objMapFrame.Top=objMapFrame.Top-8.0
  39.         'SurferApp.Quit
  40. End Sub
复制代码
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2015-6-7 23:55:22 | 显示全部楼层
谢谢两位的回复,正如holz 所言,只要格式对就能正确运行
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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