Shape 数据加载(同时打开多个文件)非常经典

两部分:

第一部分Shape 数据加载(同时打开多个文件)

第二部分 ao 中一些打开数据的代码--AO学习资料笔记

第一部分Shape 数据加载(同时打开多个文件)

  /// <summary>
  /// Shape 数据加载
  /// </summary>
  /// <param name="sender"></param>
  /// <param name="e"></param>
    private void mnuData_1_1_Click(object sender, System.EventArgs e)
  {
   OpenFileDialog dlg=new OpenFileDialog();
   dlg.Filter="Shape file(*.shp)|*.shp";
   dlg.Title="打开 Shape数据文档";
   dlg.Multiselect=true;
   //定义存放打开 IFeatureClass 的字符串数组
   string[] FilePath;
   if(dlg.ShowDialog()==DialogResult.OK)
   {    
    FilePath=new string[dlg.FileNames.Length];
    FilePath=dlg.FileNames;
    if(FilePath.Length > 0)
    {
     string WorkSpacePath =System.IO.Path.GetDirectoryName(FilePath[0]);
     string[] ShapeFilePath=new string[FilePath.Length] ;
     //获得打开 IFeatureClass 的字符串数组
     for(int i=0;i<FilePath.Length;i++)
     {
      ShapeFilePath[i]=System.IO.Path.GetFileName(FilePath[i]);
     }
     IWorkspaceFactory pWorkspaceFactory=new ShapefileWorkspaceFactoryClass();
     IWorkspace pWorkspace=pWorkspaceFactory.OpenFromFile(WorkSpacePath,0);
     IFeatureWorkspace pFeatureWorkspace=pWorkspace as IFeatureWorkspace;
     for(int i=0;i<ShapeFilePath.Length;i++)
     {
      IFeatureClass pFeatureClass=pFeatureWorkspace.OpenFeatureClass(ShapeFilePath[i]);
      IDataset pDataset=pFeatureClass as IDataset;

      IFeatureLayer pFeatureLayer=new FeatureLayerClass();
      pFeatureLayer.FeatureClass=pFeatureClass;
      pFeatureLayer.Name=pDataset.Name;
      ILayer pLayer=pFeatureLayer as ILayer;
      this.axMapControl1.Map.AddLayer(pLayer);
     }
    }
   }
   
  }

第二部分 ao 中一些打开数据的代码--AO学习资料笔记

'----------------------------------------------------------------
'函数功能:从本地文件打开一个 FeatureClass
'----------------------------------------------------------------
Public Function OpenFC(sPath As String, sName As String) As IFeatureClass
  Dim pWSF As IWorkspaceFactory
  Dim pFCWS As IFeatureWorkspace
  Dim pFC As IFeatureClass
    
  Set pWSF = New ShapefileWorkspaceFactory
  Set pFCWS = pWSF.OpenFromFile(sPath, 0)
 
  Set pFC = pFCWS.OpenFeatureClass(sName)

Set OpenFC = pFC
  Set pFC = Nothing
End Function
'-----------------------------------
'函数功能:删除制定字段
'-----------------------------------
Sub DeleteField(pFC As IFeatureClass, sFieldName As String)
          
        Dim i As Integer
        Dim pFields As IFields
        Set pFields = pFC.Fields
 
        Dim pField As iField
    
    
           i = pFields.FindField(sFieldName)
           If i >= 0 Then
               Set pField = pFields.Field(i)
                pFC.DeleteField pField
          End If
 
End Sub
'--------------------------------------------------------
'函数功能:从本地文件打开一个 dbase 表
'--------------------------------------------------------
Public Function OpenTable(sFilePath As String, sTableName As String) As ITable
  Dim pWorkspace As IWorkspace
  Dim pFact As IWorkspaceFactory
  Set pFact = New ShapefileWorkspaceFactory
    
  Set pWorkspace = pFact.OpenFromFile(sFilePath, 0)
  Dim pFWorkspace As IFeatureWorkspace
  Set pFWorkspace = pWorkspace
  
  Dim pTable As ITable
  Set pTable = pFWorkspace.OpenTable(sTableName)
 
  Set OpenTable = pTable
  Set pTable = Nothing
  
End Function

'---------------------------------------------
'函数功能:打开本地的栅格影像
'---------------------------------------------
Public  Function  OpenRasterDataset(sDir  As  String,  sFile  As  String)  As
IRasterDataset
 
    'Open the raster dataset with the given name.
    'sDir is the directory the file resides
    'sFile is the filename
    
    Dim pWsFact As IWorkspaceFactory
    Dim pWS As IRasterWorkspace
    Dim pRasterDataset As IRasterDataset
 
 
    'Open the workspace
    Set pWsFact = New RasterWorkspaceFactory
    Set pWS = pWsFact.OpenFromFile(sDir, 0)
 
    
    'Open the raster dataset
    Set pRasterDataset = pWS.OpenRasterDataset(sFile)
 
 
    'Return
    Set OpenRasterDataset = pRasterDataset
 
    Set pWsFact = Nothing
    Set pWS = Nothing
    Set pRasterDataset = Nothing
 
End Function
'-------------------------
'创建一个 dbf 表
'-------------------------
Public Function createDBF(strName As String, strFolder As String, Optional
pFields As IFields) As ITable
' createDBF: simple function to create a DBASE file.
' note: the name of the DBASE file should not contain the .dbf extension
'
  On Error GoTo EH
  
  ' Open the Workspace
  Dim pFWS As IFeatureWorkspace

Dim pWorkspaceFactory As IWorkspaceFactory
  Dim fs As Object
  Dim pFieldsEdit As IFieldsEdit
  Dim pFieldEdit As IFieldEdit
  Dim pField As iField
 
  Set pWorkspaceFactory = New ShapefileWorkspaceFactory
  Set fs = CreateObject("Scripting.FileSystemObject")
  If Not fs.FolderExists(strFolder) Then
    MsgBox "Folder does not exist: " & vbCr & strFolder
    Exit Function
  End If
 
  Set pFWS = pWorkspaceFactory.OpenFromFile(strFolder, 0)
  
  ' if a fields collection is not passed in then create one
  If pFields Is Nothing Then
    ' create the fields used by our object
    Set pFields = New Fields
    Set pFieldsEdit = pFields
    pFieldsEdit.FieldCount = 1
    
    'Create text Field
    Set pField = New Field
    Set pFieldEdit = pField
    With pFieldEdit
        .length = 30
        .Name = "TextField"
        .Type = esriFieldTypeString
    End With
    Set pFieldsEdit.Field(0) = pField
  End If
  
  Set createDBF = pFWS.CreateTable(strName, pFields, Nothing, Nothing, "")
  
  Exit Function
EH:
    MsgBox Err.Description, vbInformation, "createDBF"
 
End Function
'----------------------------------------------------
'判断一个属性表中是否存在指定字段
'----------------------------------------------------
Public Function FieldIsExist(pFC As IFeatureClass, sFieldName As String) AsBoolean
        FieldIsExist = False
        Dim i As Integer
        Dim pFields As IFields
        Set pFields = pFC.Fields
 
        Dim pField As iField
 
        i = pFields.FindField(sFieldName)
         If i >= 0 Then
             FieldIsExist = True
         End If
 
End Function
'---------------------------
' 得到文档的路径
'---------------------------
Public Function GetDocPath() As String
      Dim pTemplates As ITemplates
      Dim lTempCount As Long
      Dim strNormalPath As String
      Dim strBasePath As String
      Dim strDocPath As String
      
      Set pTemplates = Application.Templates
      lTempCount = pTemplates.Count
      
      ' Normal is always the first item
      strNormalPath = pTemplates.Item(0)
      
      ' The document is always the last item
      strDocPath = pTemplates.Item(lTempCount - 1)
      
      ' If present, the base template is the middle item
      If lTempCount = 3 Then
        strBasePath = pTemplates.Item(1)
      Else
        strBasePath = "NO BASE TEMPLATE LOADED"
      End If
      
      strDocPath = StrReverse(strDocPath)
      Dim inPos As Integer
      inPos = InStr(strDocPath, "\")
      strDocPath = VBA.Right(strDocPath, Len(strDocPath) - inPos)

GetDocPath = StrReverse(strDocPath)
End Function
'----------------------------
'打开一个 workspace
'----------------------------
Public Function OpenWS(sPathName As String) As IWorkspace
        Dim pWSF As IWorkspaceFactory
        Dim pWS As IWorkspace
        
        Set pWSF = New ShapefileWorkspaceFactory
        Set pWS = pWSF.OpenFromFile(sPathName, 0)
         
        Set OpenWS = pWS
        Set pWS = Nothing
        
End Function
 
'--------------------------------------------------
'将本地 shape 文件添加到图层中显示
'--------------------------------------------------
 
Public Sub AddShapeFile(sPath As String, sName As String)
    
    Dim pWorkspaceFactory As IWorkspaceFactory
    Dim pFeatureWorkspace As IFeatureWorkspace
    Dim pFeatureLayer As IFeatureLayer
    Dim pMxDocument As IMxDocument
    Dim pMap As IMap
    
    'Create a new ShapefileWorkspaceFactory object and open a shapefile folder
    Set pWorkspaceFactory = New ShapefileWorkspaceFactory
    Set pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(sPath, 0)
    'Create a new FeatureLayer and assign a shapefile to it
    Set pFeatureLayer = New FeatureLayer
    Set  pFeatureLayer.FeatureClass  =
pFeatureWorkspace.OpenFeatureClass(sName)
    pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName
    'Add the FeatureLayer to the focus map
    Set pMxDocument = Application.Document
    Set pMap = pMxDocument.FocusMap
    pMap.AddLayer pFeatureLayer
 
End Sub

原文地址:https://www.cnblogs.com/hl3292/p/1845675.html