Outdated version of the documentation. Find the latest one here.

Поддерживаемые форматы

QGIS использует библиотеку OGR для чтения и записи векторных данных (работа с векторными данными GRASS и данными PostgreSQL реализована через отдельные модули поставщиков данных), включая ESRI shape-файлы, файлы MapInfo и Microstation, пространственные базы PostGIS, SpatiaLite, Oracle и многие другие. Кроме того, векторные данные могут быть загруженны напрямую из архивов zip или gzip. На момент написания руководства, библиотекой OGR поддерживалось порядка 69 форматов векторных данных (см. OGR-SOFTWARE-SUITE Литература и ссылки на web-ресурсы). С полным списком можно ознакомиться по адресу http://www.gdal.org/ogr/ogr_formats.html.

Примечание

По различным причинам, не все из поддерживаемых форматов могут работать в QGIS. Например, некоторые требуют наличия внешних коммерческих библиотек или библиотеки GDAL/OGR в вашей операционной системе (ОС) скомпилированы без поддержки формата, который вы хотите использовать. При загрузке в QGIS данных векторных или растровых форматов в списке типов файлов будут отображаться только те форматы, которые были проверены. Остальные (непроверенные) форматы могут быть загружены, если выбрать *.* в выпадающем списке «Типы файлов».

Работа с векторными данными в формате GRASS описана в разделе Интеграция с GRASS GIS.

В этой главе описывается, как работать с несколькими наиболее распространёнными форматами: ESRI shape-файлами, слоями PostGIS и SpatiaLite. Большинство функций QGIS (включая идентификацию, выборку, подписывание и работу с атрибутивной информацией) работают одинаково хорошо с различными источниками векторных данных. Это является особенностью QGIS.

Shape-файлы

Стандартным векторным форматом данных в QGIS является ESRI shape-файл. Его поддержка осуществляется с помощью библиотеки OGR Simple Feature Library (http://www.gdal.org/ogr/).

На самом деле, shape-файл состоит из нескольких файлов разных форматов. Из них три обязательны:

  1. .shp файл, содержащий геометрическую информацию об объектах

  2. .dbf файл, содержащий атрибутивную информацию в формате dBase

  3. .shx индексный файл

Shape-файл также включает файл с расширением .prj, который содержит информацию о проекции. Иметь файл проекции очень полезно, но не обязательно. В структуру shape-файла могут входить и другие файлы. Подробное описание можно найти в официальной технической спецификации ESRI по адресу http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf.

Добавление shape-файла к карте

mActionAddNonDbLayer Чтобы добавить shape-файл, надо использовать кнопку mActionAddNonDbLayer Добавить векторный слой или сочетание клавиш Ctrl+Shift+V. Появится новое диалоговое окно (см. рисунок figure_vector_1).

Figure Vector 1:

../../../_images/addvectorlayerdialog.png

Add Vector Layer Dialog nix

В группе «Тип источника» надо отметить radiobuttonon Файл. Нажмите кнопку [Обзор]. При этом появится стандартный диалог открытия файла (см. рисунок figure_vector_2), который позволяет выбрать и добавить нужный shape-файл или другой поддерживаемый источник данных. Выпадающее меню фильтра типов файлов Тип файлов selectstring позволяет фильтровать файлы с форматами, поддерживаемыми библиотекой OGR.

Для выбранного shape-файла можно указать кодировку атрибутивных данных.

Figure Vector 2:

../../../_images/shapefileopendialog.png

Open an OGR Supported Vector Layer Dialog nix

Выбор shape-файла из списка и нажатие кнопки [Открыть] загружает файл в QGIS. Рисунок Figure_vector_3 демонстрирует QGIS после открытия файла alaska.shp.

Figure Vector 3:

../../../_images/shapefileloaded.png

QGIS with Shapefile of Alaska loaded nix

Совет

Цвет слоя

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

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

Совет

Добавление слоя или проекта со внешнего носителя в OS X

В OS X подключённые внешние устройства не появляются после выбора Файл ‣ Открыть проект. Мы работаем над разрешением этой проблемы в диалогах открытия и сохранения в OS X. В качестве временного решения можно напечатать /Volumes в поле имени файла и нажать Enter. После этого можно указать путь ко внешним носителям и сетевым дискам.

Улучшение производительности

Для увеличения производительности при отрисовке shape-файла можно создать пространственный индекс. Пространственный индекс улучшает скорость отрисовки как при изменении масштаба, так и при панорамировании (перемещении слоя в каком-либо направлении без изменения масштаба). Файл пространственного индекса, используемого QGIS, имеет расширение .qix.

Чтобы создать индекс, необходимо:

  • Открыть shape-файл.

  • Открыть диалог Свойства слоя двойным щелчком по имени shape-файла в легенде или правым щелчком по нему же и выбором Свойства в контекстном меню.

  • Во вкладке Общие нажмите кнопку [Создать пространственный индекс].

Проблема загрузки shape-файла с файлом .prj

Если при открытии shape-файла, в состав которого входит файл с расширением .prj, QGIS не способна определить описанную систему координат, необходимо задать соответствующую проекцию вручную во вкладке Общие диалога Свойства слоя. Эта проблема возникает вследствие того, что файлы .prj часто не содержат всех необходимых параметров проекции, используемых в QGIS и перечисленных в диалоге Выбор системы координат.

Именно поэтому, новые shape-файлы, создаваемые в QGIS, имеют два различных файла проекций: файл .prj с ограниченным набором параметров проекции, совместимый с ПО ESRI, и файл .qpj, полностью описывающий параметры используемой системы координат. Всегда, когда QGIS имеет доступ к файлу .qpj, последний будет использован вместо .prj.

Добавление слоя MapInfo к карте

mActionAddNonDbLayer Чтобы открыть слой MapInfo, нажмите кнопку mActionAddNonDbLayer Добавить векторный слой на панели инструментов или воспользуйтесь комбинацией клавиш Ctrl+Shift+V, измените фильтр Тип файлов selectstring на «[OGR] MapInfo (*.mif *.tab *.MIF *.TAB)» и выберите нужный файл.

Добавление на карту покрытия ArcInfo

mActionAddNonDbLayer Чтобы открыть покрытие ArcInfo в двоичном формате, нажмите на кнопку mActionAddNonDbLayer Добавить векторный слой на панели инструментов или воспользуйтесь комбинацией клавиш Ctrl+Shift+V, чтобы открыть диалог Добавить векторный слой. В группе Тип источника выберите radiobuttonon Каталог. Установите Тип файлов selectstring в «Arc/Info Binary Coverage». Укажите путь к каталогу с файлами покрытия.

Аналогично добавляются векторные слои UK National Transfer Format и TIGER Format Бюро переписи населения США (US Census Bureau).

Слои PostGIS

Слои PostGIS хранятся в базе данных PostgreSQL. Преимуществами PostGIS являются пространственное индексирование и широкие возможности фильтрации и построения запросов. При использовании PostGIS такие функции, как выбор и идентификация, работают более точно, чем при использовании OGR-совместимых слоёв.

Настройка подключения к базе данных PostGIS (PostgreSQL)

mActionAddLayer При первом использовании данных PostGIS необходимо настроить подключение к базе данных PostgreSQL, содержащей нужную информацию. Нажмите на кнопку mActionAddLayer Добавить слой PostGIS на панели инструментов или выберите пункт mActionAddLayer Добавить слой PostGIS... из меню Слой, также можно воспользоваться комбинацией клавиш Ctrl+Shift+D. Ещё один вариант — открыть диалог Добавить векторный слой и выбрать radiobuttonon База данных в группе Тип источника. Появится диалог Добавить слои PostGIS. Для получения доступа к менеджеру соединений, нажмите кнопку [Создать]. Появится диалог Новое PostGIS-соединение. Необходимо указать следующие параметры:

  • Имя: имя для данного соединения. Может совпадать с именем Базы данных

  • Служба: Этот параметр может использоваться в качестве альтернативы для Узла и Порта (и, теоретически, Базы данных). Настройка выполняется в файле pg_service.conf

  • Узел: имя узла, на котором хранится база данных. Имя узла должно быть допустимым — таким, какие используют для сетевого доступа или для пинга узла. Если база данных находится на том же компьютере, что и QGIS, просто введите здесь localhost

  • Порт: номер порта, который «слушает» сервер базы данных PostgreSQL. По умолчанию используется порт 5432

  • База данных: имя базы данных

  • Режим SSL: настройка SSL-режима работы с сервером.Следует отметить, что значительного прироста скорости рендеринга слоя PostGIS можно достигнуть путём отключения SSL в менеджере соединений. Можно выбрать:

    • запретить: использовать только не зашифрованное SSL-соединение

    • разрешить: будет произведена попытка установки не SSL-соединения, если она не удастся, будет использовано SSL-соединение

    • предпочитать (по умолчанию): будет произведена попытка установки SSL-соединения, если она не удастся, будет использовано не SSL-соединение

    • требовать: использовать только SSL-соединение

  • Пользователь: имя пользователя, которое используется для доступа к базе данных

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

Также есть возможность активировать дополнительные настройки:

  • checkbox Сохранить пользователя

  • checkbox Сохранить пароль

  • checkbox Искать только в таблице «geometry_columns»

  • checkbox Искать только в схеме «public»

  • checkbox Показать таблицы без геометрии

  • checkbox Использовать расчётные метаданные таблицы

Когда параметры установлены, можно проверить соединение путём нажатия на кнопку [Проверить соединение].

Совет

Пользовательские настройки и безопасность

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

  • nix в «домашнем» каталоге пользователя в каталоге ./qgis

  • win в реестре

Добавление слоя PostGIS к карте

mActionAddLayer Когда создано одно или более соединение, можно добавлять слои из PostgreSQL. Естественно, в базе данных PostgreSQL должна содержаться информация. См. раздел Импорт данных в PostgreSQL, в котором обсуждается импорт данных в базу данных.

Для открытия слоя PostGIS проделайте следующие шаги:

  • Если диалог Добавить слои PostGIS ещё не открыт, нажмите кнопку mActionAddLayer Добавить слой PostGIS на панели инструментов.

  • Выберите соединение из выпадающего списка и нажмите кнопку [Подключиться]

  • При необходимости активируйте флажок checkbox Показать таблицы без геометрии

  • Установив флажок checkbox Параметры поиска, можно указать условия отбора объектов для загрузки или же можно открыть Конструктор запросов нажатием на кнопку [Запрос]

  • Найдите слой, который желаете добавить в список доступных слоёв

  • Щёлкните по нему, чтобы выбрать. Можно выбрать несколько слоёв, если нажать и удерживать клавишу Shift. В разделе Конструктор поисковых запросов можно найти информацию об использовании «Конструктора запросов» при работе с PostgreSQL

  • Нажмите кнопку [Добавить], чтобы добавить слой к карте

Совет

Слои PostGIS

Обычно слои PostGIS определяются наличием записей в таблице geometry_columns. Начиная с версии 0.9.0, QGIS может загружать слои, которые не имеют записей в таблице geometry_columns. Это касается таблиц и «представлений». Задание пространственных представлений — мощное средство визуализации данных. В руководстве пользователя PostgreSQL можно найти дополнительную информацию по созданию представлений.

Некоторые особенности работы со слоями PostgreSQL

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

QGIS требует наличия колонки в слое PostgreSQL, которая бы служила уникальным идентификатором (ключом) слоя. Для таблиц это обычно означает, что они должны иметь первичный ключ, или колонку с уникальными значениями строк в ней. В QGIS эта колонка должна содержать значения типа int4 (целое число размером 4 байта). Альтернативный способ — использование колонки «ctid» в качестве первичного ключа. Если в таблице отсутствуют колонки, указанные выше, то вместо них будет использоваться колонка «oid». Индексирование колонок позволит повысить производительность (заметьте, что первичные ключи в PostgreSQL индексируются автоматически).

Если слой PostgreSQL является представлением, к нему предъявляются те же требования, что были описаны выше, но представления не имеют первичных ключей или колонок с уникальными значениями. В этом случае QGIS попытается самостоятельно найти колонку в представлении, являющуюся производной от колонки, удовлетворяющей необходимым условиям. Это достигается посредством разбора SQL-опеределения представления. Однако, есть элементы SQL, игнорируемые QGIS, например, использование псевдонимов таблиц и колонок, создаваемых SQL-запросами.

Если невозможно найти подходящую колонку, QGIS не откроет слой. В таком случае следует изменить представление таким образом, чтобы оно содержало требуемую колонку (тип int4 и либо являющуюся первичным ключом, либо содержащую уникальные значения, желательно, индексированную).

Импорт данных в PostgreSQL

Cуществует несколько способов импорта данных в базу данных PostgreSQL с использованием различных инструментов таких как модуль SPIT или утилиты командной строки shp2pgsql и ogr2ogr.

Модуль SPIT

QGIS включает в себя модуль spiticon SPIT (Shapefile to PostGIS Import Tool — инструмент импорта shape-файлов в PostGIS). SPIT способен осуществлять одновременный импорт нескольких shape-файлов и поддерживает схемы баз данных. Подробнее о работе с модулем рассказывается в разделе Модуль SPIT.

shp2pgsql

PostGIS поставляется с утилитой shp2pgsql, которую можно использовать для импорта shape-файлов в базу данных PostGIS. Например для импорта shape-файла lakes.shp в базу данных PostgreSQL, называющуюся gis_data, воспользуйтесь следующей командой:

shp2pgsql -s 2964 lakes.shp lakes_new | psql gis_data

При этом будет создан новый слой под названием lakes_new в базе данных gis_data. Новый слой будет иметь идентификатор системы координат (SRID) 2964. Более подробную информацию о системах координат и проекциях можно найти в разделе Работа с проекциями.

Совет

Экспорт наборов данных из PostGIS

Наряду с инструментом для импорта shp2pgsql существует инструмент для экспорта наборов данных PostGIS в shape-файл: pgsql2shp. Он также входит в поставку PostGIS.

ogr2ogr

Кроме shp2pgsql и SPIT есть ещё один инструмент импорта пространственной информации в PostGIS — ogr2ogr, — который является частью установки GDAL.

Для импорта shape-файла в PostGIS проделайте следующее (в nix):

ogr2ogr -f "PostgreSQL" PG:"dbname=postgis host=myhost.de user=postgres \
password=topsecret" alaska.shp

Эта команда импортирует файл alaska.shp в базу данных PostGIS postgis на сервере myhost.de, используя в качестве имени пользователя базы данных postgres с паролем topsecret.

Заметьте, что для работы с PostGIS в OGR должна быть включена поддержка PostgreSQL. Проверить её наличие можно с помощью команды (в nix)

ogrinfo --formats | grep -i post

Те, кто предпочитают использовать команду PostgreSQL COPY вместо команды INSERT INTO, используемой по умолчанию, могут экспортировать следующие переменные среды (доступно, по крайней мере, для nix и osx):

export PG_USE_COPY=YES

ogr2ogr не создаёт пространственный индекс, как это делает shp2pgsl. Его необходимо создать вручную, используя SQL-команду CREATE INDEX после экспорта (смотри описание в следующем разделе Повышение производительности).

Повышение производительности

Получение данных, находящихся в базе данных PostgreSQL, может серьёзно снижать производительность, особенно при работе через сеть. Производительность при отрисовке можно улучшить путём создания пространственного индекса для каждого слоя базы данных PostgreSQL. PostGIS поддерживает создание GiST-индекса (Generalized Search Tree) для ускорения пространственного поиска данных (информация о GiST-индексе взята из документации к PostGIS, доступной по адресу http://postgis.refractions.net).

Ниже представлен порядок создания GiST-индекса:

CREATE INDEX [indexname] ON [tablename]
  USING GIST ( [geometryfield] GIST_GEOMETRY_OPS );

Заметьте, что для больших таблиц создание индекса может занять продолжительное время. После создания индекса следует произвести выполнить команду VACUUM ANALYZE. Дополнительную информацию можно найти в документации к PostGIS (POSTGIS-PROJECT Литература и ссылки на web-ресурсы).

Приведём пример создания GiST-индекса (nix):

[email protected]:~/current$ psql gis_data
Welcome to psql 8.3.0, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

gis_data=# CREATE INDEX sidx_alaska_lakes ON alaska_lakes
gis_data-# USING GIST (the_geom GIST_GEOMETRY_OPS);
CREATE INDEX
gis_data=# VACUUM ANALYZE alaska_lakes;
VACUUM
gis_data=# \q
[email protected]:~/current$

Векторные слои, пересекающие долготу 180°

Многие ГИС испытывают трудности при работе с векторными картами в системе координат широта/долгота (lat/lon), пересекающими долготу 180°. При открытии таких карт в QGIS можно наблюдать две разнесённые на большое удаление друг от друга части территории/акватории, которые на самом деле представляют собой единое целое. На рисунке Figure_vector_4 едва заметные точки в левой части карты (архипелаг Чатем), должны находиться внутри сетки, справа от главных островов (Северного и Южного) Новой Зеландии.

Figure Vector 4:

../../../_images/vectorNotWrapping.png

Map in lat/lon crossing the 180° longitude line nix

В качестве одного из вариантов решения проблемы можно предложить трансформацию значений координат долготы при помощи PostGIS и функции ST_Shift_Longitude (см. http://postgis.refractions.net/documentation/manual-1.4/ST_Shift_Longitude.html).Эта функция проверяет каждую точку (или узел) каждого объекта слоя, и, если координаты долготы < 0°, добавляет 360° к значению. На результирующей карте долгота объектов будет лежать в пределах 0° – 360° а сама карта будет отцентрирована по 180° долготы.

Figure Vector 5:

../../../_images/vectorWrapping.png

Crossing 180° longitude applying the ST_Shift_Longitude function nix

Использование

  • Импортируем данные в PostGIS (Импорт данных в PostgreSQL) при помощи модулей «PostGIS Manager» или «SPIT»

  • Используя командную строку PostGIS, выполните следующую команду (в этом примере «TABLE» — имя вашей таблицы PostGIS)

    gis_data=# update TABLE set the_geom=ST_Shift_Longitude(the_geom);

  • Если операция прошла успешно, появится подтверждение о количестве объектов, информация о которых обновлена, после этого будет возможно добавить объекты на карту и увидеть изменения (см. рисунок Figure_vector_5)

Слои SpatiaLite

mActionAddSpatiaLiteLayer При первой загрузке слоёв из базы данных SpatiaLite воспользуйтесь кнопкой mActionAddSpatiaLiteLayer Добавить слой SpatiaLite на панели инструментов или пунктом mActionAddSpatiaLiteLayer Добавить слой SpatiaLite... в меню Слой, либо комбинацией клавиш Сtrl+Shift+L. Появится окно, позволяющее соединиться с базой данных SpatiaLite, которая уже была подключена к QGIS ранее (её можно выбрать в выпадающем списке), или же создать новое подключение. Для создания нового подключения нажмите на кнопку [Создать] и используйте менеджер файлов, чтобы указать путь к нужной базе данных (файлу с расширением .sqlite).

Сохранить векторный слой в формате SpatiaLite можно выбрав пункт Сохранить как в контекстном меню слоя. В появившемся окне необходимо указать имя итогового файла, необходимую систему координат, в качестве формата выбрать «SpatiaLite». Также в качестве формата можно выбрать «SQLite» и добавить SPATIALITE=YES в поле «Источник данных». Эта строка указывает OGR, что необходимо создавать базу данных SpatiaLite, см. также http://www.gdal.org/ogr/drv_sqlite.html.

QGIS также поддерживает обновляемые «представления» (view) в базах данных SpatiaLite.

Создание нового слоя SpatiaLite

Процесс создания новых слоёв в базе SpatiaLite описан в разделе Создание нового слоя SpatiaLite.

Совет

Модули для работы с данными SpatiaLite

Существует ряд расширений, предназначенных для работы с данными SpatiaLite: «QSpatiaLite», «SpatiaLite Manager» или «DB Manager» (входит в состав QGIS, наиболее предпочтительный вариант). Установить их можно при помощи Установщика модулей.

Слои MSSQL Spatial

mActionAddMssqlLayer В QGIS есть «родная» поддержка пространственных данных MS SQL 2008. Для добавления этих данных используется кнопка mActionAddMssqlLayer Добавить слой MSSQL Spatial на панели инструментов, также присутствует отдельный узел в дереве данных Обозревателя и поддержка открытия слоёв путём перетаскивания их на карту.