Доступно с лицензией Spatial Analyst.
Алгебра карт через алгебру предоставляет вам доступ к инструментам, операторам, функциям и классам Spatial Analyst. В базовом варианте выходной растр указывается слева от знака равенства (=), а инструменты, операторы и их параметры – справа. Например:
from arcpy.sa import *
outShade = Hillshade("inelevation", 99, 33)
Приведенное выше выражение вычисляет отмывку рельефа, определяя освещенность при азимуте солнца 99 градусов и высоте 33 градуса, и создает растровый объект с именем outShade для сохранения результатов.
Алгебра карт может выполнять простые выражения, но вся мощь языка проявляется при создании сложных выражений и моделей. Поскольку Алгебра карт интегрирована в Python, разработчику модели доступна вся функциональность Python, ArcPy и расширений (модули, классы, функции и свойства).
Научиться работать с Алгеброй карт несложно, и по мере роста ваших запросов вы будете открывать для себя все новые возможности. Ниже даны основные сведения для начала работы.
Основы работы с Алгеброй карт
Три способа применения Алгебры карт:
- Инструмент Калькулятор растра (Raster Calculator)
- Окно Python
- Интегрированная среда разработки (IDE) Python, которой вы пользуетесь
Калькулятор растра
Инструмент Калькулятор растра (Raster Calculator) выполняет выражения Алгебры карт. Инструмент имеет легкий в использовании интерфейс калькулятора, в котором с помощью кнопок можно создать большинство выражений Алгебры карт. Инструмент Калькулятор растра можно использовать автономно или в ModelBuilder. Тем самым инструмент позволяет интегрировать богатые возможности Алгебры карт в ModelBuilder.
В приведенном выше выражении складываются три растра.
Инструмент Калькулятор растра не предназначен для замены других инструментов Spatial Analyst. Используйте другие инструменты для соответствующих вычислений. Например, для вычисления уклона используйте инструмент Уклон (Slope). Инструмент Калькулятор растра (Raster Calculator) предназначен для выполнения однострочных алгебраических выражений.
Инструмент Калькулятор растра (Raster Calculator) – это инструмент геообработки и, как все инструменты, может быть интегрирован в ModelBuilder. Более подробную информацию см. в разделах:
окно Python
Окно Python – это эффективное и удобное средство для использования инструментов геообработки и функциональных возможностей Python при работе в ArcGIS. Команды 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")
и
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)
Использование классов
Классы используются в инструментах Алгебры карт для параметров с несколькими аргументами. Использование классов для входных параметров обеспечивает легкий доступ к отдельным аргументам параметра для запроса, изменения и добавления аргументов. Ниже приведен пример использования класса:
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 см.
- Как использовать инструменты в Python
- Доступ к лицензированию и дополнительным модулям
- Как использовать классы в Python
- Использование параметров среды
Ссылки на другие источники информации о Python см. на следующей странице: