Фильтрация объектов с определяющими запросами

При определении набора данных, который вы хотите отобразить как слой на карте или сцене, иногда бывает нужно отобразить только некоторые пространственные объекты этого набора. Примеры:

  • Из набора данных городов мира необходимо выбрать только те, где население превышает 1 млн
  • Из набора данных по рекам необходимо выбрать только те, которые не пересыхают летом
  • Из набора данных земельных участков необходимо выбрать только коммерческие

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

Пример определяющего запроса.

Этот пример определяющего запроса отфильтровывает объекты городов в Китае, население которых составляет менее 100 000 человек или которые не являются столицами провинций.

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

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

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

Примечание:

В этом разделе описано применение определяющих запросов в векторном слое, но их также можно применять и к автономным таблицам.

Создание определяющего запроса для слоя

Чтобы создать определяющий запрос для слоя, выполните следующие действия:

  1. Убедитесь, что слой выделен на панели Содержание.
  2. В наборе вкладок Векторный слой щелкните вкладку Данные.
  3. На вкладке Данные в группе Определяющий запрос щелкните кнопку Построить определяющий запрос Установщик, чтобы открыть диалоговое окно Свойства слоя с открытой вкладкой Определяющий запрос.
  4. Нажмите кнопку Новый определяющий запрос или щелкните ниспадающее меню, чтобы создать запрос в режиме конструктора (с использованием условий), режиме редактора (с использованием кода SQL) или в файле выражения запроса (.exp).
  5. Выбирайте значения из меню в конструкторе запросов, чтобы построить запрос. Эти меню и их значения зависят от соответствующих исходных данных.
  6. Дополнительно щелкните Добавить условие Добавить новое условие, чтобы добавить еще одно условие атрибута к запросу. Выберите в новом выражение необходимые значения из меню. Повторите этот шаг, чтобы добавить больше условий атрибутов, или щелкните ниспадающее меню, чтобы добавить пространственное условие.
  7. Дополнительно нажмите Настройки Настройки, чтобы изменить отображение запроса или значений его полей. Эти настройки применяются ко всем условиям.
    • Щелкните Сортировать по возрастанию или Сортировать по убыванию, чтобы отображать имена полей в ниспадающем списке в алфавитном порядке. Щелкните Исходный порядок, чтобы вернуться к порядку полей по умолчанию.
    • Показать псевдонимы полей выбрано по умолчанию. Щелкните Показать имена полей, чтобы включить имя таблицы в ниспадающее меню поля условия. Это особенно полезно, если слой участвует в соединении, которое содержит общие имена полей.
    • Показать видимые поля выбрано по умолчанию. Щелкните Показать все поля, чтобы отображать спрятанные поля в ниспадающем меню поля условия.
    • Автозаполнение SQL — это параметр режима редактора, включенный по умолчанию, который выдает подсказки при написании кода SQL. Щелкните этот параметр, чтобы отключить функциональность автозаполнения SQL.
    • По умолчанию выбрано Показать только значения описания домена и подтипа. Щелкните Показать все значения, чтобы включить все недопустимые или неправильные значения в ниспадающее меню уникальных значений поля.
  8. Дополнительно, задержите курсор над именем запроса и щелкните, чтобы изменить имя.
  9. Дополнительно, щелкните Проверить правильность SQL выражения Проверить правильность SQL-выражения, чтобы проверить его.
  10. Для проверки и завершения создания запроса в конструкторе запросов щелкните Применить.
  11. Если это единственный определяющий запрос в слое, он станет активным и будет применен немедленно. Если в слое есть и другие определяющие запросы, щелкните Сделать активным Сделать активным, чтобы применить определяющий запрос к слою.

Добавление пространственного условия в определяющий запрос

Помимо создания определяющих запросов с одним или несколькими условиями, определяющие запросы могут также включать в себя пространственное условие. В отличие от обычных условий, которые фильтруют объекты, извлеченные из набора данных, путем указания поля или диапазона значений, пространственные условия используют геометрию слоя или пространственный экстент.

Определяющий запрос может включать только одно пространственное условие.

Примечание:

Векторные слои поддерживают пространственные условия, однако некоторые другие типы слоев их не поддерживают. Просмотрите документацию по вашему типу слоя, чтобы определить, поддерживает ли этот тип слоя пространственные условия.

Чтобы добавить пространственное условие к существующему определяющему запросу, выполните следующие действия:

  1. При необходимости щелкните правой кнопкой мыши слой на панели Содержание и выберите Свойства, чтобы открыть диалоговое окно Свойства слоя.
  2. На вкладке Определяющий запрос нажмите Изменить, чтобы изменить существующий запрос, или выполните шаги 1–6 в приведенном выше рабочем процессе, чтобы создать новый определяющий запрос.
  3. Нажмите ниспадающее меню Добавить условие и выберите Добавить пространственное условие.

    Появится диалоговое окно Геометрия пространственного условия.

  4. В диалоговом окне Геометрия пространственного условия выберите один из следующих вариантов:
    • Выбрать слой — используйте геометрию слоя на активной карте. Графические слои и слои мультипатча не могут быть выбраны. Вы можете использовать геометрию всех объектов в слое, только выбранных объектов или только объектов в представлении. Если слой, используемый для создания геометрии, отредактирован или удален с карты, геометрия пространственного условия не применяется.
    • Выбрать пользовательский экстент — используйте пользовательский экстент из одного из следующих источников:
      • Текущий видимый экстент
      • Экстент данных во всех слоях
      • Экстент всех объектов или элементов слоя
      • Экстент всех выбранных объектов или элементов
      Вы также можете изменить единицы отображения, чтобы настроить экстент.
  5. Выберите слой или параметр экстента в списке, чтобы создать геометрию для пространственного условия. Показан предварительный просмотр геометрии.
  6. Нажмите OK.

    В запрос добавлено пространственное условие. Как в режиме редактора, так и в режиме конструктора пространственное условие отображается под выражениями условия атрибута. Оператор И добавляет пространственное условие к выражению.

    Примечание:

    Имя поля Shape и оператор пересекаются являются обязательными компонентами пространственного условия. Эти значения нельзя изменить.

Задание активного определяющего запроса

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

Чтобы переключаться между активными определяющими запросами, выполните следующие действия:

  1. Убедитесь, что слой выделен на панели Содержание.
  2. В наборе вкладок Векторный слой щелкните вкладку Данные.
  3. На вкладке Данные, в группе Определяющий запрос, выберите запрос из меню Определяющий запрос для его применения к слою.
  4. Либо можно задать активный запрос в диалоговом окне Свойства слоя на вкладке Определяющий запрос.
    • Щелкните Сделать активным Сделать активным и щелкните Применить для применения запроса к слою. Другие запросы станут не активными. Активный запрос указан внизу диалогового окна Свойства. Если у вас есть большое число запросов, а активного запроса не видно, щелкните Показать активный определяющий запрос Показать активный определяющий запрос, чтобы прокрутить к нему.
    • Щелкните Очистить активный запрос Очистить активный запрос и щелкните Применить, чтобы к слою или таблице запрос не применялся. Все запросы относятся к слою или таблице, но ни один из них в настоящий момент не будет применен.

Подсказка:

Вы можете фильтровать список слоев на панели Содержание, чтобы показать только слои с активным определяющим запросом.

Изменение существующих запросов

Для выбранного слоя на панели Содержание на вкладке Векторный слой на вкладке Данные в группе Определяющий запрос щелкните кнопку Построить определяющий запрос Установщик, чтобы открыть диалоговое окно Свойства слоя с открытой вкладкой Определяющий запрос. Для изменения запроса поместите над ним курсор и выполните одно из следующего:

  • Для изменения, добавления и удаления выражений запроса щелкните Редактировать.
    • Чтобы изменить выражение в запросе, измените значения.
    • Чтобы удалить выражение из запроса, нажмите Удалить выражение Удалить условие.
    • Чтобы добавить выражение в запрос, щелкните Добавить выражение Добавить новое выражение.
    • Чтобы изменить геометрию пространственного условия существующего запроса, нажмите Геометрия Установить пространственный фильтр.

    Щелкните Применить, чтобы применить изменения к определяющему запросу.

  • Чтобы удалить определяющий запрос из слоя или таблицы, без входа в режим редактирования, наведите курсор на ячейку запроса и щелкните Удалить определяющий запрос Убрать.
  • Чтобы переименовать определяющий запрос, щелкните его имя и введите новое.
  • Чтобы экспортировать синтаксис в файл выражения запроса (.exp), без входа в режим редактирования, наведите курсор на ячейку запроса и щелкните Сохранить определяющий запрос Сохранить.
  • Чтобы заменить текущий запрос другим из файла выражения запроса (.exp), без входа в режим редактирования, наведите курсор на ячейку запроса и щелкните Загрузить определяющий запрос Загрузить запрос.

Задание запросов сразу для нескольких слоев

Если у нескольких слоев есть определяющие запросы с одинаковыми именами - даже если содержание запросов не является идентичным - запросы можно активировать для слоев одновременно. То есть можно создать несколько связанных запросов и применить их все сразу. И можно переключиться на другой набор запросов - предназначенный для реализации другого сценария, если необходимо.

Для применения определяющих запросов с одинаковыми именами к нескольким слоям выполните следующие действия:

  1. Убедитесь, что слои выделены на панели Содержание.
  2. В наборе вкладок Векторный слой щелкните вкладку Данные.
  3. На вкладке Данные, в группе Определяющий запрос, выберите запрос из меню Определяющий запрос для его применения к слою.

    Будут показаны только определяющие запросы с одинаковыми для всех выбранных слоев именами.

Автоматизация создания определяющего запроса

Вы можете автоматизировать создание и выполнение определяющих запросов с помощью Python, используя сочетание функций ArcPy. Подробнее об этой теме, включая примеры кода, см. документацию для класса Layer.

Вы также можете создать определяющий запрос из выборки векторного слоя с помощью инструмента Создать определяющий запрос из Выборки.

Публикация слоев с определяющими запросами

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

Если запрос содержит пространственное условие, возвращается ошибка. Более подробно о 00428: Пространственное условие определяющего запроса не поддерживается сервером.