批量删除Features的几种方法

时间:2022-02-23 14:53:29

1.批量刪除feature ----ITable.DeleteSearchedRows  method

對于一般的featureClass(不包括Anno FeatureClass),ITable.DeleteSearchedRows能快速有效的刪除Features.

尤其是大數據量情況下,其效率遠比逐個要素刪除要快得多。

 

批量删除Features的几种方法Public Sub DeleteFeature(pFeaWorkspace As IFeatureWorkspace, pfeatName As String)
批量删除Features的几种方法    
'Delete feature class
批量删除Features的几种方法
    Dim pFeatureClass As IFeatureClass
批量删除Features的几种方法    
Set pFeatureClass = pFeaWorkspace.OpenFeatureClass(pfeatName)
批量删除Features的几种方法    
On Error Resume Next
批量删除Features的几种方法    
If pFeatureClass Is Nothing Then
批量删除Features的几种方法        
Exit Sub
批量删除Features的几种方法    
End If
批量删除Features的几种方法    
批量删除Features的几种方法    
Dim pTable As ITable
批量删除Features的几种方法    
Set pTable = pFeatureClass
批量删除Features的几种方法    pTable.DeleteSearchedRows 
Nothing
批量删除Features的几种方法    
批量删除Features的几种方法    
批量删除Features的几种方法
End Sub

 

2. 批量刪除Annotation featureclass里的features ---IFeatureEdit.DeleteSet method.

 ITable.DeleteSearchedRows用來刪除Annotation featureclass要素的效果并不好,很多時候是根本沒刪除到數據.

IFeatureEdit.DeleteSet方法在這時候能很好的派上用場,由于是DeleteSet,所以遇到某些相關聯要素時,不會發生像

IFeatureCursor.nextfeature單個刪除時找不到要素的問題。

 

批量删除Features的几种方法Public Sub DeleteAnnoFeature(pFeaWorkspace As IFeatureWorkspace, pfeatName As String)
批量删除Features的几种方法
批量删除Features的几种方法
批量删除Features的几种方法    
'Delete feature class
批量删除Features的几种方法
    Dim pFeatureClass As IFeatureClass
批量删除Features的几种方法    
Set pFeatureClass = pFeaWorkspace.OpenFeatureClass(pfeatName)
批量删除Features的几种方法    
On Error Resume Next
批量删除Features的几种方法    
If pFeatureClass Is Nothing Then
批量删除Features的几种方法        
Exit Sub
批量删除Features的几种方法    
End If
批量删除Features的几种方法    
批量删除Features的几种方法    
Dim pDeleteSet As esriSystem.ISet
批量删除Features的几种方法    
Set pDeleteSet = New esriSystem.Set
批量删除Features的几种方法    
Dim pFeature As IFeature
批量删除Features的几种方法    
Dim pFeatureCursor As IFeatureCursor
批量删除Features的几种方法    
Set pFeatureCursor = pFeatureClass.Search(NothingFalse)
批量删除Features的几种方法   
批量删除Features的几种方法    
Set pFeature = pFeatureCursor.NextFeature
批量删除Features的几种方法    
Do While Not pFeature Is Nothing
批量删除Features的几种方法        pDeleteSet.Add pFeature
批量删除Features的几种方法        
Set pFeature = pFeatureCursor.NextFeature
批量删除Features的几种方法    
Loop
批量删除Features的几种方法    
批量删除Features的几种方法    pDeleteSet.Reset
批量删除Features的几种方法    
批量删除Features的几种方法    
Dim pFeatureEdit As IFeatureEdit
批量删除Features的几种方法    
Set pFeatureEdit = pDeleteSet.Next
批量删除Features的几种方法    
Do While Not pFeatureEdit Is Nothing
批量删除Features的几种方法        pFeatureEdit.DeleteSet pDeleteSet
批量删除Features的几种方法        
Set pFeatureEdit = pDeleteSet.Next
批量删除Features的几种方法    
Loop
批量删除Features的几种方法    
批量删除Features的几种方法     
批量删除Features的几种方法
End Sub

 

3. 批量刪除要素的一般方法.

批量删除Features的几种方法Public Sub DeleteAnnoFeature()Sub DeleteAnnoFeature(pFeaWorkspace As IFeatureWorkspace, pfeatName As String)
批量删除Features的几种方法
批量删除Features的几种方法    
'Delete feature class
批量删除Features的几种方法
    Dim pFeatureClass As IFeatureClass
批量删除Features的几种方法    
Set pFeatureClass = pFeaWorkspace.OpenFeatureClass(pfeatName)
批量删除Features的几种方法    
On Error Resume Next
批量删除Features的几种方法    
If pFeatureClass Is Nothing Then
批量删除Features的几种方法        
Exit Sub
批量删除Features的几种方法    
End If
批量删除Features的几种方法    
批量删除Features的几种方法    
Dim pFeature As IFeature
批量删除Features的几种方法    
Dim pFeatureCursor As IFeatureCursor
批量删除Features的几种方法    
Set pFeatureCursor = pFeatureClass.Search(NothingFalse)
批量删除Features的几种方法   
批量删除Features的几种方法    
Set pFeature = pFeatureCursor.NextFeature
批量删除Features的几种方法    
Do While Not pFeature Is Nothing
批量删除Features的几种方法        pFeature.delete
批量删除Features的几种方法        
Set pFeature = pFeatureCursor.NextFeature
批量删除Features的几种方法    
Loop
批量删除Features的几种方法      
批量删除Features的几种方法    
set pFeatureClass=nothing   
批量删除Features的几种方法
End Sub

 

 

4. 在FeatureLayer上刪除features...利用IFeatureEdit.DeleteSet

批量删除Features的几种方法Public Sub DeleteSelectedFeatures()
批量删除Features的几种方法  
Dim pDeleteSet As ISet
批量删除Features的几种方法  
Dim pEditLayers As IEditLayers
批量删除Features的几种方法  
Dim pEditor As IEditor
批量删除Features的几种方法  
Dim pEnumLayer As IEnumLayer
批量删除Features的几种方法  
Dim pFeature As IFeature
批量删除Features的几种方法  
Dim pFeatureEdit As IFeatureEdit
批量删除Features的几种方法  
Dim pFeatureCursor As IFeatureCursor
批量删除Features的几种方法  
Dim pFeatureLayer As IFeatureLayer
批量删除Features的几种方法  
Dim pFeatureSelection As IFeatureSelection
批量删除Features的几种方法  
Dim pID As New UID
批量删除Features的几种方法  
Dim pInvalidArea As IInvalidArea
批量删除Features的几种方法  
Dim pSelectionSet As ISelectionSet
批量删除Features的几种方法  
Dim bInOperation As Boolean
批量删除Features的几种方法  
Dim DeletedFeatureCount As Integer
批量删除Features的几种方法  
Dim LayerCount As Integer
批量删除Features的几种方法  
批量删除Features的几种方法  
On Error GoTo ErrorHandler
批量删除Features的几种方法  
批量删除Features的几种方法  
''Get a handle to the Editor extension
批量删除Features的几种方法
  pID = "esriEditor.Editor"
批量删除Features的几种方法  
Set pEditor = Application.FindExtensionByCLSID(pID)
批量删除Features的几种方法  
If Not pEditor.EditState = esriStateEditing Then Exit Sub
批量删除Features的几种方法  
Set pEditLayers = pEditor
批量删除Features的几种方法  
批量删除Features的几种方法  
If pEditor.SelectionCount = 0 Then Exit Sub
批量删除Features的几种方法  
批量删除Features的几种方法  
'Set up the InvalidArea object
批量删除Features的几种方法
  Set pInvalidArea = New InvalidArea
批量删除Features的几种方法  
Set pInvalidArea.Display = pEditor.Display
批量删除Features的几种方法  
批量删除Features的几种方法  
'Loop through the selected features and delete them
批量删除Features的几种方法
  pEditor.StartOperation
批量删除Features的几种方法  bInOperation 
= True
批量删除Features的几种方法  
批量删除Features的几种方法  pID 
= "{40A9E885-5533-11D0-98BE-00805F7CED21}" 'IGeoFeatureLayer
批量删除Features的几种方法
  Set pEnumLayer = pEditor.Map.Layers(pID, True)
批量删除Features的几种方法  pEnumLayer.Reset
批量删除Features的几种方法  
批量删除Features的几种方法  
Set pFeatureLayer = pEnumLayer.Next
批量删除Features的几种方法  
Do While Not pFeatureLayer Is Nothing
批量删除Features的几种方法    
'Check if feature layer is editable
批量删除Features的几种方法
    If pEditLayers.IsEditable(pFeatureLayer) Then
批量删除Features的几种方法      
Set pFeatureSelection = pFeatureLayer
批量删除Features的几种方法      
Set pSelectionSet = pFeatureSelection.SelectionSet
批量删除Features的几种方法      
''Check if there is a selection
批量删除Features的几种方法
      If Not pSelectionSet.Count = 0 Then
批量删除Features的几种方法
批量删除Features的几种方法        
'Add each feature to a Set
批量删除Features的几种方法
        'and delete the set - need a Set incase there are related features
批量删除Features的几种方法
          Set pDeleteSet = New esriSystem.Set
批量删除Features的几种方法          pSelectionSet.Search 
NothingFalse, pFeatureCursor
批量删除Features的几种方法          
Set pFeature = pFeatureCursor.NextFeature
批量删除Features的几种方法          
Do While Not pFeature Is Nothing
批量删除Features的几种方法            pInvalidArea.Add pFeature
批量删除Features的几种方法            pDeleteSet.Add pFeature
批量删除Features的几种方法            DeletedFeatureCount 
= DeletedFeatureCount + 1
批量删除Features的几种方法            
Set pFeature = pFeatureCursor.NextFeature
批量删除Features的几种方法          
Loop
批量删除Features的几种方法          pDeleteSet.Reset
批量删除Features的几种方法          
Set pFeatureEdit = pDeleteSet.Next
批量删除Features的几种方法          
Do While Not pFeatureEdit Is Nothing
批量删除Features的几种方法            pFeatureEdit.DeleteSet pDeleteSet
批量删除Features的几种方法            
Set pFeatureEdit = pDeleteSet.Next
批量删除Features的几种方法          
Loop
批量删除Features的几种方法
批量删除Features的几种方法      
End If
批量删除Features的几种方法    
End If
批量删除Features的几种方法    
Set pFeatureLayer = pEnumLayer.Next
批量删除Features的几种方法  
Loop
批量删除Features的几种方法
批量删除Features的几种方法  
If DeletedFeatureCount = 0 Then
批量删除Features的几种方法    pEditor.AbortOperation
批量删除Features的几种方法  
Else
批量删除Features的几种方法    pEditor.StopOperation (
"Delete")
批量删除Features的几种方法    bInOperation 
= False
批量删除Features的几种方法  
End If
批量删除Features的几种方法  
批量删除Features的几种方法  
'Clear the selection and refresh the display
批量删除Features的几种方法
  pEditor.Map.ClearSelection
批量删除Features的几种方法  pInvalidArea.Invalidate esriAllScreenCaches
批量删除Features的几种方法
批量删除Features的几种方法  
Exit Sub
批量删除Features的几种方法  
批量删除Features的几种方法ErrorHandler:
批量删除Features的几种方法  
If bInOperation Then
批量删除Features的几种方法    pEditor.AbortOperation
批量删除Features的几种方法  
End If
批量删除Features的几种方法
End Sub

来自:http://www.cnblogs.com/iswszheng/archive/2009/03/18/1415475.html