数据导入Geodatabase中时,程序运行出现错误提示:“The spatial index grid size is invalid”。
代码中加上 IFeatureClassLoad设置,将其设置为true,导入完成后,再设置为false。注意,mdb数据库无法实现这个接口
Public Shared Sub Append(ByVal pInFtCls As IFeatureClass, ByRef pOutFtCls As IFeatureClass, Optional ByVal deleteAllFeatures As Boolean = False, Optional ByVal showDialog As Boolean = True, Optional ByVal WhereClause As String = "", Optional ByVal ZAndMSameAsInput As Boolean = True) If (pInFtCls Is Nothing Or pOutFtCls Is Nothing) Then Return End If If (deleteAllFeatures) Then CType(pOutFtCls, ITable).DeleteSearchedRows(Nothing) End If Dim pFlt As IQueryFilter = Nothing If String.IsNullOrEmpty(WhereClause) = False Then pFlt = New QueryFilter() pFlt.WhereClause = WhereClause End If Dim pFCLoad As IFeatureClassLoad = Nothing ' = pOutFtCls Try pFCLoad = pOutFtCls pFCLoad.LoadOnlyMode = True‘加上这句可解决空间格网大小无效的问题 Catch ex As Exception End Try Dim pInCursor As IFeatureCursor = pInFtCls.Search(pFlt, False) Dim pFt As IFeature = pInCursor.NextFeature Dim pOutCursor As IFeatureCursor = pOutFtCls.Insert(True) Dim pBuffer As IFeatureBuffer Dim pProgressBar As SCRS.ArcGis.PlugSystem.ProgressDialog = Nothing ' = New SCRS.ArcGis.PlugSystem.ProgressDialog("添加数据", "", pInFtCls.FeatureCount(pFlt)) If (showDialog) Then pProgressBar = New SCRS.ArcGis.PlugSystem.ProgressDialog("添加数据", "", pInFtCls.FeatureCount(pFlt)) End If Dim i As Integer = 0 While pFt IsNot Nothing Try If (pProgressBar IsNot Nothing) Then pProgressBar.Step() End If i += 1 pProgressBar.Description = String.Format("当前写入图层{0}第{1}/{2}条记录", pInFtCls.AliasName, i, pProgressBar.MaxRange) ' System.Windows.Forms.Application.DoEvents() pBuffer = pOutFtCls.CreateFeatureBuffer If (ZAndMSameAsInput) Then pBuffer.Shape = SCRS.MapQuery.FeatureClass.setZAndMSameAsFeatureClass(pFt.ShapeCopy, pOutFtCls, False, False) Else pBuffer.Shape = pFt.ShapeCopy ' SCRS.MapQuery.FeatureClass.setZAndMSameAsFeatureClass(pFt.ShapeCopy, pOutFtCls, False, False) End If ' pNewFt.Shape = pFt.ShapeCopy SCRS.ArcGis.PlugSystem.Esri_Db_Util.AddFields(pBuffer, pFt) ' ScrsControls.ScrsDatabaseOpClass.CopyBaseAttribute(pFt, pBuffer) pOutCursor.InsertFeature(pBuffer) If i Mod 3000 = 0 Then pOutCursor.Flush() Catch ex As Exception ' Windows.Forms.MessageBox.Show(ex.Message) End Try pFt = pInCursor.NextFeature End While If (pProgressBar IsNot Nothing) Then pProgressBar.HideDialog() End If pOutCursor.Flush() If (pFCLoad IsNot Nothing) Then pFCLoad.LoadOnlyMode = False End If ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(pInCursor) pInCursor = Nothing ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(pOutCursor) pOutCursor = Nothing End Sub