合并 (数据管理)
插图
![]() |
用法
-
使用该工具可将多个源中的数据集合并到新的单个输出数据集。所有输入数据集的类型必须相同(即,点要素类之间可以合并,表之间也可以合并,但线要素类却无法同面要素类合并)。
-
您可以使用字段映射控件来控制输出数据集中所有字段以及各字段中的内容。
使用“字段映射”控件时,BLOB 字段类型只能映射到 BLOB 类型的输出字段中,而不能映射到任何其他类型的字段中。
-
该工具不会打断来自输入数据集的任何要素。即使出现要素重叠,输入数据集中的所有要素在输出数据集中也将保持不变。要合并或打断要素几何,请使用联合工具。
-
此工具不执行边匹配,即不会对要素的几何进行调整。
-
合并要素类时,如果没有设置输出坐标系地理处理环境,则输出数据集将使用输入数据集列表中第一个要素类的坐标系。
-
地图图层可用作输入数据集。如果图层中含有选定的内容,则“合并”工具只会使用选中的记录(要素或表行)。
-
此工具不能使用具有相同名称的多个输入图层。虽然 ArcMap 可显示具有相同名称的图层,但不得使用这些图层。要解决此限制,请使用工具对话框浏览按钮来浏览各输入数据集的完整路径。
-
注记要素类不属于有效的输入数据类型。
栅格数据集也不属于有效的输入。使用镶嵌至新栅格工具可将多个栅格合并为新的输出栅格。
语法
| 参数 | 说明 | 数据类型 |
inputs [inputs,...] |
要合并为新的输出数据集的输入数据集。输入数据集可为点、线或面要素类或是表。所有输入数据集的数据类型必须一致。 | Table View |
output |
包含所有合并后输入数据集的输出数据集。 | Feature Class;Table |
field_mappings (可选) |
从输入数据中选出的字段及字段内容。“字段映射”窗口将列出每一个唯一输入字段,展开后您将看到所有输入字段的列表。 对于每个“字段映射”,均可添加、重命名或删除输出字段,还可设置诸如数据类型和合并规则等属性。您也可删除出现的输出字段并设置任何输出字段的值的格式。 合并规则用于指定如何将两个或更多个输入字段的值合并为一个输出值。有以下几个合并规则可供使用:
| Field Mappings |
代码示例
以下 Python 窗口脚本演示了如何使用“合并”工具。
import arcpy arcpy.env.workspace = "C:/data" arcpy.Merge_management(["majorrds.shp", "Habitat_Analysis.gdb/futrds"], "C:/output/Output.gdb/allroads")
使用“合并”工具可将两个街区要素类中的要素移动到一个单独的数据集中。
# Name: Merge.py
# Description: Use Merge tool to move features from two street
# feature classes into a single dataset with field mapping
# import system modules
import arcpy
from arcpy import env
# Set environment settings
env.workspace = "C:/data"
# Street feature classes to be merged
oldStreets = "majorrds.shp"
newStreets = "Habitat_Analysis.gdb/futrds"
# Create FieldMappings object to manage merge output fields
fieldMappings = arcpy.CreateObject("FieldMappings")
# Create FieldMap objects to add new fields to merge output
fldMap_streetClass = arcpy.CreateObject("FieldMap")
fldMap_streetName = arcpy.CreateObject("FieldMap")
# Add all fields from both oldStreets and newStreets
fieldMappings.AddTable(oldStreets)
fieldMappings.AddTable(newStreets)
# Add input fields "STREET_NAM" & "NM" into new output field
fldMap_streetName.AddInputField(oldStreets,"STREET_NAM")
fldMap_streetName.AddInputField(newStreets,"NM")
# Set name of new output field "Street_Name"
streetName = fldMap_streetName.OutputField
streetName.Name = "Street_Name"
fldMap_streetName.OutputField = streetName
# Add input fields "CLASS" & "IFC" into new output field
fldMap_streetClass.AddInputField(oldStreets,"CLASS")
fldMap_streetClass.AddInputField(newStreets,"IFC")
# Set name of new output field "Street_Class"
streetClass = fldMap_streetClass.OutputField
streetClass.Name = "Street_Class"
fldMap_streetClass.OutputField = streetClass
# Add "Street_Class" and "Street_Name" output fields to FieldMappings object
fieldMappings.AddFieldMap(fldMap_streetName)
fieldMappings.AddFieldMap(fldMap_streetClass)
# Remove all output fields from the field map, except fields "Street_Class", "Street_Name", & "Distance"
for field in fieldMappings.fields:
if field.name not in ["Street_Class","Street_Name","Distance"]:
fieldMappings.RemoveFieldMap(fieldMappings.FindFieldMapIndex(field.name))
# Since both oldStreets and newStreets have field "Distance", no field mapping is required
# Use Merge tool to move features into single dataset
uptodateStreets = "C:/output/Output.gdb/allroads"
arcpy.Merge_management([oldStreets, newStreets], uptodateStreets, fieldMappings)
