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

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

Имя (Name)

Каждый параметр инструмента имеет уникальное имя.

Тип

Тип ожидаемых данных, например, класс объектов, или целочисленные, строковые или растровые данные.

Направление

Параметр задает либо входные либо выходные данные.

Обязательный (Required)

Является ли значение параметра обязательным или дополнительным.

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

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

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

import arcpy

roads = "c:/St_Johns/data.gdb/roads"
output = "c:/St_Johns/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")

В следующем примере, инструмент CreateFeatureClass работает с использованием объекта пространственной привязки, заданного для дополнительного параметра Система координат (Coordinate System). Объект пространственной привязки создается с помощью класса SpatialReference, а информация берется из файла проекции.

import arcpy

inputWorkspace = "c:/temp"
outputName =  "rivers.shp"

# Create a spatial reference object
#
spatialRef = arcpy.SpatialReference()

# Use a projection file to define the spatial reference's properties
#
spatialRef.createFromFile("c:/program files/arcgis/Desktop10.1/Coordinate Systems/" + \
                          "Projected Coordinate Systems/Continental/North America/North America Equidistant Conic.prj")

# Run CreateFeatureclass using the spatial reference object
#
arcpy.CreateFeatureclass_management(inputWorkspace, outputName, 
                                    "POLYLINE", "", "", "", spatialRef)

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

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

import arcpy

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

# Tools can be accessed as functions on the arcpy module, and
#  from modules matching the toolbox name.
#
arcpy.GetCount_management(inFeatures)
arcpy.management.GetCount(inFeatures)

При использовании инструментов в модулях, иногда бывает необходимо обратить внимание на идентификацию модуля, чтобы сделать скрипт более читаемым. В этом случае можно использовать форму 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"
streetsCopy = "c:/output/Output.gdb/streetsBackup"

DM.CopyFeatures(streets, streetsBackup)
EDIT.TrimLine(streets, "10 Feet", "KEEP_SHORT")
EDIT.ExtendLine(streets, "15 Feet", "EXTENSION")
ЛицензияЛицензия:

Инструменты Дополнительный модуль ArcGIS Spatial Analyst используются иначе, поскольку в них применяется алгебра карт (Map Algebra), и доступны только в модуле arcpy.sa, а не как функции в среде ArcPy.

Получение результатов работы инструмента

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

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

import arcpy

arcpy.env.workspace = "D:/St_Johns/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 

# To get the output value, the result object has a getOutput method
#
resultValue = result.getOutput(0)

ПримечаниеПримечание:

Метод получения объекта-результата getOutput возвращает строку в формате Unicode из объектов, которые имеют выходные значения. Это важное замечание, когда вы запускаете инструменты с параметром производных выходных данных, таким как GetCount, который возвращает число записей в таблице, или CalculateDefaultClusterTolerance, который возвращает значение кластерного допуска. Чтобы привести значение к ожидаемому типу, его необходимо конвертировать из строки в формате Unicode, используя встроенные в Python функции, такие как int() или float().

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

import arcpy
from arcpy import env
import types

env.workspace = "c:/St_Johns/data.gdb"

# Many geoprocessing tools return a result object of the derived 
#   output dataset. A print statement will display the string 
#   representation of the output.
#
result = arcpy.GetCount_management("roads")
resultValue = result.getOutput(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(), long(), float()
#
count = int(resultValue)
print count
print types.TypeType(count)
Методы и свойства результата

Свойства и методы

Описание

inputCount

Возвращает количество входных данных.

outputCount

Возвращает количество выходных данных.

messageCount

Возвращает количество сообщений.

maxSeverity

Возвращает максимальное значение серьезности. Возвращенное значение серьезности может быть 0 (нет ошибок/имеются предупреждения), 1 (имеются предупреждения) или 2 (имеются ошибки).

resultID

Возвращает уникальный ID результата. Если инструмент не является сервисом геообработки resultID будет иметь вид "".

Статус

Возвращает статус работы на сервере.

  • 0—Создать
  • 1—Подтверждено
  • 2—Ожидание
  • 3—Выполнение
  • 4—Выполнено удачно
  • 5—Ошибка
  • 6—Время истекло
  • 7—Выполняется отмена
  • 8—Отменено
  • 9—Удаление
  • 10—Удалено

cancel()

Отменяет работу на сервере.

getInput(индекс)

Возвращает полученные входные данные. Если это набор записей или объект растровых данных, возвращаются соответственно объекты RecordSet или RasterData.

getMapImageURL(список_параметров, высота, ширина, разрешение)

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

getMessage(индекс)

Возвращает определенное сообщение.

getMessages(степень серьезности)

Тип возвращаемых сообщений: 0=сообщение, 1=предупреждение, 2=ошибка. Если значение не задано, возвращаются сообщения всех типов.

getOutput(индекс)

Возвращает полученные выходные данные. Если это набор записей или объект растровых данных, возвращаются соответственно объекты RecordSet или RasterData.

getSeverity(индекс)

Возвращает серьезность указанного сообщения.

Методы и свойства результата

Связанные темы

9/11/2013