最近有些东西需要在arcgis改属性,没找到好工具,于是就自己写了一个批量修改的东西
我作了个dll,不过在这里把它写成vba形式了,前提需要进入编辑状态,选中需要修改的地物,然后指定字段名和值就行了。程序如下:
------------------------------------------------
Sub editSelField()
Dim sName As String
Dim sNew As String
sName = "class"'指定字段名
sNew = "菜场"'指定字段值
''''''''''''''''
Dim pEditor As IEditor
Dim pID As New UID
Dim pEditLayers As IEditLayers
On Error GoTo ErrorHandler
'得到Editor
pID = "esriEditor.Editor"
Set pEditor = Application.FindExtensionByCLSID(pID)
If Not pEditor.EditState = esriStateEditing Then Exit Sub
Set pEditLayers = pEditor
If pEditor.SelectionCount = 0 Then Exit Sub
Dim pInvalidArea As IInvalidArea
Set pInvalidArea = New InvalidArea
Set pInvalidArea.Display = pEditor.Display
Dim bInOperation As Boolean
pEditor.StartOperation
bInOperation = True
pID = "{40A9E885-5533-11D0-98BE-00805F7CED21}" '得到Featurelayer
Dim pEnumLayer As IEnumLayer
Set pEnumLayer = pEditor.Map.Layers(pID, True)
Dim pFeatureLayer As IFeatureLayer
Set pFeatureLayer = pEnumLayer.Next
Dim pFeatureEdit As IFeatureEdit
Dim pFeatureCursor As IFeatureCursor
Dim pFeatureSelection As IFeatureSelection
Dim pSelectionSet As ISelectionSet
Dim pFeature As IFeature
Dim nCount As Long
Dim nFld As Long
Do While Not pFeatureLayer Is Nothing
If pEditLayers.IsEditable(pFeatureLayer) Then
Set pFeatureSelection = pFeatureLayer
Set pSelectionSet = pFeatureSelection.SelectionSet
If Not pSelectionSet.Count = 0 Then
pSelectionSet.Search Nothing, False, pFeatureCursor
Set pFeature = pFeatureCursor.NextFeature
nFld = pFeature.Fields.FindField(sName)
If nFld < 0 Then
Debug.Print "error field name | Layername=" & pFeatureLayer.FeatureClass.AliasName, vbExclamation
Else
nCount = 0
Do While Not pFeature Is Nothing
nCount = nCount + 1
pFeature.Value(nFld) = sNew
pFeature.Store
Set pFeature = pFeatureCursor.NextFeature
Loop
End If
End If
End If
Set pFeatureLayer = pEnumLayer.Next
Loop
If nCount = 0 Then
pEditor.AbortOperation
Else
pEditor.StopOperation ("Edit Finish")
bInOperation = False
MsgBox "sel count=" & nCount
End If
ErrorHandler:
If bInOperation Then
pEditor.AbortOperation
End If
End Sub