GIS-LAB

Географические информационные системы и дистанционное зондирование

Как установить связь с базой данных MS ACCESS и работать с внешними таблицами, содержащими атрибутивные данные (общее описание процедуры и конкретные примеры)

Обсудить в форуме Комментариев — 0

Этот раздел посвящен совместному использованию взаимодействию ГИС ArcView 3.2a и СУБД MS ACCESS 2000. Приведенные примеры взяты из разрабатываемого сейчас инициативного проекта "Флора Таймыра" (Поспелова Е.Б., Поспелов И.Н. - Таймырский заповедник, Матвеева Н.В., Заноха Л.Л.- БИН РАН)

А. Установка связи с нужной таблицей.

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

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

Для создания связи с базой данных необходимо, чтобы активным было окно Проекта ArcView и выбрать в меню Project – SQL connect…

Появится окно, где вверху в поле Connection необходимо выбрать База данных MS ACCESS, нажать кнопку Connect, после чего будет предложено выбрать конкретную базу данных.

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

После установления связи в левом окошке “Tables” диалога SQL Connect появятся все таблицы и запросы базы данных.

Ваши действия (алгоритм 1):

1. Дважды щелкнуть по нужному объекту базы данных. После этого все поля таблицы или запроса появятся в окошке “Columns”, а имя самой таблицы – в предложении “from”.

2. Дважды щелкнуть по каждому из полей, которые нужно включить в SQL-запрос в окошке “Columns”, они появятся в предложении “Select”; можно также щелкнуть на строчке <All Collumns>, тогда в связанной таблице будут выведены все поля исходной таблицы. 3

Ввести вразумительное имя в поле Output table.

4. Об использовании предложения Where – см. ниже.

5. Нажать Query. Связанная таблица появится отдельным окном. 

*Примечание: Если у вас в данный момент запущен ACCESS, и связываемый запрос или таблица открыт в ACCESS в режиме конструктора, то вы получите сообщение об ошибке.  

6. Закрыть диалог SQL-connect (или провести ту же операцию с другой таблицей).

7. Путем использования меню Window и перетаскивания окон сделать так, чтобы на мониторе были одновременно видны атрибутивная таблица темы, к которой надо привязать данные из связанной таблицы, и сама связанная таблица. Делать атрибутивную таблицу редактируемой необязательно, связанная таблица редактируемой по определению быть не может. Если атрибутивная таблица темы не обнаруживается, значит, после загрузки в проект темы к ней не разу не обращались. Тогда в окне View нужно сделать нужную тему активной и нажать кнопку Open theme table (где нарисована таблица). Появится таблица с именем “Attributes of <название темы>” – это и есть атрибутивная таблица. Поочередно выделить общие поля обеих таблиц – в приводимом примере – поле “Key” атрибутивной таблицы и поле “Ключевые участки: код” связанной.

8. Сделать активным окно атрибутивной таблицы и нажать кнопку Join (если кнопка неактивна, значит вы не выделили в какой-то из таблиц поля связи, или окна связываемых таблиц – атрибутивной и внешней не являются первым и вторым соответственно в иерархии окон). После этого в атрибутивной таблице появятся все поля связанной.

ВНИМАНИЕ! Если активным будет окно связанной таблицы, то результат получится обратный ожидаемому – поля атрибутивной таблицы появятся в внешней связанной, что, как я полагаю, вам не надо.

9. Перейти в окно вида и при помощи двойного щелчка по теме строить легенду по желаемому полю. (я построил легенду типа Graduated Symbol по полю Count - Ключевые участки код – число видов сосудистых растений).

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

Как видно из предыдущего примера, в полученной в результате связывания таблице имеется 3 поля, по каждому из которых можно построить отдельную тематическую карту. Можно конечно, менять легенду в одной теме с «привязанными» атрибутивными данными, но, как мне представляется, удобнее иметь все эти темы в виде одновременно и просто управлять их отображением. Как это сделать?

Предлагаю следующий алгоритм (алгоритм 2).

  1. Добавить исходную тему в вид еще раз.
  2. Вызвать свойства темы (Theme-Properites) и переименовать ее в поле Theme Name, заменив «что-то.shp» на имя, отражающее суть темы. В окне Вида тема приобретет другое имя.
  3. Нажатием на кнопку Open theme table, тем самым активизировать атрибутивную таблицу темы (обратите внимание – таблица не изменилась, изменилось только имя таблицы, а атрибутивные данные остались теми же, что и у загруженной темы).
  4. Активизировать связанную таблицу и выполнить шаги 7-9 из выше описанных .
  5. При необходимости – повторить операцию с той же темой еще под одним именем.

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

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

  1. Выполнить шаги 1-3 из приведенного в начале алгоритма 1 создания SQL-связи.
  2. Поместить курсор в поле Where, дважды щелкнуть в окошке Columns по тому полю, по которому нужно провести выборку (в нашем случае поле SpeciesIndex, представляющее из себя числовой код вида растений). В окошке Where появится `Q1`.`SpeciesIndex`, далее ввести = нужный индекс 

Пример выражения:

`Q1`.`SpeciesIndex`=420

В русифицированном ArcView синтаксис выражения почему-то меняется, и его нужно ввести вручную. Оно должно выглядеть так:

([Q1.SpeciesIndex])=(420)

Примечание. К сожалению, отбор можно проводить только по числовым полям внешней таблицы. Причины этого мне не вполне ясны, в справочной системе имеется намек, что драйвер ODBS, поставляемый с MS ACCESS, не полностью поддерживает связь с приложениями «made by не-Microsoft», хотя в руководстве пользователя ArcView приводится пример отбора именно по символьному полю (правда, для MS ACCESS 97). Если есть необходимость проводить отбор по символьному полю, то можно создать запрос с нужной выборкой непосредственно в ACCESS и связывать данные с ним.

  1. Выполнить шаги 5-6 из описанного выше алгоритма 1.
  2. Добавить проект связываемую тему, переименовать ее, активизировать атрибутивную таблицу, соединить ее со связанной внешней (алгоритм 2).
  3. Создать легенду темы, исключающую вывод значений, имеющих пустые поля для внешней таблицы.

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

Обсудить в форуме Комментариев — 0

Последнее обновление: September 09 2021

Дата создания: 01.02.2004
Автор(ы): Игорь Поспелов (taimyr)