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

摘要

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

使用情况

    警告:

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

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

    有关 Arcade 表达式的详细信息,请参阅开发人员帮助中的 ArcGIS Arcade

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

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

  • 此工具的 Arcade 表达式将使用字段计算 Arcade 配置文件Arcade 配置文件是评估和理解 Arcade 表达式的上下文。 当对 Arcade 表达式进行求值时,返回值将转换为输出值的字段类型。

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

  • 现有字段值将被覆盖。 要保留原始值,请创建输入表的副本作为备份,或者使用地理处理窗格中的启用撤消选项。

  • 对于 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.getLength('PLANAR', 'YARDS')

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

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

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

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

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

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

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

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

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

参数

标注说明数据类型
输入表

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

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

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

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

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

有关 Arcade 表达式的详细信息,请参阅开发人员帮助中的 ArcGIS Arcade

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

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

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

将计算的字段、要计算的表达式以及可选的 where 子句和字段类型。

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

如果输入表中不存在具有指定名称的字段,则会添加该字段。 将使用字段类型值来设置字段的类型。 如果未指定字段类型,则该字段将添加为文本字段。

可用字段类型如下:

  • 短整型(16 位整数)- 字段类型为短整型。 短整形字段支持介于 -32,768 和 32,767 之间的整数。
  • 长整型(32 位整数)- 此字段类型将为长整型。 长整型字段支持介于 2,147,483,648 和 2,147,483,647 之间的整数。
  • 大整数(64 位整数)- 字段类型将为大整数。 大整数字段支持 -(253) 和 253 之间的整数。
  • 浮点(32 位浮点型)- 字段类型为浮点型。 浮点型字段支持介于 -3.4E38 和 1.2E38 之间的小数。
  • 双精度(64 位浮点型)- 字段类型为双精度。 双精度字段支持介于 -2.2E308 和 1.8E308 之间的小数。
  • 文本 - 字段类型为文本。 文本字段支持字符串。
  • 日期 - 字段类型为日期。 日期字段支持日期和时间值。
  • 日期(高精度)- 日期字段类型将为高精度。 高精度日期字段支持毫秒时间的日期和时间值。
  • 仅日期 - 此字段类型将为仅日期。 仅日期字段支持不带时间值的日期值。
  • 仅时间 - 此字段类型将为仅时间。 仅时间字段支持不带日期值的时间值。
  • 时间戳偏移 - 此字段类型将为时间戳偏移。 时间戳偏移字段支持日期、时间和相对于 UTC 值的偏移。
  • Blob(二进制数据)- 字段类型为 BLOB。 BLOB 字段支持将数据存储为长度较长的一系列二进制数。 您需要一个自定义的加载器、查看器或第三方应用程序将这些项加载到 BLOB 字段中或者查看 BLOB 字段的内容。
  • GUID(全局唯一标识符)- 字段类型为 GUID。 GUID 字段可存储注册表样式的字符串,该字符串包含用大括号括起来的 36 个字符。
  • 栅格影像 - 字段类型为栅格。 栅格字段格可在地理数据库中存储栅格数据或者将该数据与地理数据库一同存储。 可以存储 ArcGIS 软件支持的所有栅格数据集格式,但建议您仅使用小影像。
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 表达式的详细信息,请参阅计算字段值

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

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

将计算的字段、要计算的表达式以及可选的 where 子句和字段类型。

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

如果输入表中不存在具有指定名称的字段,则会添加该字段。 将使用字段类型值来设置字段的类型。 如果未指定字段类型,则该字段将添加为文本字段。

可用字段类型如下:

  • SHORT - 字段类型为短整型。 短整形字段支持介于 -32,768 和 32,767 之间的整数。
  • LONG - 字段类型为长整型。 长整型字段支持介于 2,147,483,648 和 2,147,483,647 之间的整数。
  • BIGINTEGER - 此字段类型将为大整数。 大整数字段支持 -(253) 和 253 之间的整数。
  • FLOAT - 字段类型为浮点型。 浮点型字段支持介于 -3.4E38 和 1.2E38 之间的小数。
  • DOUBLE - 字段类型为双精度。 双精度字段支持介于 -2.2E308 和 1.8E308 之间的小数。
  • TEXT - 字段类型为文本。 文本字段支持字符串。
  • DATE - 字段类型为日期。 日期字段支持日期和时间值。
  • DATEHIGHPRECISION - 日期字段类型将为高精度。 高精度日期字段支持毫秒时间的日期和时间值。
  • DATEONLY - 此字段类型将仅为日期。 仅日期字段支持不带时间值的日期值。
  • TIMEONLY - 此字段类型将仅为时间。 仅时间字段支持不带日期值的时间值。
  • TIMESTAMPOFFSET - 此字段类型将为时间戳偏移。 时间戳偏移字段支持日期、时间和相对于 UTC 值的偏移。
  • BLOB - 字段类型为 BLOB。 BLOB 字段支持将数据存储为长度较长的一系列二进制数。 您需要一个自定义的加载器、查看器或第三方应用程序将这些项加载到 BLOB 字段中或者查看 BLOB 字段的内容。
  • GUID - 字段类型为 GUID。 GUID 字段可存储注册表样式的字符串,该字符串包含用大括号括起来的 36 个字符。
  • RASTER - 字段类型为栅格。 栅格字段格可在地理数据库中存储栅格数据或者将该数据与地理数据库一同存储。 可以存储 ArcGIS 软件支持的所有栅格数据集格式,但建议您仅使用小影像。
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)"]])
CalculateFields 示例 4(Python 窗口)

以下 Python 窗口脚本示例演示了如何将 CalculateFields 函数与 SQL 表达式配合使用。

import arcpy
arcpy.env.workspace = "C:/data/airport.gdb"

# Calculate the Field1 field to -1 if the value is null.
# Calculate the Title field to remove any leading spaces if the first character
# is a space.
arcpy.management.CalculateFields(
    "parcels", "PYTHON3", 
    [['Field1', -1, "Field1 IS NULL"],
     ['Title', '!Address!.lstrip()', "Title LIKE ' %'"]])

许可信息

  • Basic: 是
  • Standard: 是
  • Advanced: 是

相关主题