(2) 图层顺序操作
在前例基础上,添加四个CommandButton控件、一个ListBox控件。实现在列表中列举出已添加到地图控件中的图层,以便对图层顺序进行控制,通过双击列表中的图层,将该层移动到最上层,也可以通过另外四个按钮实现地图图层的位置顺序操作,并更新列表和刷新地图显示。
实现代码如下:
‘实现通过双击列表中的图层,将该层移动到最上层,并更新列表和刷新地图显示
Private Sub List1_DblClick()
Dim selectedIndex As Integer
selectedIndex = 0
Set layers = Map1.layers
For i = 0 To List1.ListCount - 1
If List1.Selected(i) Then
selectedIndex = i
End If
Next i
If selectedIndex = 0 Then
MsgBox “该层已处于最高层”
Else
‘ 双击列表中的图层,将该层移动到最上层
layers.MoveToTop (selectedIndex)
‘ 刷新地图显示
Map1.Refresh
‘ 更新List列表
showList
End If
End Sub
Sub showList()
List1.Clear
Set layers = Map1.layers
For i = 0 To layers.Count - 1
Set layer = layers.Item(i)
‘ 在列表中添加地图图层
List1.AddItem (layer.Name)
Next i
End Sub
‘ 点击Top按钮,实现所选图层移动到顶层。(Bottom按钮类似,代码略。)
Private Sub Top_Click()
Dim selectedIndex As Integer
selectedIndex = 0
Set layers = Map1.layers
For i = 0 To List1.ListCount - 1
If List1.Selected(i) Then
selectedIndex = i
End If
Next i
If selectedIndex = 0 Then
MsgBox “该层已处于最高层”
Else
layers. MoveToTop (selectedIndex)
‘layers. MoveToBottom (selectedIndex) ‘移动到最底层
Map1.Refresh
showList
End If
End Sub
‘ 点击Up按钮,实现所选图层向上移动一层。(Down按钮类似,代码略。)
Private Sub Up_Click()
Dim selectedIndex As Integer
selectedIndex = 0
Set layers = Map1.layers
For i = 0 To List1.ListCount - 1
If List1.Selected(i) Then
selectedIndex = i
End If
Next i
If selectedIndex = 0 Then
MsgBox “该层已处于最高层”
Else
layers.MoveTo selectedIndex, selectedIndex – 1
Map1.Refresh
showList
End If
End Sub
图4 实现地图图层位置控制
四、结语
MO是一个理想的GIS组件式二次开发控件,它优势在于占用的系统内存资源较小,且包含有比较丰富的属性、方法等,程序员可以直接调用这些接口来实现GIS的基本功能。本文基于对于GIS地图图层控制的重要性,利用MO在VB语言环境下进行了二次开发,实现对地图图层的载入、显示和图层控制等基本GIS功能。
参考文献
[1]刘光.地理信息系统二次开发教程(组件篇).北京:清华大学出版社,2003.
[2]薛伟.MapObjects:地理信息系统程序设计.北京:国防工业出版社,2004.
|