Введение в геоинформационные системы
Запросы и выборки
<<< предыдущая глава | оглавление | следующая глава >>>
Теоретическая часть
Язык запросов - мощный инструмент по работе с условиями и критериями. Использование запросов позволяет отбирать записи в таблице и объекты на карте по определенным условиям. Это может быть одно условие/критерий или целое выражение, содержащее большое число условий.
Запрос - выражение на специальном языке запросов, включающее логические операторы и название слоев\полей из которых осуществляется выборка.
Выборка - процесс и результат выполнения запроса. Набор объектов\записей в таблице ему соотвествующий. |
Существуют пространственные и атрибутивные запросы, так как атрибутивная и пространственная информация связаны, то результатом запросов независимо от их типа, если в качестве исходного материала используется слой является другой слой. Если в качестве исходного материала используется простая таблица, то с ней возможны только атрибутивные запросы и результатом их будет атрибутивная выборка - другая таблица.
Атрибутивные запросы
Работа осуществляется с атрибутивной таблицей. Выбор записей в таблице позволяет работать с заданным подмножеством данных. Если таблица принадлежит теме, то при выборе записей в таблице окажутся выделенными и объекты в слое, которые соответствуют выбранным записям.
Атрибутивный запрос представляет собой некоторое логическое условие-команду, которое формируется также с применением команд стандартной логики (И, НЕ, ИЛИ).
Пример простейшего запроса:
На человеческом языке: Выбрать все квартала с возрастом преобладающей породы более 80 лет
На языке запросов: [age] > 80
Как видно, в атрибутивной таблице слоя «кварталы» должно содержаться поле age, в котором должны быть проставлены значения возраста для каждого квартала, если значение определенной строки в поле age будет отсутствовать, то запрос проигнорирует эту строку.
Логических условий в одном запросе может быть несколько. Например:
На человеческом языке: Выбрать все квартала с возрастом преобладающей породы между 80-ю и 120 годами
На языке запросов: ([age] > 80) AND ([age] < 120)
Как видно, в запросе было использовано логическое условие И (AND), то есть выбираемое значение должно удовлетворять сразу двум условиям, быть больше 80 лет и быть меньше 120 лет.
В качестве данных в запросе может быть использованы данные из нескольких полей. Например:
На человеческом языке: Выбрать все квартала с возрастом преобладающей породы более 80 лет и бонитетом равным единице
На языке запросов: ([age] > 80) AND ([bonitet] = 1)
Как видно, в атрибутивной таблице слоя «кварталы» также должно содержаться и поле bonitet, в котором должны быть проставлены значения бонитета для каждого квартала.
Результатом любого запроса является выборка, т.е. некоторое количество объектов (записей) выделенных из некого общего массива.
Пространственные запросы
Для создания выборки, вы можете использовать не только выбор записей в таблице, но и выбирать объекты напрямую в виде с определения специфических взаимоотношений их с окружающими объектами из другого слоя.
Для выбора в исходном слое могут быть использованы следующие запросы:
Выбрать объекты
- пересекающиеся с границей объекта другого слоя (are crossed by the outline of)
- пересекающиеся с объектом другого слоя (intersect), отличие от предыдущего метода заключается в том , что при данном типе выборки будут также выбраны объекты касающиеся границ объекта другого слоя;
- находящиеся на расстоянии Х от объекта другого слоя (Are within a distance of);
- чей центр находится внутри объекта другого слоя - только для полигональных слоев (Have their center in);
- находящиеся полностью внутри объекта другой темы (Are completely within), объект не будет выбран если его границы касаются границ объекта другой темы;
- находящиеся полностью внутри объекта другой темы (Are contained by), объект будет выбран даже если его границы касаются границ объекта другой темы;
- полностью включающие объект ( ы ) другой темы (Completely contain), объект не будет выбран если его границы касаются границ объекта другой темы;
- полностью включающие объект ( ы ) другой темы (Contain), объект будет выбран даже если его границы касаются границ объекта другой темы;
- имеющие общий фрагмент линии с объектом другой темы (Share a line segment with);
- имеющие общий фрагмент линии с объектом другой темы , но не пересекающие его (Touch the boundary of)
- равные объекту другой темы (Are identical to)
Выборка может осуществляться как для всех объектов одной и другой темы, так и для выделенных объектов в одной и другой теме. Тем, в которых будут выделяться объекты может быть несколько. Некоторые правила не работают для объектов определенного типа, например правило «выбрать объекты имеющие общий фрагмент линии с объектом другой темы» не будет работать с точечным слоем.
Полученная выборка и в случае атрибутивного запроса и в случае пространственного запроса может быть далее преобразована в новый слой, отредактирована, объединена с другой выборкой и т.д.
Практическая часть
Скачать учебные материалы для этой главы.
В практической части этой главы Вы научитесь:
- Работать с атрибутивными запросами;
- Работать с пространственными запросами;
- Ограничивать визуализацию векторных слоев определенными объектами.
Упражнение 1. Атрибутивные запросы.
- Откройте проект chapt16.mxd. В нем содержится тема представляющая собой фрагмент лесоустройства на территорию Сукпайского лесничества - les.shp. Элементарной единицей этого слоя является лесной выдел.
- Перед тем как производить атрибутивные запросы, необходимо изучить на базе какой информации мы можем их производить. Откроем атрибутивную таблицу слоя, щелкнув правой кнопкой мыши на слое и выбрав Open Attribute Table.
В атрибутивной таблице слоя les.shp содержится следующая информация:
Название поля |
Тип поля |
Описание поля |
Kvartal |
Числовой |
Номер квартала |
Vydel |
Числовой |
Номер выдела |
Area |
Числовой |
Площадь выдела |
Main |
Текстовый |
Тип преобладающей породы |
Age |
Числовой |
Возраст преобладающей породы |
- Выберем все выдела площадь больше 50 га. Для этого, выберем из меню Selection пункт Select by Attributes...
Layer: les (выборка производится из слоя les)
Method: Create new selection (создается новая выборка, если до этого было что-то выбрано, то выделение его исчезнет)
Два раза щелкнем на поле Area, его название в кавычках добавится в поле запроса внизу, выберем знак "больше" (>), и впишем значение 50. Целиком наш запрос должен приобрести следующий вид:
"Area" > 50
- После ввода всех параметров нажмите Ок.
- Обратите внимание как изменился вид. В лесоустроительной карте выбрались некоторые выдела. Переключитесь в таблицу, чтобы определить сколько записей (т.е. выделов выделилось).
- Допустим нам обходимо далее выбрать из всех выбранных выделов только выдела с елью в качестве преобладающей породы. Опять выбираем из меню Selection пункт Select by Attributes...
Layer: les (выборка производится из слоя les)
Method: Select from current selection (выбрать из существующей выборки, перед выполнением такого запроса, должна существовать некая предыдущая выборка)
Два раза щелкнем на поле Main, его название в кавычках добавится в поле запроса внизу, выберем знак "равно" (=) и нажмем на кнопку Get Unique Values (Получить уникальные значения). Эта кнопка , для выделенного поля осуществит поиск всех уникальных значений и выведет их в списке справа. Из этого списка можно будет потом выбрать нужное нам значение и щелкнув на нем 2 раза, вставить в наш запрос. Проделаем это для значения "Ель". Целиком наш запрос должен приобрести следующий вид:
"Main" = 'Ель'
Нажмем Ок.
- Как видно в окне фрейма данных часть выделов, которые были выделены перестали быть выделенными, это те выдела, которые не соответствуют нашему последнему запросу. Открыв таблицу можно определить, сколько осталось выделенных выделов.
- Мы произвели выделение нужных нам выделов в 2 этапа, а можем произвести и в один. Для этого, снимем выделение с выделенных объектов.
Selection\Clear Selected Features
- Опять выбираем из меню Selection пункт Select by Attributes...
Layer: les (выборка производится из слоя les)
Method: Create new selection (создается новая выборка, если до этого было что-то выбрано, то выделение его исчезнет)
Далее либо выбирая соответствующие поля и значения, либо просто вписав запрос в поле ввода запроса получаем следующее выражение:
"Area" > 50 AND "Main" = 'Ель'
Нажимаем Ок.
- Мы получили в один шаг результат, который до этого получили за два.
- Создадим из полученной выборки виртуальный слой. Для этого правой кнопкой мыши щелкнем на слой содержащий выбранные объекты, в нашем случае это слой les и выберем Selection\Create Layer from Selected Features
- Во фрейм данных будет добален новый слой с именем les selection, в котором будут содержаться только выделенные объекты. Полученный слой является виртуальным и существует только в данном проекте, если мы закроем наш проект без сохранения, то наш результат пропадет.
- Для того, чтобы сохранить результат в виде отдельного слоя, существующего в виде соответствующего набора файлов на диске, проделаем следующую операцию. Правой кнопкой мыши щелкнем на слой содержащий выбранные объекты, в нашем случае это слой les и выберем Data\Export Data...
В появившемся окне в пункте Export (Экспорт) должно стоять Selected Features (выбранные объекты) что означает, выделенные объекты из слоя les будут преобразованы в новый слой. В поле Output shapefile or feature class (выходной слой) можно задать имя и путь к новому слою.
Упражнение 2. Пространственные запросы, определение количества и номенклатуры необходимых для исследуемой территории топокарт масштаба 1:200000.
- Создайте новый проект
- Загрузите слой oblasts.shp
- Загрузите слой grid2km.shp.
Этот слой является стандартной разграфкой топографических карт выпускаемых Военно-Топографическим Управлением Генерального Штаба РФ. Если вы работаете с картами этого производителя, то с помощью такой разграфки вы легко можете определить количество и номенклатуру нужных вам топографических карт. Такие разграфки можно получить здесь. В атрибутивной таблице таких слоев для каждого топографического листа обычно значится его стандартное название, согласно номенклатуре.
- Измените условное обозначение объектов слоя, сделав их прозрачными.
- Создайте атрибутивную выборку, которую вы научились делать в предыдущем упражении, выберите из слоя oblasts.shp Челябинскую область.
Selection\Select by Attributes...
- После того, как необходимый объект был выделен, увеличьте его с помощью инструмента Zoom to Selected
Selection\Zoom to Selected
- Произведем пространственную выборку. Выберем из меню Selection пункт Select by Location... (выбрать по местоположению)
- Зададим условия выборки на человеческом языке звучащей как: Выбрать из темы grid2km (разграфка карт 2км масштаба) все объекты пересекающиеся с выделенными объектами темы oblasts (области). Для этого выберем:
I want to: select features from (Я хочу выбрать из)
the following layers: grid2km (из следующих слоев: поставим галочку напротив слоя grid2km (разграфка карт 2км масштаба))
that: intersect (которые: пересекают)
the features in this layer: oblasts (объекты в этом слое: oblasts (области))
Переключатель use selected features (использовать выделенные объекты) под слоем oblasts должен быть включен (установлена галочка), иначе выделены будут объекты пересекающиеся с любыми объектами слоя областей, а не только выделенной нами областью. В результате окно настроек должно выглядеть так:
- После того, как все условия введены, нажмите Apply (применить).
- Снимите выделение для слоя областей, для этого, выделите слой oblasts и выберите из меню
Selection\Clear Selected Features (Снять выделение)
- Откройте таблицу, вы увидите, что в ней выделились объекты являющиеся топографическими листами на нужную вам территорию. По атрибутивной таблице вы можете определить сколько вам необходимо стандартных топографических листов (т.е. сколько выделилось объектов) и что это за листы (по полю Name)
Упражнение 3. Визуальная выборка, скрывание объектов по атрибутивной информации
Данная функция дает возможность показывать на карте только те объекты, которые отвечают определенному логическому условию или условиям (запросу). Эта функция эквивалентна созданию выборки и конвертированию ее в виртуальный слой, однако в этом случае можно обойтись без создания новых слоев.
<<< предыдущая глава | оглавление | следующая глава >>>
Последнее обновление: November 30 2008