添加连接 (Data Management)
摘要
基于公用字段将图层连接到另一图层或表(其中图层是指带有栅格属性表的要素图层、表视图或栅格图层)。
连接表中的记录与输入图层名称中的记录相匹配。输入连接字段值与输出连接字段值相等时,即表示匹配。此连接是临时性连接。
插图
用法
-
输入必须是带有属性表的要素图层、表视图或栅格图层;不能是要素类或表。
-
连接表中的记录可以与输入图层或表视图中的多个记录相匹配。有关一对一、多对一、一对多和多对多连接的详细信息,请参阅关于连接和关联表。
连接表时,默认选项是保留所有记录。如果目标表中的某条记录在连接表中没有匹配项,则对于从连接表追加到目标表中的所有字段,该记录将被赋予空值。
使用“仅保留匹配记录”选项时,如果目标表中的某条记录在连接表中没有匹配项,则该记录将被从生成的目标表中移除。如果目标表是某一图层的属性表,则未连接数据的要素将不会显示在地图上。
-
连接表可以是以下任意一种类型的表:地理数据库表(ArcSDE、文件或个人)、dBASE 文件、INFO 表或 OLE DB 表。
-
输入图层或表视图必须有 ObjectID 字段。连接表不必包含 ObjectID 字段。
添加或移除连接时,将保留字段属性,例如别名、可见性和数字格式设置。
如果已存在使用同一表名的连接,例如,将图层 A 连接到表 B 后,再次运行工具连接表 B 时就会出现警告,指示该连接已存在。
-
连接仅在会话期间有效。要保存连接以便将其用于另一会话中,请使用保存图层至文件工具将图层保存到图层文件中。此方法仅适用于图层,表视图不能使用此方式进行保存。
-
在生成的图层或表视图中,输入图层或表视图中的字段将以输入的名称和句点 (.) 为前缀,默认情况下,连接表中的所有字段都将以连接表名称加上句点作为前缀。
- 例如,将带有 A 和 B 字段的 landuse 连接到带有 C 和 D 字段的 lookup_tab,将得到带有以下字段的图层或表视图:landuse.A、landuse.B、lookup_tab.C 和 lookup_tab.D。
- 对于 coverage 要素类和 INFO 表,表和字段名称分隔符是冒号 (:) 而不是句点。
-
要进行永久连接,可考虑使用连接字段工具。另一种使连接永久化的方法是将连接要素图层保存到新要素类中或将连接表视图保存到新表中。当将这些结果保存到新要素类或表时,可以使用限定的字段名环境控制是否使用字段所在表的名称限定连接输出字段名称。
-
通过对输入图层或表视图以及基于连接的连接表中的字段建立索引,可以提高性能。可通过添加属性索引工具或通过右键单击 ArcCatalog 中的输入并使用对话框添加索引到所需字段来完成此操作。
-
如果使用创建要素图层或创建表视图工具的字段信息参数对输入图层或表视图的字段进行了修改(重命名或隐藏),则这些对字段进行的修改将不会在输出连接图层或表视图中得以体现。
-
连接表名称不能以数字开头。
语法
参数 | 说明 | 数据类型 |
in_layer_or_view |
连接表将连接的图层或表视图。 | Mosaic Layer; Raster Catalog Layer; Raster Layer; Table View |
in_field |
连接基于的输入图层或表视图中的字段。 | Field |
join_table |
将连接到输入图层或表视图的图表或表视图。 | Mosaic Layer; Raster Catalog Layer; Raster Layer; Table View |
join_field |
连接表中的字段,包含连接将基于的值。 | Field |
join_type (可选) |
指定如何处理输入中与连接表中的记录相匹配的记录。
| Boolean |
代码实例
以下 Python 窗口脚本演示了如何在即时模式下使用 AddJoin 函数。
import arcpy
from arcpy import env
env.workspace = "C:/data"
arcpy.MakeFeatureLayer_management ( "Habitat_Analysis.gdb/vegtype", "veg_layer")
arcpy.AddJoin_management( "veg_layer", "HOLLAND95", "vegtable.dbf", "HOLLAND95")
arcpy.CopyFeatures_management( "veg_layer", "Habitat_Analysis.gdb/vegjoin")
该独立脚本显示了作为工作流一部分的 AddJoin 函数,用于将表连接到要素类,然后提取所需要素。
# Name: AttributeSelection.py
# Purpose: Join a table to a featureclass and select the desired attributes
# Import system modules
import arcpy
from arcpy import env
try:
# Set environment settings
env.workspace = "C:/data"
env.qualifiedFieldNames = False
# Set local variables
inFeatures = "Habitat_Analysis.gdb/vegtype"
layerName = "veg_layer"
joinTable = "vegtable.dbf"
joinField = "HOLLAND95"
expression = "vegtable.HABITAT = 1"
outFeature = "Habitat_Analysis.gdb/vegjoin"
# Create a feature layer from the vegtype featureclass
arcpy.MakeFeatureLayer_management (inFeatures, layerName)
# Join the feature layer to a table
arcpy.AddJoin_management(layerName, joinField, joinTable, joinField)
# Select desired features from veg_layer
arcpy.SelectLayerByAttribute_management(layerName, "NEW_SELECTION", expression)
# Copy the layer to a new permanent feature class
arcpy.CopyFeatures_management(layerName, outFeature)
except Exception, e:
# If an error occurred, print line number and error message
import traceback, sys
tb = sys.exc_info()[2]
print "Line %i" % tb.tb_lineno
print e.message