ArcGIS 分组层(GroupLayer)的子图层可见性的判断

问题:
用TocControl和MapControl做了一个测试,现有一个分组层展现在MapControl里,分组层里有个图层假设其为图层A,我将整个分组层的可见状态设为不可见(图层A的实际上也不可见了。)但使用 ILayer.Visible 获得图层A的可见状态时,竟然为True。这是不是因为在Toc控件里图层A仍旧是勾上的缘故?那怎么才能获得图层A的正确的可见状态?

分析:
提到的这个问题,严格来讲是一个bug。对于分组层的子图层,当分组层可见时,直接判断子图层可见性即可,但分组层不可见时,其子图层无论是否勾选均不可见。

解决方案:
根据分析的原理判断图层,VBA代码如下( 注意: 算法未考虑分组层嵌套分组层的场景,且假设图层名称无重复。
ContractedBlock.gif ExpandedBlockStart.gif Code
 1' 测试
 2ExpandedBlockStart.gifContractedBlock.gifSub Test()Sub Test()
 3    Dim mxDoc As IMxDocument
 4    Set mxDoc = ThisDocument
 5    
 6    Dim map As IMap
 7    Set map = mxDoc.FocusMap
 8    
 9    If mxDoc.SelectedLayer Is Nothing Then
10        MsgBox "无选中图层"
11    End If
12    
13    MsgBox GetVisible(map, mxDoc.SelectedLayer)
14End Sub

15
16' 获取图层可见性
17ExpandedBlockStart.gifContractedBlock.gifFunction GetVisible()Function GetVisible(map As IMap, layer As ILayer) As Boolean
18    For i = 0 To map.LayerCount - 1
19        '如果是一级图层,visible属性一定表示可见性
20        If map.layer(i).Name = layer.Name Then
21            GetVisible = map.layer(i).Visible
22        ElseIf TypeOf map.layer(i) Is ICompositeLayer Then
23        '如果是子图层,一级分组层不可见,其子同层一定不可见;一级分组层可见,可见性以该图层可见性为准
24            Dim cl As ICompositeLayer
25            Set cl = map.layer(i)
26            Dim j As Integer
27            For j = 0 To cl.Count - 1
28                If cl.layer(j).Name = layer.Name Then
29                    If map.layer(i).Visible Then
30                        GetVisible = layer.Visible
31                    Else
32                        GetVisible = False
33                    End If
34                    Exit Function
35                End If
36            Next j
37        End If
38    Next i
39    GetVisible = False
40End Function

41

转载于:https://www.cnblogs.com/yayima/archive/2009/09/20/1570333.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值