Доступно с лицензией Spatial Analyst.
Алгебра карт предоставляет вам доступ к инструментам, операторам, функциям и классам Spatial Analyst через алгебраические выражения. В базовом варианте выходной растр указывается слева от знака равенства (=), а инструменты, операторы и их параметры – справа. См. пример ниже:
from arcpy.sa import *
outShade = Hillshade("inelevation.tif", 99, 33)
Приведенное выше выражение вычисляет отмывку рельефа, определяя освещенность при азимуте солнца 99 градусов и высоте 33 градуса, и создает объект Raster с именем outShade для сохранения результатов.
Алгебра карт может выполнять простые выражения, но вся мощь языка проявляется при создании сложных выражений и моделей. Поскольку Алгебра карт интегрирована в Python, разработчику модели доступна вся функциональность Python и ArcPy, а также их расширения (модули, классы, функции и свойства).
По мере роста ваших запросов вы будете открывать для себя все новые возможности алгебры карт. Ниже даны основные сведения для начала работы.
Основы работы с Алгеброй карт
Есть три способа применения Алгебры карт:
- Инструмент Калькулятор растра
- Окно Python
- Интегрированная среда разработки (IDE) Python
Калькулятор растра
Инструмент Калькулятор растра выполняет выражения Алгебры карт. В инструменте есть интерфейс калькулятора, в котором с помощью кнопок можно создать большинство выражений Алгебры карт. Инструмент Калькулятор растра можно использовать автономно или в ModelBuilder. Тем самым инструмент позволяет интегрировать возможности Алгебры карт в ModelBuilder.
В приведенном выше выражении три растра комбинируются путем перемножения второго и третьего растров и прибавления результата к первому. Обратите внимание на то, что операторы были указаны в определенном порядке очередности.
Инструмент Калькулятор растра не предназначен для замены других инструментов Spatial Analyst. Используйте другие инструменты для соответствующих вычислений. Например, для вычисления уклона используйте инструмент Уклон. Инструмент Калькулятор растра предназначен для выполнения однострочных алгебраических выражений.
Инструмент Калькулятор растра – это инструмент геообработки и, как все инструменты, может быть интегрирован в ModelBuilder. Более подробную информацию см. в разделах:
Окно Python
Окно Python позволяет работать с инструментами геообработки и функциональностью Python из интерфейса ArcGIS Pro. Функции Python, запущенные из данного окна, могут состоять из одной строки кода или представлять собой сложные, многостроковые блоки кода. В окне Python также можно получить доступ к дополнительной функциональности, используя сторонние модули и библиотеки Python.
Чтобы запустить окно Python, на вкладке Анализ щелкните ниспадающее меню Python, затем щелкните кнопку окна Python . Или, на вкладке Вид в группе Окна щелкните окно Python.
В приведенной выше последовательности выражений импортируются пакет ArcPy, параметры среды геообработки и модули Spatial Analyst; устанавливается рабочая область; запускается инструмент Уклон; и выходные данные сохраняются в указанном местоположении. Когда вы нажмете Enter в конце выражения, оно немедленно запустится.
Окно Python имеет встроенную функцию автозаполнения строки, позволяет использовать переменные и обеспечивает доступ к функциональности Python и ArcPy.
Интегрированная среда разработки Python
Хотя в окне Python нет ограничения на число вводимых выражений, оно может оказаться неудобным для создания сложных моделей. Инструменты, операторы, функции и классы модуля Spatial Analyst могут быть также доступны из используемой вами интегрированной среды разработчика. Откройте вашу интегрированную среду разработки (ИСР) и введите нужные выражения.
В приведенном ниже скрипте импортируются: 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")
# Run Slope
outSlope = Slope(inRaster, outMeasurement, zFactor)
# Save the output
outSlope.save("C:/output/outslope02")
Как и окно Python, IDE обеспечивает доступ ко всей имеющейся функциональности 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.tif")
Результат одного выражения можно вводить в другое, последующее выражение.
outRas = Select("inras.tif", "Value > 105")
# outRas is variable defined by the previous statement and is not quoted
outdist = EucDistance(outRas)
Работа с операторами
Алгебра карт поддерживает ряд операторов (например, +, – и *). Эти же операторы имеются и в Python, но в Алгебре карт они модифицированы для работы с объектами Raster. Например, в следующем выражении сложение двух чисел дает значение переменной:
# set outVar to 14 using the Python + operator
outVar = 5 + 9
Для того, чтобы указать, что это выражение должно работать с растрами (то есть, для использования оператора Spatial Analyst), необходимо квалифицировать набор данных как Raster. В приведенном ниже примере оператор Spatial Analyst + используется для сложения двух растров:
outRas = Raster("inras1.tif") + Raster("inras2.tif")
Операторы допускают совместное использование растров и чисел. Например, в следующем выражении ко всем ячейкам входного растра прибавляется число 8:
outRas = Raster("inras1.tif") + 8
Создание сложных выражений
В одном выражении можно связать инструменты и операторы. В приведенном ниже примере в каждом выражении выполняется несколько инструментов и операторов:
outRas = Slope("indem" * 2) / 57
outdist = EucDistance(ExtractByAttributes("inras", "Value > 105"))
Для определения последовательности выполнения можно использовать скобки. В двух примерах ниже используются одинаковые операторы, однако результат получается разным из-за добавления в первом примере скобок:
outRas1 = (Raster("inras1") + Raster("inras2")) / Raster("inras3")
и
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 соответственно.
Функции Алгебры карт, создающие пространственные объекты, таблицы или файлы
В алгебраическом формате реализованы только те инструменты Spatial Analyst, для которых выходными данными является растр. Для тех инструментов Spatial Analyst, которые производят выходные данные иные, чем растр (например, пространственные объекты, таблицы или текстовые файлы), результат их выполнения указывается как параметр внутри инструмента в скобках. Обратите внимание на синтаксис в следующем примере создания изолиний как выходного набора классов полилинейных объектов:
indem = "C:/Data/indem"
contourInterval = 100
Contour(indem, "C:/output/outcontours", contourInterval)
Рекомендации по выполнению выражений Алгебры карт
Во всех примерах Алгебры карт, приведенных ниже, результатом является объект Raster. Объект Raster указывает на временный набор растровых данных, который будет удален, если только он не сохранен явно, по окончании сеанса ArcGIS. Чтобы сохранить временный набор данных, для объекта Raster необходимо вызвать метод 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 см.