在GIS数据处理中,ArcGIS的字段计算器是一个强大的工具,它可以帮助我们进行各种数值计算、文本处理和逻辑判断。本文将为您整合和分类介绍ArcGIS字段计算器中的常用公式,并通过实例说明它们的应用。
基本四则运算
直接使用+、-、*、/进行加、减、乘、除操作。
!面积1! + !面积2! - !面积3! * !面积4!
四舍五入
使用round()函数保留小数点后指定位数。
round(!Shape_Area!, 2)
向下取整
使用//操作符进行向下取整。
!Shape_Area! // 400
向上取整
结合//和+操作符实现向上取整。
!Shape_Area! // 400 + 2
随机数生成
使用Python的random模块生成随机数。
random.randint(0, 10)
字符串连接
使用+操作符或&符号连接字符串。
!字段1! + " " + !字段2!
字符串切片
使用[:]进行字符串切片操作。
!字符串01![:3] # 提取前3位
字符串替换
使用replace()方法替换字符串中的特定内容。
!字符串01!.replace('县', '市')
字符串格式化
使用format()函数进行字符串格式化。
format(!TBMJ!, '.5f')
获取当前日期和时间
使用datetime.datetime.now()获取当前日期和时间。
datetime.datetime.now()
日期时间计算
使用DateAdd和DateDiff进行日期时间的计算。
DateAdd(!日期字段!, 10) # 增加10天
if-else语句
使用Python的if-else逻辑进行条件判断。
if !条件字段! == '条件值':
'结果1'
else:
'结果2'
条件最大值或最小值
使用max()和min()函数结合条件表达式。
max(if !条件字段! == '条件值1' then !值字段1! else 0, if !条件字段! == '条件值2' then !值字段2! else 0)
计算椭球面积
使用!shape.geodesicArea!计算要素的椭球面积。
!shape.geodesicArea!
计算要素的四至坐标
使用!shape.extent.XMax!、!shape.extent.XMin!获取要素的四至坐标。
东:!shape.extent.XMax!
西:!shape.extent.XMin!
南:!shape.extent.YMin!
北:!shape.extent.YMax!
自动生成编号
使用预逻辑脚本和全局变量实现自动编号。
rec=0
def Increment(Start=1, Interval=1):
global rec
if (rec == 0):
rec = Start
else:
rec = rec + Interval
return rec
重复记录自动编号
对重复的记录进行自动编号。
UniqueDict = {}
def isDuplicateIndex(inValue):
UniqueDict.setdefault(inValue, 0)
UniqueDict[inValue] += 1
return str(UniqueDict[inValue]).zfill(3)
随机编号
生成指定范围内的随机编号。
def getnums():
return arcgis.rand('Integer 5 15')
累积值计算
使用全局变量对字段值进行累积计算。
total = 0
def AccumulateValue(arg):
global total
if total:
total += arg
else:
total = arg
return total
顺序编号
为要素赋予顺序编号,通常用于排序或创建唯一标识符。
rec = 0
def SequentialNumber():
global rec
pStart = 1
pInterval = 1
if (rec == 0):
rec = pStart
else:
rec = rec + pInterval
return rec
移动点要素
在空间上移动点要素的位置。
def shiftXCoordinate(shape):
shiftValue = 100
point = shape.getPart(0)
+= shiftValue
return point
百分比变化计算
计算两个数值间的百分比变化。
lastValue = 0
def PercentChange(arg):
global lastValue
newValue = arg
if lastValue:
percentage = ((newValue - lastValue) / lastValue) * 100
else:
percentage = 0
lastValue = newValue
return percentage
度分秒转十进制度
将经纬度的度分秒格式转换为十进制度数。
def ss(a):
index1 = a.find(u'°')
index2 = a.find(u'′')
index3 = a.find(u'″')
degree = float(a[0:index1])
minutes = float(a[index1 + 1:index2])
seconds = float(a[index2 + 1:index3])
result = degree + minutes / 60 + seconds / 3600
return result
提取中文、英文、数字、特殊符号
使用正则表达式提取字符串中的特定字符。
import re
def ss(a):
va = re.findall(u'[\u4e00-\u9fa5]+', a)
result = ''.join(va)
return result
字段值前面补齐0
为数值字段前面补齐0至指定位数。
(8 - len(str(!数值01!))) * '0' + str(!数值01!)
字符串居中,两端填充
将字符串居中并在两端填充指定字符。
!你的字段!.center(8, "0")
获取特定字符在字符串的位置
获取字符串中特定字符的位置。
!BSM!.find("8")#例如这里我找8的位置
计算要素的折点数
计算面要素的折点数,包括首末点。
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
字段动态计算
根据字段值的大小,赋予不同的分类标签。
"大" if !数值字段! > 100 else "中" if !数值字段! > 50 else "小"
面积转换
将面积单位从平方米转换为公顷或亩。
round(!Shape_Area! / 10000, 2)#转换公顷保留2位
round(!Shape_Area! / 10000*15, 2)#转换亩保留2位
字符串编码
对字符串进行编码,转换为URL参数。
import urllib.parse
urllib.parse.quote_plus(!字符串字段!)
字符串解码
对URL参数进行解码,还原为原始字符串。
import urllib.parse
urllib.parse.unquote(!编码字符串字段!)
多条件判断
使用复杂的逻辑判断来决定字段值。
"优" if !成绩! >= 90 else "良" if !成绩! >= 75 else "中" if !成绩! >= 60 else "差"
条件字段格式化
根据条件判断,对字段进行格式化。
format(!数值字段!, '.2f') if !条件字段! else "N/A"
计算两点间距离
计算两个点要素之间的距离。
!shape1!.distanceTo(!shape2)!
点是否在多边形内
判断点是否在多边形内。
!shape_point!.within(!shape_polygon!)
字段值累计求和
对一组记录的字段值进行累计求和。
def runningTotal():
total = 0
for val in !数值字段!:
total += val
yield total
基于时间的动态计算
根据时间字段的值进行动态计算。
!日期字段!.year + (!日期字段!.month - 1) // 3
经纬度转换为UTM坐标
将经纬度坐标转换为UTM坐标。
arcpy.Point(!经度字段!, !纬度字段!).toUTM()
字段值的统计分析
对字段值进行统计分析,如计算平均值、中位数等。
统计平均值 = !数值字段!.sum() / float(!数值字段!.count())
地理编码
将地址字段转换为地理坐标。
arcpy.Geocoding.GeocodeAddresses(!地址字段!, !X坐标字段!, !Y坐标字段!)
字段值的标准化
将数值字段标准化到0-1范围内。
(!数值字段! - !数值字段!.min()) / (!数值字段!.max() - !数值字段!.min()
以上就是ArcGIS字段计算器公式的全面总结,涵盖了数值计算、文本处理、日期时间、逻辑判断以及空间计算等多个方面。掌握这些公式,将大大提高GIS数据处理的效率和灵活性。希望这篇文章能成为您工作中的得力助手。
注意:本文整合的公式基于ArcGIS的字段计算器功能,实际使用时请根据具体字段名和数据情况进行调整。如有任何疑问或需要进一步的帮助,欢迎在评论区留言讨论。