VB6+Mo属性查询与空间查询
导入Map Objects组件,并在窗体中添加Map控件(主地图名为Map1)。
- 界面与效果预览
- 将用户鼠标点击所落入的多边形区域和相邻区域高亮显示(空间查询)
2.查询所有要素类的总面积( 属性查询)
- 实现代码
- 将用户鼠标点击所落入的多边形区域和相邻区域高亮显示(空间查询)
'所有变量必须先声明,才能使用
Option Explicit
Dim recset1 As MapObjects2.Recordset '源要素集
Dim recset2 As MapObjects2.Recordset '临近要素集
'在地图绘制前,将Map1地图中第一个图层颜色设置为淡黄色
Private Sub Form_Load()
Map1.Layers(0).Symbol.color = moPaleYellow
End Sub
'定义一个地图选择集绘制的方法
Sub DrawSelection(recs As MapObjects2.Recordset, color)
'设置绘制图层的符号信息
Dim sym As New MapObjects2.Symbol
sym.SymbolType = moFillSymbol'设定符号类型为面状填充符号类型
sym.Style = moSolidFill
sym.color = color
'如果记录集不为空,以特定符号高亮显示
If Not recs Is Nothing Then
Map1.DrawShape recs, sym
End If
End Sub
'调用地图选择集绘制的方法再地图中进行渲染
Private Sub Map1_AfterLayerDraw(ByVal index As Integer, ByVal canceled As Boolean, ByVal hDC As stdole.OLE_HANDLE)
Call DrawSelection(recset2, moDarkGreen)
Call DrawSelection(recset1, moMagenta)
'将选择集设置为空,避免影响下一次的空间查询
Set recset1 = Nothing
Set recset2 = Nothing
End Sub
Private Sub Map1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim pt As MapObjects2.Point
Set pt = Map1.ToMapPoint(X, Y) '将用户点击的控件坐标转换为地图坐标
'找出输入点所在的区域
Set recset1 = Map1.Layers(0).SearchShape(pt, moPointInPolygon, "")
'找出与本区域相邻的其它区域
Set recset2 = Map1.Layers(0).SearchShape(recset1, moCommonPoint, "")
Map1.Refresh
End Sub
2.查询所有要素类的总面积( 属性查询)
'按钮点击查询事件
Private Sub Command1_Click()
'变量定义
Dim i As Integer
Dim myarea, sumarea As Double
sumarea = 0
Dim myrcs As MapObjects2.Recordset
Set myrcs = Map1.Layers(0).Records
'如果Map1的第一个图层记录集可以被编辑
If Map1.Layers(0).Records.Updatable Then
'遍历记录集中的每一条即可
For i = 0 To myrcs.Count - 1
'通过要素的shape字段,获取要素的面积
myarea = myrcs.Fields("shape").Value.Area
'移动游标
myrcs.MoveNext
'将单个要素面积加入到总面积中
sumarea = sumarea + myarea
Next i
End If
'强提醒,显示面积信息
MsgBox "该要素类的总面积为:" & sumarea
End Sub