欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap 谈天说地
   您现在位于: 首页技术专栏SuperMap应用与开发SO开发 → 正文
属性跟踪
07-10-25 10:05:10 作者:未知 出处:超图

功能简介:

    该范例是用来跟踪显示目标的一个属性,从下拉列表选择图层,然后通过鼠标的移动可以随时改变跟踪的对象.自动跟踪是通过类模块实现的.此功能模块是专门用来实现属性跟踪功能的,各属性、方法要配合使用才能正常工作.其中,DoSearch()和ShowTipText()为内部私有,使用者不要进行任何的调用操作

数据来源:..\Data\World目录下的World.sdb和World.sdd两个文件

    所用SuperMap Objects 组件、对象的主要属性和方法:

控 件 及 对 象 属  性 方  法
SuperWorkspace   OpenDatasource,Close
SuperMap  Layers Connect,DisConnect
soDatasetVector   QueryEx,QueryByDistance

功能实现:

  • 类模块:
    类模块名是clsMapTip,磁盘文件名是MapTip.cls.包括一个函数和五个过程
    Tracking    变量决定是否进行即时属性跟踪;
    DoSearch()    查询鼠标所在位置对象的属性;
    Initialize()    初始化类模块里的成员变量;
    MouseMove()    在SuperMap的MouseMove()里调用此过程,确定鼠标位置;
    SetLayer()    设置当前图层;
    ShowTipText()    显示目标的属性;
    Timer()    控制是否显示属性,即看鼠标是否还在移动。

 

  • 桌面代码:

 过程Combo1_Click()用来加入图层名,跟踪时通过查询出鼠标所在处对象的属性,再通过类clsMapTip在地图上显示一个picture控件(其中m_label.Caption = text.m_label为类clsMapTip的一个成员变量)来达到跟踪的目的.

  • 选择跟踪图层示意:

  • 选择属性示意:

  • 跟踪显示属性示意:

    把下面的代码加到SuperMap的MouseMove事件中就能实现这一功能。不过它是缩写本,没有加很多错误判断语句,必须有一个置于SuperMap控件之上的含有一个Label控件的PictureBox控件,设置它们的AutoSize为True。

Dim objRecordset As soRecordset               '设置记录接受变量
Dim objGeoPoint As New soGeoPoint            
'设置查询点变量 
Dim objDt As soDatasetVector                 
'设置被查询的数据集变量  
objGeoPoint.x = SuperMap.PixelToMapX(m_form.ScaleX(m_x, vbTwips, vbPixels))
'转换X坐标 
objGeoPoint.y = SuperMap.PixelToMapY(m_form.ScaleY(m_y, vbTwips, vbPixels))
'转换Y坐标
Set objDt = SuperMap.Layers("World@world").Dataset      
' 获取查询数据集
If objDt.Type = scdRegion Then                          
'面状数据集的查询方法
    Set objRecordset = objDt.QueryEx(objGeoPoint, scsPointInPolygon, "")
ElseIf (objDt.Type = scdPoint) Or (objDt.Type = scdLine) Then 
'点、线数据集的查询方法
    Dim randia As Double                          
'定义查询半径
    Dim Rect As soRect                           
  '定义视图矩形框
    Set Rect = SuperMap.ViewBounds
    If Rect.Height / Rect.Width > 1 Then
        randia = Rect.Height / 1000
    Else
        randia = Rect.Width / 1000
    End If
    Set objRecordset = objDt.QueryByDistance(objGeoPoint, randia, "")  
End If

'显示目标属性

Label.Caption = objRecordset.GetFieldValue("SmID")  '取出相应字段的属性值
Label.Left = 50                                   
  '定位Label控件
Llabel.Top = 0
Picture.Left = m_map.Left + m_x                    
'定位PictureBox控件     
Picture.Top = m_map.Top + m_y + 290
Picture.Width = m_label.Width + 100
Picture.Height = 250


(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  

    关于我们 友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.

                   滇ICP备05006901号