Arcgis-Wiki_04-字段计算器

# 前言

使用键盘输入值并不是编辑表中值的唯一方式。在某些情况下,为了设置字段值,可能要对单条记录甚至是所有记录执行数学计算。您可以对所有记录或选中记录执行简单计算和高级计算。

此外,还可以在属性表中的字段上计算面积、长度、周长和其他几何属性

简单计算

计算字符串

如内容为数值(字符串中可以存储数值,相反则不可以),直接输入即可。

如内容为字符串,要使用英文双引号引起来。

涉及到字符串的连接,将多个字段使用&连接即可,例如想要将SHENG和XIAN两个字段连接,同时中间以“-”隔开(Python状态下字段名用!引起,连接使用+):

[SHENG]&"-"&[XIAN]

计算数值

简单的加减乘除运算,如计算男人MEN和女人WOMEN的总数:

[MEN]+[WOMEN]

使用内置函数

VBScript 函数

字符串操作

Asc 返回指定字母的ASCII代码

Chr 根据ASCII代码返回对应的字符

String(数目,字符串) 返回具有指定长度的、重复字符组成的字符串,(重复字符取字符串的第一位)例:

MyString = String(5,"*") '返回"*****"
MyString = String(5,"ABC") '返回"AAAAA"

Lcase 英文字符转为小写

MyString = Lcase("BIGHEAD") '返回"bighead"

Ucase 英文字符转为大写

MyString = Ucase("bighead") '返回"BIGHEAD"

Ltrim 去除左端空格

MyString = Ltrim(" BIGHEAD") '返回"BIGHEAD"

Rtrim 去除右端空格

MyString = Rtrim("BIGHEAD ") '返回"BIGHEAD"

Trim 去除左右端空格

MyString = Trim(" BIGHEAD ") '返回"BIGHEAD"

Left([字段名],length) 自左侧取length个字符

MyString = Left("BIGHEAD",3) '返回"BIG"

Right([字段名],length) 自右侧取length个字符

MyString = Right("BIGHEAD",4) '返回"HEAD"

Mid([字段名],起始字符序号,长度) 自第几个字符向右取指定长度的字符(索引从1开始,包含起始字符,长度参数可以省略),例:

MyString = "Mid Function Demo" '创建一个字符串
FirstWord = Mid(MyString, 1, 3) ' 返回 "Mid" 
LastWord = Mid(MyString, 14, 4) '返回 "Demo"
MidWords = Mid(MyString, 5) '返回 "Function Demo

Len([字段名]) 获取字段长度

Len("BIGHEAD") '返回7

Space(空格个数) 返回指定个数的空格(可与连字符结合使用在字符串前面或者后面加固定个数的空格)

MyString = Space(3) & "BIGHEAD" '返回 "   BIGHEAD"

Replace([字段名],"替换前的字符","替换后的字符")

MyString = Replace("ABC","B","C") '返回 "ACC"

拓展一下

结合上面函数,组合一个:字段前面补零成为固定长度字符串

String(目标长度-Len([目标字段]),"0") & [目标字段]

数值操作

ABS([字段名]) 取绝对值

ATN ([字段名]) 反正切值

SIN COS TAN 三角函数

FIX([字段名]) 返回数的整数部分

FIX(-8.4)  '返回 -8
FIX(8.4)  '返回 8

INT ([字段名]) 返回数的整数部分

Int(-8.4)  '返回 -9
Int(8.4)  '返回 8

SQR ([字段名]) 返回数的平方根

SQR(4) '返回 2

LOG EXP 对数,不常用

Python函数

Python 计算表达式字段将使用惊叹号 (!!) 括起。

字符串切片

此模式综合了VBScript里的left、right和mid函数,但又具有自己独特优点,如截取除前几位或者后几位的字符,不用函数组合。

!字段名![起始位置下标:结束位置下标]

索引从0开始;

表示截取字符串起始位置的字符到结束位置的字符;

包含起始字符但不包含结束字符;

截取的字符长度为结束位置下标-起始位置下标;

冒号前面为空或者0表示从第一位开始截取;

冒号后面为空表示截取起始位置字符到字符结束,并包含结束字符。

截取除前几位的字符:!字段名![字符长度:]

字段名为XIANG 内容为:123456大东方乡 公式:!XIANG![6:] 结果:大东方乡

截取除后几位的字符:!字段名![:-字符长度]

字段名为XIANG 内容为:大东方乡123456 公式:!XIANG![:-6] 结果:大东方乡

截取前几位字符: !字段名![:字符长度]

字段名为XIANG 内容为:123456大东方乡 公式:!XIANG![:6] 结果:123456

截取后几位字符: !字段名![-字符长度:]

字段名为XIANG 内容为:大东方乡123456 公式:!XIANG![-6:] 结果:123456

数值计算

Python 提供了处理数字的工具。Python 也支持一些数值和数学函数,包括 math、cmath、decimal、random、itertools、functools 和 operator。

Python 具有多个可用的内置函数,包括 max、min、round 和 sum。

这里介绍一下取余符号 %,在获取单行或者获取等高线计曲线(加粗的那根)时会用到

5 % 2 '返回 1

使用代码块

代码块的使用方式取决于表达式类型参数。计算字段工具支持将 PYTHON、PYTHON_9.3 和 VB 作为表达式类型。此处只介绍Python代码块,了解即可,如需更深学习,请先行熟悉Python语法。

各 Python 函数可通过 def 关键字定义,关键字后为函数的名称以及函数的输入参数。函数名称可由您自行选取(不得使用空格,也不得以数字开头)。

可编写 Python 函数,使 Python 函数能够接受任何数量的输入参数(也可以没有任何参数)。函数将通过 return 语句返回值。

字段计算器01

随机值

解析程序:
Python
表达式:
getRandomValue()
代码块:
import numpy
def getRandomValue():
    return numpy.random.random()

根据某间隔值计算顺序 ID 或数字

解析程序:
Python
表达式:
autoIncrement()
代码块:
rec=0
def autoIncrement():
    global rec
    pStart = 1 #设置起始值 
    pInterval = 1 #设置间隔值
    if (rec == 0): 
        rec = pStart 
    else: 
        rec = rec + pInterval 
    return rec

按照字段值进行分类

解析程序:
Python
表达式:
Reclass(!WELL_YIELD!)
代码块:
def Reclass(WellYield):
    if (WellYield >= 0 and WellYield <= 10):
        return 1
    elif (WellYield > 10 and WellYield <= 20):
        return 2
    elif (WellYield > 20 and WellYield <= 30):
        return 3
    elif (WellYield > 30):
        return 4

获取最大值字段名称

解析程序:
Python
表达式:
getMaxFieldName(!GT_YLD!, !GT_GMLD!, !GT_QTLD!, !GT_GD!)
代码块:
def getMaxFieldName(GT_YLD, GT_GMLD, GT_QTLD, GT_GD):
    dic = {"GT_YLD": GT_YLD, "GT_GMLD": GT_GMLD, "GT_QTLD": GT_QTLD, "GT_GD": GT_GD}
    return max(dic, key=dic.get)

计算几何属性

“计算几何”工具可以访问图层的要素几何。根据输入图层的几何,此工具可以计算坐标值、长度和面积。这些计算都可以在字段计算器中计算,而且字段计算器支持更多的几何属性计算。

以下皆基于Python解析程序,请不要选择与要素类型不匹配的属性。

指定计算几何属性的单位

几何字段的面积和长度属性可通过表示为带有 @ 符号的单位类型进行修改。

面积测量单位

HECTARES 公顷
SQUAREMETERS 平方米
SQUAREKILOMETERS 平方公里
!shape.area@hectares!

线性测量单位

METERS 米
ILOMETERS 公里
!shape.length@meters!

指定小数位数

round(!shape.area@hectareas!,4) 以公顷为单位,保留四位小数

计算几何属性

计算面积

!shape.area!

计算周长

!shape.length!

计算最大或最小 x,y 坐标

!shape.extent.xmax!
!shape.extent.xmin!
!shape.extent.ymax!
!shape.extent.ymin!

计算内部中心点坐标

(等同于面要素转点,同时要求内部)

!shape.centroid.x!
!shape.centroid.y!

计算质心点坐标

!shape.truecentroid.x!
!shape.truecentroid.y!

计算是否为多部件

!shape.ismultipart!

计算多部件个数

!shape.partcount!

计算折点个数

!shape.pointcount!
posted @ 2019-09-15 18:12  大头和尚  阅读(1801)  评论(0编辑  收藏  举报