转自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的基石”,因为以后的程序都是在这个程序的基础上“缝缝补补”而来的。
来源:零度雪