爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 7173|回复: 3

[源程序] 请教VB调用surfer8画图中底图叠加问题,谢谢

[复制链接]

新浪微博达人勋

发表于 2016-5-6 08:40:01 | 显示全部楼层 |阅读模式
1金钱
我用VB调用surfer8来画图,先是打开了一个srf文件,因为要用到这个文件当底图文件,里面有站点、水系之类的,然后数据网格,然后白化,然后等值线图,然后载入色标,然后全选,覆盖地图。
手动画图时这个步骤,编程也是这个步骤,但手动的时候,覆盖后,原先最开始打开的srf文件里面的底图会被等值线图覆盖,看不到原先里面的水系等信息,然后手动把等值线图拖到之前底图上。这步程序不清楚怎么实现,上网查到这个,但不是很懂,也没实现成功。请教懂的能告诉下,谢谢!

叠放次序。
在无法确定时,须全部选择取消,再选择其中一个为选定。再设置SetZOrder就可以
       object.SetZOrder(Zorder)
eg:         Selection.SetZOrder(Zorder:=srfZOToFront)
         Shapes("Map").Overlays("Wireframe").SetZOrder(srfZOToFront)



我的代码:
Dim srf        As New Surfer.Application
    Dim poltDoc    As Surfer.IPlotDocument
    Dim mapFrame   As Surfer.IMapFrame
    Dim mapContour As Surfer.IContourMap
    Dim ColorScale As Surfer.IDiscreteColorScale
    Dim mapBase    As Surfer.IBaseMap
    Dim shpText    As Surfer.IText
    Dim Axis       As Surfer.IAxis
    '打开文档
   ' Set poltDoc = srf.Documents.Add(srfDocPlot)
    Set poltDoc = srf.Documents.Open(App.Path & "\ditu.srf")   
    '网格化
    srf.GridData DataFile:=App.Path & "\日照.txt", xCol:=2, yCol:=3, zCol:=4, NumCols:=200, NumRows:=200, xMin:=109, xMax:=116, _
            yMin:=31, yMax:=36.5, showreport:=False, outgrid:=App.Path & "\out.grd"
    DoEvents
    '白化
    srf.GridBlank ingrid:=App.Path & "\out.grd", blankfile:=App.Path & "\hhrvalleyborder.bln", outgrid:=App.Path & "\out.grd"
    '等值线
    Set mapFrame = poltDoc.Shapes.AddContourMap(App.Path & "\out.grd")
    '轴线
    For Each Axis In mapFrame.Axes
        Axis.Visible = False
    Next
    '等值线属性设置
    Set mapContour = mapFrame.Overlays(1)
    With mapContour
        .FillContours = True
        .SmoothContours = srfConSmoothHigh
        .Levels.LoadFile App.Path & "\rz.lvl"
    End With
    '叠放
    poltDoc.Shapes.SelectAll
    poltDoc.Selection.OverlayMaps

最佳答案

查看完整内容

大概是这样。 如果更复杂的,就用 item、count、type 这三个属性(还可加上 name 属性)配合遍历 Overlays,可以对每个图层任意设置次序。譬如:
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-5-6 08:40:02 | 显示全部楼层
  1. set MapFrame = poltDoc.Selection.OverlayMaps
  2. MapFrame.Overlays("Contours").SetZOrder(srfZOToFront)


大概是这样。

如果更复杂的,就用 item、count、type 这三个属性(还可加上 name 属性)配合遍历 Overlays,可以对每个图层任意设置次序。譬如:

  1.         Dim MapFrame As Surfer.IMapFrame
  2.         Dim LayerShape As Object
  3.         Dim i As Integer

  4.         For i = 1 To MapFrame.Overlays.Count
  5.                 Set LayerShape = MapFrame.Overlays.Item(i)
  6.                 Select Case LayerShape.Type
  7.                         Case srfShapeContourMap
  8.                                 LayerShape.SetZOrder(srfZOToFront)
  9.                         Case srfShapeBaseMap
  10.                                 LayerShape.SetZOrder(srfZOToBack)
  11.                         Case srfShapePostmap
  12.                                 LayerShape.SetZOrder(srfZOForward)
  13.                         Case Else
  14.                                 'TODO:
  15.                 End Select
  16.         Next
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2016-5-6 16:02:58 | 显示全部楼层
holz 发表于 2016-5-6 09:22
大概是这样。

如果更复杂的,就用 item、count、type 这三个属性(还可加上 name 属性)配合遍历 Ov ...

非常感谢!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2018-5-29 09:00:36 | 显示全部楼层
谢谢,学习中
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

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

本版积分规则

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

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

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