在arcgis里面批量修伽属性

关键词arcgis    属性    修改                                          

 

最近有些东西需要在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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值