<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.gis-lab.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LeraBel</id>
	<title>GIS-Lab - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gis-lab.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LeraBel"/>
	<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/w/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/LeraBel"/>
	<updated>2026-04-03T20:50:51Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25271</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25271"/>
		<updated>2017-03-26T19:38:51Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&amp;lt;br /&amp;gt;&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&amp;lt;br /&amp;gt;&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&amp;lt;br /&amp;gt;&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
Рассмотрим подробнее структуру скрипта:&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Импорт модулей ====&lt;br /&gt;
Для данного скрипта необходимы следующие модули: os, argparse и datetime из которого нам нужны классы date и timedelta. Класс datetime.date позволяет выделить из полного формата даты только год, месяц и день. Класс datetime.timedelta позволяет высчитать разницу между двумя моментами времени, с точностью до микросекунд. Модуль os включает множество функций для работы с операционной системой, причём их поведение, не зависит от ОС, поэтому программы остаются переносимыми. Модуль argparse позволяет обрабатывать опции и аргументы командной строки, которой выполняется скрипт. В данном случае можно обойтись и без него, но он позволяет вводить нужную информацию (год, пути исходного и конечного файлов) непосредственно при запуске из командной строки, тем самым исключая необходимость внесения правок в само тело скрипта.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_импорта_модулей.png|Пример импорта модулей]]&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Описание аргументов ====&lt;br /&gt;
Следующим этапом является описание аргументов, которые, как было сказано выше, вводятся в командной строке. К ним относятся год «year», исходная папка с данными «input_folder» и папка «output_folder», в которую будут помещены результаты.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_описания_аргументов.png]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Строка «args = parser.parse_args()» является активатором запуска модуля parse. Далее, вводится переменная b, которой присваивается значение вводимого года исходных данных. &amp;lt;br /&amp;gt;&lt;br /&gt;
==== Счетчик дат ====&lt;br /&gt;
Исходные данные представляют собой 8-ми канальные растры, где каждый канал соответствует одному дню. Имя файла содержит в себе дату первого дня из восьмидневного периода. Например, «2016.01.01.tif», «2016.01.09.tif» и т.д. Таким образом, для того, чтобы скрипт работал, необходимо ввести имена всех исходных файлов в виде списка. Однако, данную процедуру необходимо будет повторять для каждого года в отдельности, особенно для високосных годов, где помимо года в названии файла меняются месяц и день. Счетчик дат необходим для того, чтобы не вводить вручную имена исходных растров, а автоматически создавать список этих имен. &amp;lt;br /&amp;gt;&lt;br /&gt;
Необходимо создать пустой список, в который будут помещаться имена исходных файлов после их создания. В данном случае ему присваивается имя rasters_list. Введем переменную «а» и присвоим ей значение равное 0. При обработке каждого последующего из исходных 46 растров, переменная «a» будет увеличиваться на 8. Переменная delta отвечает за счет дат, т.е. прибавляет к каждой предыдущей дате переменную «а», соответствующую количеству дней, прошедших с момента отсчета (1 января каждого года) до начала очередного 8-ми дневного периода. Исходная дата «base_date» соответствует первому января каждого года. Соответственно, для того, чтобы получить следующую дату, необходимо прибавить к ней переменную delta. Следующим шагом является преобразование формата даты в строку, для этого используется класс time.strftime. Дате, представленной в формате строки, прибавляется окончание «.tif», соответствующее расширению растра, и список пополняется при помощи команды «append».&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Создание_и_запосление_списка_дат.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Блок преобразования ====&lt;br /&gt;
Переменные id и od соответствуют исходной и конечной папкам, им присваиваются значения args.input_folder и args.output_folder. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Ввод переменных.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Далее, для каждого канала растра из списка выполняются следующие операции: отбор нужных пикселей и их векторизация. В данном случае используется формат командной строки cmd. В первом случае мы используем утилиту gdal_calc.bat, где при помощи выражения «А*(А&amp;gt;7)» отбираем только те пиксели, значение которых строго больше 7, остальным присваиваем значение NoData. В результате из каждого исходного растра получаются 8 новых, названия которых соответствуют порядковому номеру дня в году. Затем, при помощи утилиты gdal_polygonize.bat преобразуем отобранные растровые элементы в формат shp-файла. Полученному файлу также присваивается порядковый номер дня в году, которому он соответствует. Команда os.system(cmd) запускает формат командной строки cmd.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Блок_обработки_растра.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Блок присвоения атрибутивной информации ====&lt;br /&gt;
Следующий шаг в данном блоке позволяет присваивать атрибутивную информацию полученному shp-файлу. В начале создается поле и указывается его название и тип. Затем поле заполняется необходимой информацией. Например, в первом случае мы создаем текстовое поле «fulldate» с длинной до 9 символов и вносим в него год «str(b)» и порядковый номер дня в году «str(i)». Следующие два поля содержат в себе порядковый номер дня в году и год соответственно. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Блок_заполнения_атрибутивной_таблицы.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25270</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25270"/>
		<updated>2017-03-26T19:36:42Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&amp;lt;br /&amp;gt;&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&amp;lt;br /&amp;gt;&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&amp;lt;br /&amp;gt;&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
Рассмотрим подробнее структуру скрипта:&amp;lt;br /&amp;gt;&lt;br /&gt;
==== Импорт модулей ====&lt;br /&gt;
Для данного скрипта необходимы следующие модули: os, argparse и datetime из которого нам нужны классы date и timedelta. Класс datetime.date позволяет выделить из полного формата даты только год, месяц и день. Класс datetime.timedelta позволяет высчитать разницу между двумя моментами времени, с точностью до микросекунд. Модуль os включает множество функций для работы с операционной системой, причём их поведение, не зависит от ОС, поэтому программы остаются переносимыми. Модуль argparse позволяет обрабатывать опции и аргументы командной строки, которой выполняется скрипт. В данном случае можно обойтись и без него, но он позволяет вводить нужную информацию (год, пути исходного и конечного файлов) непосредственно при запуске из командной строки, тем самым исключая необходимость внесения правок в само тело скрипта.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_импорта_модулей.png|Пример импорта модулей]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Описание аргументов&amp;lt;br /&amp;gt;&lt;br /&gt;
Следующим этапом является описание аргументов, которые, как было сказано выше, вводятся в командной строке. К ним относятся год «year», исходная папка с данными «input_folder» и папка «output_folder», в которую будут помещены результаты.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_описания_аргументов.png]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Строка «args = parser.parse_args()» является активатором запуска модуля parse. Далее, вводится переменная b, которой присваивается значение вводимого года исходных данных. &amp;lt;br /&amp;gt;&lt;br /&gt;
====Счетчик дат====&amp;lt;br /&amp;gt;&lt;br /&gt;
Исходные данные представляют собой 8-ми канальные растры, где каждый канал соответствует одному дню. Имя файла содержит в себе дату первого дня из восьмидневного периода. Например, «2016.01.01.tif», «2016.01.09.tif» и т.д. Таким образом, для того, чтобы скрипт работал, необходимо ввести имена всех исходных файлов в виде списка. Однако, данную процедуру необходимо будет повторять для каждого года в отдельности, особенно для високосных годов, где помимо года в названии файла меняются месяц и день. Счетчик дат необходим для того, чтобы не вводить вручную имена исходных растров, а автоматически создавать список этих имен. &amp;lt;br /&amp;gt;&lt;br /&gt;
Необходимо создать пустой список, в который будут помещаться имена исходных файлов после их создания. В данном случае ему присваивается имя rasters_list. Введем переменную «а» и присвоим ей значение равное 0. При обработке каждого последующего из исходных 46 растров, переменная «a» будет увеличиваться на 8. Переменная delta отвечает за счет дат, т.е. прибавляет к каждой предыдущей дате переменную «а», соответствующую количеству дней, прошедших с момента отсчета (1 января каждого года) до начала очередного 8-ми дневного периода. Исходная дата «base_date» соответствует первому января каждого года. Соответственно, для того, чтобы получить следующую дату, необходимо прибавить к ней переменную delta. Следующим шагом является преобразование формата даты в строку, для этого используется класс time.strftime. Дате, представленной в формате строки, прибавляется окончание «.tif», соответствующее расширению растра, и список пополняется при помощи команды «append».&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Создание_и_запосление_списка_дат.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
====Блок преобразования====&amp;lt;br /&amp;gt;&lt;br /&gt;
Переменные id и od соответствуют исходной и конечной папкам, им присваиваются значения args.input_folder и args.output_folder. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Ввод переменных.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Далее, для каждого канала растра из списка выполняются следующие операции: отбор нужных пикселей и их векторизация. В данном случае используется формат командной строки cmd. В первом случае мы используем утилиту gdal_calc.bat, где при помощи выражения «А*(А&amp;gt;7)» отбираем только те пиксели, значение которых строго больше 7, остальным присваиваем значение NoData. В результате из каждого исходного растра получаются 8 новых, названия которых соответствуют порядковому номеру дня в году. Затем, при помощи утилиты gdal_polygonize.bat преобразуем отобранные растровые элементы в формат shp-файла. Полученному файлу также присваивается порядковый номер дня в году, которому он соответствует. Команда os.system(cmd) запускает формат командной строки cmd.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Блок_обработки_растра.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
====Блок присвоения атрибутивной информации====&amp;lt;br /&amp;gt;&lt;br /&gt;
Следующий шаг в данном блоке позволяет присваивать атрибутивную информацию полученному shp-файлу. В начале создается поле и указывается его название и тип. Затем поле заполняется необходимой информацией. Например, в первом случае мы создаем текстовое поле «fulldate» с длинной до 9 символов и вносим в него год «str(b)» и порядковый номер дня в году «str(i)». Следующие два поля содержат в себе порядковый номер дня в году и год соответственно. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Блок_заполнения_атрибутивной_таблицы.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25269</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25269"/>
		<updated>2017-03-26T19:34:18Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&amp;lt;br /&amp;gt;&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&amp;lt;br /&amp;gt;&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&amp;lt;br /&amp;gt;&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
Рассмотрим подробнее структуру скрипта:&amp;lt;br /&amp;gt;&lt;br /&gt;
=== Импорт модулей ===&lt;br /&gt;
Для данного скрипта необходимы следующие модули: os, argparse и datetime из которого нам нужны классы date и timedelta. Класс datetime.date позволяет выделить из полного формата даты только год, месяц и день. Класс datetime.timedelta позволяет высчитать разницу между двумя моментами времени, с точностью до микросекунд. Модуль os включает множество функций для работы с операционной системой, причём их поведение, не зависит от ОС, поэтому программы остаются переносимыми. Модуль argparse позволяет обрабатывать опции и аргументы командной строки, которой выполняется скрипт. В данном случае можно обойтись и без него, но он позволяет вводить нужную информацию (год, пути исходного и конечного файлов) непосредственно при запуске из командной строки, тем самым исключая необходимость внесения правок в само тело скрипта.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_импорта_модулей.png|Пример импорта модулей]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Описание аргументов&amp;lt;br /&amp;gt;&lt;br /&gt;
Следующим этапом является описание аргументов, которые, как было сказано выше, вводятся в командной строке. К ним относятся год «year», исходная папка с данными «input_folder» и папка «output_folder», в которую будут помещены результаты.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_описания_аргументов.png]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Строка «args = parser.parse_args()» является активатором запуска модуля parse. Далее, вводится переменная b, которой присваивается значение вводимого года исходных данных. &amp;lt;br /&amp;gt;&lt;br /&gt;
Счетчик дат&amp;lt;br /&amp;gt;&lt;br /&gt;
Исходные данные представляют собой 8-ми канальные растры, где каждый канал соответствует одному дню. Имя файла содержит в себе дату первого дня из восьмидневного периода. Например, «2016.01.01.tif», «2016.01.09.tif» и т.д. Таким образом, для того, чтобы скрипт работал, необходимо ввести имена всех исходных файлов в виде списка. Однако, данную процедуру необходимо будет повторять для каждого года в отдельности, особенно для високосных годов, где помимо года в названии файла меняются месяц и день. Счетчик дат необходим для того, чтобы не вводить вручную имена исходных растров, а автоматически создавать список этих имен. &amp;lt;br /&amp;gt;&lt;br /&gt;
Необходимо создать пустой список, в который будут помещаться имена исходных файлов после их создания. В данном случае ему присваивается имя rasters_list. Введем переменную «а» и присвоим ей значение равное 0. При обработке каждого последующего из исходных 46 растров, переменная «a» будет увеличиваться на 8. Переменная delta отвечает за счет дат, т.е. прибавляет к каждой предыдущей дате переменную «а», соответствующую количеству дней, прошедших с момента отсчета (1 января каждого года) до начала очередного 8-ми дневного периода. Исходная дата «base_date» соответствует первому января каждого года. Соответственно, для того, чтобы получить следующую дату, необходимо прибавить к ней переменную delta. Следующим шагом является преобразование формата даты в строку, для этого используется класс time.strftime. Дате, представленной в формате строки, прибавляется окончание «.tif», соответствующее расширению растра, и список пополняется при помощи команды «append».&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Создание_и_запосление_списка_дат.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Блок преобразования&amp;lt;br /&amp;gt;&lt;br /&gt;
Переменные id и od соответствуют исходной и конечной папкам, им присваиваются значения args.input_folder и args.output_folder. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Ввод переменных.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Далее, для каждого канала растра из списка выполняются следующие операции: отбор нужных пикселей и их векторизация. В данном случае используется формат командной строки cmd. В первом случае мы используем утилиту gdal_calc.bat, где при помощи выражения «А*(А&amp;gt;7)» отбираем только те пиксели, значение которых строго больше 7, остальным присваиваем значение NoData. В результате из каждого исходного растра получаются 8 новых, названия которых соответствуют порядковому номеру дня в году. Затем, при помощи утилиты gdal_polygonize.bat преобразуем отобранные растровые элементы в формат shp-файла. Полученному файлу также присваивается порядковый номер дня в году, которому он соответствует. Команда os.system(cmd) запускает формат командной строки cmd.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Блок_обработки_растра.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Блок присвоения атрибутивной информации&amp;lt;br /&amp;gt;&lt;br /&gt;
Следующий шаг в данном блоке позволяет присваивать атрибутивную информацию полученному shp-файлу. В начале создается поле и указывается его название и тип. Затем поле заполняется необходимой информацией. Например, в первом случае мы создаем текстовое поле «fulldate» с длинной до 9 символов и вносим в него год «str(b)» и порядковый номер дня в году «str(i)». Следующие два поля содержат в себе порядковый номер дня в году и год соответственно. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Блок_заполнения_атрибутивной_таблицы.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25268</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25268"/>
		<updated>2017-03-26T19:31:38Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&amp;lt;br /&amp;gt;&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&amp;lt;br /&amp;gt;&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&amp;lt;br /&amp;gt;&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
Рассмотрим подробнее структуру скрипта:&amp;lt;br /&amp;gt;&lt;br /&gt;
Импорт модулей&amp;lt;br /&amp;gt;&lt;br /&gt;
Для данного скрипта необходимы следующие модули: os, argparse и datetime из которого нам нужны классы date и timedelta. Класс datetime.date позволяет выделить из полного формата даты только год, месяц и день. Класс datetime.timedelta позволяет высчитать разницу между двумя моментами времени, с точностью до микросекунд. Модуль os включает множество функций для работы с операционной системой, причём их поведение, не зависит от ОС, поэтому программы остаются переносимыми. Модуль argparse позволяет обрабатывать опции и аргументы командной строки, которой выполняется скрипт. В данном случае можно обойтись и без него, но он позволяет вводить нужную информацию (год, пути исходного и конечного файлов) непосредственно при запуске из командной строки, тем самым исключая необходимость внесения правок в само тело скрипта.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_импорта_модулей.png|Пример импорта модулей]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Описание аргументов&amp;lt;br /&amp;gt;&lt;br /&gt;
Следующим этапом является описание аргументов, которые, как было сказано выше, вводятся в командной строке. К ним относятся год «year», исходная папка с данными «input_folder» и папка «output_folder», в которую будут помещены результаты.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_описания_аргументов.png]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Строка «args = parser.parse_args()» является активатором запуска модуля parse. Далее, вводится переменная b, которой присваивается значение вводимого года исходных данных. &amp;lt;br /&amp;gt;&lt;br /&gt;
Счетчик дат&amp;lt;br /&amp;gt;&lt;br /&gt;
Исходные данные представляют собой 8-ми канальные растры, где каждый канал соответствует одному дню. Имя файла содержит в себе дату первого дня из восьмидневного периода. Например, «2016.01.01.tif», «2016.01.09.tif» и т.д. Таким образом, для того, чтобы скрипт работал, необходимо ввести имена всех исходных файлов в виде списка. Однако, данную процедуру необходимо будет повторять для каждого года в отдельности, особенно для високосных годов, где помимо года в названии файла меняются месяц и день. Счетчик дат необходим для того, чтобы не вводить вручную имена исходных растров, а автоматически создавать список этих имен. &amp;lt;br /&amp;gt;&lt;br /&gt;
Необходимо создать пустой список, в который будут помещаться имена исходных файлов после их создания. В данном случае ему присваивается имя rasters_list. Введем переменную «а» и присвоим ей значение равное 0. При обработке каждого последующего из исходных 46 растров, переменная «a» будет увеличиваться на 8. Переменная delta отвечает за счет дат, т.е. прибавляет к каждой предыдущей дате переменную «а», соответствующую количеству дней, прошедших с момента отсчета (1 января каждого года) до начала очередного 8-ми дневного периода. Исходная дата «base_date» соответствует первому января каждого года. Соответственно, для того, чтобы получить следующую дату, необходимо прибавить к ней переменную delta. Следующим шагом является преобразование формата даты в строку, для этого используется класс time.strftime. Дате, представленной в формате строки, прибавляется окончание «.tif», соответствующее расширению растра, и список пополняется при помощи команды «append».&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Создание_и_запосление_списка_дат.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Блок преобразования&amp;lt;br /&amp;gt;&lt;br /&gt;
Переменные id и od соответствуют исходной и конечной папкам, им присваиваются значения args.input_folder и args.output_folder. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Ввод переменных.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Далее, для каждого канала растра из списка выполняются следующие операции: отбор нужных пикселей и их векторизация. В данном случае используется формат командной строки cmd. В первом случае мы используем утилиту gdal_calc.bat, где при помощи выражения «А*(А&amp;gt;7)» отбираем только те пиксели, значение которых строго больше 7, остальным присваиваем значение NoData. В результате из каждого исходного растра получаются 8 новых, названия которых соответствуют порядковому номеру дня в году. Затем, при помощи утилиты gdal_polygonize.bat преобразуем отобранные растровые элементы в формат shp-файла. Полученному файлу также присваивается порядковый номер дня в году, которому он соответствует. Команда os.system(cmd) запускает формат командной строки cmd.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Блок_обработки_растра.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Блок присвоения атрибутивной информации&amp;lt;br /&amp;gt;&lt;br /&gt;
Следующий шаг в данном блоке позволяет присваивать атрибутивную информацию полученному shp-файлу. В начале создается поле и указывается его название и тип. Затем поле заполняется необходимой информацией. Например, в первом случае мы создаем текстовое поле «fulldate» с длинной до 9 символов и вносим в него год «str(b)» и порядковый номер дня в году «str(i)». Следующие два поля содержат в себе порядковый номер дня в году и год соответственно. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Блок_заполнения_атрибутивной_таблицы.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25267</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25267"/>
		<updated>2017-03-26T19:30:55Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&amp;lt;br /&amp;gt;&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&amp;lt;br /&amp;gt;&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&amp;lt;br /&amp;gt;&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
Рассмотрим подробнее структуру скрипта:&amp;lt;br /&amp;gt;&lt;br /&gt;
Импорт модулей&amp;lt;br /&amp;gt;&lt;br /&gt;
Для данного скрипта необходимы следующие модули: os, argparse и datetime из которого нам нужны классы date и timedelta. Класс datetime.date позволяет выделить из полного формата даты только год, месяц и день. Класс datetime.timedelta позволяет высчитать разницу между двумя моментами времени, с точностью до микросекунд. Модуль os включает множество функций для работы с операционной системой, причём их поведение, не зависит от ОС, поэтому программы остаются переносимыми. Модуль argparse позволяет обрабатывать опции и аргументы командной строки, которой выполняется скрипт. В данном случае можно обойтись и без него, но он позволяет вводить нужную информацию (год, пути исходного и конечного файлов) непосредственно при запуске из командной строки, тем самым исключая необходимость внесения правок в само тело скрипта.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_импорта_модулей.png|Пример импорта модулей]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Описание аргументов&amp;lt;br /&amp;gt;&lt;br /&gt;
Следующим этапом является описание аргументов, которые, как было сказано выше, вводятся в командной строке. К ним относятся год «year», исходная папка с данными «input_folder» и папка «output_folder», в которую будут помещены результаты.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_описания_аргументов.png]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Строка «args = parser.parse_args()» является активатором запуска модуля parse. Далее, вводится переменная b, которой присваивается значение вводимого года исходных данных. &amp;lt;br /&amp;gt;&lt;br /&gt;
Счетчик дат&amp;lt;br /&amp;gt;&lt;br /&gt;
Исходные данные представляют собой 8-ми канальные растры, где каждый канал соответствует одному дню. Имя файла содержит в себе дату первого дня из восьмидневного периода. Например, «2016.01.01.tif», «2016.01.09.tif» и т.д. Таким образом, для того, чтобы скрипт работал, необходимо ввести имена всех исходных файлов в виде списка. Однако, данную процедуру необходимо будет повторять для каждого года в отдельности, особенно для високосных годов, где помимо года в названии файла меняются месяц и день. Счетчик дат необходим для того, чтобы не вводить вручную имена исходных растров, а автоматически создавать список этих имен. &amp;lt;br /&amp;gt;&lt;br /&gt;
Необходимо создать пустой список, в который будут помещаться имена исходных файлов после их создания. В данном случае ему присваивается имя rasters_list. Введем переменную «а» и присвоим ей значение равное 0. При обработке каждого последующего из исходных 46 растров, переменная «a» будет увеличиваться на 8. Переменная delta отвечает за счет дат, т.е. прибавляет к каждой предыдущей дате переменную «а», соответствующую количеству дней, прошедших с момента отсчета (1 января каждого года) до начала очередного 8-ми дневного периода. Исходная дата «base_date» соответствует первому января каждого года. Соответственно, для того, чтобы получить следующую дату, необходимо прибавить к ней переменную delta. Следующим шагом является преобразование формата даты в строку, для этого используется класс time.strftime. Дате, представленной в формате строки, прибавляется окончание «.tif», соответствующее расширению растра, и список пополняется при помощи команды «append».&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Создание_и_запосление_списка_дат.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Блок преобразования&amp;lt;br /&amp;gt;&lt;br /&gt;
Переменные id и od соответствуют исходной и конечной папкам, им присваиваются значения args.input_folder и args.output_folder. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Ввод переменных.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Далее, для каждого канала растра из списка выполняются следующие операции: отбор нужных пикселей и их векторизация. В данном случае используется формат командной строки cmd. В первом случае мы используем утилиту gdal_calc.bat, где при помощи выражения «А*(А&amp;gt;7)» отбираем только те пиксели, значение которых строго больше 7, остальным присваиваем значение NoData. В результате из каждого исходного растра получаются 8 новых, названия которых соответствуют порядковому номеру дня в году. Затем, при помощи утилиты gdal_polygonize.bat преобразуем отобранные растровые элементы в формат shp-файла. Полученному файлу также присваивается порядковый номер дня в году, которому он соответствует. Команда os.system(cmd) запускает формат командной строки cmd.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Блок_обработки_растра.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Блок присвоения атрибутивной информации&lt;br /&gt;
Следующий шаг в данном блоке позволяет присваивать атрибутивную информацию полученному shp-файлу. В начале создается поле и указывается его название и тип. Затем поле заполняется необходимой информацией. Например, в первом случае мы создаем текстовое поле «fulldate» с длинной до 9 символов и вносим в него год «str(b)» и порядковый номер дня в году «str(i)». Следующие два поля содержат в себе порядковый номер дня в году и год соответственно. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Блок_заполнения_атрибутивной_таблицы.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25266</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25266"/>
		<updated>2017-03-26T19:29:13Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&amp;lt;br /&amp;gt;&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&amp;lt;br /&amp;gt;&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&amp;lt;br /&amp;gt;&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
Рассмотрим подробнее структуру скрипта:&amp;lt;br /&amp;gt;&lt;br /&gt;
Импорт модулей&amp;lt;br /&amp;gt;&lt;br /&gt;
Для данного скрипта необходимы следующие модули: os, argparse и datetime из которого нам нужны классы date и timedelta. Класс datetime.date позволяет выделить из полного формата даты только год, месяц и день. Класс datetime.timedelta позволяет высчитать разницу между двумя моментами времени, с точностью до микросекунд. Модуль os включает множество функций для работы с операционной системой, причём их поведение, не зависит от ОС, поэтому программы остаются переносимыми. Модуль argparse позволяет обрабатывать опции и аргументы командной строки, которой выполняется скрипт. В данном случае можно обойтись и без него, но он позволяет вводить нужную информацию (год, пути исходного и конечного файлов) непосредственно при запуске из командной строки, тем самым исключая необходимость внесения правок в само тело скрипта.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_импорта_модулей.png|Пример импорта модулей]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Описание аргументов&amp;lt;br /&amp;gt;&lt;br /&gt;
Следующим этапом является описание аргументов, которые, как было сказано выше, вводятся в командной строке. К ним относятся год «year», исходная папка с данными «input_folder» и папка «output_folder», в которую будут помещены результаты.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_описания_аргументов.png]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Строка «args = parser.parse_args()» является активатором запуска модуля parse. Далее, вводится переменная b, которой присваивается значение вводимого года исходных данных. &amp;lt;br /&amp;gt;&lt;br /&gt;
Счетчик дат&amp;lt;br /&amp;gt;&lt;br /&gt;
Исходные данные представляют собой 8-ми канальные растры, где каждый канал соответствует одному дню. Имя файла содержит в себе дату первого дня из восьмидневного периода. Например, «2016.01.01.tif», «2016.01.09.tif» и т.д. Таким образом, для того, чтобы скрипт работал, необходимо ввести имена всех исходных файлов в виде списка. Однако, данную процедуру необходимо будет повторять для каждого года в отдельности, особенно для високосных годов, где помимо года в названии файла меняются месяц и день. Счетчик дат необходим для того, чтобы не вводить вручную имена исходных растров, а автоматически создавать список этих имен. &amp;lt;br /&amp;gt;&lt;br /&gt;
Необходимо создать пустой список, в который будут помещаться имена исходных файлов после их создания. В данном случае ему присваивается имя rasters_list. Введем переменную «а» и присвоим ей значение равное 0. При обработке каждого последующего из исходных 46 растров, переменная «a» будет увеличиваться на 8. Переменная delta отвечает за счет дат, т.е. прибавляет к каждой предыдущей дате переменную «а», соответствующую количеству дней, прошедших с момента отсчета (1 января каждого года) до начала очередного 8-ми дневного периода. Исходная дата «base_date» соответствует первому января каждого года. Соответственно, для того, чтобы получить следующую дату, необходимо прибавить к ней переменную delta. Следующим шагом является преобразование формата даты в строку, для этого используется класс time.strftime. Дате, представленной в формате строки, прибавляется окончание «.tif», соответствующее расширению растра, и список пополняется при помощи команды «append».&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Создание_и_запосление_списка_дат.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Блок преобразования&amp;lt;br /&amp;gt;&lt;br /&gt;
Переменные id и od соответствуют исходной и конечной папкам, им присваиваются значения args.input_folder и args.output_folder. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Ввод переменных.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Далее, для каждого канала растра из списка выполняются следующие операции: отбор нужных пикселей и их векторизация. В данном случае используется формат командной строки cmd. В первом случае мы используем утилиту gdal_calc.bat, где при помощи выражения «А*(А&amp;gt;7)» отбираем только те пиксели, значение которых строго больше 7, остальным присваиваем значение NoData. В результате из каждого исходного растра получаются 8 новых, названия которых соответствуют порядковому номеру дня в году. Затем, при помощи утилиты gdal_polygonize.bat преобразуем отобранные растровые элементы в формат shp-файла. Полученному файлу также присваивается порядковый номер дня в году, которому он соответствует. Команда os.system(cmd) запускает формат командной строки cmd.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Блок_обработки_растра.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Блок присвоения атрибутивной информации&lt;br /&gt;
Следующий шаг в данном блоке позволяет присваивать атрибутивную информацию полученному shp-файлу. В начале создается поле и указывается его название и тип. Затем поле заполняется необходимой информацией. Например, в первом случае мы создаем текстовое поле «fulldate» с длинной до 9 символов и вносим в него год «str(b)» и порядковый номер дня в году «str(i)». Следующие два поля содержат в себе порядковый номер дня в году и год соответственно. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Блок_заполнения_атрибутивной_информации.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%91%D0%BB%D0%BE%D0%BA_%D0%B7%D0%B0%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B.png&amp;diff=25265</id>
		<title>Файл:Блок заполнения атрибутивной таблицы.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%91%D0%BB%D0%BE%D0%BA_%D0%B7%D0%B0%D0%BF%D0%BE%D0%BB%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B.png&amp;diff=25265"/>
		<updated>2017-03-26T19:26:10Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%91%D0%BB%D0%BE%D0%BA_%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0.png&amp;diff=25264</id>
		<title>Файл:Блок обработки растра.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%91%D0%BB%D0%BE%D0%BA_%D0%BE%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8_%D1%80%D0%B0%D1%81%D1%82%D1%80%D0%B0.png&amp;diff=25264"/>
		<updated>2017-03-26T19:25:07Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25263</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25263"/>
		<updated>2017-03-26T18:34:37Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&amp;lt;br /&amp;gt;&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&amp;lt;br /&amp;gt;&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&amp;lt;br /&amp;gt;&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
Рассмотрим подробнее структуру скрипта:&amp;lt;br /&amp;gt;&lt;br /&gt;
Импорт модулей&amp;lt;br /&amp;gt;&lt;br /&gt;
Для данного скрипта необходимы следующие модули: os, argparse и datetime из которого нам нужны классы date и timedelta. Класс datetime.date позволяет выделить из полного формата даты только год, месяц и день. Класс datetime.timedelta позволяет высчитать разницу между двумя моментами времени, с точностью до микросекунд. Модуль os включает множество функций для работы с операционной системой, причём их поведение, не зависит от ОС, поэтому программы остаются переносимыми. Модуль argparse позволяет обрабатывать опции и аргументы командной строки, которой выполняется скрипт. В данном случае можно обойтись и без него, но он позволяет вводить нужную информацию (год, пути исходного и конечного файлов) непосредственно при запуске из командной строки, тем самым исключая необходимость внесения правок в само тело скрипта.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_импорта_модулей.png|Пример импорта модулей]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Описание аргументов&amp;lt;br /&amp;gt;&lt;br /&gt;
Следующим этапом является описание аргументов, которые, как было сказано выше, вводятся в командной строке. К ним относятся год «year», исходная папка с данными «input_folder» и папка «output_folder», в которую будут помещены результаты.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_описания_аргументов.png]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Строка «args = parser.parse_args()» является активатором запуска модуля parse. Далее, вводится переменная b, которой присваивается значение вводимого года исходных данных. &amp;lt;br /&amp;gt;&lt;br /&gt;
Счетчик дат&amp;lt;br /&amp;gt;&lt;br /&gt;
Исходные данные представляют собой 8-ми канальные растры, где каждый канал соответствует одному дню. Имя файла содержит в себе дату первого дня из восьмидневного периода. Например, «2016.01.01.tif», «2016.01.09.tif» и т.д. Таким образом, для того, чтобы скрипт работал, необходимо ввести имена всех исходных файлов в виде списка. Однако, данную процедуру необходимо будет повторять для каждого года в отдельности, особенно для високосных годов, где помимо года в названии файла меняются месяц и день. Счетчик дат необходим для того, чтобы не вводить вручную имена исходных растров, а автоматически создавать список этих имен. &amp;lt;br /&amp;gt;&lt;br /&gt;
Необходимо создать пустой список, в который будут помещаться имена исходных файлов после их создания. В данном случае ему присваивается имя rasters_list. Введем переменную «а» и присвоим ей значение равное 0. При обработке каждого последующего из исходных 46 растров, переменная «a» будет увеличиваться на 8. Переменная delta отвечает за счет дат, т.е. прибавляет к каждой предыдущей дате переменную «а», соответствующую количеству дней, прошедших с момента отсчета (1 января каждого года) до начала очередного 8-ми дневного периода. Исходная дата «base_date» соответствует первому января каждого года. Соответственно, для того, чтобы получить следующую дату, необходимо прибавить к ней переменную delta. Следующим шагом является преобразование формата даты в строку, для этого используется класс time.strftime. Дате, представленной в формате строки, прибавляется окончание «.tif», соответствующее расширению растра, и список пополняется при помощи команды «append».&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Создание_и_запосление_списка_дат.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Блок преобразования&amp;lt;br /&amp;gt;&lt;br /&gt;
Переменные id и od соответствуют исходной и конечной папкам, им присваиваются значения args.input_folder и args.output_folder. &amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Ввод переменных.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Далее, для каждого канала растра из списка выполняются следующие операции: отбор нужных пикселей и их векторизация. В данном случае используется формат командной строки cmd. В первом случае мы используем утилиту gdal_calc.bat, где при помощи выражения «А*(А&amp;gt;7)» отбираем только те пиксели, значение которых строго больше 7, остальным присваиваем значение NoData. В результате из каждого исходного растра получаются 8 новых, названия которых соответствуют порядковому номеру дня в году. Затем, при помощи утилиты gdal_polygonize.bat преобразуем отобранные растровые элементы в формат shp-файла. Полученному файлу также присваивается порядковый номер дня в году, которому он соответствует. Команда os.system(cmd) запускает формат командной строки cmd.&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25262</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25262"/>
		<updated>2017-03-26T18:31:51Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&amp;lt;br /&amp;gt;&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&amp;lt;br /&amp;gt;&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&amp;lt;br /&amp;gt;&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
Рассмотрим подробнее структуру скрипта:&amp;lt;br /&amp;gt;&lt;br /&gt;
Импорт модулей&amp;lt;br /&amp;gt;&lt;br /&gt;
Для данного скрипта необходимы следующие модули: os, argparse и datetime из которого нам нужны классы date и timedelta. Класс datetime.date позволяет выделить из полного формата даты только год, месяц и день. Класс datetime.timedelta позволяет высчитать разницу между двумя моментами времени, с точностью до микросекунд. Модуль os включает множество функций для работы с операционной системой, причём их поведение, не зависит от ОС, поэтому программы остаются переносимыми. Модуль argparse позволяет обрабатывать опции и аргументы командной строки, которой выполняется скрипт. В данном случае можно обойтись и без него, но он позволяет вводить нужную информацию (год, пути исходного и конечного файлов) непосредственно при запуске из командной строки, тем самым исключая необходимость внесения правок в само тело скрипта.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_импорта_модулей.png|Пример импорта модулей]]&amp;lt;br /&amp;gt;&lt;br /&gt;
Описание аргументов&amp;lt;br /&amp;gt;&lt;br /&gt;
Следующим этапом является описание аргументов, которые, как было сказано выше, вводятся в командной строке. К ним относятся год «year», исходная папка с данными «input_folder» и папка «output_folder», в которую будут помещены результаты.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_описания_аргументов.png]] &amp;lt;br /&amp;gt;&lt;br /&gt;
Строка «args = parser.parse_args()» является активатором запуска модуля parse. Далее, вводится переменная b, которой присваивается значение вводимого года исходных данных. &amp;lt;br /&amp;gt;&lt;br /&gt;
Счетчик дат&amp;lt;br /&amp;gt;&lt;br /&gt;
Исходные данные представляют собой 8-ми канальные растры, где каждый канал соответствует одному дню. Имя файла содержит в себе дату первого дня из восьмидневного периода. Например, «2016.01.01.tif», «2016.01.09.tif» и т.д. Таким образом, для того, чтобы скрипт работал, необходимо ввести имена всех исходных файлов в виде списка. Однако, данную процедуру необходимо будет повторять для каждого года в отдельности, особенно для високосных годов, где помимо года в названии файла меняются месяц и день. Счетчик дат необходим для того, чтобы не вводить вручную имена исходных растров, а автоматически создавать список этих имен. &amp;lt;br /&amp;gt;&lt;br /&gt;
Необходимо создать пустой список, в который будут помещаться имена исходных файлов после их создания. В данном случае ему присваивается имя rasters_list. Введем переменную «а» и присвоим ей значение равное 0. При обработке каждого последующего из исходных 46 растров, переменная «a» будет увеличиваться на 8. Переменная delta отвечает за счет дат, т.е. прибавляет к каждой предыдущей дате переменную «а», соответствующую количеству дней, прошедших с момента отсчета (1 января каждого года) до начала очередного 8-ми дневного периода. Исходная дата «base_date» соответствует первому января каждого года. Соответственно, для того, чтобы получить следующую дату, необходимо прибавить к ней переменную delta. Следующим шагом является преобразование формата даты в строку, для этого используется класс time.strftime. Дате, представленной в формате строки, прибавляется окончание «.tif», соответствующее расширению растра, и список пополняется при помощи команды «append».&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Создание_и_запосление_списка_дат.png]]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%B7%D0%B0%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0_%D0%B4%D0%B0%D1%82.png&amp;diff=25261</id>
		<title>Файл:Создание и запосление списка дат.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B8_%D0%B7%D0%B0%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0_%D0%B4%D0%B0%D1%82.png&amp;diff=25261"/>
		<updated>2017-03-26T18:28:57Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%92%D0%B2%D0%BE%D0%B4_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D1%85.png&amp;diff=25260</id>
		<title>Файл:Ввод переменных.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%92%D0%B2%D0%BE%D0%B4_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D1%85.png&amp;diff=25260"/>
		<updated>2017-03-26T18:28:44Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D1%80%D0%B3%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2.png&amp;diff=25259</id>
		<title>Файл:Пример описания аргументов.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B0%D1%80%D0%B3%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2.png&amp;diff=25259"/>
		<updated>2017-03-26T18:28:32Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25258</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25258"/>
		<updated>2017-03-26T18:26:30Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&amp;lt;br /&amp;gt;&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&amp;lt;br /&amp;gt;&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&amp;lt;br /&amp;gt;&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
Рассмотрим подробнее структуру скрипта:&amp;lt;br /&amp;gt;&lt;br /&gt;
Импорт модулей&amp;lt;br /&amp;gt;&lt;br /&gt;
Для данного скрипта необходимы следующие модули: os, argparse и datetime из которого нам нужны классы date и timedelta. Класс datetime.date позволяет выделить из полного формата даты только год, месяц и день. Класс datetime.timedelta позволяет высчитать разницу между двумя моментами времени, с точностью до микросекунд. Модуль os включает множество функций для работы с операционной системой, причём их поведение, не зависит от ОС, поэтому программы остаются переносимыми. Модуль argparse позволяет обрабатывать опции и аргументы командной строки, которой выполняется скрипт. В данном случае можно обойтись и без него, но он позволяет вводить нужную информацию (год, пути исходного и конечного файлов) непосредственно при запуске из командной строки, тем самым исключая необходимость внесения правок в само тело скрипта.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_импорта_модулей.png|Пример импорта модулей]]&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25257</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25257"/>
		<updated>2017-03-26T18:25:40Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&amp;lt;br /&amp;gt;&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&amp;lt;br /&amp;gt;&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&amp;lt;br /&amp;gt;&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
Рассмотрим подробнее структуру скрипта:&amp;lt;br /&amp;gt;&lt;br /&gt;
Импорт модулей&amp;lt;br /&amp;gt;&lt;br /&gt;
Для данного скрипта необходимы следующие модули: os, argparse и datetime из которого нам нужны классы date и timedelta. Класс datetime.date позволяет выделить из полного формата даты только год, месяц и день. Класс datetime.timedelta позволяет высчитать разницу между двумя моментами времени, с точностью до микросекунд. Модуль os включает множество функций для работы с операционной системой, причём их поведение, не зависит от ОС, поэтому программы остаются переносимыми. Модуль argparse позволяет обрабатывать опции и аргументы командной строки, которой выполняется скрипт. В данном случае можно обойтись и без него, но он позволяет вводить нужную информацию (год, пути исходного и конечного файлов) непосредственно при запуске из командной строки, тем самым исключая необходимость внесения правок в само тело скрипта.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_импорта_модулей.png|thumb|Пример импорта модулей]]&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25256</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25256"/>
		<updated>2017-03-26T18:24:00Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&amp;lt;br /&amp;gt;&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&amp;lt;br /&amp;gt;&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&amp;lt;br /&amp;gt;&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
Рассмотрим подробнее структуру скрипта:&amp;lt;br /&amp;gt;&lt;br /&gt;
Импорт модулей&amp;lt;br /&amp;gt;&lt;br /&gt;
Для данного скрипта необходимы следующие модули: os, argparse и datetime из которого нам нужны классы date и timedelta. Класс datetime.date позволяет выделить из полного формата даты только год, месяц и день. Класс datetime.timedelta позволяет высчитать разницу между двумя моментами времени, с точностью до микросекунд. Модуль os включает множество функций для работы с операционной системой, причём их поведение, не зависит от ОС, поэтому программы остаются переносимыми. Модуль argparse позволяет обрабатывать опции и аргументы командной строки, которой выполняется скрипт. В данном случае можно обойтись и без него, но он позволяет вводить нужную информацию (год, пути исходного и конечного файлов) непосредственно при запуске из командной строки, тем самым исключая необходимость внесения правок в само тело скрипта.&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Пример_импорта_модулей.png]]&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B0_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9.png&amp;diff=25255</id>
		<title>Файл:Пример импорта модулей.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B0_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9.png&amp;diff=25255"/>
		<updated>2017-03-26T18:23:17Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25254</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25254"/>
		<updated>2017-03-26T18:17:16Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&amp;lt;br /&amp;gt;&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&amp;lt;br /&amp;gt;&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&amp;lt;br /&amp;gt;&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&amp;lt;br /&amp;gt;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&amp;lt;br /&amp;gt;&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&amp;lt;br /&amp;gt;&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&amp;lt;br /&amp;gt;&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25253</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=25253"/>
		<updated>2017-03-26T18:15:32Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI]. В принципе они не обязательны, но могут оказаться полезными для автоматизации.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
Также можно воспользоваться скриптом proc_fields.py, позволяющим создавать shp-файлы, содержащие полигоны зафиксированных в течение 1 дня горячих точек из исходного 8-канального растра, полученного на предыдущем этапе.&lt;br /&gt;
Для каждого 8-канального растра скрипт выполняет следующие действия:&lt;br /&gt;
- внутри каждого канала исходного изображения отбирает только те ячейки, значение которых равно 8 (номинальная достоверность наличия пожара в данной точке) и 9 (высокая достоверность наличия пожара), всем остальным ячейкам присваивает значение 0 (NoData);&lt;br /&gt;
- векторизует полученные данные с помощью команды gdal_polygonize. Результат: shp-файлы с полигонами пожаров, где название файла соответствует порядковому номеру дня в году;&lt;br /&gt;
- добавляет в каждый сформированный shp-файл поле со значением соответствующей даты возгорания в виде порядкового номера дня в году (н-р, 1 января - &amp;quot;1&amp;quot;, 31 декабря - &amp;quot;365&amp;quot;).&lt;br /&gt;
В дальнейшем, при необходимости, можно объединить ряд файлов в один, тем самым сформировав файл пожаров за определенный год, месяц или неделю (см. пункт 4).&lt;br /&gt;
Схема преобразования данных представлена на рисунке ниже:&lt;br /&gt;
[[Файл:Схема скрипта.jpg]]&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0.jpg&amp;diff=25252</id>
		<title>Файл:Схема скрипта.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B0.jpg&amp;diff=25252"/>
		<updated>2017-03-26T18:14:48Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=24540</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=24540"/>
		<updated>2016-10-06T17:13:34Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI].&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Код ячейки !! Значение ячейки  !! Значение ячейки&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
С помощью команды gdal_polygonize можно преобразовать полученные ячейки в полигоны и присвоить им атрибутивную информацию в виде даты возгорания.&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_polygonize -nomask output.tif output.shp&amp;lt;/pre&amp;gt;&lt;br /&gt;
где при необходимости можно указать файл маски, при этом поменяв параметр &amp;quot;-nomask&amp;quot; на &amp;quot;-mask&amp;quot; и искомый файл.&amp;lt;br /&amp;gt;&lt;br /&gt;
Таким образом можно легко извлечь необходимую информацию и преобразовать её в формат ESRI shapefile.&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=24524</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=24524"/>
		<updated>2016-09-22T13:21:17Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в формат ESRI shape */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI].&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать в другую систему координат лучше окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Узнать строку названия SDS (в примере выше это MODIS_Grid_Daily_Fire:FireMask) можно посмотрев метаданные одного из файлов HDF с помощью gdalinfo:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;gdalinfo filename.hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
Полученные файлы представляют собой 8-канальные растры (каждый канал соответствует одному дню), в которых каждой ячейке присвоено значение от 0 до 9.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Текст заголовка !! Текст заголовка !! Текст заголовка&lt;br /&gt;
|-&lt;br /&gt;
| 0 || отсутствует исходная информация || missing input data&lt;br /&gt;
|-&lt;br /&gt;
| 1 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || не обрабатывалось (устарело) || not processed (obsolete)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || вода || water&lt;br /&gt;
|-&lt;br /&gt;
| 4 || облако || cloud&lt;br /&gt;
|-&lt;br /&gt;
| 5 || не пожар || non-fire&lt;br /&gt;
|-&lt;br /&gt;
| 6 || неизвестно || unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || пожар (низкая достоверность) || fire (low confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || пожар (номинальная достоверность) || fire (nominal confidence)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || пожар (высокая достоверность) || fire (high confidence)&lt;br /&gt;
|}&lt;br /&gt;
Далее необходимо получить данные о пожарах для каждого дня в году, путем разложения растра поканально и извлечением только тех ячеек, значение которых равно 8 или 9. Для удобства оперирования данными в дальнейшем, их необходимо преобразовать в формат shp-файла.Для разложения растры на каналы используется команда gdal_translate. Ниже приведен пример запуска:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_translate -b 1 input.tif output.tif&amp;lt;/pre&amp;gt;&lt;br /&gt;
где -b указывает на то, что нужно извлечь канал, 1 - номер канала&amp;lt;br /&amp;gt;&lt;br /&gt;
С помощью команды gdal_calc необходимо извлечь только те ячейки, значение которых равно 8 ли 9, что соответствует пожарам с номинальной и высокой степенью достоверности, а остальным значениям присвоить значение NoData. Условием отбора является выражение “А*(А&amp;gt;7)”. Пример запуска команды:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gdal_calc -A input.tif --outputfile= output.tif --calc='A*(A&amp;gt;7)' --NoDataValue=0&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Схема работы следующая:&lt;br /&gt;
&lt;br /&gt;
# Конвертирует GeoTIFF в GRID&lt;br /&gt;
# Конвертирует GRID в COVERAGE&lt;br /&gt;
# Вытаскивает категории 8 и 9 (очаги пожаров с нормальной и повышенной достоверностью) в отдельные покрытия&lt;br /&gt;
# Конвертирует эти покрытия в shape-файлы&lt;br /&gt;
# Удаляет источники&lt;br /&gt;
&lt;br /&gt;
Делать это удобно с помощью gdal_polygonize.py&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([http://gis-lab.info/qa/merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([http://gis-lab.info/qa/rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Gdal_translate.jpg&amp;diff=24523</id>
		<title>Файл:Gdal translate.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Gdal_translate.jpg&amp;diff=24523"/>
		<updated>2016-09-22T13:07:51Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=24166</id>
		<title>Импорт данных MOD14A1 в формат ESRI shape</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%98%D0%BC%D0%BF%D0%BE%D1%80%D1%82_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_MOD14A1_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_ESRI_shape&amp;diff=24166"/>
		<updated>2016-06-07T12:46:03Z</updated>

		<summary type="html">&lt;p&gt;LeraBel: /* Конвертация в GeoTIFF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта статья описывает процесс подготовки к работе данных MOD14A1 ([http://gis-lab.info/qa/mod14a1.html подробнее] про эти данные). Исходно эти данные распространяются в HDF, который нельзя назвать удобным форматом для работы. Статья является синтезом других статей уже размещенных на нашем ресурсе, мы постараемся не дублировать информацию из них, а дать ссылки. Обратите внимание, что вам может быть не нужно осуществлять импорт именно в формат ESRI shape. Целевой формат зависит от того, что вам нужно сделать с данными в дальнейшем.&lt;br /&gt;
&lt;br /&gt;
Многие этапы можно реализовать по другому. Исправления к процессу аналогичные по скорости и удобству всячески приветствуются.&lt;br /&gt;
&lt;br /&gt;
==Получение данных==&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо получить фрагменты (тайлы) MODIS на вашу территорию и временной промежуток. Данные в исходном формате HDF можно скачать [http://gis-lab.info/qa/mod14a1.html здесь].&lt;br /&gt;
&lt;br /&gt;
Для загрузки можно использовать скрипт ([https://github.com/nextgis/dhi/blob/master/general/download_modis_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python download_modis_data.py 2016 46 http://e4ftl01.cr.usgs.gov/MOLT/MOD14A1.006/ hdf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Начало работы==&lt;br /&gt;
Для начала работы понадобится:&lt;br /&gt;
&lt;br /&gt;
* Среда с установленным GDAL, python-gdal. Подойдет [http://nextgis.ru/nextgis-qgis NextGIS QGIS].&lt;br /&gt;
* wget с дополнительными библиотеками&lt;br /&gt;
* Набор скриптов оберток для GDAL - [https://github.com/nextgis/dhi DHI].&lt;br /&gt;
&lt;br /&gt;
==Конвертация в GeoTIFF==&lt;br /&gt;
&lt;br /&gt;
Исходная проекция данных - Синусоидальная (Sinusoidal), конвертация в неё, а не в другую, возможно более удобную сэкономит время на перепроецирование. Перепроецировать данные в нужную систему координат удобнее окончательный векторный слой.&lt;br /&gt;
&lt;br /&gt;
Исходное разрешение: 1000 метров.&lt;br /&gt;
&lt;br /&gt;
Исходные наборы данных: Формат HDF позволяет хранить в одном файле несколько наборов данных (SDS, subdatasets). Нам нужно импортировать только данные за 8 дней (допустим каналы с оценкой качества - Quality Assessment пока не нужны).&lt;br /&gt;
&lt;br /&gt;
Конвертацию удобно проводить с помощью скрипта prepare_data.py ([https://github.com/nextgis/dhi/blob/master/general/prepare_data.py скачать]). Строка запуска:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;python prepare_data.py MODIS_Grid_Daily_Fire:FireMask с:\MCD14A1\2003\hdf\ с:\MCD15A1\2003\tif\ -e SIN&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Альтернативой prepare_data.py является MODIS Reprojection Tool (MRT). Его использование описано в статье: ([http://gis-lab.info/qa/modisimport.html Импорт продуктов MODIS уровней 2G, 3, 4 с помощью MRT]).&lt;br /&gt;
&lt;br /&gt;
Количество отдельных растров генерируемых при импорте данных с 2000 по 2010 год составляет около 3950 растров.&lt;br /&gt;
&lt;br /&gt;
==Конвертация в формат ESRI shape==&lt;br /&gt;
&lt;br /&gt;
Результатом предыдущего этапа является много растровых файлов в формате GeoTIFF. Если вам нужны именно растры, на этом можно остановиться. Если нет, конвертируем данные в вектор.&lt;br /&gt;
&lt;br /&gt;
Так как это требуется нашему конвертеру в вектор, сначала переименовываем все растры так, чтобы имена стали покороче, например по шаблону: [N9-16]_[N72]. Таким образом из названия MOD14A1.A2000065.H19V01.005.2006270190019_res.FireMask.Number_of_Days_04.tif, мы получим более лаконичное: A2000065_b4.tif&lt;br /&gt;
&lt;br /&gt;
Примечание: иногда в исходных файлах HDF содержится меньше чем 8 каналов, в этом случае будут импортированы дополнительные каналы не являющиеся пожарными масками (QA, MaxFRP, sample). После окончания процесса конвертации их рекомендуется удалить.&lt;br /&gt;
&lt;br /&gt;
После этого запускаем [http://gis-lab.info/programs/aml/image2poly-res-calc-shapes-fires.aml скрипт] для Arcinfo Workstation. Этот скрипт делает следующее:&lt;br /&gt;
&lt;br /&gt;
# Конвертирует GeoTIFF в GRID&lt;br /&gt;
# Конвертирует GRID в COVERAGE&lt;br /&gt;
# Вытаскивает категории 8 и 9 (очаги пожаров с нормальной и повышенной достоверностью) в отдельные покрытия&lt;br /&gt;
# Конвертирует эти покрытия в shape-файлы&lt;br /&gt;
# Удаляет источники&lt;br /&gt;
&lt;br /&gt;
Подробнее про запуск, содержание и работу с подобными скриптами можно ознакомиться в статье &amp;quot;Пакетный импорт растровых данных в GRID и их обработка с помощью Arcinfo Workstation&amp;quot; ([importraster-ai.html прочитать]).&lt;br /&gt;
&lt;br /&gt;
==4. Создание единого слоя==&lt;br /&gt;
&lt;br /&gt;
Для пакетного склеивания ежедневных shape-файлов удобно использовать расширение Merge Shapes из QGIS ([merge-shapes.html подробнее про расширение]). Склейка в данном случае осуществляется потайлово, но можно склеивать и все вместе.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-03.gif|393px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==5. Перепроецирование в WGS84 Lat/Long==&lt;br /&gt;
&lt;br /&gt;
Результирующие shape-файлы может понадобится перепроецировать из синусоидальной проекции в географическую систему координат WGS84. Можно делать это и на этапе импорта в GeoTIFF, но это не рекомендуется, так как займет во много раз больше времени чем перепроецировани уже отфильтрованного вектора.&lt;br /&gt;
&lt;br /&gt;
Система координат растров после работы MRT следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-04.gif|677px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть используется Sinusoidal проекция на сфере радиусом 6370997 метров (цифра подтверждается MRT_Users_Manual.doc, стр. 57). В ArcGIS такая сфера соответствует сфере D_Sphere_ARC_INFO из папки Geographic Coordinate Systems\Spheroid based\. Соответственно для векторного файла PRJ файл будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
 PROJCS[&amp;quot;World_Sinusoidal&amp;quot;,&lt;br /&gt;
      GEOGCS[&amp;quot;GCS_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
            DATUM[&amp;quot;D_Sphere_ARC_INFO&amp;quot;,&lt;br /&gt;
                 SPHEROID[&amp;quot;Sphere_ARC_INFO&amp;quot;,6370997.0,0.0]&lt;br /&gt;
            ],&lt;br /&gt;
            PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],&lt;br /&gt;
            UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]&lt;br /&gt;
      ],&lt;br /&gt;
      PROJECTION[&amp;quot;Sinusoidal&amp;quot;],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Easting&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],&lt;br /&gt;
      PARAMETER[&amp;quot;Central_Meridian&amp;quot;,0.0],&lt;br /&gt;
      UNIT[&amp;quot;Meter&amp;quot;,1.0]&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
Наложение растра только что импортированного MRT и границ субъектов РФ в Lat/Long WGS84 ([rusbounds-rosreestr.html источник]) в ArcGIS (трансформация WGS84 -&amp;amp;gt; Sinusoidal &amp;quot;на лету&amp;quot;) приводит к достаточно хорошему соответствию, то есть система координат растра верна:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Image:mod14a1-import-05.gif|638px|импорт]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для перепроецировании растра или вектора в Lat/Long WGS84 используем:&lt;br /&gt;
&lt;br /&gt;
 gdalwarp -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 A2000057_2.tif A2000057_2_wgs.tif&lt;br /&gt;
&lt;br /&gt;
или&lt;br /&gt;
&lt;br /&gt;
 ogr2ogr -s_srs &amp;quot;+proj=sinu +R=6370997.0 +nadgrids=@null +wktext&amp;quot; -t_srs EPSG:4326 h19v02_wgs.shp h19v02.shp&lt;br /&gt;
&lt;br /&gt;
Стоит повторить, что это лишь один из возможных путей импорта данных в векторных формат, однако он работает.&lt;/div&gt;</summary>
		<author><name>LeraBel</name></author>
	</entry>
</feed>