ArcGIS Pro 的字段计算器与 Python 结合使用
③种使用方式
在本教程中,我们将结合使用 Python 的计算字段工具和 Python 来操作现有的属性字段值并创建新的属性字段值。
使用属性数据时,您可能希望更改现有字段值或创建新字段值。Pro 提供使用 Python3 和 Arcade 函数,通过其字段计算器工具快速操作字段值。在本教程中,我们将提供一些示例,说明如何使用 Pro 的辅助函数和内置 Python 函数来操作现有字段值。
我们将使用 ArcGIS Online 中名为“伦敦自治市镇”的托管要素图层的属性表,其中包含一些有用的示例数据。为了能够在 Pro 中操作数据,我们必须将托管要素图层添加到 ArcGIS Pro 的地图界面,并首先使用复制要素地理处理工具制作要素副本。这是图层属性表的一个小示例:
示例 1:将 Area 字段值四舍五入为两位小数
在此示例中,我们将使用 Python 的内置 round() 函数将“Area (km2)”列值四舍五入为两位小数而不是三位小数。为此,我们将右键单击列名称(位于 HECTARES 列旁边)并选择“计算字段”以打开字段计算器工具。保持输入表字段不变,因为它会在打开工具时自动更新。我们不会覆盖我们现有的列值,而是为我们的圆形区域值创建一个新字段,因此在字段名称(现有或新)下选择一个新字段名称。
因为您正在创建新字段,所以您需要输入字段类型。这将是“Double”,因为我们需要两个十进制值而不是三个(当前值)。对于表达式类型,保持输入字段不变(它应该设置为“Python 3”)。接下来,双击“Area (km2)”字段,该字段将作为“!AREA!”添加到正下方的空白输入字段中。该字段位于输入“输入值”字段下方和“代码块”的正上方。接下来,更改 !AREA! 表达式为“round(!AREA!, 2)”,如下图:
接下来,单击空代码块下方的验证。该表达式应被评估为有效。最后,单击应用并忽略警告并在属性表的最右侧找到新填充的列。
示例 2:使用 Python 根据条件对现有列值进行重新分类
我们将知道将所有人口值重新分类为四个数值类别。这个想法是使用 Python if-else 语句,以便 Pro 自动对所有人口值进行重新分类。我们将使用以下值:所有低于 100,000 的值将被归类为“1”,所有介于 100,000 和 200,000 之间的值将被归类为“2”,所有介于 200,000 和 300,000 之间的值将被归类为“3”,所有高于 300,000 的值将被归类为“4”。右键单击属性表中的 Population 列名称,然后选择计算字段工具。在“Field Name (Existing or New)”下,填写新的字段名称,例如“Population Reclassify”。对于字段类型,选择短(小整数)。保持 Expression Type 字段不变 (Python 3),然后双击 Helpers 列表中的 Reclassify 辅助函数。这会自动使用以下文本填充表达式字段:Reclass(! 场地!)。如下图所示更改此字段的输入,并使用上面列出的有关类别和人口值的信息编辑代码字段。整个代码如下图所示。单击“确定”运行该工具并在最右侧的属性表中查找新字段。
示例 3:使用随机整数值填充新的空字段
Python 提供了多个用于生成随机值的库。您可以将它们用作表达式来填充字段计算器中的新空字段。因为我们没有像上面的示例那样使用现有的输入数据,而是即时创建新值,所以最好创建一个新的空字段,我们将使用 Python 创建的随机值填充该字段。通过单击属性表左上角的“添加”按钮在属性表中创建一个新字段。然后您可以选择字段名称和关联的数据类型。短整数类型在这里可以正常工作。要保存新添加的字段,请右键单击字段名称并选择“保存”。
接下来,在属性表中找到新字段并打开计算字段工具。确保在字段名称(现有或新)下选择了新的空字段名称。在表达式字段中,添加用于生成随机值的 Python 代码片段(见下图)。在代码块字段中,导入随机模块。单击“确定”,新字段将填充随机值。除了使用 random 模块,您还可以使用 numpy.random.random() 函数来返回随机数。此函数返回 0.0 和 1.0 之间的值。