Использование инструментов в Python

Каждый инструмент геообработки имеет фиксированный набор параметров, который обеспечивает инструмент необходимой для работы информацией. Инструменты обычно имеют входные параметры, задающие входные наборы данных, которые используются для создания выходных данных. Параметры имеют несколько важных свойств:

  • Каждый параметр ожидает данные определенного типа или типов, например, класс объектов, целочисленные или строковые значения, растр.
  • Параметр ожидает либо входные, либо выходные значения.
  • Параметр может быть обязательным или необязательным.
  • Каждый параметр инструмента имеет уникальное имя.

Когда инструмент используется в Python, значения его параметров должны быть заданы корректно, только так инструмент будет нормально работать в составе скрипта. Когда для параметров указаны корректные значения, инструмент готов к выполнению. Параметры устанавливаются в виде строк или объектов.

Строки представляют собой текст, который уникально определяет значение параметра, например, путь к данным или ключевое слово. В следующем примере показаны входные и выходные параметры, заданные для инструмента Буфер. Обратите внимание, что к имени инструмента присоединяется псевдоним набора инструментов, в который он входит. В этом примере, две строковые переменные используются для задания входных и выходных параметров, чтобы сделать вызов инструмента более легким для понимания.

import arcpy
roads = "c:/base/data.gdb/roads"
output = "c:/base/data.gdb/roads_Buffer"
# Run Buffer using the variables set above and pass the remaining 
# parameters in as strings
arcpy.Buffer_analysis(roads, output, "distance", "FULL", "ROUND", "NONE")

Для некоторых параметров, таких как пространственная привязка, также можно указывать объект. В следующем примере кода, инструмент Создать класс пространственных объектов работает с использованием объекта SpatialReference, заданного для дополнительного параметра Система координат.

import arcpy
in_workspace = "c:/temp"
output_name = "rivers.shp"
# Create a spatial reference object
spatial_ref = arcpy.SpatialReference('North America Equidistant Conic')
# Run CreateFeatureclass using the spatial reference object
arcpy.CreateFeatureclass_management(
    in_workspace, output_name, spatial_reference=spatial_ref)

Многие инструменты геообработки включают как обязательные, так и дополнительные параметры. Часто получается, что большинство дополнительных параметров указывать не нужно. Есть несколько способов работы с такими не использующимися аргументами. Один из них – сохранить все дополнительные аргументы и ссылаться на них как на пустые строки, используя знаки "", знак решетки "#" или тип None. Второй способ – использовать аргументы ключевого слова и имя аргумента для присвоения значения. Использование аргументов ключевого слова позволяет пропускать не использующиеся дополнительные аргументы или задавать их в произвольном порядке.

Пропуск дополнительных аргументов с помощью пустых строк.

import arcpy
arcpy.AddField_management("schools", "school_id", "LONG", "", "", "", "", "NON_NULLABLE")

Более удобный способ: пропуск дополнительных аргументов с помощью аргументов ключевого слова.

import arcpy arcpy.AddField_management("schools", "school_id", "LONG", field_is_nullable="NON_NULLABLE")

Выходные данные инструмента

ArcPy возвращает выходные значения выполняемого инструмента, когда он завершает работу, в виде объекта результата Result. Преимущество объекта результата в том, что вы можете управлять информацией о выполнении инструментов, включая сообщения, параметры и выходные данные. Эти результаты могут быть доступны даже после того, как были выполнены несколько других инструментов.

В следующих примерах показано, как получить выходные данные из объекта-результата, появляющегося после работы инструмента геообработки.

import arcpy
arcpy.env.workspace = "c:/city/data.gdb"
# Geoprocessing tools return a result object of the derived output dataset. 
result = arcpy.CopyFeatures_management("roads", "urban_roads")
# A print statement will display the string representation of the output.
print(result)
# A result object can be indexed to get the output value. Note: a result object 
# also has a getOutput() method that can be used for the same purpose.
result_value = result[0]

При индексировании объекта результата result или использовании его метода getOutput(), возвращаемое значение имеет тип string. Это важное замечание, когда вы запускаете инструменты с параметром производных выходных данных, таким как Посчитать строки, который возвращает число записей в таблице, или Вычисление кластерного допуска по умолчанию, который возвращает значение кластерного допуска. Для конвертации в желаемый тип можно использовать встроенные функции Python, такие как int() или float().

Примечание:

Производный параметр не нуждается в определении пользователем и не отображается в диалоговом окне инструмента или в качестве аргумента в инструменте Python. Производные типы всегда являются выходными параметрами.

import arcpy
import types
arcpy.env.workspace = "c:/base/data.gdb"
# Many geoprocessing tools return a result object of the derived output dataset.
result = arcpy.GetCount_management("roads")
result_value = result[0]
# The result object's getOutput method returns values as a unicode string. To 
# convert to a different Python type, use built-in Python functions: str(), 
# int(), float()
count = int(result_value)
print(count)
print(type(count))

При создании выходных данных, которые создаются на промежуточном этапе рабочего процесса, выходной аргумент можно опустить, что позволит инструменту создать уникальный путь и имя выходных данных. Это можно сделать, задав выходным данным значение "#" или None, или, если это последний аргумент, пропустить его полностью. В любом случае возвращенное значение является полным путем к новому источнику данных.

import arcpy
arcpy.env.workspace = "c:/city/data.gdb"
result = arcpy.CopyFeatures_management("roads", "#")
result = arcpy.CopyFeatures_management("roads", "")
result = arcpy.CopyFeatures_management("roads")

Организация инструмента в ArcPy

Инструменты геообработки организованы двумя различными способами. Все инструменты доступны как функции ArcPy, но также доступны в модулях, соответствующих псевдониму набора инструментов. Хотя в большинстве примеров этой справки показана организация инструментов в виде функций с вызовом из среды ArcPy, оба подхода одинаково функциональны. Какой из подходов следует использовать, зависит от ваших предпочтений и привычек. В следующем примере показано использование инструмента Посчитать строки (Get Count) с использованием обоих подходов.

import arcpy
in_features = "c:/temp/rivers.shp"
# Tools can be accessed as functions on the arcpy module
arcpy.GetCount_management(in_features)
# Or from modules matching the toolbox name
arcpy.management.GetCount(in_features)

При использовании инструментов в модулях, иногда бывает необходимо обратить внимание на идентификацию модуля, чтобы сделать скрипт более читаемым. В этом случае вы можете использовать форму from - import - as.

# Clean up street centerlines that were digitized without
# having set proper snapping environments
import arcpy
from arcpy import edit as EDIT
from arcpy import management as DM
streets = "c:/data/streets.gdb/majorrds"
streets_copy = "c:/output/Output.gdb/streetsBackup"
DM.CopyFeatures(streets, streets_copy)
EDIT.TrimLine(streets, "10 Feet", "KEEP_SHORT")
EDIT.ExtendLine(streets, "15 Feet", "EXTENSION")
Лицензия:

Дополнительный модуль Spatial Analyst и инструменты Image Analyst используются иначе, поскольку в них применяется Алгебра карт, они доступны только в модулях arcpy.sa и arcpy.ia, а не как функции в среде ArcPy.