VB6+Mo属性查询与空间查询

3 篇文章 2 订阅

VB6+Mo属性查询与空间查询

导入Map Objects组件,并在窗体中添加Map控件(主地图名为Map1)。

  • 界面与效果预览
  1. 将用户鼠标点击所落入的多边形区域和相邻区域高亮显示(空间查询)

2.查询所有要素类的总面积( 属性查询)

  • 实现代码
  1. 将用户鼠标点击所落入的多边形区域和相邻区域高亮显示(空间查询)
'所有变量必须先声明,才能使用
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值