ArcMap中,无论是在属性框中右击字段打开的field Calculate还是在Arctoolbox\Data Management Tools\Field\ 工具箱中的Calculate field ,都支持vba表达式。
字段计算器,用以计算字段值。这些字段值,可以是属性表里相关字段的综合,比如百分比,分解字段等;可以是和图形有关的值,比如点的xy坐标,面的中心点坐标,线的长度等等;也可以是为了满足某种特定需求而创造出来的值。
比如如下问题:
1.要找出图层某字段[A]里的重复值,并标上记号;
2.图层某字段[B],现在要将字段[B]中的 { 最大值 + 最小值 + 该行值 } 写入一个新字段[C]中;
3.字段[D]需要进行编号,号码格式为"000001","000002","000003","000004"...,"000202"..;
4 .将点层的xy坐标按 x , y 的格式输出到 [E] 字段
1.重复记录标上记号
要找出图层某字段的重复记录,对于存储在Personal Geodatabase中feature而言,可以通过select by attribute找出重复值的记录:
Sql: select * from layer where:
[A] in (select [A] from 层名 group by [A] having count([A]) >1)
这样执行下来的结果,就是该图层中,[A]字段值重复数大于等于2的所有记录,而对于不支持子查询的比如shapefile格式文件,可以怎么办呢?在属性表中新建一个字段,取名"test',类型设置为 long integer,然后右击该字段,选择field Calculate,勾选 advanced,写入以下代码:
' ----------------------------------------
' ESRI Support Home > Knowledge Base > Technical Articles > Article Detail
' 代码参见 HowTo: Identify duplicate field values
' @ Tsonghua 090924
' ----------------------------------------
Static d As Object
Static i As Long
Dim iDup As Integer
Dim sField
' ----------------------------------------
'这里填写需要检查的字段名
sField = [A]
' ----------------------------------------
If (i = 0) Then
Set d = CreateObject("Scripting.Dictionary")
End If
If (d.Exists(CStr(sField))) Then
iDup = 1
Else
d.Add CStr(sField), 1
iDup = 0
End If
i = i + 1
在Pre_Logic VBA Script Code下方的 A= 窗口中填iDup
这是一段在ESRI Support(www.support.esri.com)上找到的代码,功能就是可以讲重复值做上记号,属于重复值的记录,[test]字段值计算结果为 1 ,否则为 0 。就是说,如果有三条记录[A]字段值分别为"aa","aa","aa",那么有一条被标上 0 ,剩余2