Сложные выражения

Доступно с лицензией 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") + 8
    const = 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.Select_analysis("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)

    В приведенном выше примере растр направления определяется переменной перед запуском инструмента. Переменная указывает местоположение и имя выходного растра обратной ссылки.

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