mapgis组件开发vb示例

来源:互联网 发布:东北农业大学知乎 编辑:程序博客网 时间:2024/05/17 08:54

转自http://blog.163.com/zhengguo_li/blog/static/70301480200941694213633/

VB开发示例

MapGIS组件的使用方法与一般组件的使用方法完全相同,在使用MapGIS组件之前,必须先注册.安装完MapGIS的SDK开发包后,自动安装并注册了MapGIS组件.

在VB中使用MapGIS组件对象的步骤是:

(1)嵌入MapGIS对象类型库;

(2)建立MapGIS对象;

(3)调用MapGIS对象和其他VB对象的方法和属性完成GIS应用软件功能;

(4)释放MAPGIS对象.

 

下面的例子演示了如何使用MAPGIS组件(控件)进行GIS应用软件的开发.

(1)新建一个VB工程(标准EXE类型),“引用”程序中用到的组件和控件.为了使VB能够访问MAPGIS组件对象,需要在VB项目中嵌入MAPGIS对象类型库.执行下列步骤:从Project (工程)菜单中选择References(引用), References对话框出现后,选中所需的类型库:MapGISBasCom11.o Type Library和MapGISDspCom1.0 Type Library。(如下图)

再从Project (工程)菜单中选择Components (组件), Components对话框出现后,选中所需的控件,EditView ActiveX Control module是图形编辑控件。(如下图)

 

(2)添加EditView控件到Form上,命名为EditView

  将区文件、线区文件或点区文件加载到EditView有两中方法,一是将区文件直接用Load方法,然后调用 Set EditView.RegArea = objRArea,二是用工程Map的形式加载,此处用方法二。

定义一个全局的Map

Public g_objPrjMap As MAPGISMAPCOMLib.Map

在Form Load的时候,将 g_objPrjMap 赋给 EditView.Map

Set EditView.Map = g_objPrjMap

 

接下去就是把区文件绑定到Map上,见下面函数:(此处以区为例)

Public Function AddLyrToMap(strLyrPath As String, strLyrName As String)

    Dim objAddWArea As MAPGISBASCOM1Lib.WorkArea

    Dim objRArea As New MAPGISBASCOM1Lib.RegArea

    Dim objMapLyr As MAPGISLAYERCOMLib.MapLayer

    

    If Not objRArea.Load(strLyrPath) Then

        MsgBox "加载" & strLyrPath & "目录下的图层出错!", vbInformation, "系统提示"

        Exit Function

    End If

    

    objRArea.Name = strLyrName

    Set objAddWArea = objRArea

    

    Set objMapLyr = New RegLayer

    g_objPrjMap.AddLayer objMapLyr

    g_objPrjMap.Layer(g_objPrjMap.MapLayerCount-1).Attach objAddWArea

    

    Set objAddWArea = Nothing

    Set objRArea = Nothing

    Set objMapLyr = Nothing

End Function

 

AddLyrToMap函数可以这样调用:

Call AddLyrToMap(App.Path & "\Data\ST_XZQ.WP", "行政区")   '添加行政区图层

 

加载完地图后,要将地图复位:

'将Map全部显示

Public Sub RestoreEditView()

    Dim objTempLyr As MAPGISLAYERCOMLib.MapLayer

    Dim objRC      As MAPGISBASCOM1Lib.D_Rect

    Dim i          As Integer

    

    Set objTempLyr = g_objPrjMap.FindFirst(gisFINDTYPE_ALL)

    If objTempLyr Is Nothing Then Exit Sub

    

    Set objRC = objTempLyr.rect

    

    For i = 0 To g_objPrjMap.MapLayerCount - 1

        If (Not objTempLyr.WorkArea.Empty) And (objTempLyr.WorkArea.logCount > 0) Then

            If (objRC.xmin > objTempLyr.rect.xmin) Then

                objRC.xmin = objTempLyr.rect.xmin

            End If

            If (objRC.xmax < objTempLyr.rect.xmax) Then

                objRC.xmax = objTempLyr.rect.xmax

            End If

            If (objRC.ymin > objTempLyr.rect.ymin) Then

                objRC.ymin = objTempLyr.rect.ymin

            End If

            If (objRC.ymax < objTempLyr.rect.ymax) Then

                objRC.ymax = objTempLyr.rect.ymax

            End If

        End If

        

        Set objTempLyr = Nothing

        Set objTempLyr = g_objPrjMap.FindNext()

    Next

 

    frmMapWin.EditView.SetWinMapRange objRC.xmin, objRC.ymin, objRC.xmax, objRC.ymax

    frmMapWin.EditView.RestoreWindow

    

    Set objTempLyr = Nothing

    Set objRC = Nothing

End Sub

 

(3)得到统计区的属性值、面积等

 由于区文件是以工程Map的形式绑定上来的,所以要取得区的属性,就要先得到工程Map 里的MapLayer,然后在得到RegArea,具体见下面函数:

Private Sub Command1_Click()

    

    Dim i As Integer

    Dim dblArea As Double    '统计面积

    

    Dim objMapLay As MAPGISLAYERCOMLib.MapLayer

    Dim objRArea  As New MAPGISBASCOM1Lib.RegArea

    Dim objRecd   As MAPGISBASCOM1Lib.Record

    

    

    Set objMapLay = New MAPGISLAYERCOMLib.RegLayer

    Set objMapLay = g_objPrjMap.FindLayerByName("行政区")

    Set objRArea = objMapLay.WorkArea

    

    For i = 0 To objRArea.Count - 1

        If (objRArea.RegAtt.Get(i, objRecd)) > 0 Then

      

            Debug.Print objRecd.Item("XZQ_DM").Value

            Debug.Print objRecd.Item("XZQ_DM").Value

            

            dblArea = dblArea + objRecd.Item("Area").Value

        End If

    Next

    

    Debug.Print dblArea

    

End Sub

 

(4)最后要释放MAPGIS对象

   Set g_objPrjMap = Nothing 

这个就是一个最基本的MapGIS程序了,可以把它称为“MapGIS的基石”,因为以后的程序都是在这个程序的基础上“缝缝补补”而来的。

来源:零度雪

 

0 0
原创粉丝点击