代码名称:对tab表进行操作(新建、打开、关闭)

作者/收集者:zhaozidong

开发环境:VB + MapX

代码:

对表操作
(1) 新建表
Option Explicit

Dim FileSpec As String
Dim csys As MapXLib.CoordSys

Private Sub Command1_Click()
  
  On Error Resume Next
  
  CM1.DialogTitle = "保存表文件"
  CM1.DefaultExt = "表文件|*.tab"
  CM1.Filter = "表(*.tab)|*.tab"
  CM1.CancelError = True
  CM1.Action = 2
  
  If Err.Number = 32755 Then Exit Sub
  
  FileSpec = CM1.filename
  
End Sub

Private Sub Command2_Click()
    Dim ctype As Integer
    Dim cunits As Integer
    
    Formmain.Map1.NumericCoordSys.PickCoordSys
    Set csys = Formmain.Map1.NumericCoordSys
    ctype = csys.Type
    cunits = csys.Units
    
    'Set Formmain.Map1.Bounds = rect
   ' If csys.Type = 0 Then
       'FrmRange.Show 1
       'rect的左下角不能为(0,0)
       'csys.Set ctype, , cunits, , , , , , , , , , rect
    'End If
    
End Sub

Private Sub Command3_Click()
    
    Dim LayerName As String
    Dim FeatureNameLen As Integer
    Dim LayerPos As Integer
    Dim LayerInfo As MapXLib.LayerInfo
    Dim retn As Integer
    
    On Error GoTo ErrorHand
    
    LayerName = Text1.Text
    FeatureNameLen = Val(Text2.Text)
    LayerPos = Val(Text3.Text)
    
    If FeatureNameLen <= 0 Then MsgBox "请输入大于0的数字!", , "警告"
    If LayerPos <= 0 Then MsgBox "请输入大于0的数字!", , "警告"
    
    Formmain.Map1.Layers.CreateLayer LayerName, FileSpec, LayerPos, FeatureNameLen, csys
    
    '将新建图层加入到数据字典和数据集
    'If Option_AddToGeoDict = True Then
        'LayerInfo.Type = miLayerInfoTypeGeodictUserName
        'LayerInfo.AddParameter "Name", Text1.Text
        'If Option_AddToDataset = True Then
            'LayerInfo.AddParameter "AutoCreate", 1
            'LayerInfo.AddParameter "DatasetName", Text1.Text
        'End If
        'Formmain.Map1.Layers.Add LayerInfo
    'End If
    
    'ChangeCombo
    
    Unload Me
    
ErrorHand:
    
    Select Case Err.Number
      Case 1230
        retn = MsgBox("是否覆盖?", 4, "错误提示")
        If retn = 6 Then
           Kill FileSpec
           Resume
        ElseIf retn = 7 Then
        End If
    End Select
End Sub

Private Sub Command4_Click()
    
    Unload Me
    
End Sub

Private Sub Form_Load()
    FileSpec = ""
End Sub

控件解释:
text1 新建图层的名称
text2 图元名称长度
text3 图层位置
command1 保存
command2 投影
command3 确定
command4 取消
(2) 打开表
Dim filename As String
  Dim filepath As String
  Dim LayerName As String
  Dim lyr As MapXLib.Layer
  Dim LayerInfo As New MapXLib.LayerInfo
  Dim FilterIndex As Integer
  Dim ftrs As New MapXLib.Features
  Dim csys As New MapXLib.CoordSys
  
  On Error Resume Next
  
  CM2.DialogTitle = "打开文件"
  CM2.DefaultExt = "Tab|*.tab"
  CM2.Filter = "表(*.tab)|*.tab|GeoTiff file(*.tif)|*.tif|shapefile(*.tab)|*.tab|ServerLayer(spatialware)"
  CM2.CancelError = True
  CM2.Action = 1
  
  If Err.Number = 32755 Then Exit Sub
    
  filename = CM2.FileTitle
  filepath = CM2.filename
  filepath = Left(filepath, InStr(filepath, filename) - 1)
  LayerName = Left(filename, InStr(filename, ".") - 1)
 
  FilterIndex = CM2.FilterIndex
  
  Select Case FilterIndex
    
    Case 1:
      LayerInfo.Type = miLayerInfoTypeTab
      LayerInfo.AddParameter "FileSpec", filepath + filename
      LayerInfo.AddParameter "Name", LayerName
    
    Case 2:
      LayerInfo.Type = miLayerInfoTypeRaster
      LayerInfo.AddParameter "FileSpec", filepath + filename
      LayerInfo.AddParameter "Name", LayerName
    
    Case 3:
       
     
      csys.Set 1, 0
     
      LayerInfo.Type = miLayerInfoTypeShape
      LayerInfo.AddParameter "FileSpec", filepath + filename
      LayerInfo.AddParameter "CoordSys", csys
    
  End Select
  
 
  
  Set lyr = Formmain.Map1.Layers.Add(LayerInfo, 1)
   

    
(3) 关闭表
Private Sub Command1_Click()
    Dim lyr As MapXLib.Layer
    Dim i As Integer
    
    If Trim(Combo1.Text) <> "" Then Set lyr = Formmain.Map1.Layers(Combo1.Text)
    
    lyr.Datasets.RemoveAll
    Formmain.Map1.Layers.Remove lyr
    
  
    Set lyr = Nothing
    
    Unload Me
End Sub

Private Sub Command2_Click()
    Unload Me
End Sub

Private Sub Form_Load()
    
    Dim lyr As MapXLib.Layer
    
    For Each lyr In Formmain.Map1.Layers
      Combo1.AddItem lyr.Name
    Next
    
    If Combo1.ListCount > 0 Then Combo1.ListIndex = 0
       
    Set lyr = Nothing
    
End Sub
控件解释:
combo1  tab表的列表
command1  确定关闭
command2  取消