A quick tour of using Map Algebra in Image Analyst

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

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

Map Algebra allows you access to operators, functions, and classes through algebra. In its most basic form, an output raster is specified to the left of an equal sign (=), and the tools, operators, and their parameters are on the right. For example:

from arcpy.ia import *
elevationPlus100 = Plus("inelevation", 100)

The above statement adds 100 units to an elevation dataset, and creates a Raster object called elevationPlus100 to store the results.

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

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

The basics of running Map Algebra

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

  • The Raster Calculator tool
  • The Python window
  • Your favorite Python integrated development environment (IDE)

Raster Calculator

The Raster Calculator tool executes Map Algebra expressions. The tool has an easy-to-use calculator interface from which most Map Algebra statements can be created by simply clicking buttons. Raster Calculator can be used as a stand-alone tool, but it can also be used in ModelBuilder. As a result, the tool allows the power of Map Algebra to be integrated into ModelBuilder.

Raster Calculator user interface
Raster Calculator user interface

In the above expression, three rasters are combined by multiplying the second and third rasters together, and adding that result to the first. Note that operators follow a defined order of precedence.

The Raster Calculator tool is not intended to replace other Image Analyst or Spatial Analyst tools. Continue to use the other tools for the appropriate calculations. For example, use the Weighted Sum tool to overlay several weighted rasters. The Raster Calculator tool is designed to execute single-line algebraic statements.

Since Raster Calculator is a geoprocessing tool, like all tools, it can be integrated into ModelBuilder. See the following topics for more information:

Python window

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

To launch the Python window, click the Python button Показать окно Python in the Geoprocessing group on the Analysis tab, or from the Windows group on the View tab.

Python window example

In the above sequence of statements, the ArcPy site package, geoprocessing environments, and Image Analyst modules are imported, the workspace is set, and the Classify Raster tool is run. Once a carriage return is entered at the end of a statement, that statement is immediately run.

Some features of the Python window include built-in line autocompletion, use of variables, and access to Python and ArcPy functionality.

Python Integrated Development Environment

Even though there is no limit to the number of statements that can be entered within the Python window in ArcGIS Pro, it may be cumbersome to create more complex models. The Image Analyst modules' tools, operators, functions, and classes can also be accessed from your favorite integrated development environment such as PythonWin. Start your preferred IDE and enter the desired statements.

In the following script, ArcPy, the geoprocessing environments, and the Image Analyst module are imported; variables are set; the extension is checked out; the Classify Raster tool is run; and the output is saved.

# Name: Image Classification
# Description: 
# Requirements: Image Analyst Extension


# Import system modules
import arcpy
from arcpy import env
from arcpy.ia import *

# Check out the ArcGIS Image Analyst extension license
arcpy.CheckOutExtension("ImageAnalyst")

# Set environment settings
env.workspace = "C:/data"

# Set local variables
inRaster = "Landsat8_Redlands.tif"
classification_file = "LandCover.ecd"

# Execute Classify Raster
outLandCover = ClassifyRaster(inRaster, classification_file)

# Save the output
outLandCover.save("C:/data/Landcover.tif")

As is the case with the Python window, an IDE will provide access to all available Python and ArcPy functionality.

Working with operators

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

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

To distinguish that the statement should work on rasters (that is, to use the Map Algebra operator), you must cast the dataset as a Raster. The following example uses the Map Algebra + operator to add two rasters together:

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

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

outRas = Raster("inras1") + 8

Creating complex expressions

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

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.

Suggestions for executing Map Algebra statements

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

An example demonstrating the workspace environment is:

import arcpy 
from arcpy import env 
from arcpy.ia import *

env.workspace = "C:/data" 

outLandCover = ClassifyRaster("Landsat8_Redlands", "LandCover.ecd")

outLandCover.save("RedlandsLandcover")

In the above statement, the workspace is set, therefore, RedlandsLandcover will be saved in C:/data.

Further reading

To gain a deeper understanding of ArcPy, explore these topics:

To obtain more information on geoprocessing in Python, the following may be helpful:

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