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

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

  2006-01-20 16:00:31    来源: 
A- A+
电力18讯:    3.几种开发方式

    Geomedia提供了三种开发方式供用户选择。

1)       驱动Geomedia开发

这种开发方式是创建一个应用程序来驱动或运行Geomedia应用程序,这有点类似于VB驱动Excel。使用这种开发方式可以自己对Geomedia Professional这个产品进行定制,例如:你可以去掉不需要的菜单,保留所需要的菜单,添加自己开发的菜单,控制工作流程等。通过这种方式,你可以将Geomedia Professional定制成自己的应用程序。

2)       命令式开发

这种开发方式直接使用Geomedia Professional的应用程序框架,然后通过添加命令来扩展Geomedia的功能。

以VB为例,在VB的AddIns->AddIn Manager里选择调用Geomedia Command Winzard。利用Geomedia Command Winzard可以帮助你一步步地建立命令。该命令包括一个DLL文件和一个INI文件,然后你需要运行在Geomedia Professional/Program目录下的InstallUsrCmd命令来注册所生成的命令。步骤如下:

a)       转到所生成命令所在的目录,然后执行“InstallUsrCmd CommandName.DLL CommandName.INI”,其中CommandName.Dll和CommandName.Ini是你所生成的DLL和INI文件。

b)       进入Geomedia Professional,在Tools->Customize的Menus或Toolbars的Custom找到刚注册的命令,把命令分别放到菜单或工具条的适当的位置,这个命令就会象其它的菜单或工具条一样工作在Geomedia里了。

3)       组件式开发

使用Geomedia对象创建应用程序。这种开发方式是当今GIS开发的主流,容易上手,且开发周期短。由于驱动Geomedia开发和命令式开发不是很常用,所以我们这里将重点介绍的是组件开发方式。

4.组件式开发实例

下面以VB开发工具为例告诉读者如何用组件开发的自定义开发方式显示一幅美国地图(使用的GIS开发平台是Geomedia Professional 5.0,使用的数据库为Geomedia Professional自带的数据库USSampleData.mdb数据库。用到的存储美国国家地图的表是States表。存储空间图形的字段是States表中的类型为BLOB的Geometry字段)。

1)       在VB的Project->References里选择如下的类型库:

Intergraph Geomedia Basic Utilities 5.0
Intergraph Geomedia Client Support 5.0
Intergraph Geomedia Coordinate Systems 5.0
Intergraph Geomedia Database Pipes 5.0
Intergraph Geomedia Services 5.0
Intergraph GDO 1.0
Intergraph Geomedia MapViewing 5.0
Intergraph Geomedia Services Constants 5.0
Intergraph Geomedia Client Commands 5.0
Intergraph Geomedia Geometry Pipes 5.0

在VB的Project->Components里选择如下的控件:
Intergraph Geomedia Mapview Control 5.0(地图视图控件)
Intergraph Geomedia NorthArrow Control 5.0(指北针控件)
Intergraph Geomedia ScaleBar Control 5.0(比例尺控件)

该例子使用一个Form窗体命名为frmMap,在窗体上添加地图视图控件(ocxMapView),指北针控件(GMNorthArrow1)和比例尺控件(GMScaleBar1)。

2)       首先定义一个Connection类型的全局对象gobjConnection,用来进行数据库连接。

Global gobjConnection as new Pclient.Connection

在frmMap窗体的Load事件添加如下代码:

Private Sub Form_Load()

'设置地图窗口的坐标系为缺省的坐标系
    Set ocxMapView.CoordSystemsMgr = New CoordSystemsMgr

'设置地图窗口的图例
Set ocxMapView.Legend = CreateObject("GeoMedia.Legend")
    ocxMapView.Legend.Visible = True

'将指北针和地图窗口联系起来并设置指北针在地图窗口的位置
    Set GMNorthArrow1.MapViewID =  ocxMapView.Dispatch
    GMNorthArrow1.Top = 0
    GMNorthArrow1.Left = Me.ScaleWidth - GMNorthArrow1.Width

'将比例尺和地图窗口联系起来并设置比例尺在地图窗口的位置
Set GMScaleBar1.MapViewID = ocxMapView.Dispatch
   GMScaleBar1.Top = Me.ScaleHeight -  GMScaleBar1.Height
   GMScaleBar1.Left = 0#

'下面这些代码将显示一幅美国地图
    On Error GoTo errorhandler
    Dim objRS As Grecordset
CreateConnection
    CreateRecordset objRS
    If Not (objRS Is Nothing) Then
      MousePointer = vbHourglass
      Dim objLE As RecordLegendEntry
      Set objLE = GetLegendEntry(objRS)
DisplayTheLegendEntry objLE
  MousePointer=gmmvctNWArrow  '设置鼠标为选择箭头

End If
  Exit Sub
errorhandler:
    MsgBox Err.Description, vbOKOnly + vbExclamation, "DisplayFeature Error"
End Sub

最后,在frmMap的Unload事件添加如下代码,释放gobjConnection全局对象所占用的内存。

Private Sub Form_Unload(Cancel As Integer)
    If Not (gobjConnection Is Nothing) Then
        Set gobjConnection = Nothing
    End If
End Sub

在上面的Form_Load代码里用到了四个自定义函数CreateConnection,CreateRecordset,GetLegendEntry和DisplayTheLegendEntry。下面将针 对这四个函数分别进行介绍:

a)       CreateConnection过程
在Geomedia里连接数据库有两种方法,一是用Gdatabase的OpenDatabase方法,另一个是用Connection对象的Connect方法。下面这个过程就是用Connection对象的Connect方法连接Access数据库的,也可用这两个方法连接其他数据库。

过程代码如下:

Public Sub CreateConnection()
'*********************************************************
  '功能描述:建立与数据库的连接,所建立连接是只读的Access数据库连接
'**********************************************************
On Error GoTo errorhandler
With gobjConnection
        .Type = "Access.GDatabase"
        .Location = "C:/Warehouses/USSampleData.mdb"
        .Mode = gmcModeReadOnly
        .Connect
End With

Exit Sub
errorhandler:

MsgBox Err.Description, vbOKOnly + vbExclamation, "CreateConnection_ Failure"
        End Sub

b)       CreateRecordSet过程
在Geomedia里建立记录集也有多种方法。例如:你可以用标准管道,也可以用GDatabase对象的OpenRecordset。这里用的是标准管道的方法建立记录集。
Public Sub CreateRecordset(objRS As GRecordset)
'***************************************************************
  '功能描述:这个过程将建立States特征的记录集
  '输入参数:objRs-GrecordSet类型

'***************************************************************
On Error GoTo errorhandler
    '这里用标准管道建立States记录集
    Dim objOP As OriginatingPipe
    gobjConnection.CreateOriginatingPipe objOP
    objOP.Table = "states"
    Set objRS = objOP.OutputRecordset
    Set objOP = Nothing
'先由扩展属性集来得到用来显示地图的图形字段,如果不能找到,则遍历States '表中的每一个字段,来找到图形字段名
    Dim objEPS As ExtendedPropertySet
    Dim sGeometryField As String
    Set objEPS = objRS.GetExtension("ExtendedPropertySet")
    sGeometryField = objEPS.GetValue("PrimaryGeometryFieldName")
    If sGeometryField = "" Then
      Dim objField As GField
      For Each objField In objRS.GFields
        If objField.Type = gdbGraphic Then
          sGeometryField = objField.Name
          Exit For
        End If
      Next objField
      Set objField = Nothing
      Set objEPS = Nothing
End If
            '建立数据库和地图视图的坐标转换
    If Not (frmMap.ocxMapView.CoordSystemsMgr Is Nothing) Then
      Dim objSTS As New ServerTransService
      Dim objAltTransform As AltCoordSystemPath
objSTS.CreateSimpleTransFromCSMtoServer _
frmMap.ocxMapView.CoordSystemsMgr, _
        objRS.GFields(sGeometryField).CoordSystemGUID, _
        gobjConnection.Database, objAltTransform
      Set objAltTransform = Nothing
      Set objSTS = Nothing
End If
Exit Sub
errorhandler:
  MsgBox Err.Description, vbOKOnly + vbExclamation, "CreateRecordset Error"
  Set objSTS = Nothing
  Set objAltTransform = Nothing
  Set objField = Nothing
  Set objEPS = Nothing
End Sub


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

相关新闻:

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

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