Для хранения кода на языке Python создаются файлы Python (.py). Эти файлы являются файлами ASCII, которые содержат стандартные выражения Python.
- В Интегрированной среде разработки Python (IDE) по вашему выбору создайте новый скрипт и добавьте следующие строки в верхней части вашего скрипта:
- Входная рабочая область, определяющая набор классов пространственных объектов для обработки
- Класс пространственных объектов, который будет использоваться инструментом Вырезание (Clip) в качестве области, вырезаемой из входного класса пространственных объектов
- Выходная рабочая область, в которую будут записаны результаты работы инструмента Вырезание (Clip).
- Допуск XY, который будет использоваться инструментом Вырезание (Clip)
- Добавьте в скрипт следующий код для определения и установки переменных на основе определяемых пользователями значений, передаваемых в скрипт при выполнении:
- Добавьте в окно скрипта следующую инструкцию по обработке ошибок и функцию ArcPy ListFeatureClasses():
- Добавьте следующий код:
- Добавьте следующие строки, чтобы завершить скрипт:
- Добавьте следующий заголовок в начало скрипта:
- Сохраните скрипт.
# Import ArcPy site-package and os modules
import arcpy
import os
Это импортирует в скрипт набор модулей (site package) ArcPy и модуль операционной системы os. Модуль os предоставляет легкий доступ к самым используемым инструментам операционной системы. В этом скрипте используются некоторые методы работы с именами файлов из модуля os.
Для универсального использования данного скрипта в нем имеются следующие четыре аргумента.
# Set the input workspace
arcpy.env.workspace = arcpy.GetParameterAsText(0)
# Set the clip featureclass
clipFeatures = arcpy.GetParameterAsText(1)
# Set the output workspace
outWorkspace = arcpy.GetParameterAsText(2)
# Set the XY tolerance
clusterTolerance = arcpy.GetParameterAsText(3)
try:
# Get a list of the featureclasses in the input folder
fcs = arcpy.ListFeatureClasses()
Python обеспечивает обязательное использование отступов в коде после определенных выражений, что является частью этого языка. Инструкция try определяет начало блока кода, который будет обрабатываться в связке с обработчиком исключений – инструкцией except. Весь код в пределах этого блока должен быть указан с отступом. В Python используются блоки try/except для обработки непредвиденных ошибок во время выполнения. Обработчики исключений определяют, что следует делать программе при выдаче исключения системой или самим скриптом. Обработка исключений также позволит скрипту незаметно завершать работу и возвращать информативные сообщения вместо того, чтобы привести к системной ошибке.
Функция ListFeatureClasses() возвращает список с именами классов пространственных объектов в текущей рабочей области. Рабочая область определяет расположение данных и место, в котором будут создаваться все новые данные, если не указан полный путь. В качестве рабочей области уже установлено значение первого аргумента. Для прохождения по каждому классу пространственных объектов, содержащемуся в списке, используется цикл for.
for fc in fcs:
# Validate the new feature class name for the output workspace.
featureClassName = arcpy.ValidateTableName(fc, outWorkspace)
outFeatureClass = os.path.join(outWorkspace, featureClassName)
# Clip each feature class in the list with the clip feature class.
# Do not clip the clipFeatures, it may be in the same workspace.
if fc != os.path.basename(clipFeatures):
arcpy.Clip_analysis(fc, clipFeatures, outFeatureClass,
clusterTolerance)
Когда в списке больше не остается имен, цикл for завершается. Функция ValidateTableName() используется для обеспечения корректности выходного имени для выходной рабочей области. Некоторые символы, например точки или дефисы, недопустимы в базах геоданных, поэтому данный метод возвращает имя с допустимыми символами на месте недопустимых. Также он возвращает уникальное имя, предотвращая перезапись существующих данных.
Метод os.path.basename используется для операций с путем к классу пространственных объектов вырезания, позволяя вычислять в выражении только имя класса пространственных объектов, а не весь путь. Инструмент Вырезание (Clip) доступен в виде функции ArcPy с использованием различных строковых переменных в качестве значений параметров.
except Exception as err:
arcpy.AddError(err)
print err
Выражение except является обязательным после предыдущего использования выражения try; в противном случае возникнет синтаксическая ошибка. Если в процессе выполнения возникнет ошибка, будет выполнен код из блока except. Любые сообщения об ошибках добавляются с использованием функции AddError() в случае запуска скрипта из инструмента-скрипта. Все сообщения об ошибках также выводятся через стандартный интерфейс вывода в случае, если скрипт запускается вне инструмента.
"""-----------------------------------------------------------------------------
Script Name: Clip Multiple Feature Classes
Description: Clips one or more shapefiles
from a folder and places the clipped
feature classes into a geodatabase.
Created By: Insert name here.
Date: Insert date here.
-----------------------------------------------------------------------------"""
Завершенный скрипт:
"""-----------------------------------------------------------------------------
Script Name: Clip Multiple Feature Classes
Description: Clips one or more shapefiles
from a folder and places the clipped
feature classes into a geodatabase.
Created By: Insert name here.
Date: Insert date here.
-----------------------------------------------------------------------------"""
# Import ArcPy site-package and os modules
import arcpy
import os
# Set the input workspace
arcpy.env.workspace = arcpy.GetParameterAsText(0)
# Set the clip featureclass
clipFeatures = arcpy.GetParameterAsText(1)
# Set the output workspace
outWorkspace = arcpy.GetParameterAsText(2)
# Set the XY tolerance
clusterTolerance = arcpy.GetParameterAsText(3)
try:
# Get a list of the featureclasses in the input folder
fcs = arcpy.ListFeatureClasses()
for fc in fcs:
# Validate the new feature class name for the output workspace.
featureClassName = arcpy.ValidateTableName(fc, outWorkspace)
outFeatureClass = os.path.join(outWorkspace, featureClassName)
# Clip each feature class in the list with the clip feature class.
# Do not clip the clipFeatures, it may be in the same workspace.
if fc != os.path.basename(clipFeatures):
arcpy.Clip_analysis(fc, clipFeatures, outFeatureClass,
clusterTolerance)
except Exception as err:
arcpy.AddError(err)
print err