之前写过一篇【字段计算器的简单用法和示例】:
https://blog.csdn.net/xcc34452366/article/details/128776450
说了一些字段计算的使用方法,主要是针对python的用法。
不是很完整,这里再补充一些内容。
欢迎关注同名微信公众号,更多文章推送:
1、数字前填充0
一般用在编号中, 例如取【OBJECTID】的数字并在前面填充0至5位,注意计算的字段必须是字符串型。因为【OBJECTID】的值是数字,所以要加str()转成字符串:
str(!OBJECTID!).zfill(5)
2、小数点后保留固定位数,不足部分用0填充
正常情况下用round()函数可以保留固定位数,但是因为生成的是数值型,所以如果最后位是0会自动消掉。如果想要实现不足部分用0填充,则需要字段为字符串型,并如下计算:
format(!TBMJ!, '.5f')
3、文本居中,两端填充
再整点活,如果想在文本两端都进行填充。例如要在文本前后都填充【0】至文本长度为8:
!JQDLMC!.center(8,"0")
4、文本左右对齐,另一端填充
例如文本左对齐,右侧填充至8位:
!JQDLMC!.ljust(8,"%")
相反的话则是:
!JQDLMC!.rjust(8,"%")
5、获取特定字符在字符串的位置
例如获取字符串中【8】的位置,注意是从左开始获取第一个【8】的位置:
!BSM!.find("8")
如果是从右开始获取:
!BSM!.rfind("8")
6、获取多个数字型字段值中的最大值或最小值
取最大值:
max(!TBMJ!,!Shape_Area!)
取最小值:
min(!TBMJ!,!Shape_Area!)
7、获取随机数
例如要获取0至10之间的随机整数:
random.randrange(0,10)
在代码块中输入:
import random
8、赋空值
空值不是空格:
None
9、计算数字的百分比变化
例如计算图斑的面积变化,以百分比的方式表达:
PercentChange(!TBMJ!)
在代码块中输入:
lastValue = 0
def PercentChange(arg):
newValue = arg
global lastValue
if lastValue:
percentage = (float(newValue - lastValue) / lastValue) * 100
else:
percentage = 0
lastValue = newValue
return percentage
10、计算数字的累积值
例如逐个累积图斑的面积之和:
AccumulateValue(!TBMJ!)
在代码块中输入:
total = 0
def AccumulateValue(arg):
value = arg
global total
if total:
total += value
else:
total = value
return total
11、给图斑顺序编号
结果输入:
SequentialNumber()
在代码块中输入:
rec=0
def SequentialNumber():
global rec
pStart = 1
pInterval = 1
if (rec == 0):
rec = pStart
else:
rec = rec + pInterval
return rec
12、获取面要素的折点数
可以获取面要素折点线,需注意获取的折点数包括首末点,比你看上去的要多一个。选择一个整型字段进行计算:
getVertexCount(!shape!)
在代码块中输入:
def getVertexCount(feat):
partnum = 0
partcount = feat.partCount
pntcount = 0
while partnum < partcount:
part = feat.getPart(partnum)
pnt = part.next()
while pnt:
pntcount += 1
pnt = part.next()
if not pnt:
pnt = part.next()
partnum += 1
return pntcount
13、移动点要素
在【shape】字段上点击计算字段,实现点要素x坐标增加100:
shiftXCoordinate(!SHAPE!)
在代码块中输入:
def shiftXCoordinate(shape):
shiftValue = 100
point = shape.getPart(0)
point.X += shiftValue
return point