Быстрый обзор использования Алгебры карт в Spatial Analyst

Доступно с лицензией Spatial Analyst.

Алгебра карт предоставляет доступ к инструментам, операторам, функциям и классам дополнительного модуля Spatial Analyst с помощью алгебры. В базовом варианте выходной растр указывается слева от знака равенства (=), а инструменты, операторы и их параметры – справа. Пример:

from arcpy.sa import *
outShade = Hillshade("inelevation", 99, 33)

Приведенное выше выражение вычисляет отмывку рельефа, определяя освещенность при азимуте солнца 99 градусов и высоте 33 градуса, и создает объект типа Raster с именем outShade для сохранения результатов.

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

Научиться работать с Алгеброй карт несложно, и по мере роста ваших запросов вы будете открывать для себя все новые возможности. Ниже даны основные сведения для начала работы.

Основы работы с Алгеброй карт

Три способа применения Алгебры карт:

  • Инструмент Калькулятор растра
  • Окно Python
  • Интегрированная среда разработки (IDE) Python, которой вы пользуетесь

Калькулятор растра

Инструмент Калькулятор растра выполняет выражения Алгебры карт. Инструмент имеет легкий в использовании интерфейс калькулятора, в котором с помощью кнопок можно создать большинство выражений Алгебры карт. Инструмент Калькулятор растра можно использовать автономно или в ModelBuilder. Тем самым инструмент позволяет интегрировать богатые возможности Алгебры карт в ModelBuilder.

Пользовательский интерфейс инструмента Калькулятор растра
Пользовательский интерфейс инструмента Калькулятор растра

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

Инструмент Калькулятор растра не служит для замены других инструментов дополнительного модуля Spatial Analyst. Используйте другие инструменты для соответствующих вычислений. Например, для вычисления уклона используйте инструмент Уклон. Инструмент Калькулятор растра предназначен для выполнения однострочных алгебраических выражений.

Инструмент Калькулятор растра – это инструмент геообработки и, как все инструменты, может быть интегрирован в ModelBuilder. Более подробную информацию см. в разделах:

Окно Python

Окно Python – это эффективное и удобное средство для использования инструментов геообработки и функциональных возможностей Python при работе в ArcGIS. Команды Python, доступные для выполнения в этом окне, могут состоять из одной строки кода или представлять собой сложные блоки кода с использованием логики. Окно Python также предоставляет место для доступа к дополнительным функциональным возможностям с помощью пользовательских или сторонних модулей и библиотек Python.

Чтобы вызвать окно Python, нажмите кнопку Python на Показать окно Python вкладке Анализ или в группе Окна на вкладке Вид.

Пример окна Python

В вышеприведенной последовательности выражений сначала импортируются пакет сайта ArcPy, параметры среды геообработки и модули из дополнительного модуля Spatial Analyst; задается рабочая область; запускается инструмент Уклон; затем сохраняется результат. После ввода символа возврата каретки в конце выражения оно немедленно выполняется.

Окно Python имеет встроенную функцию автозаполнения строки, позволяет использовать переменные и обеспечивает доступ к функциональности Python и ArcPy.

Интегрированная среда разработки Python

Хотя в окне Python нет ограничения на число вводимых выражений, оно может оказаться неудобным для создания сложных моделей. Вы также можете работать с инструментами, операторами, функциями и классами дополнительного модуля Spatial Analyst в интегрированной среде разработчика, которой вы пользуетесь, например, в PythonWin. Откройте вашу интегрированную среду разработки (ИСР) и введите нужные выражения.

В приведенном ниже скрипте ArcPy импортируются параметры среды геообработки и модуль из Spatial Analyst; задаются переменные; проверяется дополнительный модуль; запускается инструмент Уклон и сохраняется результат.

# Name: Slope
# Description: Identifies the rate of maximum change
#               in z-value from each cell.
# Requirements: Spatial Analyst Extension
# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *
# Set environment settings
env.workspace = "C:/data"
# Set local variables
inRaster = "elevation"
outMeasurement = "DEGREE"
zFactor = 0.3043
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute Slope
outSlope = Slope(inRaster, outMeasurement, zFactor)
# Save the output
outSlope.save("C:/output/outslope02")

Как и окно Python, ИСР обеспечивает доступ ко всей имеющейся функциональности Python и ArcPy.

Работа с инструментами

Все инструменты дополнительного модуля Spatial Analyst, дающие на выходе растр, доступны в алгебраическом формате. Имя набора данных можно использовать, если он находится в окне Содержание или в текущей рабочей области; в противном случае необходимо ввести полный путь.

# In the following statement, indem is either  
#   in the TOC or in the current workspace
outRas = Aspect("indem")
# In the following statement the full path is specified
outRas2 = Aspect("C:/Data/indem2")

Результат одного выражения можно вводить в другое, последующее выражение.

outRas = Select("inras", "Value > 105")
# outRas is variable defined by the previous statement and is not quoted
outdist = EucDistance(outRas)

Работа с операторами

Алгебра карт поддерживает ряд операторов (например, +, – и *). Эти же операторы имеются и в Python, но в Алгебре карт они модифицированы для работы с растровыми объектами. Например, в следующем выражении сложение двух чисел дает значение переменной:

# set outVar to 14 using the Python + operator
outVar = 5 + 9

Чтобы использовать выражение для растров (то есть, чтобы использовать оператор дополнительного модуля Spatial Analyst), вы должны квалифицировать набор данных как Растр. В приведенном ниже примере оператор + дополнительного модуля Spatial Analyst используется для сложения двух растров:

outRas = Raster("inras1") + Raster("inras2")

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

outRas = Raster("inras1") + 8

Создание сложных выражений

В одном выражении можно связать инструменты и операторы. В приведенном ниже примере в каждом выражении выполняется несколько инструментов и операторов:

outRas = Slope("indem" * 2) / 57
outdist = EucDistance(ExtractByAttributes("inras", "Value > 105"))

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

outRas1 = (Raster("inras1") + Raster("inras2")) / Raster("inras3")

and

outRas2 = Raster("inras1") + Raster("inras2") / Raster("inras3")

В первом выражении inras1 складывается с inras2 и сумма делится на inras3. Во втором выражении (без скобок) inras2 делится на inras3, а затем результат деления складывается с inras1.

Если в одном выражении последовательно используются несколько булевых операторов (~, &, ^, |) и/или операторов отношений (<, <=, >, >=, ==, !=), необходимо использовать скобки. Например, скобки необходимы в выражении: (a>2) & (a<5). Если в выражении не использовать скобки, оно приведет к ошибке: a>2 & a<5 . Следующее выражение будет выполнено, потому что есть скобки:

outRas = (Raster("a") > 2) & (Raster("a") < 5)
Более подробно:

Для некоторых выражений требуются не скобки, а другая форма записи. Например, выражение вида a < b < c не будет выполнено, а добавление скобок изменит его смысл. Поэтому для успешного выполнения это выражение необходимо переписать в виде (a < b) & (b < c).

Использование классов

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

outRas = FocalStatistics("inRaster", NbrCircle(5, "CELL"), "SUM")

В вышеприведенном выражении для каждой ячейки вычисляется сумма пятиячеечной круговой окрестности. NbrCircle – это класс, который создает объект NbrCircle.

Ниже приведен пример класса таблицы перекодировки. В класс перекодировки можно ввести любое число значений.

outReclass = Reclassify("inRaster", "VALUE", RemapRange([[0, 1], [3, 10], [4, 8]]))

В вышеприведенном выражении класс RemapRange используется для переклассификации входных значений. Ячейкам со значениями 0, 3 и 4 в inRaster будут присвоены в outReclass значения 1, 10 и 8 соответственно.

Более подробно об использовании классов в Алгебре карт см. Обзор классов дополнительного модуля ArcGIS Spatial Analyst .

Функции Алгебры карт, создающие пространственные объекты, таблицы или файлы

В алгебраическом формате реализованы только те инструменты дополнительного модуля Spatial Analyst, которые дают на выходе растр. Для тех инструментов дополнительного модуля Spatial Analyst, которые дают на выходе результат, отличный от растра (например, пространственные объекты, таблицы или текстовые файлы), результат их выполнения указывается в виде параметра инструмента в скобках. Обратите внимание на синтаксис в следующем примере создания изолиний как выходного набора классов полилинейных объектов:

indem = "C:/Data/indem"
Contour(indem, "C:/output/outcontours")

Рекомендации по выполнению выражений Алгебры карт

Во всех примерах Алгебры карт, приведенных ниже, результатом является Растровый объект. Растровый объект указывает на временный набор растровых данных, который будет удален, если только он не сохранен явно, по окончании сеанса ArcGIS. Чтобы сохранить временный набор данных, для Растрового объекта необходимо вызвать метод save (см. два примера ниже).

Перед использованием инструмента или оператора Алгебры карт рекомендуется задать соответствующие параметры среды анализа, в частности Текущую рабочую область, Экстент, Размер ячейки, Метод проекции размера ячейки и Маску.

Пример параметра среды Рабочая область:

import arcpy 
from arcpy import env 
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data" 
outHillshade = Hillshade("elevation", 180, 75, "SHADOWS", 1)
outHillshade.save("outhillshd01")

В вышеприведенном выражении задана рабочая область, поэтому outhillshd01 будет сохранен в C:/sapyexamples/data.

Рекомендуется задавать классы для сложных данных на входе инструмента Алгебры карт в виде переменной и использовать в выражении эту переменную. В выражении ниже объект класса RemapRange задан в виде переменной myRemapRange и используется как входные данные для инструмента Переклассификация.

import arcpy 
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data" 
myRemapRange = RemapRange([[-3, 0, 0], [0, 1.75, 25], [1.75, 3.5, 50], 
                           [3.5, 5.25, 75], [5.25, 7, 100]]) 
outReclassRR = Reclassify("inreclass", "VALUE", myRemapRange)
outReclassRR.save("rclassremran")

Дополнительная литература

Более подробные сведения об ArcPy можно найти в следующих темах:

Более подробно о геообработке в Python см.

Связанные разделы