电力18
  • 网站首页
  • 最新
  • 新闻 要闻 国内 电企 国外 电网 发电 深度 财经 评论
  • 管理 安全生产 经营管理 党建政工 人力资源 企业文化 社会责任 企业风采 管理创新 实践案例
  • 政策 公告通知 政策监管 电力法规 资料报告 访谈观点
  • 商务 商务 招标采购 项目 产品 企业 会展
  • 行业 电网 发电 可再生能源 风电 光伏 光热 氢能 储能 售电 核电 农电 规划设计建设 综合能源服务
  • 频道 能源互联网 电力科技 电动汽车 数字电网 全球能源互联网 增量配电 电力市场 特高压 电力数字化 电力自动化 电力通信 泛在电力物联网 节能环保 电力教育培训 电力技术论文 电力人物 电力文苑
  • 招聘
  • 热点 2020电企年中工作会 2020电力安全生产月 “十四五”电力规划 2020两会说电力 电力新基建 电企2020年工作会议 2019中央巡视电企 不忘初心、牢记使命主题教育 国务院要求降电价 电力央企审计整改
  • 热词
  • Tags
首页 > 专题 > 电力数字化 > 专题 > GIS > 正文

基于Geomedia Professional平台的GIS开发(三)

  2006-01-20 16:05:39    来源: 
A- A+
电力18讯:    c)       GetLegendEntry函数

Public Function GetLegendEntry(objRS As GRecordset) As RecordLegendEntry
'***********************************************************
    '功能描述:建立用来显示图形的图例
    '输入参数:
        'objRs:Grecordset 类型
    '输出:
        '返回一个recordLegendEntry
'****************************************************
    On Error GoTo errorhandler
    '建立由该函数返回的RecordLegendEntry
Set GetLegendEntry = CreateObject("GeoMedia.RecordLegendEntry")
'先由输入记录集的扩展属性集来得到用来显示地图的图形字段名,如果不能得到'就遍历States表中的每一个字段来得到图形字段名
    Dim objExt As Object
Set objExt = objRS.GetExtension("ExtendedPropertySet")
GetLegendEntry.GeometryFieldName=_
objExt.GetValue("PrimaryGeometryFieldName")
    If GetLegendEntry.GeometryFieldName = "" Then
        Dim objField As GField
        For Each objField In objRS.GFields
            If objField.Type = gdbSpatial Or objField.Type = gdbGraphic Then               GetLegendEntry.GeometryFieldName = objField.Name
                Exit For
            End If
        Next objField
        Set objField = Nothing
End If
    '将记录集的名称作为图例的标题
GetLegendEntry.Title = objExt.GetValue("Name")
'设置图例的显示格式。由于已知States实体类为面状实体,所以在此直接设置'RecordLegendEntry的显示格式。如果实体类型未知,则需要用'objExt.GetValue("GeometryType")来得到实体类型。
Dim objStyle As Object
Set objStyle = CreateObject("GeoMedia.AreaStyle")
objStyle.BoundaryOn = True
With objStyle.Boundary
    .StyleUnits = gmsStyleUnitsPaper
    .Mode = gmsLinearModeShowBackground
    .Color = RGB(0, 0, 0)
    .Width = 10
    .BackStyle = 0
End With
'返回通过CssTransformPipe将图形转换到MapView坐标系的记录集,并将此记
'录集作为图例的记录集
    Dim objCSSPipe As New CSSTransformPipe
    Set objCSSPipe.InputRecordset = objRS
    Set objCSSPipe.CoordSystemsMgr = frmMap.ocxMapView.CoordSystemsMgr
    objCSSPipe.InputGeometryFieldName = GetLegendEntry.GeometryFieldName
    objCSSPipe.OutputCSGUID= _
frmMap.ocxMapView.CoordSystemsMgr.CoordSystem.Guid
Set GetLegendEntry.Recordset = objCSSPipe.OutputRecordset
'将所用的对象设为Nothing,释放所占用的内存
    Set objExt = Nothing
    Set objCSSPipe = Nothing
    Exit Function
  errorhandler:
    MsgBox Err.Description, vbOKOnly + vbExclamation, "GetLegendEntry Error"
    On Error Resume Next
    Set objExt = Nothing
    Set objCSSPipe = Nothing
End Function

d)       DisplayTheLegendEntry过程
Public Sub DisplayTheLegendEntry(objLE As RecordLegendEntry)
'**********************************************************
'功能描述:显示地图
'输入参数:objLE-RecordLegendEntry类型
'**********************************************************
On Error GoTo errorhandler
    If Not (objLE Is Nothing) Then
        Dim objLegend As Legend
        Set objLegend = ocxMapView.Legend
        If objLE.ValidateSource Then
            ' ---------------------------------------------
            If objLegend.LegendEntries.Count = 0 Then
objLegend.LegendEntries.Append objLE
                objLE.LoadData
                frmMap.ocxMapView.Fit
            Else
                objLegend.LegendEntries.Append objLE, 1
                objLE.LoadData
            End If
'----------------------------------------------------------
frmMap.ocxMapView.Refresh True
        End If
        Set objLegend = Nothing
    End If
    Exit Sub
errorhandler:
    MsgBox Err.Description, vbOKOnly + vbExclamation, "DisplayTheLegendEntry Error"
    On Error Resume Next
    Set objLegend = Nothing
End Sub

    到此,显示一幅地图的过程就介绍完了,显示的地图如下图:


这里显示的地图是矢量图形,你可以对地图做你所需要的操作。比如说放大、缩小、漫游、鹰眼、图属互查、空间查询和分析、图形和属性数据的编辑等等。但是对地图的这些操作都离不开一个最基本的操作-鼠标操作。在Geomedia中是如何对地图响应鼠标事件的呢?你需要针对上面已介绍的实例做如下几步的扩展:

1)       在VB的Project->Components里选择如下的控件:

Intergraph Geomedia Event Control 5.0(事件响应控件)

将事件控件添加到frmMap窗体上,命名为ocxEventControl。

2)       将EventServer(作用是监听发生在MapView的鼠标和键盘操作,并且用事件控件来处理它们)和显示地图的MapView控件联系起来。为此你需要声明一个EventServer类型的对象,该对象的有效范围是整个frmMap窗体。

    具体操作如下:

a)       在VB的General添加如下代码:

Dim objEventServer As New EventServer

b)       在frmMap窗体的Form_Load事件(必须先于鼠标事件发生前)添加如下代码:

ocxEventControl.AddMapView ocxMapView.Dispatch, objEventServer

3)       现在你就可以在ocxEventControl的鼠标和键盘事件中添加代码来响应在MapView上执行的相应操作了。

5.结语

    Geomedia Professional这个GIS系统的二次开发平台代表着GIS技术的发展方向。其先进的数据库管理方式――图形和属性数据统一存储,先进的开发方式――组件式开发,使开发变得更加容易。它提供了大量的对象,灵活运用这些对象可以解决许多比较复杂的问题,开发出非常专业的GIS系统来。


在线投稿   投稿信箱:e@ep18.cn 请赐稿件
评论
用户名:匿名发表  
密码:  
验证码:

最新评论(0)

相关新闻:

    无相关信息
编辑推荐
热点排行
  • · GIS在深圳市三防指挥信息系统中的应用
  • · 呼伦贝尔正新110千伏 GIS站开展迎峰度夏反事故演习
  • · 申庄变二期工程GIS户外设备顺利安装到位
  • · 我国电力行业GIS应用状况分析
  • · 天水供电公司生产设备实现精细化管理
  • · 威海供电公司GIS系统深化应用提升供电服务质量见成效
  • · 绍兴电力:有序推进低压GIS沿布及营配贯通工作
  • · 合川供电强化电网GIS平台建设培训
  • · 中国西电获平圩电厂1100kV GIS产品供货合同
  • · 什么是GIS
推荐阅读

手机版 - 关于我们 - 投稿信箱 - 联系我们 - 友情链接©2018 电力18 版权所有    京ICP备13053787号-1    北京网维八方旗下网站