Доступно с лицензией Spatial Analyst.
Доступно с лицензией Image Analyst.
Одним из наиболее ценных качеств Алгебры карт является возможность создания выражения, включающего несколько операторов и инструментов. Сочетание нескольких операторов и инструментов в одном выражении облегчает моделирование сложных взаимодействий и позволяет сократить общее время обработки. Сложные выражения не ограничены функциональностью инструментов модуля ArcGIS Spatial Analyst; они могут включать инструменты из любых других наборов инструментов. При построении сложных выражений необходимо соблюдать определенные правила взаимодействия.
Правила сложных выражений
- В сложных выражениях только результат слева от знака равенства становится Растровым объектом.
- Последовательность выполнения операторов в выражении определяется скобками и уровнем предшествования используемых операторов. Более подробно о предшествовании операторов см. в Таблице предшествования операторов.
outRaster = Raster("inras1") + Raster("inras2") / Raster("inras3")
-
В вышеприведенном выражении inras1 делится на inras2, а затем полученный результат складывается с inras3.
- Последовательность выполнения операторов можно изменить с помощью скобок. Скобки могут быть вложенными; в этом случае выражение во внутренних скобках будет обрабатываться первым, независимо от уровня предшествования операторов.
outRas = Raster("inras1") / (Raster("inras2") + Raster("inras3"))
В вышеприведенном выражении inras1 делится на сумму inras2 и inras3.
- Если в одном выражении последовательно используются несколько булевых операторов (~, &, ^, |) или операторов отношений (<, <=, >, >=, ==, !=), необходимо использовать скобки. Например, скобки должны быть в следующем выражении: (a>2) & (a<5).
outRas = (Raster("a") > 2 ) & ( Raster("a") < 5)
Более подробно:
Для некоторых выражений требуются не скобки, а другая форма записи. Например, выражение a < b < c не будет выполнено, а добавление скобок изменит его смысл. Для успешного выполнения этого выражения его необходимо переписать в виде (a < b) & (b < c).
- В сложных выражениях можно совместно использовать операторы, переменные. числа и инструменты.
outRas = Sin("inras1") + Raster("inras2") + 8
const = 10 outRas = Raster("inras1") + 2 * const
- Все правила, относящиеся к использованию скобок в выражениях, созданных из операторов, равно действительны для выражений, созданных из инструментов и операторов. Инструмент или оператор в наиболее глубоко вложенных скобках будет обработан первым.
num = 10 outRas = (ZonalStatistics((Raster("inras2") + Raster("inras3")), "Value", "valueras", "MAXIMUM") - num ) / 8
В приведенном выше выражении сумма inras2 и inras3 служит входными данными для инструмента Зональная статистика (Zonal Statistics). Значение num затем вычитается перед операцией деления.
- В последовательности выражений результат одного выражения может быть входными данными в последующем выражении.
outAdd = Raster("inras1") + Raster("inras2") outRas = FocalStatistics(outAdd, NbrCircle(5, "Map"), "MEAN")
В приведенном выше примере outAdd – это растровый объект, созданный путем сложения inras1 и inras2. Поскольку outAdd является переменной, его не нужно заключать в кавычки при использовании в качестве входных данных для последующего инструмента Фокальная статистика.
- Любой инструмент можно встроить в другой, независимо от того, является ли результат растром или классом пространственных объектов Выходные данные встроенного инструмента используются в качестве входных для принимающего инструмента.
В этом примере выходные данные инструмента Изолинии по значениям используются в качестве входных для инструмента Евклидово расстояние .outdistance = EucDistance(ContourList("elevation", "#", [1500]))
В приведенном выше примере выходные данные инструмента Выборка из набора инструментов Анализ используются в качестве входных для инструмента Евклидово расстояние.dist = EucDistance(arcpy.Select_analysis("schools", "#", "Pop>2000"))
Примечание:
Поскольку встроенный инструмент создает выходные данные, которые являются лишь промежуточными в большом рабочем процессе, выходной аргумент может быть заменен хэш-символом "#", что позволит инструменту создать уникальный путь и имя для этих временных выходных данных. Использование хэш-символа обсуждается более подробно в секции Выходные данные инструмента раздела справки Использование инструментов в Python.
- Чтобы использовать дополнительные выходные данные инструмента в выражении, необходимо указать имя набора данных или переменную, представляющую набор данных.
В приведенном выше примере дополнительный выходной растр направления является выходными данными в рабочей области с именем "out_bklink".costDist = CostDistance("source", "in_cost", 15000, "out_bklink") costOut = CostPath("dest", costDist, "out_bklink")
В приведенном выше примере растр направления определяется переменной перед выполнением инструмента. Переменная указывает местоположение и имя выходного растра обратной ссылки.bklink = "C:/results/out_bklink" costDist = CostDistance("source", "in_cost", 15000, bklink) costOut = CostPath("dest", costDist, bklink)