计算字段 (多个) (数据管理)

摘要

为要素类、要素图层或栅格计算两个或更多个字段的值。

使用情况

    警告:

    此工具会修改输入数据。 有关详细信息以及避免数据被意外更改的策略,请参阅修改或更新输入数据的工具

  • 要了解有关 Python 表达式的详细信息,请参阅计算字段 Python 示例

    要了解有关 Arcade 表达式的详细信息,请参阅 ArcGIS Arcade 指南

    要了解有关 SQL 表达式的详细信息,请参阅计算字段值

  • 使用所选要素集(如使用创建要素图层按属性选择图层工具从查询创建的要素集)时,此工具将只更新所选的记录。

  • 现有字段值将被覆盖。 如果想要保留原始字段值,请创建输入表副本。

  • 对于 Python 计算,必须在字段名称两边添加惊叹号(例如 !fieldname!)。

    对于 Arcade 计算,字段名称必须以 $feature. 为前缀(例如,$feature.fieldname)。

  • 计算文本或字符字段的字符串时,在对话框中,字符串必须使用双引号(例如 "string"),而在脚本中,还必须对使用双引号的字符串两边添加单引号(例如,'"string"')。

  • 要计算数值字段,可在表达式参数中输入数值,且值的两旁不加引号。

  • 您可以使用代码块参数来创建复杂表达式。 可在对话框中直接输入代码块,或在脚本中将代码块作为字符串输入。 表达式与代码块会相互连接。 代码块必须返回与表达式的关联;代码块的结果必须传入到表达式中。

    只有 Python 表达式支持代码块参数。

  • 您可以在代码块参数中使用 Python math 模块及格式。 您还可以导入附加模块。 math 模块可提供数论函数与表达函数、幂函数与对数函数、三角函数、角度转换函数、双曲函数以及数学常数。 要了解更多有关 math 模块的内容,请参阅 Python 帮助。

  • 要在 Python 中计算几何信息,请使用 Geometry 对象属性。 例如,使用 !shape.pointCount! 表达式计算要素中的折点数。

    注:

    计算几何属性工具支持相似的计算。

    要在 Python 中计算面积和长度,请使用包含方法和单位类型的 getAreagetLength 方法。

    • 要以平方千米为单位计算面的测地线面积,请使用以下表达式:
      !shape.getArea('GEODESIC', 'SQUAREKILOMETERS')!
    • 要以码为单位计算折线(或面)的平面长度,请使用以下表达式:
      !shape.getArea('PLANAR', 'YARDS')

    有关详细信息,请参阅 PolygonPolyline 对象。

    了解有关地理处理工具以及线性和面积单位的详细信息

  • 使用连接数据时,您仅可以更新源表中的字段。 您无法更新连接表中的字段。 要在连接表上执行计算,请直接在该表上执行计算。

  • 如果 Python 表达式尝试串联含有空值或者除数为零值的字符串字段,则会为该字段值返回空值。

  • SQL 表达式可用于加快要素服务和企业级地理数据库的计算速度。 使用该表达式可以将单次请求设置为服务器或数据库,而不必一次执行一个要素或一行的计算,从而提高计算速度。

    仅要素服务和企业级地理数据库支持 SQL 表达式。 对于其他格式,请使用 PythonArcade 表达式。

    SQL 选项用于表达式类型参数具有以下限制:

    • 该选项仅支持 Db2OraclePostgreSQLSAP HANASQL Server 企业级地理数据库。
    • 不支持在连接表上计算字段值。
    • 不支持版本化和已存档的企业级地理数据库数据。
    • 不支持撤消地理处理操作

    有关 SQL 表达式的帮助,请参阅数据库供应商文档。

参数

标注说明数据类型
输入表

包含将通过新的计算进行更新的字段的表。

Table View; Raster Layer; Mosaic Layer
表达式类型

指定要使用的表达式类型。

如果输入是要素服务,则默认表达式类型为 SQL。 对于任意类型的输入,默认表达式类型均为 Python

要了解有关 Python 表达式的详细信息,请参阅计算字段 Python 示例

要了解有关 Arcade 表达式的详细信息,请参阅 ArcGIS Arcade 指南

要了解有关 SQL 表达式的详细信息,请参阅计算字段值

  • Python将使用 Python 表达式类型。
  • Arcade将使用 Arcade 表达式类型。
  • SQL将使用 SQL 表达式类型。
  • VBScript将使用 VBScript 表达式类型。
String
字段

将计算的字段及其表达式和 where 子句。

将用于选择记录子集的可选 SQL 表达式。 仅计算与此 where 子句匹配的记录。 如果 where 子句留空,将计算所有记录。 有关 SQL 语法的详细信息,请参阅在 ArcGIS 中使用的查询表达式的 SQL 参考

Value Table
代码块
(可选)

将用于复杂表达式的代码块。

此函数不能用于返回多个值。

String
强制域
(可选)

指定是否将强制执行字段属性域规则。

  • 选中 - 将强制执行字段属性域规则。 如果某个字段无法更新,则该字段值将保持不变,并且工具消息中将包含一条警告消息。
  • 未选中 - 将不会强制执行字段属性域规则。 这是默认设置
Boolean

派生输出

标注说明数据类型
输出表

已更新的表。

Table View; Raster Layer; Mosaic Layer

arcpy.management.CalculateFields(in_table, expression_type, fields, {code_block}, {enforce_domains})
名称说明数据类型
in_table

包含将通过新的计算进行更新的字段的表。

Table View; Raster Layer; Mosaic Layer
expression_type

指定要使用的表达式类型。

  • PYTHON3将使用 Python 表达式类型。
  • ARCADE将使用 Arcade 表达式类型。
  • SQL将使用 SQL 表达式类型。
  • VB将使用 VBScript 表达式类型。

如果输入是要素服务,则默认表达式类型为 SQL。 对于任意类型的输入,默认表达式类型均为 PYTHON3

要了解有关 Python 表达式的详细信息,请参阅计算字段 Python 示例

要了解有关 Arcade 表达式的详细信息,请参阅 ArcGIS Arcade 指南

要了解有关 SQL 表达式的详细信息,请参阅计算字段值

String
fields
[[Field Name, Expression, {Where Clause}],...]

将计算的字段及其表达式和 where 子句。

将用于选择记录子集的可选 SQL 表达式。 仅计算与此 where 子句匹配的记录。 如果 where 子句留空,将计算所有记录。 有关 SQL 语法的详细信息,请参阅在 ArcGIS 中使用的查询表达式的 SQL 参考

Value Table
code_block
(可选)

将用于复杂表达式的代码块。

此函数不能用于返回多个值。

String
enforce_domains
(可选)

指定是否将强制执行字段属性域规则。

  • ENFORCE_DOMAINS将强制执行字段属性域规则。
  • NO_ENFORCE_DOMAINS将不会强制执行字段属性域规则。 这是默认设置。
Boolean

派生输出

名称说明数据类型
out_table

已更新的表。

Table View; Raster Layer; Mosaic Layer

代码示例

CalculateFields 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下通过 Python 表达式类型使用 CalculateFields 函数。

import arcpy
arcpy.env.workspace = "C:/data/airport.gdb"
arcpy.management.CalculateFields("parcels", "PYTHON3", 
                                 [["xCentroid", "!SHAPE.CENTROID.X!"], 
                                  ["yCentroid", "!SHAPE.CENTROID.Y!"]])
CalculateFields 示例 2(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下通过 SQL 表达式类型使用 CalculateFields 函数。

import arcpy
arcpy.management.CalculateFields("<a feature service url>", "SQL", 
                                 [["ceiling_field", "CEILING(field1)"], 
                                  ["floor_field", "FLOOR(field1)"]])
CalculateFields 示例 3(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下通过 Arcade 表达式类型使用 CalculateFields 函数。

import arcpy
arcpy.env.workspace = "C:/data/airport.gdb"
arcpy.management.CalculateFields(
    "parcels", "ARCADE", 
    [["max_value", "Max($feature.field1, $feature.field2)"], 
     ["min_value", "Min($feature.field1, $feature.field2)"]])