Создание точечного слоя из текстового файла в QGIS

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Эта страница является черновиком статьи.



Довольно часто геоданные (информация имеющая координатную привязку) хранятся в виде текста или таблиц и возникает потребность преобразовать их в какой-либо векторный формат. В статье описывается последовательность действий по созданию точечного shape-файла из текста с разделителями в QGIS.

Подготовка данных к импорту

Вначале, необходимо подготовить данные: удобнее всего это делать в табличном редакторе (например, OpenOffice Calc или MS Excel), но можно работать и в любом другом текстовом редакторе, (Notepad - блокнот входящий в стандартные программы Windows, или более удобный и работающий с большими текстовыми файлами Notepad++). В табличном редакторе нужно создать три основные колонки (другие поля данных также могут присутствовать):

  • идентификатор (название или номер) точки
  • широта
  • долгота

В качестве примера, приведем таблицу описаний растительности: в первой колонке - номер описания, далее - широта, долгота, высота НУМ и название растительного комплекса. Широта указывается в десятичных градусах или в метрах (если использована прямоугольная система координат). В случае, если исходные координаты представлены в виде градусов, минут и секунд, вначале их необходимо преобразовать в десятичные.

Excel-red.png

После того, как ваши данные приведены к указанному виду, необходимо сохранить их как текстовый файл. Рекомендуем сохранять в виде текста с разделителями табуляцией. В Excel: Файл -> Сохранить как, и во вкладке "Тип файла" выбрать "текстовые файлы (с разделителями табуляции (*.txt)".

Советы:

  • Называйте колонки коротко, латинскими буквами, без пробелов и специальных символов.
  • Если колонку с широтой назвать Lat (Latitude), а с долготой - Lon (Longitude), то программа автоматически распознает, что в этих колонках находится соответственно широта и долгота, в противном случае, вам придется какая колонка показывает широту, а какая долготу вручную.
  • Проверьте, что в качестве разделителя целой и дробной части всегда используется один и тот же знак (точка или запятая).

Использование модуля "Текст с разделителями"

Для преобразования текстовых данных в векторный слой в QGIS имеется модуль "Текст с разделителями" Delimited text.png. Модуль входит в ядро QGIS и не требует установки, однако следует убедиться, что он активирован. Для этого на главной панели QGIS зайдите во вкладку "Модули" -> "Управление модулями" и убедитесь, что на против модуля "Текст с разделителями" стоит галочка:

Manager-dtext.png

Запускаем модуль с главной панели QGIS: Слой -> Добавить слой из текста с разделителями, или нажав на кнопку Delimited text.png.

В открывшемся диалоговом окне в графе "Имя файла" выбираем созданный на предыдущем шаге текстовый файл. Указываем, что это текст с разделителями (галочка "Разделители"), тип разделителя - табуляция (или другой использованный вами). Обработку начинаем с 0 строки - в этом случае, в качестве заголовков колонок будут использованы заголовки созданные на первом шаге. Ставим галочку против "Формат XY" в качестве X координаты выбираем колонку с долготой, в качестве Y - колонку с широтой. Выбираем тип разделителя целой и дробной части (Decimal point) - указываем точку или запятую. Убеждаемся, что таблица имеет узнаваемый вид в нижнем окошке "Образец". Если таблица "разрушилась", убедитесь, что правильно задали разделитель или не задали лишний разделитель:

Dtext window.png

Жмем "ОК". Теперь нам необходимо указать использованную систему координат: если координаты заданы в градусах, то это географическая система координат, а в случае, если данные сняты GPS, то почти наверняка был использован эллипсоид WGS84. Чтобы быстро найти в обширном списке координатных систем необходимую, набираем в графе "Filter" "WGS 84" и выбираем ее из списка Географических систем координат:

Dtext-coord.png

Жмем "ОК". Теперь необходимо убедиться, что точки легли туда куда нужно. В случае если точки сильно "улетели", проверьте, не перепутали ли вы местами широту и долготу на предыдущем шаге. В случае, если точки "улетели" метров на 50-100, дело может быть в неправильно заданной системе координат, необходимо выяснить параметры СК в которой снимались координаты.

Dtext verify.png

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

Dtext saveas.png

Далее указываем тип файла (Syape-файл ESRI), каталог для сохранения, кодировку (system) и координатную систему для сохраняемого слоя. Если нужно сохранить в СК заданной на предыдущем шаге, выберите "Layer CRS" (Система координат слоя). Жмем "ОК".

Dtext-shape.png

Теперь загружаем созданный Shape-файл, открываем его таблицу атрибутов и убеждаемся, что все в порядке: проблемы могут возникнуть, если текстовое поле длиннее 80 символов, т.к. по умолчанию OGR драйвер задает длину строки в 80 символов. Как задать длину текстового поля, а также другие параметры полей при импорте из текстового файла см. следующий дополнительный раздел.

Пользовательская настройка полей создаваемого shape-файла

Усложним задачу: допустим, нам нужно импортировать таблицу содержащую текстовое поле длиннее, чем 80 символов, кроме того, нам хотелось бы более точно задать параметры будущих полей shape-файла, указав длину и точность целых и дробных чисел. Пример таблицы:

Excel-table2.png

Экспортируем эту таблицу в формат CSV (В Excel Файл -> Сохранить как. Тип файла выбрать "CSV (разделители - запятые, *.CSV):

Num;Lat;Lon;Elevat;Descr
77;63.357817;70.857749;116.4;Лесо-болотный комплекс в долине реки: чередуются пятна елово-кедрового леса и осоково-вахтово-моховые болотца.
81;63.360886;70.855963;119.2;Комплексная лесо-болотная растительность в долине реки. Чередуются следующие сообщества: 1) Вахтово-сфагновые мочажины, 2) Осоково-сфагновые мочажины, 3) Березово-ерниково-сфагновые сообщества.
112;63.330956;70.864509;120.5;Водная растительность на дне неглубокого озера с прозрачной водой и чистым песчаным дном. В прибрежной полосе до 50 м от берега глубина не превышает 30-40 см.

Для того, чтобы задать параметры полей создадим специальный файл с таким же названием как полученный на предыдущем шаге файл *.csv и расширением *.CSVT. В этом файле через запятую, без пробелов, в кавычках нужно последовательно перечислить типы полей и их параметры для нашей таблицы:

"Integer(3)","Real(9.6)","Real(9.6)","Real(5.1)","String(254)"
  • Integer - целочисленные поля, в скобках указывается количество значащих символов. Т.о. если значения в поле колеблются в пределах 1-999, как для поля Num (номер описания) можно указать "Integer(3)"
  • Real - десятичная дробь, в скобках указывается общая длина, с учетом разделителя целой и дробной части, и количество знаков после запятой. Т.о. для координат, снятых бытовым GPS с навигационной точностью (6 знаков после запятой), параметры будут выглядеть так: "Real(9.6)"
  • String - текстовая строка. В скобках указывается количество символов, включая пробелы и знаки препинания). Следует помнить, что максимальная длина текстового поля shape-файла 254 знака.
  • Date - Драйвер СSV поддерживает также формат даты (в формате YYYY-MM-DD). Но, к сожалению, записать формат даты в shape-файл не представляется возможным.


Чтобы указать драйверу, какова геометрия необходимого нам слоя и из каких колонок брать координаты, необходимо создать еще один файл с расширением *.VRT (виртуальный слой).

В теле файла следует прописать:

<OGRVRTDataSource>
    <OGRVRTLayer name="filename">
        <LayerSRS>WGS84</LayerSRS>
        <SrcDataSource relativeToVRT="1">filename.csv</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <GeometryField encoding="PointFromColumns" x="Lon" y="Lat"/>
    </OGRVRTLayer>
</OGRVRTDataSource>
  • name= - название файла *.VRT
  • <LayerSRS>WGS84</LayerSRS> - СК, в данном случае, географическая СК, эллипсоид WGS84.
  • <GeometryType>wkbPoint</GeometryType> - тип геометрии, в нашем случае - точечный слой.
  • <GeometryField encoding="PointFromColumns" x="Lon" y="Lat"/> - указание какие колонки *.CSV-файла содержат, соответственно, долготу и широту.

Таким образом, мы получили 3 файла, находящиеся в одной директории и имеющие одинаковое название:

  • filename.csv
  • filename.csvt
  • filename.vrt

Теперь открываем в QGIS файл VRT как векторный слой: Слой -> Добавить векторный слой. Убеждаемся, что точки легли куда нужно и проверяем параметры созданных полей: в свойствах слоя вкладка "Поля":

Dtext-attribute.png

Сохраняем полученный виртуальный слой как shape-файл: Слой -> Сохранить как

Ссылки

  1. Статья, описывающая, создание точечного слоя в случае с прямоугольной системой координат: Создание точечного слоя из текстовых данных в QGIS
  2. Конвертация значений координат в формате DDMMSS в формат DD.DDDD
  3. Описание CSV драйвера OGR