Обсудить в форуме Комментариев 2Редактировать в вики
Как перевести данные из таблицы в точечный шейп-файл
Довольно часто геоданные (информация имеющая координатную привязку) хранятся в виде текста или таблиц и возникает потребность преобразовать их в какой-либо векторный формат. В статье описывается последовательность действий по созданию точечного shape-файла из текста с разделителями в QGIS.
Вначале, необходимо подготовить данные: удобнее всего это делать в табличном редакторе (например, OpenOffice Calc или MS Excel), но можно работать и в любом другом текстовом редакторе, (Notepad - блокнот входящий в стандартные программы Windows, или более удобный и работающий с большими текстовыми файлами Notepad++). В табличном редакторе нужно создать три основные колонки (другие поля данных также могут присутствовать):
В качестве примера, приведем таблицу описаний растительности: в первой колонке - номер описания, далее - широта, долгота, высота НУМ и название растительного комплекса. Широта указывается в десятичных градусах или в метрах (если использована прямоугольная система координат). В случае, если исходные координаты представлены в виде градусов, минут и секунд, вначале их необходимо преобразовать в десятичные.
После того, как ваши данные приведены к указанному виду, необходимо сохранить их как текстовый файл. Рекомендуем сохранять в виде текста с разделителями табуляцией. В Excel: Файл -> Сохранить как, и во вкладке "Тип файла" выбрать "текстовые файлы (с разделителями табуляции (*.txt)".
Советы:
Для преобразования текстовых данных в векторный слой в QGIS имеется модуль "Текст с разделителями" . Модуль входит в ядро QGIS и не требует отдельной установки (устанавливается вместе с QGIS), однако следует убедиться, что он включен. Для этого в QGIS зайдите во вкладку "Модули" -> "Управление модулями" и убедитесь, что на против модуля "Текст с разделителями" стоит галочка:
Запускаем модуль с главной панели QGIS: Слой -> Добавить слой из текста с разделителями, или нажав на кнопку .
В открывшемся диалоговом окне в графе "Имя файла" выбираем созданный на предыдущем шаге текстовый файл.
Жмем "ОК". Теперь нам необходимо указать использованную систему координат: если координаты заданы в градусах, то это географическая система координат, а в случае, если данные сняты GPS, то почти наверняка был использован эллипсоид WGS84. Это может быть иначе, но чаще всего это так.
Чтобы быстро найти в обширном списке координатных систем необходимую, набираем в графе "Filter" "WGS 84" и выбираем ее из списка Географических систем координат:
Жмем "ОК". Теперь необходимо убедиться, что точки легли туда куда нужно. В случае если точки сильно "улетели", проверьте, не перепутали ли вы местами широту и долготу на предыдущем шаге. В случае, если точки "улетели" метров на 50-100, дело может быть в неправильно заданной системе координат, необходимо выяснить параметры СК в которой снимались координаты.
На завершающем шаге необходимо сохранить полученный векторный слой. Правой кнопкой мыши щелкаем по созданному слою в списке слоев и выбираем "Сохранить как".
Далее указываем тип файла (Shape-файл ESRI), каталог для сохранения, кодировку (system) и координатную систему для сохраняемого слоя. Если нужно сохранить в СК заданной на предыдущем шаге, выберите "Layer CRS" (Система координат слоя). Жмем "ОК".
Теперь загружаем созданный Shape-файл, открываем его таблицу атрибутов и убеждаемся, что все в порядке: проблемы могут возникнуть, если текстовое поле длиннее 80 символов, т.к. по умолчанию OGR драйвер задает длину строки в 80 символов. Как задать длину текстового поля, а также другие параметры полей при импорте из текстового файла см. следующий дополнительный раздел.
Усложним задачу: допустим, нам нужно импортировать таблицу содержащую текстовое поле длиннее, чем 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)"
Чтобы указать драйверу, какова геометрия необходимого нам слоя и из каких колонок брать координаты, необходимо создать еще один файл с расширением *.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>
Таким образом, мы получили 3 файла, находящиеся в одной директории и имеющие одинаковое название:
Теперь открываем в QGIS файл VRT как векторный слой: Слой -> Добавить векторный слой. Убеждаемся, что точки легли куда нужно и проверяем параметры созданных полей: в свойствах слоя вкладка "Поля":
Сохраняем полученный виртуальный слой как shape-файл: Слой -> Сохранить как
Обсудить в форуме Комментариев 2Редактировать в вики
Последнее обновление: 2014-05-14 21:59
Дата создания: 24.02.2012
Автор(ы): Илья Филиппов
© GIS-Lab и авторы, 2002-2021. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов. (подробнее).