ArcGIS for Desktop

  • 文档
  • 合约
  • 支持

  • My Profile
  • 帮助
  • Sign Out
ArcGIS for Desktop

ArcGIS Online

专为贵组织打造的制图平台

ArcGIS for Desktop

全面的专业性 GIS

ArcGIS for Server

面向企业的 GIS

ArcGIS for Developers

用于构建位置感知应用程序的工具

ArcGIS Solutions

适用于行业的免费模板地图和应用程序

ArcGIS Marketplace

获取适用于组织的应用程序和数据

  • 文档
  • 合约
  • 支持
Esri
  • 登录
user
  • 我的个人资料
  • 登出

帮助

  • 主页
  • 入门
  • 制图
  • 分析
  • 管理数据
  • 工具
  • 更多...

计算字段

  • 摘要
  • 用法
  • 语法
  • 代码实例
  • 环境
  • 许可信息

摘要

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

查看计算字段工具的使用示例

用法

  • 可使用几何对象(包括 type、extent、centroid、firstPoint、lastPoint、area、length、isMultipart 和 partCount)中的属性来创建 Python 表达式,例如 !shape.area!。

  • Python 表达式可以将几何的 area 与 length 属性与面积或线性单位结合使用,从而将值转换为不同的测量单位(如 !shape.length@kilometers!)。如果数据存储在地理坐标系中且具有线性单位(例如英里),则使用测地线算法计算长度。在地理数据中使用面积单位会产生不正确的结果,这是因为沿地球面的十进制度数并不一致。

    • 面积测量单位关键字:
      • 英亩 | 公亩 | 公顷 | 平方厘米 | 平方分米 | 平方英寸 | 平方英尺 | 平方千米 | 平方米 | 平方英里 | 平方毫米 | 平方码 | 平方地图单位 | 未知
    • 线性测量单位关键字:
      • 厘米 | 十进制度 | 分米 | 英尺 | 英寸 | 千米 | 米 | 英里 | 毫米 | 海里 | 磅 | 未知 | 码
  • 通过结合使用 geodesicArea 或 geodesicLength 属性与面积或线性测量单位,Python 表达式可用于计算要素的测地线面积或长度(如 !shape.geodesicArea@hectares! 或 !shape.geodesicLength@miles!)。

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

  • 每次操作仅能对一个字段应用计算。

  • 请注意,此工具支持输出范围环境设置。将仅计算该范围内要素的字段值。环境设置对非空间数据(例如表)没有影响。

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

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

    对于 VB 计算,字段名称必须用方括号括起([fieldname])。

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

  • 此工具也可用于更新字符项。应对使用字符串的表达式添加单引号(例如 [CHARITEM] = 'NEW STRING')。但是,如果字符串已包含单引号,则要对该字符串添加双引号(例如 [CHARITEM] = "TYPE'A'")。

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

  • 如果已指定 Python 表达式,则此工具支持 arcgis.rand() 函数。已为 ArcGIS 工具创建 arcgis.rand() 函数,不应将此函数与 Python 的 random 模块相混淆。arcgis.rand() 函数的可用分布的语法在随机值的分布语法中进行介绍。

  • 表达式与代码块会相互连接。代码块必须返回与表达式的关联;代码块的结果应传入到表达式中。

  • 代码块参数可用于创建复杂表达式。您可以在对话框中直接输入代码块,或在脚本中将代码块作为连续字符串输入。

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

  • 保存的 ArcGIS 先前版本的 VB .cal 文件可以直接使用或者只需做少量修改后即可使用。如果拥有使用 ArcObjects 的过去版本的 VBA 代码,则需要修改计算才可进行工作。

  • 计算连接数据时,您无法直接计算连接列。然而,您可以直接计算源表的列。要计算连接数据,必须先将连接表或连接图层添加至地图。然后可以分别对此数据执行计算。这些更改将反映在连接列中。

  • 64 位产品(包括 ArcGIS for Desktop - 后台地理处理(64 位) 和 ArcGIS for Server)已不支持使用 VB 表达式类型的字段计算。要在这些产品中成功使用计算字段,应将表达式转换为 Python;在 后台地理处理(64 位) 中,也可以禁用后台处理。

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

  • 计算字段示例

语法

CalculateField_management (in_table, field, expression, {expression_type}, {code_block})
参数说明数据类型
in_table

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

Raster Catalog Layer; Mosaic Layer; Raster Layer; Table View
field

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

Field
expression

创建值以填充所选行的简单计算表达式。

SQL Expression
expression_type
(可选)

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

  • VB —表达式将使用标准 VB 格式编写。这是默认设置。
  • PYTHON —表达式将使用标准 Python 格式编写。地理处理器方法和属性的使用与创建 9.2 版地理处理器相同。
  • PYTHON_9.3 —表达式将使用标准 Python 格式编写。地理处理器方法和属性的使用与创建 9.3 版地理处理器相同。
警告:

64 位产品(包括 ArcGIS Pro、ArcGIS for Desktop - 后台地理处理(64 位) 和 ArcGIS for Server)不支持使用 VB 表达式类型的字段计算。要在这些产品中成功使用计算字段,应将表达式转换为 Python;在 后台地理处理(64 位) 中,也可以禁用后台处理。

String
code_block
(可选)

允许为复杂表达式输入代码块。

String

代码实例

计算字段 (CalculateField) 示例(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下使用 CalculateField 函数。

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.AddField_management("vegtable.dbf", "VEG_TYP2", "TEXT", "", "", "20")
arcpy.CalculateField_management("vegtable.dbf", "VEG_TYP2", 
                                '!VEG_TYPE!.split(" ")[-1]', "PYTHON_9.3")
计算字段 (CalculateField) 示例:计算质心

使用 CalculateField 将质心值分配给新字段。

# Name: CalculateField_Centroids.py
# Description: Use CalculateField to assign centroid values to new fields

# Import system modules
import arcpy

try: 
    # Set environment settings
    arcpy.env.workspace = "C:/data/airport.gdb"
 
    # Set local variables
    inFeatures = "parcels"
    fieldName1 = "xCentroid"
    fieldName2 = "yCentroid"
    fieldPrecision = 18
    fieldScale = 11
 
    # Add fields
    arcpy.AddField_management(inFeatures, fieldName1, "DOUBLE", 
                              fieldPrecision, fieldScale)
    arcpy.AddField_management(inFeatures, fieldName2, "DOUBLE", 
                              fieldPrecision, fieldScale)
 
    # Calculate centroid
    arcpy.CalculateField_management(inFeatures, fieldName1, 
                                    "!SHAPE.CENTROID.X!",
                                    "PYTHON_9.3")
    arcpy.CalculateField_management(inFeatures, fieldName2, 
                                    "!SHAPE.CENTROID.Y!",
                                    "PYTHON_9.3")
except Exception:
    e = sys.exc_info()[1]
    print(e.args[0])
计算字段 (CalculateField) 示例:计算范围

使用具有代码块的 CalculateField 计算基于范围的值。

# Name: CalculateField_Ranges.py
# Description: Use CalculateField with a codeblock to calculate values
#  based on ranges

# Import system modules
import arcpy
 
# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
 
# Set local variables
inTable = "parcels"
fieldName = "areaclass"
expression = "getClass(float(!SHAPE.area!))"
codeblock = """def getClass(area):
    if area <= 1000:
        return 1
    if area > 1000 and area <= 10000:
        return 2
    else:
        return 3"""
 
# Execute AddField
arcpy.AddField_management(inTable, fieldName, "SHORT")
 
# Execute CalculateField 
arcpy.CalculateField_management(inTable, fieldName, expression, "PYTHON_9.3", 
                                codeblock)
计算字段 (CalculateField) 示例:计算随机值

使用 CalculateField 将随机值分配给新字段。

# Name: CalculateField_Random.py
# Description: Use CalculateField to assign random values to a new field

# Import system modules
import arcpy
 
# Set environment settings
arcpy.env.workspace = "C:/data/airport.gdb"
  
# Set local variables
inFeatures = "parcels"
fieldName = "RndValue"
expression = "arcgis.rand('Integer 0 10')"
 
# Execute AddField
arcpy.AddField_management(inFeatures, fieldName, "LONG")
 
# Execute CalculateField 
arcpy.CalculateField_management(inFeatures, fieldName, expression, "PYTHON_9.3")

环境

  • 当前工作空间
  • 范围

相关主题

  • 字段工具集概述
有关此主题的反馈?

ArcGIS for Desktop

  • 主页
  • 文档
  • 合约
  • 支持

ArcGIS 平台

  • ArcGIS Online
  • ArcGIS for Desktop
  • ArcGIS for Server
  • ArcGIS for Developers
  • ArcGIS Solutions
  • ArcGIS Marketplace

关于 Esri

  • 关于我们
  • 招贤纳士
  • 内部人员博客
  • 用户大会
  • 开发者峰会
Esri
© Copyright 2016 Environmental Systems Research Institute, Inc. | 隐私政策 | 法律声明