MapObject学习笔记-第二讲 图层的基本功能开发
第二讲 图层的基本功能开发
一、图层的加载操作
1、利用其他控件动态加载图层文件
所用控件包括Map 控件,Drive、Dir、File列表控件,和一个命令按钮,实现可选择性的图层文件加载,基本代码如下:
Option Explicit
Dim dc As New DataConnection
Dim layer As New MapLayer
Private Sub Command1_Click()
Map1.Layers.Clear
dc.Database = File1.Path
If dc.Connect Then
layer.GeoDataset = dc.FindGeoDataset(File1.FileName)
Map1.Layers.Add layer
Map1.Refresh
Else
MsgBox "在指定文件夹下面没有找到相应图层数据文件!"
End If
End Sub
Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
2、同一文件夹下加载
如果你的程序和GIS图层文件(.shp、.shx和.dbf)在同一个文件夹下,设置好图层文件夹的路径,进行自动加载。示例如下:
Option Explicit
Dim dc As New DataConnection
Dim layer As MapLayer
Private Sub Command1_Click()
dc.Database = App.Path
dc.Database = "指定文件夹路径"
If dc.Connect Then
Set layer = New MapLayer
layer.GeoDataset = dc.FindGeoDataset(文件名1)
Map1.Layers.Add layer
Set layer = New MapLayer
layer.GeoDataset = dc.FindGeoDataset(文件名2)
Map1.Layers.Add layer
Map1.Refresh
Else
MsgBox "在指定文件夹下面没有找到相应图层数据文件!"
End If
End Sub
试验在调试过程中替换代码“Dim layer As New MapLayer”,观察程序运行结果。
3、在不同文件夹下加载
由于在实际的应用程序中,图层文件和程序文件都很多,为了方便管理,一般程序文件和图层文件不在一个文件夹下,通常采用一个文件夹单独存放图层文件,而把各个程序文件和它并列放置。
例如应用程序的文件夹路径为“F:\MO实验”,程序在“F:\MO实验\程序加载”下,图层文件放在“F:\MO实验\WORLD”文件夹下,这时要用+”\..\”返回上级文件夹,示例代码为:
Option Explicit
Dim dc As New DataConnection
Dim layer As New MapLayer
Private Sub Command1_Click()
dc.Database = App.Path + "\..\" + "world"
'dc.Database = "指定文件夹路径"
If dc.Connect Then
layer.GeoDataset = dc.FindGeoDataset("country")
Map1.Layers.Add layer
layer.GeoDataset = dc.FindGeoDataset("cities")
Map1.Layers.Add layer
Map1.Refresh
Else
MsgBox "在指定文件夹下面没有找到相应图层数据文件!"
End If
End Sub
4、图层的卸载和移动
用语句:Map1. Layers.Remove 0
可以把第0层卸载,注意:卸载了一个图层后,其他图层的序号就发生了变化。
用语句:Map1. Layers. Clear
可以一次卸载所有的图层。
可以用MoveTo方法来把图层从位置1移动到位置2,如原来图层在第2层,用以下语句可以把它移动到第0层:Map1. Layers. MoveTo 2,0。
5、图层的选择和隐藏
用图层的索引号:Set Layer = Map1.Layers(0)或图层名称Set Layer = Map1.Layers("country")来选择当前层。
用语句:layer.visible = false来隐藏当前层。另外,可以通过设置Map1.visible来隐藏或显示整个Map控件。
综合示例代码如下:
Option Explicit
Dim dc As New DataConnection
Dim layer As MapLayer
Private Sub layerset() '图层设置模块'
dc.Database = "F:\MO实验\WORLD"
If dc.Connect Then
Set layer = New MapLayer
Set layer.GeoDataset = dc.FindGeoDataset("country")
Map1.Layers.Add layer
Set layer = New MapLayer
Set layer.GeoDataset = dc.FindGeoDataset("cities")
Map1.Layers.Add layer
Else
MsgBox "在指定文件夹下没有找到相应的文件"
End If
End Sub
Private Sub Command1_Click()
layerset
Map1.Refresh
End Sub
Private Sub Command2_Click()
Map1.Layers.Clear
End Sub
Private Sub Command3_Click()
On Error GoTo err1
Set layer = Map1.Layers(0)
layer.Visible = False
Map1.Refresh
Exit Sub
err1:
MsgBox "没有图层"
End Sub
Private Sub Command4_Click()
On Error GoTo err1
Set layer = Map1.Layers(0)
layer.Visible = True
Map1.Refresh
Exit Sub
err1:
MsgBox "没有图层"
End Sub
Private Sub Command5_Click()
Map1.Visible = False
End Sub
Private Sub Command6_Click()
Map1.Visible = True
End Sub
二、图层的基本属性设置
面状图层基本属性包括图层颜色、区域界线的宽度、区域界线样式、区域界线颜色等;线状图层的属性包括线宽度、线样式、线颜色等;点状图层属性包括点大小、点样式、点颜色等,另外还有属性的标注等。
1、设置图层颜色
调试前面的程序你会发现图层的颜色是随机出现的,通过设置Symbol对象的Color属性,可以很容易的设置固定的图层颜色。语法结构为:object.Color [= color],具体为layer.Symbol.Color = moGreen,其中moGreen是MO的内设常数,也可以使用VB的颜色设置和RGB的颜色设置,具体方法为:layer.Symbol.Color RGB(255,255,113),layer.Symbol.Color=QBColor(12)。
2、设置区域属性
当图层为面状图层时,用layer.Symbol.Size 设置区域界线的宽度,= 1为较细的线型,=2为较粗的线型。还可以用layer.Symbol.OutlineColor = moGreen来设置区域界线的颜色,用layer.Symbol.Style = 7设置填充方式。
3、设置线属性
当图层为线状图层时,用layer.Symbol.Size 设置线的宽度,layer.Symbol.Color设置线的颜色,用layer.Symbol.Style设置线的样式。
4、设置点属性
当图层为点状图层时,用layer.Symbol.Size 设置点的大小,一般用3-6,3是较小的点,6是较大的点。还可以用layer.Symbol.Color设置点的颜色,用layer.Symbol.Style设置点的样式。
具体点线面的各个属性参数值见帮助文件。综合示例代码:
Option Explicit
Dim dc As New DataConnection
Dim layer As MapLayer
Private Sub Command1_Click()
dc.Database = "F:\MO实验\WORLD"
Set layer = New MapLayer
layer.GeoDataset = dc.FindGeoDataset("country")
layer.Symbol.Color = QBColor(9)
layer.Symbol.Size = 1
layer.Symbol.OutlineColor = moGreen
layer.Symbol.Style = 7
Map1.Layers.Add layer
Set layer = New MapLayer
layer.GeoDataset = dc.FindGeoDataset("rivers")
layer.Symbol.Color = moRed
layer.Symbol.Size = 2
layer.Symbol.Style = 4
Map1.Layers.Add layer
Set layer = New MapLayer
layer.GeoDataset = dc.FindGeoDataset("cities")
layer.Symbol.Color = moBlack
layer.Symbol.Size = 3
layer.Symbol.Style = 2
Map1.Layers.Add layer
Map1.Refresh
End Sub
至此,我们已经学了和图层操作有关的几个对象和控件:Map控件,DataConnection对象,Layers集合对象,MapLayer对象,以及和设置地图图层属性的Symbol对象。DataConnection对象包括的属性和函数有Database属性,Connect和FindGeoDataset函数;MapLayer对象的GeoDataset属性;Layers集合对象包含所有对应控件上的向量图层(MapLayer)和栅格图像图层(Image Layer)对象,用到的成员函数有Add和Clear;Map控件的Extent属性,Fullextent属性,MousePointe鼠标指针变量,Refresh成员函数;Symbol对象的Color属性,OutlineColor属性,Size属性,Style属性。