Построение сложных выражений

Доступно с лицензией 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.

  • Чтобы использовать дополнительные выходные данные инструмента в выражении, необходимо указать имя набора данных или переменную, представляющую набор данных.
    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)
    В приведенном выше примере растр направления определяется переменной перед выполнением инструмента. Переменная указывает местоположение и имя выходного растра обратной ссылки.

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