Сложные выражения
Доступно с лицензией Spatial Analyst.
Доступно с лицензией Image Analyst.
Алгебра карт позволяет создавать выражения, включающие несколько операторов и инструментов. Сочетание нескольких операторов и инструментов в одном выражении облегчает моделирование сложных взаимодействий и позволяет сократить общее время обработки. Сложные выражения не ограничены функциональностью инструментов дополнительного модуля ArcGIS Spatial Analyst; они могут включать инструменты из любых других наборов инструментов. При построении сложных выражений необходимо соблюдать определенные правила взаимодействия для их корректного выполнения.
Правила сложных выражений
Для создания корректных составных выражений используйте следующий список правил.
В сложных выражениях только результат слева от знака равенства становится Растровым объектом.
Последовательность запуска операторов в выражении определяется скобками и уровнем предшествования используемых операторов. Более подробно о предшествовании операторов см. в Таблице предшествования операторов.
outRaster = Raster("inras1") + Raster("inras2") / Raster("inras3")В вышеприведенном выражении
inras2делится наinras3, а затем полученный результат складывается сinras1.Примечание:
Важно знать уровень приоритета операторов. Например, булевы операторы (~, &, ^, |) имеют более высокий уровень приоритета, чем операторы отношения (<, <=, >, >=, ==, !=), что влияет на способ построения выражений. Более подробно о предшествовании операторов см. в Таблице предшествования операторов.
Вы можете использовать круглые скобки для управления порядком выполнения. Скобки могут быть вложенными; в этом случае выражение во внутренних скобках будет обрабатываться первым, независимо от уровня предшествования операторов.
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") + 8const = 10 outRas = Raster("inras1") + 2 * constВсе правила, относящиеся к использованию скобок в выражениях, созданных из операторов, равно действительны для выражений, созданных из инструментов и операторов. Инструмент или оператор в наиболее глубоко вложенных скобках будет обработан первым.
num = 10 outRas = (ZonalStatistics((Raster("inras2") + Raster("inras3")), "Value", "valueras", "MAXIMUM") - num ) / 8В приведенном выше выражении сумма
inras2иinras3служит входными данными для инструмента Зональная статистика. Значение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.analysis.Select("schools", "#", "Pop>2000"))В приведенном выше примере выходные данные инструмента Выборка из набора инструментов Анализ используются в качестве входных для инструмента Евклидово расстояние.
Примечание:
Поскольку встроенный инструмент создает выходные данные, которые являются лишь промежуточными в большом рабочем процессе, выходной аргумент может быть заменен хэш-символом
#, что позволит инструменту создать уникальный путь и имя для этих временных выходных данных. Использование хэш-символа обсуждается более подробно в секции Выходные данные инструмента раздела справки Использование инструментов в Python.Чтобы использовать дополнительные выходные данные инструмента в выражении, необходимо указать имя набора данных или переменную, представляющую набор данных.
costDist = CostDistance("source", "in_cost", 15000, "out_bklink") costOut = CostPath("dest", costDist, "out_bklink")В приведенном выше примере дополнительный выходной растр направления сохраняется в виде выходных данных в рабочей области с именем
"out_bklink".bklink = "C:/results/out_bklink" costDist = CostDistance("source", "in_cost", 15000, bklink) costOut = CostPath("dest", costDist, bklink)В приведенном выше примере растр направления определяется переменной перед запуском инструмента. Переменная указывает местоположение и имя выходного растра обратной ссылки.