понедельник, 25 апреля 2016 г.

Как из точечного слоя создать таблицу с координатами точек


Часто нам нужно из точечного слоя получить таблицу с координатами точек и атрибутивной информацией. Например, мы наставили точки по спутниковому снимку создав точечный shape-файл или выгрузили GPX-файл из GPS-навигатора и теперь  хотим получить точки в виде таблицы с координатами и атрибутами точек

Рассмотрим несколько вариантов как это сделать в открытом ПО, доступном для всех:
  1. Экспортировать в CSV-файл (таблица в формате «Текст с разделителями») в QGIS
  2. Добавить поля геометрии и скопировать атрибутивную таблицу через буфер обмена
  3. Добавить поля геометрии и экспортировать в табличный формат XLSX или ODS
  4. Использовать ogr2ogr через текстовый терминал или в скрипте
Для работы с точками в shape-файле подходит все 4 способа, но т.к.  QGIS пока не позволяет редактировать  GPX-файлы то для экспорта точек из GPX-файлов в таблицу подходит первый и четвертый способ.

Поехали:
1) Экспортировать в CSV-файл (таблица в формате «Текст с разделителями») в QGIS

Этот метод наиболее распространенный, т. к. поддерживается QGIS довольно давно и во многих других ГИС-программах. Кроме всего прочего, CSV-файлы без дополнительных манипуляций можно загружать в программы статистической обработки, такие как R  и PAST.

Далее, нужно правой кнопкой мышки нажать по названию слоя в панели слоев, и в контекстном меню выбрать пункт «Сохранить как»


В открывшемся окне настройки сохранения нужно:
  1. выбрать результирующий формат — Comma Separated Value (CSV);
  2. указать путь сохранения файла;
  3. выбрать систему координат результирующего файла, если хотим получить традиционные градусы долготы/широты то нужно выбрать WGS 84 (EPSG:4326);
  4. указать кодировку создаваемого файла, лучше взять в привычку всегда использовать «utf-8», чтобы не было путаницы и проблем с кириллическими шрифтами в дальнейшем;
  5. указать тип записи геометрии. Если нужно первым записать координату X перед Y то выбираем GEOMETRY: AS_XY, но доступны и другие варианты: AS_YX, AS_XYZ, AS_WKT, <По умолчанию> (не создает полей геометрии);
  6. указать разделитель полей SEPARATOR: TAB, COMMA или SEMICOLON (я обычно выбираю TAB, чтоб не меньше было путаницы в дальнейшем).
Остальные параметры не обязательны, и их можно оставить по умолчанию.


Далее, открываем созданный файл в табличном редакторе. Я предпочитаю использовать  LibreOffice или OpenOffice, в них хорошо реализован импорт/экспорт в различные форматы и можно явно указать кодировку файла, а также они бесплатны. Нажимаем кнопку «Открыть» или комбинацию клавиш <Ctrl> + <O>. Выбираем созданный на предыдущем шаге CSV-файл.


Далее смотрим чтобы была выбрана кодировка и разделитель указанные нами на предыдущем шаге. В нашем случае это кодировка – Unicode (utf-8) и разделитель – табуляция. Внизу окна есть область предпросмотра таблицы в которой видно корректность разбиения на столбцы.


После нажатия <Ok> таблица открывается в интерфейсе табличного редактора.


Как видим, в ней присутствуют поля с координатами долготы (X) и широты (Y) в системе координат WGS84. Далее с этими данными мы можем манипулировать как с обычными табличными данными — копировать, редактировать, сортировать, округлять, считать и т.д.


2) Добавить поля геометрии и скопировать атрибутивную таблицу через буфер обмена

Так же возможен вариант получить координаты точек в таблице без создания новых файлов. Для этого нам нужно добавить поля геометрии в атрибутивную таблицу имеющегося файла.
Исходная атрибутивная таблица не содержит видимых полей с координатами точек.


Для того, чтоб добавить поля геометрии, выбираем меню «Вектор» - «Обработка геометрии» - «Экспортировать / добавить поле геометрии»


У нас откроется окно с настройками инструмента «Экспортировать / добавить поле геометрии». В нем нужно:
  • выбрать исходный векторный слой. Если в проекте загружен 1 векторный слой, то не будет возможности выбирать, а если несколько слоев, то будет подставлен самый первый по алфавиту, – нужно быть внимательным!!
  • выбрать систему координат для создаваемых полей. По умолчанию предлагается выбрать систему координат слоя, но так же есть и вариант «Система координат проекта». В нашем случае подойдет вариант «Система координат слоя», т. к. нам нужны координаты в СК WGS 84 (EPSG:4326) и слой у нас имеет такую же СК. А если бы наш слой имел какую-нибудь другую СК, например «WGS 84 / Pseudo Mercator (EPSG:3857)», а нам нужны были координаты в WGS 84 (EPSG:4326), то мы могли бы изменить СК проекта на нужную нам WGS 84 (EPSG:4326) и при создании полей геометрии выбрать вариант «Система координат проекта».
  • указать, создавать ли нам новый shape-файл или записать новые поля в имеющемся файле.


Указав нужные параметры нажимаем «Ок». Если мы добавляем поля с описанием геометрии в имеющийся слой, то всплывет предупреждение, что QGIS не поддерживает одновременный доступ к одному источнику данных из нескольких потоков, и попросит убедится что атрибутивная таблица этого слоя закрыта. Если вы уверены что хотите продолжить, жмите "ОК".


Всплывет сообщение что ваш слой обновлен. И в таблицу атрибутов точечного слоя  будут добавлены поля «XCOORD» и «YCOORD». В поле «XCOORD» будут градусы долготы, а в  «YCOORD» – широты.


Инструмент «Экспортировать / добавить поле геометрии» примечателен тем, что при помощи него можно не только добавить поля с координатами для  точечного слоя, но и тем что при помощи него можно работать так-же с линейными и полигональными слоями. В линейный слой будет  добавлено поле «LENGTH». В полигональный слой будут добавлены поля «AREA» и «PERIMETER» – площадь и периметр соответственно. Следует учитывать, что добавленные поля будут иметь значения в единицах измерения системы координат, для метрических СК это будут метры, а для географических – градусы.

Далее нужно выделить нужные объекты, можно в таблице, на карте инструментами выделения, инструментом «выделить по атрибутам» или используя пространственные запросы. Открыть таблицу атрибутов слоя и скопировать выделение в буфер обмена, нажав кнопку «Копировать выделение» или комбинацию клавиш <Ctrl>+<C>.


Далее запускаем табличный редактор, выделяем первую ячейку для вставки и вставляем в него выделение, нажав <Ctrl>+<V>. После этого откроется окно «Импорт текста» в котором обычно все параметры корректно подхватываются по умолчанию, но если что есть и возможность дополнительных настроек.


Далее мы можем работать с этими данными уже в интерфейсе табличного редактора.


3) Добавить поля геометрии и экспортировать в табличный формат XLSX или ODS

Этот способ по сути является не отдельным способом, а продолжением предыдущего. Суть его в том, что после расчета полей геометрии сохраняем слой или только выделение сразу в XLSX или ODS формат. Для этого, в точечный слой добавляем поля с координатами как описано выше (при помощи инструмента «Экспортировать / добавить поле геометрии») и в списке слоев жмем правой кнопкой мышки по этому слою. Из контекстного меню выбираем пункт «Сохранить как».


В открывшемся окне выбираем формат XLSX или ODS.
Для справки:
  • XLSX (Office Open XML) – формат таблиц по умолчанию для приложений Microsoft Office 2007 и более поздних.
  • ODS (OpenDocument Spreadsheet) – это электронные таблицы формата OpenDocument, родной формат электронных таблиц для программах типа LibreOffice или OpenOffice.

Этот способ работает только в версиях QGIS 2.14 и выше, т. к. в более ранних версиях из коробки возможность работы с  XLSX или ODS отсутствовала. Если  вам хочется использовать его в более ранних версиях QGIS, то нужно установить дополнительный модуль XyTools.

4) Использовать ogr2ogr через текстовый терминал или в скрипте.

Если у вас десятки - сотни файлов с точками, например, вы сезон собирали по полям информацию и после каждого выхода скидывали с GPS-навигатора точки на компьютер, и ваши коллеги скинули вам точки с GPS, и все это богатство нужно конвертировать в таблицы для дальнейшей работы, то как быть в таком случае? Делать это вручную через графический интерфейс практически бессмысленная трата времени, ведь это действие можно доверить скрипту, который по очереди переберет все ГИС-файлы и конвертирует их в таблицы, а время потратить на что-то более интеллектуальное.
Если у вас на компьютере уже установлен QGIS то вместе с ним так же установлена и библиотека GDAL/OGR. Эта библиотека содержит множество программ и позволяет работать со множеством растровых и векторных ГИС-форматов. Для наших целей мы будем использовать утилиту ogr2ogr. Эта утилита предназначена для конвертации векторных данных. Описание можно посмотреть на официальном сайте, а примеры использования на сайте gis-lab.info.
Мы же рассмотрим скрипт для экспорта путевых точек из GPX-файлов в CSV-таблицы. Данный скрипт работает следующим образом. Мы складываем множество GPX-файлов скинутых с GPS-навигатора в одну папку. Важным условием является то, чтоб не было пробелов в названиях файлов. В эту же папку кладем файл скрипта и запускаем скрипт, дважды кликнув по нему мышкой.


В ходе исполнения скрипта в папке с GPX-файлами появляются  CSV-файлы (таблицы), которые называются так же как и исходные файлы, но имеют другое расширение.


В созданных CSV-файлах, разделитель колонок – запятая. Это нужно указать при открытии в табличном редакторе.


Как видим, в созданных  CSV-файлах присутствуют поля «X» и «Y». Так же есть полезные поля «ele» – высота по GPS, «name» – название точки, «time» – время (в некоторых моделях GPS — время постановки точки, а в некоторых – время выгрузки из прибора), «cmt» – комментарий (в некоторые навигаторы сюда пишут время постановки точки), «desc» – описание создаваемое на некоторых навигаторах. Кроме них есть еще множество полей специфичных для GPX-формата.


Теперь рассмотрим сам скрипт для Linux и Windows.

Для Linux скрипт это текстовый файл с расширением «.sh» и имеет следующее содержание:
#!/bin/sh
for fname1 in *.gpx
do fname2="$(basename $fname1 .gpx)"
ogr2ogr -f CSV $fname2 $fname2.gpx -lco GEOMETRY=AS_XY
mv ./$fname2/waypoints.csv ./$fname2.csv
rm -r ./$fname2
done
В Linux нужно скрипт сначала сделать исполняемым при помощи команды chmod +x convert_GPX-CSV_waypoints.sh
Архив со скриптом для Linux можно скачать от сюда.

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

Скрипт для  Windows это текстовый файл с расширением «.bat». Для его создания нужно в папке с GPX-файлами создать пустой текстовый документ с расширением «.txt».

Открыть этот текстовый файл в блокноте или каком то другом более продвинутом текстовом редакторе, например Notepad++.

Вставить в него следующее содержание:
@echo off
SET ogr2ogr="C:\Program Files\QGIS Lyon\bin\ogr2ogr.exe"
for %%f in (*.gpx) do (
    echo %%f
    %ogr2ogr% -f "CSV" out.csv %%f -lco GEOMETRY=AS_XY
    rename out.csv %%f.csv
    del tracks.csv
    del route_points.csv
    del track_points.csv
    del routes.csv
pause
Обратите внимание на вторую строчку: SET ogr2ogr="C:\Program Files\QGIS Lyon\bin\ogr2ogr.exe"

На моем компьютере путь к утилите ogr2ogr: C:\Program Files\QGIS Lyon\bin\ogr2ogr.exe У вас на компьютере он может немного отличаться. Проверьте где у вас на компьютере эта утилита, и подставьте  свой путь к ней.

Сохранить и закрыть. После этого переименовать файл, изменив расширение «.txt» на «.bat».

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



В результате выполнения скрипта в папке с GPX-файлами появятся CSV-файлы.

Пишите вопросы и комментарии.

Комментариев нет:

Отправить комментарий