Создание точечного слоя из текстового файла в QGIS: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
Нет описания правки
м (орфографическая и смысловая ошибка исправлены)
 
(не показано 5 промежуточных версий 2 участников)
Строка 1: Строка 1:
{{Статья|Черновик}}
{{Статья|Опубликована|txt2points2-qgis}}
{{Аннотация|Как перевести данные из таблицы в точечный шейп-файл}}


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


== Подготовка данных к импорту ==
== Подготовка данных к импорту ==
Вначале, необходимо подготовить данные: удобнее всего это делать в табличном редакторе (например, Excel), но можно работать и в любом простом текстовом редакторе типа блокнота (Notepad - блокнот входящий в стандартные программы Windows, или более удобный и работающий с большими текстовыми файлами OpenSource [http://notepad-plus-plus.org/ Notepad++]).  
Вначале, необходимо подготовить данные: удобнее всего это делать в табличном редакторе (например, OpenOffice Calc или MS Excel), но можно работать и в любом другом текстовом редакторе, (Notepad - блокнот входящий в стандартные программы Windows, или более удобный и работающий с большими текстовыми файлами [http://notepad-plus-plus.org/ Notepad++]).  
В Exсel необходимо создать три основные колонки (другие атрибутивные колонки также могут присутствовать):  
В табличном редакторе нужно создать три основные колонки (другие поля данных также могут присутствовать):  


*названием точки  
*идентификатор (название или номер) точки  
*широта  
*широта  
*долгота
*долгота
Строка 20: Строка 20:
Советы:
Советы:


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


== Использование модуля "Текст с разделителями" ==
== Использование модуля "Текст с разделителями" ==
Для преобразования текстовых данных в векторный слой в QGIS имеется модуль "Текст с разделителями" [[Файл:delimited_text.png|22px]]. Модуль входит в ядро QGIS и не требует установки, однако следует убедиться, что он активирован. Для этого на главной панели QGIS зайдите во вкладку '''"Модули" -> "Управление модулями"''' и убедитесь, что на против модуля "Текст с разделителями" стоит галочка:
Для преобразования текстовых данных в векторный слой в QGIS имеется модуль "Текст с разделителями" [[Файл:delimited_text.png|22px]]. Модуль входит в ядро QGIS и не требует отдельной установки (устанавливается вместе с QGIS), однако следует убедиться, что он включен. Для этого в QGIS зайдите во вкладку '''"Модули" -> "Управление модулями"''' и убедитесь, что на против модуля "Текст с разделителями" стоит галочка:


[[Файл:manager-dtext.png|700px|thumb|center]]
[[Файл:manager-dtext.png|700px|thumb|center]]
Строка 32: Строка 32:


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


[[Файл:dtext_window.png|700px|thumb|center]]
[[Файл:dtext_window.png|700px|thumb|center]]


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


Строка 49: Строка 51:
[[Файл:dtext_verify.png|700px|thumb|center]]
[[Файл:dtext_verify.png|700px|thumb|center]]


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


[[Файл:dtext_saveas.png|700px|thumb|center]]
[[Файл:dtext_saveas.png|700px|thumb|center]]


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


[[Файл:dtext-shape.png|700px|thumb|center]]
[[Файл:dtext-shape.png|700px|thumb|center]]
Строка 113: Строка 115:


== Ссылки ==
== Ссылки ==
#Статья, описывающая, создание точечного слоя в случае с прямоугольной системой координат: [http://gis-lab.info/qa/txt2points-qgis.html Создание точечного слоя из текстовых данных в QGIS]
#[http://gis-lab.info/qa/dms2dd.html Конвертация значений координат в формате DDMMSS в формат DD.DDDD]
#[http://gis-lab.info/qa/dms2dd.html Конвертация значений координат в формате DDMMSS в формат DD.DDDD]
#[http://www.gdal.org/ogr/drv_csv.html Описание CSV драйвера OGR]
#[http://www.gdal.org/ogr/drv_csv.html Описание CSV драйвера OGR]

Текущая версия от 04:17, 11 марта 2012

Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/txt2points2-qgis.html


Как перевести данные из таблицы в точечный шейп-файл

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

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

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

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

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

Excel-red.png

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

Советы:

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

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

Для преобразования текстовых данных в векторный слой в QGIS имеется модуль "Текст с разделителями" Delimited text.png. Модуль входит в ядро QGIS и не требует отдельной установки (устанавливается вместе с 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

Далее указываем тип файла (Shape-файл 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