Конвертировать схему в объекты (Схематика)
Резюме
Конвертирует схематическое представление в стандартные классы пространственных объектов или шейп-файлы.
Схематические представления хранятся в скрытых классах пространственных объектов, специально предназначенных для Схематики, и требуют использования остальных таблиц конфигурации схематики и информации. Этот инструмент позволяет обмениваться схемами с другими пользователями, не передавая всего набора схематических данных, включающего все схемы и конфигурацию. Если вы планируете конвертировать несколько схем, вы можете выбрать, будут ли они все включены в один и тот же набор стандартных классов пространственных объектов или шейп-файлов, или у каждой схемы будет собственный набор классов объектов или шейп-файлов.
См. раздел Пример кода с примером инструмента-скрипта, позволяющего конвертировать все схемы, содержащиеся в наборе схематических данных или в папке схемы.
Использование
-
Чтобы конвертировать слой схематического представления в стандартные классы пространственных объектов, перейдите по дереву каталога и выберите базу геоданных/набор классов объектов для заданного параметра выходного пути. Чтобы конвертировать слой схематического представления в шейп-файлы, перейдите по дереву каталога и выберите папку.
-
Чтобы конвертировать несколько схем в одни и те же стандартные классы пространственных объектов/шейп-файлы, установите отметку Повторно использовать существующую структуру (Reuse Existing Structure). Чтобы конвертировать несколько схем в разные стандартные классы пространственных объектов/шейп-файлы, снимите отметку Повторно использовать существующую структуру (Reuse Existing Structure).
-
Отметьте Экспортировать все атрибуты связанных объектов (Export All Related Feature Attributes), если вы хотите добавить все атрибуты реального класса объектов к записям схемы в процессе конвертации.
-
Опция Экспортировать все атрибуты связанных объектов работает только с классами объектов схемы, для которых известно значение поля Связанные класс объектов/таблица (Associated Feature Class/Table). Если для класса объектов схемы не указаны связанные класс объектов/таблицы, атрибуты связанных объектов нельзя экспортировать.
-
Выберите ПОЛИГОН (POLYGON) в Геометрии контейнера (Container Geometry), если вы хотите конвертировать все контейнеры во входном схематическом представлении в полигональный объект. Если вы хотите конвертировать такие контейнеры в полилинейные (или точечные) объекты, выберите ПОЛИЛИНИЯ (POLYLINE) (или ТОЧКА (POINT)).
Внимание:Если при использовании опции Повторно использовать существующую структуру (Reuse Existing Structure) для конвертации первой схемы выбраны ПОЛИГОН (POLYGON) (ПОЛИЛИНИЯ (POLYLINE) или ТОЧКА (POINT)), последующие конвертации нельзя изменить на ПОЛИЛИНИЮ или ТОЧКУ (ПОЛИГОН). Чтобы изменить тип конвертации, необходимо удалить структуру и конвертировать схемы снова.
-
После конвертации заданного входного слоя схематического представления в заданном месте назначения, он будет удален перед повторным созданием.
Синтаксис
Параметр | Объяснение | Тип данных |
in_diagram |
Слой схематического представления, который нужно конвертировать. | Schematic Layer |
out_location |
Рабочая область или набор классов объектов, в которые будет конвертировано схематическое представление. Этот контейнер уже должен существовать. | Workspace;Feature Dataset |
reuse_fc [reuse_fc,...] (дополнительно) | Указывает, будет ли входной слой схематического представления конвертирован в те же стандартные классы объектов/шейп-файлы, что и другие схемы на основе того же шаблона схемы.
| Boolean |
export_related_attributes (дополнительно) | Указывает, будут ли также конвертированы все атрибуты, хранящиеся в реальных классах объектов/таблицах объектов, связанных с классами объектов схемы.
Примечание: Если для класса объектов схемы не указаны связанные класс объектов/таблица, атрибуты объектов нельзя конвертировать. Примечание: При использовании опций REUSE_FC и EXPORT_RELATED_ATTRIBUTES необходимо, чтобы уже существовала структура с полями связанных объектов для конвертации соответствующих атрибутов. | Boolean |
container_geometry [container_geometry,...] (дополнительно) |
Указывает тип геометрии объектов, которые будут созданы для конвертированных контейнеров, содержащихся во входной схеме.
Примечание: Если используется опция Повторно использовать существующую структуру (Reuse Existing Structure), и уже существует структура с ПОЛИГОНАЛЬНЫМИ (ПОЛИЛИНЕЙНЫМИ или ТОЧЕЧНЫМИ) классами объектов, созданными для контейнерных объектов схемы, то для последующих конвертаций нельзя поменять тип класса объектов на ПОЛИЛИНЕЙНЫЙ или ТОЧЕЧНЫЙ (ПОЛИГОНАЛЬНЫЙ). | String |
config_keyword (дополнительно) |
Ключевое слово конфигурации, определяющее параметры хранения таблицы в реляционной системе управления базами данных (РСУБД) Это относится только к ArcSDE. | String |
Пример кода
В примере скрипта ниже показано использование функции ConvertDiagram в инструменте-скрипте. Этот инструмент-скрипт поочередно обрабатывает все схемы, содержащиеся во входном контейнере схемы - т.е. наборе схематических данных или папке схемы, - и конвертирует их в стандартные объекты или шейп-файлы в месте назначения.
Создание и настройка этого инструмента-скрипта.
- Скопируйте приведенный ниже скрипт в любой текстовый редактор и сохраните текстовый файл с расширением .ру
- Запустите ArcCatalog и откройте окно ArcToolbox.
- Добавьте новый скрипт:
- Введите его имя (например, ConvertDiagramsTool)
- В параметре Script File укажите py-файл, который вы только что создали.
- Затем задайте следующие пять параметров:
- Отображаемое имя: Входной контейнер схемы; Тип данных: Набор схематических данных или Папка схемы; Свойство типа=Обязательный, Свойство направления=Входной
- Отображаемое имя: Место назначения; Тип данных: Рабочая область или Набор классов объектов; Свойство типа=Обязательный, Свойство направления=Входной
- Отображаемое имя: Рекурсивный; Тип данных: Логический; Свойство типа=Обязательный, Свойство направления=Входной, Значение по умолчанию=Истина
- Отображаемое имя: Фильтр класса схем, Тип данных: Строка; Свойство типа=Необязательный, Свойство направления=Входной
- Отображаемое имя: Определенное место назначения, Тип данных: Рабочая область или Набор классов объектов; Свойство типа=Обязательный, Свойство направления=Выходной, Полученный из=Место_назначения
Требуемые входные параметры: Входной контейнер схемы (набор данных или папка) + место назначения (БГД, набор классов объектов или папка для шейп-файлов)
Необязательные аргументы: Флаг рекурсии + фильтр класса схем
Определенное место назначения: Рабочая область или набор классов объектов.
# Name: ConvertDiagrams.py
# Description: Convert schematic diagrams
# Requirement: Дополнительный модуль ArcGIS Schematics
# import arcpy, sys, math
import arcpy, sys, math
msgInputsErr = "Invalid arguments."
msgParseErr = "Cannot parse input arguments."
msgConvertErr = "Error during conversion."
msgNoLicenseAvailable = "Дополнительный модуль ArcGIS Schematics license required"
# Recursively searches for schematic diagrams in the folders
def RecursiveSearch(inCont, bRecursive):
try:
childs = inCont.Children
dataset = None
for dataset in childs:
if dataset.DataType == "SchematicFolder" and bRecursive:
RecursiveSearch(dataset, bRecursive)
elif dataset.DataType == "SchematicDiagram":
if diagramClassFilter == "" or diagramClassFilter == dataset.DiagramClassname:
pathList.append(dataset.CatalogPath)
except:
raise
try:
# Checks out the Дополнительный модуль ArcGIS Schematics license
if arcpy.CheckExtension("Schematics") == "Available":
arcpy.CheckOutExtension("Schematics")
else:
raise Exception(msgNoLicenseAvailable)
except Exception as exc:
print exc
raise
arcpy.env.overwriteOutput = True
# Decodes 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 code
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()
# Returns the Дополнительный модуль ArcGIS Schematics licence
arcpy.CheckInExtension("Schematics")
except:
arcpy.AddError(msgConvertErr)
raise