Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/txt2points2-qgis.html
Как перевести данные из таблицы в точечный шейп-файл
Довольно часто геоданные (информация имеющая координатную привязку) хранятся в виде текста или таблиц и возникает потребность преобразовать их в какой-либо векторный формат. В статье описывается последовательность действий по созданию точечного shape-файла из текста с разделителями в QGIS.
[править] Подготовка данных к импорту
Вначале, необходимо подготовить данные: удобнее всего это делать в табличном редакторе (например, OpenOffice Calc или MS Excel), но можно работать и в любом другом текстовом редакторе, (Notepad - блокнот входящий в стандартные программы Windows, или более удобный и работающий с большими текстовыми файлами Notepad++).
В табличном редакторе нужно создать три основные колонки (другие поля данных также могут присутствовать):
- идентификатор (название или номер) точки
- широта
- долгота
В качестве примера, приведем таблицу описаний растительности: в первой колонке - номер описания, далее - широта, долгота, высота НУМ и название растительного комплекса. Широта указывается в десятичных градусах или в метрах (если использована прямоугольная система координат). В случае, если исходные координаты представлены в виде градусов, минут и секунд, вначале их необходимо преобразовать в десятичные.
После того, как ваши данные приведены к указанному виду, необходимо сохранить их как текстовый файл. Рекомендуем сохранять в виде текста с разделителями табуляцией. В Excel: Файл -> Сохранить как, и во вкладке "Тип файла" выбрать "текстовые файлы (с разделителями табуляции (*.txt)".
Советы:
- Называйте колонки коротко, латинскими буквами, без пробелов и специальных символов.
- Если колонку с широтой назвать Lat (Latitude), а с долготой - Lon (Longitude), то программа автоматически распознает, что в этих колонках находится соответственно широта и долгота, в противном случае, вам придется какая колонка показывает широту, а какая долготу вручную.
- Проверьте, что в качестве разделителя целой и дробной части всегда используется один и тот же знак (точка или запятая).
[править] Использование модуля "Текст с разделителями"
Для преобразования текстовых данных в векторный слой в QGIS имеется модуль "Текст с разделителями" . Модуль входит в ядро QGIS и не требует отдельной установки (устанавливается вместе с QGIS), однако следует убедиться, что он включен. Для этого в QGIS зайдите во вкладку "Модули" -> "Управление модулями" и убедитесь, что на против модуля "Текст с разделителями" стоит галочка:
Запускаем модуль с главной панели QGIS: Слой -> Добавить слой из текста с разделителями, или нажав на кнопку .
В открывшемся диалоговом окне в графе "Имя файла" выбираем созданный на предыдущем шаге текстовый файл.
- Указываем, что это текст с разделителями (галочка "Разделители"), тип разделителя - табуляция (или другой использованный вами).
- Обработку начинаем с 0 строки - в этом случае, в качестве заголовков колонок будут использованы заголовки созданные на первом шаге.
- Ставим галочку против "Формат XY" в качестве X координаты выбираем колонку с долготой, в качестве Y - колонку с широтой если они не выбрались автоматически.
- Выбираем тип разделителя целой и дробной части (Decimal point) - указываем точку или запятую.
- Убеждаемся, что таблица имеет узнаваемый вид в нижнем окошке "Образец". Если таблица "разрушилась", убедитесь, что правильно задали разделитель или не задали ли лишний разделитель:
Жмем "ОК". Теперь нам необходимо указать использованную систему координат: если координаты заданы в градусах, то это географическая система координат, а в случае, если данные сняты GPS, то почти наверняка был использован эллипсоид WGS84. Это может быть иначе, но чаще всего это так.
Чтобы быстро найти в обширном списке координатных систем необходимую, набираем в графе "Filter" "WGS 84" и выбираем ее из списка Географических систем координат:
Жмем "ОК". Теперь необходимо убедиться, что точки легли туда куда нужно. В случае если точки сильно "улетели", проверьте, не перепутали ли вы местами широту и долготу на предыдущем шаге. В случае, если точки "улетели" метров на 50-100, дело может быть в неправильно заданной системе координат, необходимо выяснить параметры СК в которой снимались координаты.
На завершающем шаге необходимо сохранить полученный векторный слой. Правой кнопкой мыши щелкаем по созданному слою в списке слоев и выбираем "Сохранить как".
Далее указываем тип файла (Shape-файл ESRI), каталог для сохранения, кодировку (system) и координатную систему для сохраняемого слоя. Если нужно сохранить в СК заданной на предыдущем шаге, выберите "Layer CRS" (Система координат слоя). Жмем "ОК".
Теперь загружаем созданный Shape-файл, открываем его таблицу атрибутов и убеждаемся, что все в порядке: проблемы могут возникнуть, если текстовое поле длиннее 80 символов, т.к. по умолчанию OGR драйвер задает длину строки в 80 символов. Как задать длину текстового поля, а также другие параметры полей при импорте из текстового файла см. следующий дополнительный раздел.
[править] Пользовательская настройка полей создаваемого shape-файла
Усложним задачу: допустим, нам нужно импортировать таблицу содержащую текстовое поле длиннее, чем 80 символов, кроме того, нам хотелось бы более точно задать параметры будущих полей shape-файла, указав длину и точность целых и дробных чисел. Пример таблицы:
Экспортируем эту таблицу в формат 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 encoding2="PointFromColumns" x="Lon" y="Lat"/>
</OGRVRTLayer>
</OGRVRTDataSource>
- name= - название файла *.VRT
- <LayerSRS>WGS84</LayerSRS> - СК, в данном случае, географическая СК, эллипсоид WGS84.
- <GeometryType>wkbPoint</GeometryType> - тип геометрии, в нашем случае - точечный слой.
- <GeometryField encoding2="PointFromColumns" x="Lon" y="Lat"/> - указание какие колонки *.CSV-файла содержат, соответственно, долготу и широту.
Таким образом, мы получили 3 файла, находящиеся в одной директории и имеющие одинаковое название:
- filename.csv
- filename.csvt
- filename.vrt
Теперь открываем в QGIS файл VRT как векторный слой: Слой -> Добавить векторный слой.
Убеждаемся, что точки легли куда нужно и проверяем параметры созданных полей: в свойствах слоя вкладка "Поля":
Сохраняем полученный виртуальный слой как shape-файл: Слой -> Сохранить как