arcgis字段帮助.docx
《arcgis字段帮助.docx》由会员分享,可在线阅读,更多相关《arcgis字段帮助.docx(13页珍藏版)》请在冰豆网上搜索。
arcgis字段帮助
arcgis字段帮助
ArcGIS10.1
定位主题
使用键盘输入值并不是编辑表中值的唯一方式。
在某些情况下,为了设置字段值,可能要对单条记录甚至是所有记录执行数学计算。
您可以对所有记录或选中记录执行简单计算和高级计算。
此外,还可以在属性表中的字段上计算面积、长度、周长和其他几何属性。
以下各部分包括使用字段计算器的若干示例。
计算可以通过Python或VBScript执行。
Python是ArcGIS建议使用的脚本语言。
如果要访问地理处理功能(包括要素几何),请使用
Python。
采用Python作为ArcGIS的脚本语言为执行计算提供了许多便利。
如果您具有使用VBA或VBScript的经验并且习惯了脚本语法,则请使用VBScript。
所保存的ArcGIS先前版本的.cal文件可以直接使用或者只需进行少量修改。
如果拥有使用ArcObjects的过去版本的VBA代码,则需要修改计算。
注:
Python将强制要求缩进作为语法的一部分。
请使用两个或四个空格来定义每个逻辑级别。
将语句块的开头和结尾对齐并且保持一致。
Python计算表达式字段将使用惊叹号(!
!
)括起。
命名变量时请注意,Python区分大小写,因此yield不同于Yield。
VBScript不允许显式声明任何数据类型,所有变量均属于隐式变量。
形如Dimxas
String的语句应该删除或简化为Dimx。
输入语句后,如果想将其写入文件,可单击保存。
加载按钮将提示您查找和选择一个现有的
计算文件。
简单计算
简单字符串示例
一系列Python字符串函数均支持使用字符串,包括capitalize、rstrip和replace。
将字段CITY_NAME中字符串的首字母大写。
!
CITY_NAME!
.capitalize()
去掉字段CITY_NAME中自字符串结尾起的所有空白区。
!
CITY_NAME!
.rstrip()
将字段STATE_NAME中出现的“california”全部替换为“California”。
!
STATE_NAME!
.replace("california","California")在Python中,字符串字段中的字符可以通过索引和分割操作进行访问。
索引操作将在索引
位置提取字符,而分割操作则会提取一组字符。
示例说明结果
第一个字符。
!
fieldname!
[0]"a"
倒数第二个字符。
!
fieldname!
[-2]"e"
第二、三、四和五个字符。
!
fieldname!
[1:
4]"bcd"
Python也支持使用%运算符的字符串格式。
将合并后的FieldA和FieldB以冒号分隔开。
"%s:
%s"%(!
FieldA!
!
FieldB!
)
常见Python字符串操作
VBScript字符串函数
一系列VBScript字符串函数均支持使用字符串,包括Left、InStr和Chr。
以下是“字
段计算器”中常用字符串函数的若干VBScript示例。
Left函数:
返回一个包含自字符串左侧起指定数量字符的变量(字符串型)。
MyStr=Left([MyField],1)
Right函数:
返回一个包含自字符串右侧起指定数量字符的变量(字符串型)。
MyStr=Right([MyField],1)
Mid函数:
返回一个包含字符串中指定数量字符的变量(字符串型)。
MyString="MidFunctionDemo"'CreatetextstringFirstWord=Mid(MyString,1,3)'Returns"Mid"LastWord=Mid(MyString,14,4)'Returns"Demo"MidWords=Mid(MyString,5)'Returns"FunctionDemo"InStr函数:
返回指定了一个字符串在另一个字符串中首次出现的位置的变量(长整型)。
MyPosition=InStr([address],"")
Replace函数:
返回一个字符串,在该字符串中,指定的子串已替换为另外一个子串若干次(次数已指定)。
NewString=Replace([comments],"#","!
")Chr函数:
返回一个包含与指定字符代码关联的字符的字符串。
'Replaceacarriagereturncharacterwithanexclamation
NewString=Replace([comments],chr(13),"!
")
&运算符:
对两个表达式强制执行字符串串联。
MyStr=[MyField1]&""&[MyField2]
简单数学示例
Python提供了处理数字的工具。
Python也支持一些数字和数学函数,包括math、cmath、decimal、random、itertools、functools和operator。
运算符说明示例结果
x加上yx+y1.5+2.54.0
x减去yx-y3.3-2.21.1
x乘以yx*y2.0*2.24.4
x除以yx/y4.0/1.253.2
x除以y(向下取整除法)x//y4.0/1.253.0
x模yx%y8%32
x的负数表达式-xx=5-5
-x
x不变+xx=55
+x
以x为底,以y为指数的幂x**y2**38乘法
!
Rank!
*2
根据给定的半径字段计算球体的体积。
4/3*math.pi*!
Radius!
**3
使用Python表达式执行字段计算时,Python数学法则有效。
例如,两个整型值相除将始
终产生整型输出(3/2=1)。
要获得小数输出:
参加运算的数之一必须为小数值:
3.0/2=1.5,使用float函数将值明确转换为浮点型:
float(3)/2=1.5
float(!
Population!
)/!
Area!
将Python用作计算器
Python内置函数
Python具有多个可用的内置函数,包括max、min、round和sum。
Python内置函数
通过字段列表计算每条记录的最大值。
max([!
field1!
!
field2!
!
field3!
])通过字段列表计算每条记录的总和。
sum([!
field1!
!
field2!
!
field3!
])使用代码块
通过Python表达式和“代码块”参数可执行以下操作:
在表达式中应用任意Python函数。
访问地理处理函数和对象。
访问要素几何的属性。
访问新的随机值运算符。
根据if-then-else逻辑对值进行重分类。
使用其他地理处理工具。
代码块的使用方式取决于所用的解析程序。
“计算字段”支持Python和VBScript解析程序。
解析程序代码块
支持Python函数。
代码块将使用Python函数(def)表示。
在适当的情况下,Python
几何属性将通过地理处理对象表示(如点对象)。
VB脚计算将通过VBScript执行。
本
各Python函数可通过def关键字定义,关键字后为函数的名称以及函数的输入参数。
可编写Python函数,使Python函数能够接受任何数量的输入参数(也可以没有任何参数)。
函数将通过return语句返回值。
函数名称可由您自行选取(不得使用空格,也不得以数字开头)。
注:
请牢记,Python强制要求将缩进作为语法的一部分。
请使用两个或四个空格来定义每个逻辑级别。
将语句块的开头和结尾对齐并且保持一致。
代码实例-math
将字段的值四舍五入为保留两位小数。
Expression:
round(!
area!
2)
Parser:
Python
通过math模块将米转换成英尺。
以转换值为底,以2为指数进行幂运算,然后再乘以area。
Parser:
Python
Expression:
MetersToFeet((float(!
shape.area!
)))
CodeBlock:
defMetersToFeet(area):
returnmath.pow(3.2808,2)*area
通过Python逻辑计算字段
按照字段值进行分类。
Parser:
Python
Expression:
Reclass(!
WELL_YIELD!
)
CodeBlock:
defReclass(WellYield):
if(WellYield>=0andWellYield<=10):
return1
elif(WellYield>10andWellYield<=20):
return2
elif(WellYield>20andWellYield<=30):
return3
elif(WellYield>30):
return4
通过VBScript逻辑计算字段
基于表达式的值附有条件地执行一组语句。
Parser:
VBScript
Expression:
density
CodeBlock:
Dimdensity
If[POP90_SQMI]<100Thendensity="low"
elseif[POP90_SQMI]<300Then
density="medium"
else
density="high"
endif
代码实例-几何
注:
有关转换几何单位的详细信息,请参阅以下“几何单位转换”一节。
计算某要素的面积。
Parser:
Python
Expression:
!
shape.area!
计算某要素的最大X坐标。
Parser:
Python
Expression:
!
shape.extent.XMax!
计算某要素中的折点数。
Parser:
Python
Expression:
MySub(!
shape!
)
CodeBlock:
defMySub(feat):
partnum=0
#Countthenumberofpointsinthecurrentmultipartfeature
partcount=feat.partCount
pntcount=0
#Enterwhileloopforeachpartinthefeature(ifasinglepartfeature
#thiswilloccuronlyonce)
#
whilepartnumpart=feat.getPart(partnum)
pnt=part.next()
#Enterwhileloopforeachvertex
#
whilepnt:
pntcount+=1
pnt=part.next()
#Ifpntisnull,eitherthepartisfinishedorthereisan
#interiorring
#
ifnotpnt:
pnt=part.next()
partnum+=1
returnpntcount
将点要素类中每个点的x坐标平移100。
Parser:
Python
Expression:
shiftXCoordinate(!
SHAPE!
)
CodeBlock:
defshiftXCoordinate(shape):
shiftValue=100
point=shape.getPart(0)
point.X+=shiftValue
returnpoint
几何单位转换
几何字段的形状和长度属性可通过表示为带有@符号的单位类型进行修改。
面积测量单位关键字:
英亩|公亩|公顷|平方厘米|平方分米|平方英寸|平方英尺|平方千
米|平方米|平方英里|平方毫米|平方码|平方地图单位|未知,线性测量单位关键字:
厘米|十进制度|分米|英尺|英寸|千米|米|英里|毫米|海里|
磅|未知|码
注:
如果数据存储在地理坐标系中且具有线性单位(例如英尺),则会通过测地线算法转换长
度计算的结果。
警告:
转换地理坐标系中数据的面积单位会产生不正确的结果,这是由于沿globe的十进制度
并不一致。
计算某要素的长度(以码为单位)。
Parser:
Python
Expression:
!
shape.length@yards!
计算某要素的面积(以英亩为单位)。
Parser:
Python
Expression:
!
shape.area@acres!
代码实例-日期
计算当前日期。
Parser:
Python
Expression:
time.strftime("%d/%m/%Y")计算当前日期和时间。
Parser:
Python
Expression:
time.strftime("%d/%m/%Y%H:
%M")
代码实例-字符串
返回最右侧三个字符。
Parser:
Python
Expression:
!
SUB_REGION!
[-3:
]
将任意一个大写“P”替换为小写“p”。
Parser:
Python
Expression:
!
STATE_NAME!
.replace("P","p")通过空格分隔符串连两个字段。
Parser:
Python
Expression:
!
SUB_REGION!
+""+!
STATE_ABBR!
转换为正确的大小写形式
下列各例显示的是转换单词的不同方法,这些方法可使每个单词的首字母变为大写、其余字母变为小写。
Parser:
Python
Expression:
''.join([i.capitalize()foriin!
STATE_NAME!
.split('')])
Parser:
Python
Expression:
string.capwords(!
STATE_NAME!
'')
CodeBlock:
importstring
Parser:
Python
Expression:
MySub(!
STATE_NAME!
)
CodeBlock:
defMySub(myfieldname):
importstring
returnstring.capwords(myfieldname,'')
正则表达式
Python的re模块提供了正则表达式匹配操作,可用于对字符串执行复杂的模式匹配和替换
规则。
re–正则表达式操作正则表达式的用法
用单词“Street”替换“St”或“St.”,在字符串的末尾生成新单词。
Parser:
Python
Expression:
update_street(!
ADDRESS!
)
CodeBlock:
importre
defupdate_street(street_name):
returnre.sub(r"""\b(St|St.)\Z""",
'Street',
street_name)
累加计算和顺序计算
根据某间隔值计算顺序ID或数字。
Parser:
Python
Expression:
autoIncrement()
CodeBlock:
rec=0
defautoIncrement():
globalrec
pStart=1#adjuststartvalue,ifreq'd
pInterval=1#adjustintervalvalue,ifreq'd
if(rec==0):
rec=pStart
else:
rec=rec+pInterval
returnrec
计算数值型字段的累加值。
Parser:
Python
Expression:
accumulate(!
FieldA!
)
CodeBlock:
total=0
defaccumulate(increment):
globaltotal
iftotal:
total+=increment
else:
total=increment
returntotal
计算数值型字段的百分比增量。
Parser:
Python
Expression:
percentIncrease(float(!
FieldA!
))
CodeBlock:
lastValue=0
defpercentIncrease(newValue):
globallastValue
iflastValue:
percentage=((newValue-lastValue)/lastValue)*100
else:
percentage=0
lastValue=newValue
returnpercentage
随机值
通过numpy站点包来计算0.0和1.0之间的随机浮点值。
Parser:
Python
Expression:
getRandomValue()
CodeBlock:
importnumpy.randomasR
defgetRandomValue():
returnR.random()
计算空值
使用Python表达式,可通过PythonNone来计算空值。
注:
仅当该字段为空时,才可以进行以下计算。
使用PythonNone计算空值。
Parser:
Python
Expression:
None