Получение значений растра по точечным профилям: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
 
(не показано 6 промежуточных версий 2 участников)
Строка 10: Строка 10:
=== Подготовка ===
=== Подготовка ===


Для работы скрипта необходимо иметь [http://gis-lab.info/programs/python/extract-values.7z сам скрипт], интерпретатор Python версии 2.5 или выше, библиотеку GDAL и ее привязки (bindings) к Python.
Для работы скрипта необходимо иметь [https://raw.githubusercontent.com/nextgis/extract_values/master/extract_values.py сам скрипт], интерпретатор Python версии 2.5 или выше, библиотеку GDAL и ее привязки (bindings) к Python.


Наиболее простым способом получить необходимые компоненты в ОС Windows является использование установщика OSGeo4W:
Наиболее простым способом получить необходимые компоненты в ОС Windows является использование установщика OSGeo4W:


# [http://download.osgeo.org/osgeo4w/osgeo4w-setup.exe загрузить установщик].
# [http://download.osgeo.org/osgeo4w/osgeo4w-setup.exe загрузить] и запустить установщик.
# запустить установщик
# выбрать пункт «Расширенная установка» и нажать «Далее»
# выбрать пункт «Расширенная установка» и нажать «Далее»
# выбрать пакеты <tt>gdal</tt> и <tt>gdal-python</tt> (категория Libs), нажать «Далее»
# выбрать пакеты <tt>gdal</tt> и <tt>gdal-python</tt> (категория Libs), нажать «Далее»
Строка 22: Строка 21:
Пользователи OC Linux должны установить необходимые пакеты при помощи пакетного менеджера своего дистрибутива.
Пользователи OC Linux должны установить необходимые пакеты при помощи пакетного менеджера своего дистрибутива.


Архив со скриптом необходимо распаковать, и файл <tt>extract_values.py</tt> поместить в любой удобный каталог, например, в <tt>C:\Tools\GIS</tt>. Запускать скрипт следует из командной строки OSGeo4W.
Архив со скриптом необходимо распаковать, и файл <tt>extract_values.py</tt> поместить в любой удобный каталог, например, в <tt>C:\Tools\GIS</tt>. Запускать скрипт нужно из командной строки OSGeo4W.
 
Разработка скрипта ведется на [https://github.com/nextgis/extract_values Github]. Там же лучше оставлять замечания по работе.


=== Использование ===
=== Использование ===
Строка 28: Строка 29:
Скрипт запускается из командной строки и принимает несколько параметров
Скрипт запускается из командной строки и принимает несколько параметров


<pre>extract_values.py [-c] [-r] [-g] [-f] point_shapefile [raster_file(s)] [-d directory_with_rasters] [-rl list,of,rasters] [-e extension]</pre>
<pre>extract_values.py [-q] [-c] [-r] [-g] [-f] point_shapefile [raster_file(s)] [-d directory_with_rasters] [-rl list,of,rasters] [-e extension]</pre>


* point_shapefile — точечный shape-файл, по объектам которого будет выполняться экстракция значений
* point_shapefile — точечный shape-файл, по объектам которого будет выполняться экстракция значений
* raster_file(s) — список растров из которых необходимо извлечь данные. Если растры и скрипт находятся в разных каталогах, необходимо указывать полный путь к файлам. Элементы списка разделяются пробелами
* raster_file(s) — список растров из которых необходимо извлечь данные. Если растры и скрипт находятся в разных каталогах, необходимо указывать полный путь к файлам. Элементы списка разделяются пробелами
* -c — активирует режим записи данных во внешний файл. Рядом с каждым растром будет создан CSV-файл (имя совпадает с именем shape-файла), в котором будут присутствовать как значения всех полей исходного shape-файла, так и экстрагированные значения растра. В этом режиме исходный shape-файл не модифицируется
* -c — запись данных во внешний файл. В этом режиме будет создан CSV-файл (имя совпадает с именем shape-файла + суффикс 'extract'), в котором будут присутствовать FID-ы записей и экстрагированные из растра значения. В этом режиме исходный shape-файл не изменяется.
* -f — режим создания специального файла CSV (лежит там же где shape-файл) в котором хранятся переименования полей в формате <code>RASTER;NEWFIELD;BAND</code>. Файл удобно использовать для дальнейшего восстановления оригинальных названий полей.
* -f — создание файла CSV с переименованиями полей в формате <code>RASTER;NEWFIELD;BAND</code>. Файл удобно использовать для дальнейшего восстановления оригинальных названий полей. Это может понадобится так как DBF в ESRI Shape не может хранить названия полей длиннее чем 10 символов и GDAL их оптимизирует.
* -r — указывает на необходимость преобразования координат точек в систему координат растра. Используется, если растры и вектор имеют разные системы координат
* -r — указывает на необходимость преобразования координат точек в систему координат растра. Используется, если растры и вектор имеют разные системы координат
* -rl — перечень растров из которых нужно извлечь данные, растры могут лежать в разных папках
* -rl — перечень растров из которых нужно извлечь данные, растры могут лежать в разных папках
Строка 39: Строка 40:
* -d — режим обработки каталога или каталогов. После ключа указывается каталог с растрами, экстракция данных будет выполняться из всех растров в каталоге. Если каталогов указано несколько (через запятую), будут обработаны они все.
* -d — режим обработки каталога или каталогов. После ключа указывается каталог с растрами, экстракция данных будет выполняться из всех растров в каталоге. Если каталогов указано несколько (через запятую), будут обработаны они все.
* -e — расширение растров. Если указать, то из папки указанной выше будут обработаны только растры с этим расширением.
* -e — расширение растров. Если указать, то из папки указанной выше будут обработаны только растры с этим расширением.
* -q — тихий режим. Если указать, то прогресс и дополнительные сообщения выводиться не будут.


Скрипт работает с одно- и многоканальными растровыми данными GDAL-совместимых форматов. Для каждого одноканального растрового слоя в точечном слое будет создано поле с названием, равным названию растрового слоя, а в случае многоканального растра к названию слоя добавится номер канала.
Скрипт работает с одно- и многоканальными растровыми данными GDAL-совместимых форматов. Для каждого одноканального растрового слоя в точечном слое будет создано поле с названием, равным названию растрового слоя, а в случае многоканального растра к названию слоя добавится номер канала.

Текущая версия от 18:25, 5 января 2016

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


Описание скрипта для получения значений растра по точечным профилям.

Задача получения данных из растра (серии растров) по некоторому набору точечных объектов не редкость. Это необходимо при построении спектральных профилей, количественной оценке точности растровых данных, анализе изменений, при подготовке тренировочных наборов для классификации и т.д.

Extract-pixel-data-02.gif

На сайте уже присутствует похожий инструмент, но он разработан для ArcView и имеет ряд ограничений.

Подготовка

Для работы скрипта необходимо иметь сам скрипт, интерпретатор Python версии 2.5 или выше, библиотеку GDAL и ее привязки (bindings) к Python.

Наиболее простым способом получить необходимые компоненты в ОС Windows является использование установщика OSGeo4W:

  1. загрузить и запустить установщик.
  2. выбрать пункт «Расширенная установка» и нажать «Далее»
  3. выбрать пакеты gdal и gdal-python (категория Libs), нажать «Далее»
  4. выбранные пакеты и необходимые зависимости будут загружены и установлены автоматически

Пользователи OC Linux должны установить необходимые пакеты при помощи пакетного менеджера своего дистрибутива.

Архив со скриптом необходимо распаковать, и файл extract_values.py поместить в любой удобный каталог, например, в C:\Tools\GIS. Запускать скрипт нужно из командной строки OSGeo4W.

Разработка скрипта ведется на Github. Там же лучше оставлять замечания по работе.

Использование

Скрипт запускается из командной строки и принимает несколько параметров

extract_values.py [-q] [-c] [-r] [-g] [-f] point_shapefile [raster_file(s)] [-d directory_with_rasters] [-rl list,of,rasters] [-e extension]
  • point_shapefile — точечный shape-файл, по объектам которого будет выполняться экстракция значений
  • raster_file(s) — список растров из которых необходимо извлечь данные. Если растры и скрипт находятся в разных каталогах, необходимо указывать полный путь к файлам. Элементы списка разделяются пробелами
  • -c — запись данных во внешний файл. В этом режиме будет создан CSV-файл (имя совпадает с именем shape-файла + суффикс 'extract'), в котором будут присутствовать FID-ы записей и экстрагированные из растра значения. В этом режиме исходный shape-файл не изменяется.
  • -f — создание файла CSV с переименованиями полей в формате RASTER;NEWFIELD;BAND. Файл удобно использовать для дальнейшего восстановления оригинальных названий полей. Это может понадобится так как DBF в ESRI Shape не может хранить названия полей длиннее чем 10 символов и GDAL их оптимизирует.
  • -r — указывает на необходимость преобразования координат точек в систему координат растра. Используется, если растры и вектор имеют разные системы координат
  • -rl — перечень растров из которых нужно извлечь данные, растры могут лежать в разных папках
  • -g — использование gdallocationinfo для извлечения значений. Этот режим нужен когда исходные растры настолько велики, что не помещаются в память. Требует установленных утилит GDAL.
  • -d — режим обработки каталога или каталогов. После ключа указывается каталог с растрами, экстракция данных будет выполняться из всех растров в каталоге. Если каталогов указано несколько (через запятую), будут обработаны они все.
  • -e — расширение растров. Если указать, то из папки указанной выше будут обработаны только растры с этим расширением.
  • -q — тихий режим. Если указать, то прогресс и дополнительные сообщения выводиться не будут.

Скрипт работает с одно- и многоканальными растровыми данными GDAL-совместимых форматов. Для каждого одноканального растрового слоя в точечном слое будет создано поле с названием, равным названию растрового слоя, а в случае многоканального растра к названию слоя добавится номер канала. ВАЖНО! Необходимо помнить, что название поля в формате DBF ограничено 10 символами, поэтому длинные названия будут обрезаться.

Ниже показан результат извлечения данных из 6-канального фрагмента Landsat (тип данных Byte, название файла снимка — clearcuts_174016.tiff), открытый в QGIS. К исходным двум полям shape-файла (id, taxon) добавились поля clearcut_1 - clearcut_6 (видим, что имена полей обрезаны чтобы удовлетворять требованиям формата DBF) со значениями соответствующих каналов в каждой точке.

Extract-values-raster-01.png

Примеры

Получить значения растра after.tiff по точечному shape-файлу poi.shp (скрипт и файлы находятся в одном каталоге)

extract_values.py poi.shp after.tiff

Получить значения растра after.tiff по точечному shape-файлу poi2.shp и записать их во внешний файл

extract_values.py -с poi2.shp after.tiff

Получить значения растра after.tiff по точечному shape-файлу poi2.shp, система координат которого отличается от системы координат растра

extract_values.py -r poi2.shp after.tiff

Получить значения растров before.tiff и after.tiff по точечному shape-файлу points.shp

extract_values.py points.shp before.tiff after.tiff

Получить значения всех растров каталога по точечному shape-файлу points.shp

extract_values.py points.shp -d D:\data\rasters_veg

Получить значения всех растров каталога с расширением *.tif по точечному shape-файлу points.shp использовать при этом gdalallocinfo.

extract_values.py -g points.shp -d D:\data\rasters_veg -e tif

Получить значения из нескольких растров лежащих в разных местах:

extract_values.py -g points.shp -rl D:\data1\input1.tif,D:\data2\input2.tif

Получить значения из нескольких папок растров в разных местах:

extract_values.py -g points.shp -d D:\data1\,D:\data2\

Ссылки по теме