Использование инструментов в 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.analysis.Buffer(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.management.CreateFeatureclass(
    in_workspace, output_name, spatial_reference=spatial_ref)

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

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

import arcpy
arcpy.management.AddField("schools", "school_id", "LONG", "", "", "", "", "NON_NULLABLE")

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

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

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

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

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

import arcpy

arcpy.env.workspace = "c:/city/data.gdb"

# Geoprocessing tools return a result object of the derived output dataset. 
result = arcpy.management.CopyFeatures("roads", "urban_roads")

# Using print function 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]

Вы можете индексировать объект результата, используя либо getOutput, либо индексирование Python. Индекс может быть целочисленным индексом или именем параметра. При индексировании объекта результата 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.management.GetCount("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"

result1 = arcpy.management.CopyFeatures("roads", "#")
result2 = arcpy.management.CopyFeatures("roads", "")
result3 = arcpy.management.CopyFeatures("roads")

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

ArcPy обеспечивает доступ к инструментам геообработки двумя способами:

  • Напрямую через функции геообработки в arcpy
  • Через функции модулей наборов инструментов

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

import arcpy

in_features = "c:/temp/rivers.shp"

# Tools can be accessed from modules matching the toolbox name
arcpy.management.GetCount(in_features)

# Tools can be accessed as functions on the arcpy module
arcpy.GetCount_management(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.