将逻辑示意图转换为要素 (Schematics)
摘要
此工具用于将逻辑示意图转换为要素类或 shapefile。
它允许将多个逻辑示意图导出到相同的要素类/shapefile(每个逻辑示意图要素类一个要素类/shapefile)中或每个逻辑示意图的不同要素类/shapefile(每个逻辑示意图要素类和每个逻辑示意图一个要素类/shapefile)中。
注:请参阅“脚本”示例部分,以了解此工具在应用中如何将逻辑示意图数据集中的所有逻辑示意图导出为要素。
用法
-
要将逻辑示意图转换为要素类,请浏览至指定输出位置参数的地理数据库/要素数据集并将其选中。要将逻辑示意图转换为 shapefile,请浏览至文件夹并将其选中。
-
要将多个逻辑示意图导出到相同的要素类/shapefile 中,请选中重用现有结构选项。要将多个逻辑示意图导出到不同的要素类/shapefile,请取消选中重用现有结构选项。
-
如果希望导出输入逻辑示意图中的每个逻辑示意图要素及其逻辑示意图属性以及与其关联的真实要素相关的所有属性,请选中导出所有相关要素属性选项。
-
导出所有相关属性要素选项适用于“关联要素类/表”字段值已知的逻辑示意图要素类。如果没有为逻辑示意图要素类指定关联要素类/表,则不能导出其相关的属性要素。
-
如果启用了重用现有结构选项,并且在创建此结构时未使用导出所有相关属性要素选项,则启用此选项不会产生任何效果;此外,将无法创建与关联要素对应的字段。如果希望在每次转换各个逻辑示意图时均导出所有相关属性,请在转换第一个逻辑示意图时选中导出所有相关属性要素选项。
-
如果希望将输入逻辑示意图中的所有容器导出为面要素,请选择容器几何中的 POLYGON。如果希望将此类容器导出为折线 (polyline) 要素或点要素,请选择 POLYLINE(或 POINT)。
-
在使用重用现有结构选项时,如果首次转换逻辑示意图时选择了 POLYGON(POLYLINE 或 POINT),则在下次转换时无法更改为 POLYLINE 或 POINT (POLYGON)。如果需要进行更改,必须移除该结构,然后重新导出逻辑示意图。
-
逻辑示意图要素结点通常会被转换为点要素,除外它们是输入逻辑示意图中的容器。但是,如果此结构是根据不包含容器或包含空容器的输入逻辑示意图创建的,则为这些逻辑示意图要素类创建的要素类将为点要素类。
-
如果指定的输入逻辑示意图已被导出到指定输出位置,则重新创建之前会将其删除。
语法
| 参数 | 说明 | 数据类型 |
in_diagram |
要转换的逻辑示意图。 | Schematic diagram |
out_location |
要转换逻辑示意图的工作空间、要素数据集或文件夹。此容器必须已经存在。 | Workspace;Feature dataset;Folder |
reuse_fc (可选) |
指示输入逻辑示意图是否要作为基于相同逻辑示意图模板的其他逻辑示意图导出到相同的要素类/shapefile 中。
| String |
export_related_attributes (可选) |
指示是否也一并导出与所导出的逻辑示意图中的逻辑示意图要素类相关联的要素类/对象表中存储的所有属性。
注:如果没有为逻辑示意图要素类指定关联要素类/表,则不能导出要素属性。 注:如果使用重用现有结构选项,并且在没有关联的要素字段时此结构已经存在,则启用此选项不会产生任何效果。 | String |
container_geometry [container_geometry,...] (可选) |
指示要为输入逻辑示意图中所导出的逻辑示意图容器创建哪种几何类型的要素。
注:如果使用重用现有结构选项,并且在为容器逻辑示意图要素创建 POLYGON(POLYLINE 或 POINT)要素类时此结构已经存在,则在下次转换时无法将要素类类型更改为 POLYLINE 或 POINT (POLYGON)。 | String |
config_keyword (可选) |
配置关键字,用来确定关系数据库管理系统 (RDBMS) 中表的存储参数。它仅适用于 ArcSDE。 | String |
代码示例
以下脚本可以循环遍历逻辑示意图容器(即逻辑示意图数据集或逻辑示意图文件夹)中的所有逻辑示意图,并将其转换为输出位置中的要素。
使用此示例脚本的方法:
- 将以下脚本复制到任意文本编辑器,然后另存为扩展名为 .py 的文本文件。
- 启动 ArcCatalog,然后打开 ArcToolbox 窗口。
- 添加新脚本:
- 为其输入名称(例如 ConvertDiagramsTool)。
- 对于“脚本文件”参数,指定刚刚创建的 .py 文件。
- 然后指定以下五组参数:
- 显示名称:输入逻辑示意图容器;数据类型:逻辑示意图数据集或逻辑示意图文件夹;类型属性:必填;方向属性:输入
- 显示名称:输出位置;数据类型:工作空间或要素数据集;类型属性:必填;方向属性:输入
- 显示名称:递归;数据类型:布尔型;类型属性:必填;方向属性:输入;默认值:True
- 显示名称:逻辑示意图类过滤器;数据类型:字符串;类型属性:可选;方向属性:输入
- 显示名称:派生的输出位置;数据类型:工作空间或要素数据集;类型属性:必填;方向属性:输出;获取自:Output_Location
所需的输入参数:输入逻辑示意图容器(数据集或文件夹)+ 输出位置(GDB、要素数据集或 shapefile 的文件夹)
可选参数:递归标记 + 逻辑示意图类过滤器
输出派生位置:工作空间或要素数据集
# Name: ConvertDiagrams.py
# Description: Convert schematic diagrams
# Author: ESRI
# import arcpy, sys, math
msgInputsErr = "Invalid arguments."
msgParseErr = "Cannot parse input arguments."
msgConvertErr = "Error during conversion."
msgNoLicenseAvailable = "Schematics license required"
# Search schematic diagrams recursively in the folders
# list 'pathList' stores the result
def RecursiveSearch(inCont, bRecursive):
try:
childs = inCont.Children
dataset = childs.Next()
while dataset:
if dataset.DataType == "SchematicFolder" and bRecursive:
RecursiveSearch(dataset, bRecursive)
elif dataset.DataType == "SchematicDiagram":
if diagramClassFilter == "" or diagramClassFilter == dataset.DiagramClassname:
pathList.append(dataset.CatalogPath)
dataset = childs.next()
except:
raise
try:
if arcpy.CheckExtension("Schematics1") == "Available":
arcpy.CheckOutExtension("Schematics")
else:
raise Exception(msgNoLicenseAvailable)
except Exception as exc:
print exc
raise
arcpy.OverWriteOutput = True
# Decode parameters
try:
inputContainer = arcpy.GetParameterAsText(0)
outputLocation = arcpy.GetParameterAsText(1)
recursive = arcpy.GetParameterAsText(2)
if recursive == "false":
recursive = None
diagramClassFilter = arcpy.GetParameterAsText(3)
if inputContainer == "":
raise Exception()
except:
print msgParseErr
arcpy.AddError(msgParseErr)
raise
# Main
try:
pathList = [] # List for diagram names to convert
arcpy.SetProgressorLabel("Searching diagrams to convert...")
RecursiveSearch(arcpy.Describe(inputContainer), recursive)
arcpy.SetProgressor("step", "Converting...", 0, len(pathList), 1)
for path in pathList:
# Execute convert
mes = "Converting Schematic Diagram : " + path
# Set the progressor label
arcpy.SetProgressorLabel(mes)
arcpy.AddMessage(mes)
arcpy.ConvertDiagram_schematics(path, outputLocation, "REUSE_FC", "NO_RELATED_ATTRIBUTES", "#")
arcpy.SetProgressorPosition()
except:
arcpy.AddError(msgConvertErr)
raise