插入和刪除Featureclass中feature的幾種方法(VB.Net)

來源:互聯網
上載者:User

本文對featureclass中插入和刪除feature的幾種方法進行了比較。

一、插入單個feature,方法1和方法2差別不大

方法1:

 ''' <summary>
  ''' 向featureclass中插入feature
  ''' </summary>
  ''' <param name="pFeatureClass">要插入的featureclass</param>
  ''' <remarks></remarks>
  Private Sub InsertFeature(ByVal pFeatureClass As IFeatureClass, ByVal pGeo As IGeometry)
    If pFeatureClass Is Nothing Then Exit Sub
    Dim pFeatBuf As IFeatureBuffer = pFeatureClass.CreateFeatureBuffer()
    Dim pFeat As IFeature = pFeatBuf
    Dim pFeatCur As IFeatureCursor = pFeatureClass.Insert(True)
    pFeat.Shape = pGeo
    pFeatCur.InsertFeature(pFeatBuf)
    pFeatCur.Flush()
  End Sub

 方法2:
  ''' <summary>
  ''' 向featureclass中插入feature
  ''' </summary>
  ''' <param name="pFeatureClass">要插入的featureclass</param>
  ''' <remarks></remarks>
  Private Sub InsertFeature1(ByVal pFeatureClass As IFeatureClass, ByVal pGeo As IGeometry)
    If pFeatureClass Is Nothing Then Exit Sub
    Dim pFeature As IFeature = pFeatureClass.CreateFeature()
    pFeature.Shape = pGeo
    pFeature.Store()
  End Sub

 

二、批量插入feature,如果用feature.store,一個個插入,較之buffer方法,會慢很多

方法1:

  ''' <summary>
  ''' 向featureclass中批量插入features
  ''' </summary>
  ''' <param name="pFeatureClass">要插入的featureclass</param>
  ''' <remarks>批量插入features,用buffer的方法,要比迴圈一個個Store的方法快</remarks>
  Public Sub InsertFeatures(ByVal pFeatureClass As IFeatureClass, ByVal pGeos As List(Of IGeometry))
    If pFeatureClass Is Nothing Then Exit Sub
    Dim pFeatBuf As IFeatureBuffer = pFeatureClass.CreateFeatureBuffer()
    Dim pFeat As IFeature = pFeatBuf
    Dim pFeatCur As IFeatureCursor = pFeatureClass.Insert(True)
    For i As Integer = 0 To pGeos.Count - 1
      pFeat.Shape = pGeos(i)
      pFeatCur.InsertFeature(pFeatBuf)
      ''避免一次flush,導致速度過慢
      If i Mod 100 = 0 Then
        pFeatCur.Flush()
      End If
    Next
    pFeatCur.Flush()
  End Sub

三、刪除feature,一個個刪除就用IFeature.Delete方法即可,此處不再贅述,唯寫一種大量刪除的方法,用於ITable是真對資料庫進行操作的,所以速度很快

其中方法2是行不通的,會彈出“集合中找不到此項目”的錯誤。

方法1:

  ''' <summary>
  ''' 刪除某featurelayer中所有feature
  ''' </summary>
  ''' <param name="pLayer">操作的塗層</param>
  ''' <remarks>該方法可以給一個queryfilter,進行刪除合格features</remarks>
  Private Sub DeleteAllFeatures(ByVal pLayer As IFeatureLayer)
    Dim pTable As ITable = pLayer.FeatureClass
    pTable.DeleteSearchedRows(Nothing)
  End Sub

方法2:
  ''' <summary>
  ''' 刪除featurecursor中的features
  ''' </summary>
  ''' <param name="pFeatureCursor"></param>
  ''' <remarks>這種方法是行不通的,至少92是這樣的,沒有實現該方法</remarks>
  Private Sub DeleteFeatures(ByVal pFeatureCursor As IFeatureCursor)
    pFeatureCursor.DeleteFeature()
  End Sub

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.