Краткое описание GRASS Graphical Modeler: различия между версиями

Материал из GIS-Lab
Перейти к навигации Перейти к поиску
(Вольный перевод собственной статьи от 2 февраля 2012 г.)
 
 
(не показана 31 промежуточная версия 2 участников)
Строка 1: Строка 1:
{{Статья|Опубликована|grass-modeller}}
{{Аннотация|Описание расширения GRASS для визуального моделирования и материалы для самостоятельной работы}}
[http://grass.osgeo.org/wiki/WxGUI_Modeler GRASS Graphical Modeler] - это расширение GRASS, которое позволяет пользователю создавать, редактировать, управлять и выполнять моделями геопространственного анализа. GRASS Graphical Modeler написана командой разработчиков GRASS. Документация была создана [http://geo.fsv.cvut.cz/~landa/ Мартином Ланда]. Начиная с версии GRASS 6.4.2 это расширение включено в программу по умолчанию, отдельная установка не требуется.
[http://grass.osgeo.org/wiki/WxGUI_Modeler GRASS Graphical Modeler] - это расширение GRASS, которое позволяет пользователю создавать, редактировать, управлять и выполнять моделями геопространственного анализа. GRASS Graphical Modeler написана командой разработчиков GRASS. Документация была создана [http://geo.fsv.cvut.cz/~landa/ Мартином Ланда]. Начиная с версии GRASS 6.4.2 это расширение включено в программу по умолчанию, отдельная установка не требуется.


=Введение=
На момент написания статьи расширение находилось в стадии разработки.
 
==Введение==
 
Расширение wxGUI Modeler в некоторой степени напоминает [http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002w00000001000000 ArcGIS ModelBuilder], который в свою очередь, похож на [http://en.wikipedia.org/wiki/ERDAS_IMAGINE#ERDAS_IMAGINE_Spatial_Modeler ERDAS IMAGINE Spatial Modeler]. Согласно Википедии, Spatial Modeler впервые появилась в 1993 году. После этого в 2004 году ESRI (Environmental Systems Research Institute) создали собственный инструмент под названием ModelBuilder, [http://en.wikipedia.org/wiki/ERDAS_IMAGINE#ERDAS_IMAGINE_Spatial_Modeler сообщает Википедия].
 
Расширение позволяет выполнять следующее:
* задавать действия (команды GRASS);
* задавать входящие данные (растровые, векторные и 3D-растровые);
* устанавливать связи между действиями и входными данными;
* задавать циклы и условия выполнения;
* проверять модель на работоспособность;
* запускать модель;
* сохранять настройки модели в файл (*.gxm);
* экспортировать модель в скрипт на Python'е;
* экспортировать концептуальную модель в изображение (поддерживаемые форматы: PNG, BMP, GIF, JPG, PCX, PNM, TIF, XPM).
 
[[Файл:grass_modeler_toolbar.png|center|Главное окно расширения GRASS wxGUI Modeler]]


Расширение wxGUI Modeler в некоторой степени напоминает [http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002w00000001000000 ArcGIS ModelBuilder], который в свою очередь, похож на [http://en.wikipedia.org/wiki/ERDAS_IMAGINE#ERDAS_IMAGINE_Spatial_Modeler ERDAS IMAGINE Spatial Modeler]. Согласно Википедии, Spatial Modeler впервые появилась в 1993 году. После этого в 2004 году ESRI (Environmental Systems Research Institute) скопировали идею и создали свой собственный инструмент под названием ModelBuilder, [http://en.wikipedia.org/wiki/ERDAS_IMAGINE#ERDAS_IMAGINE_Spatial_Modeler сообщает Википедия].
Работа расширения GRASS wxGUI Modeler рассматривается на примере создания серии композитных изображений по данным LANDSAT 7. Если неохота искать и качать сцены с сайта [http://earthexplorer.usgs.gov/ USGS], то можно потренироваться на [http://gis-lab.info/data/samples/lt51700282007141mor00.7z доступных данных] на этом сайте.


=Задача=
==Задача==


Часто нужно сделать композитные изображения различных каналов LANDSAT. Обычно этот процесс разделён на несколько этапов:
Часто нужно сделать композитные изображения различных каналов LANDSAT. Обычно этот процесс разделён на несколько этапов:
Строка 13: Строка 33:
# Создание композитного изображения (модуль r.composite).
# Создание композитного изображения (модуль r.composite).


====Цель====
===Цель===
Автоматически создавать скорректированные по атмосфере, композитные изображения следующих комбинаций каналов: 321, 453, 543, 742, 745, 754.
Автоматически создавать скорректированные по атмосфере, композитные изображения следующих комбинаций каналов: 321, 453, 543, 742, 745, 754.


====Инструменты и данные====
===Инструменты и данные===


* Операционная система Ubuntu 11.10
* Операционная система Ubuntu 11.10
Строка 22: Строка 42:
* Любой набор снимков LANDSAT (сенсор ETM+)
* Любой набор снимков LANDSAT (сенсор ETM+)


=Решение=
==Алгоритм действий==
Предположим, что растры уже импортированы в GRASS, район GRASS установлен корректно и метод, используемый при атмосферной коррекции - "uncorrected".
 
# Переименовать растры по шаблону B.* Например, ххххххххххххххх_B10 → B.1 (можно воспользоваться [http://grass.osgeo.org/wiki/LANDSAT#Hint:_Minimal_disk_space_copies скриптом] для переименования);
# Запустить расширение через меню File → Graphical Modeler или кликая на иконку [[Файл:Modeler-icon.png|thunmb|24px|Modeler icon]]
# Добавить команды, необходимые для решения поставленной задачи
::* i.landsat.toar -t --overwrite --verbose input_prefix=B. output_prefix=toar. metfile=%metfile sensor=tm7 method=uncorrected percent=0.01 pixel=1000 sat_zenith=8.2000 rayleigh=0.0
::* i.landsat.rgb --verbose red=toar.3 green=toar.2 blue=toar.1 strength=98
::* r.composite --overwrite --verbose red=toar.3 green=toar.2 blue=toar.1 levels=32 output=321
::* i.landsat.rgb --verbose red=toar.4 green=toar.5 blue=toar.3 strength=98
::* r.composite --overwrite --verbose red=toar.4 green=toar.5 blue=toar.3 levels=32 output=453
::* i.landsat.rgb --verbose red=toar.5 green=toar.4 blue=toar.3 strength=98
::* r.composite --overwrite --verbose red=toar.5 green=toar.4 blue=toar.3 levels=32 output=543
::* i.landsat.rgb --verbose red=toar.7 green=toar.4 blue=toar.2 strength=98
::* r.composite --overwrite --verbose red=toar.7 green=toar.4 blue=toar.2 levels=32 output=742
::* i.landsat.rgb --verbose red=toar.7 green=toar.4 blue=toar.5 strength=98
::* r.composite --overwrite --verbose red=toar.7 green=toar.4 blue=toar.5 levels=32 output=745
::* i.landsat.rgb --verbose red=toar.7 green=toar.5 blue=toar.4 strength=98
::* r.composite --overwrite --verbose red=toar.7 green=toar.5 blue=toar.4 levels=32 output=754
# Задать переменные (в нашем случае она одна - %metfile)
# Проверить модель на работоспособность
# Запустить модель


Предположим, что растры уже импортированы в GRASS, район GRASS установлен корректно и метод, используемый при атмосферной коррекции - "uncorrected".
===Добавляем команды===
====Добавляем команды====
Прежде всего, следует начать с добавления новых команд (меню Model -> Add command).
Прежде всего, следует начать с добавления новых команд (меню Model -> Add command).


[[Файл:Adding_new_module.png|thumb|400px|center|Диалоговое окно Add command в GRASS wxGUI Modeler]]
[[Файл:Adding_new_module.png|center|Диалоговое окно Add command в GRASS wxGUI Modeler]]
====Задаём переменные====
 
===Задаём переменные===
Переменные задаются знаком %, т.е. переменная ''%metfile'' обозначает название заголовока файла (.met / MTL.txt) для сенсоров Landsat ETM + или TM5. Переменные могут быть следующих типов: строковые, целые числа, числа с плавающей точкой, векторные, растровые, набор данных или путь к файлу. Все переменные, используемые в модели, должны быть добавлены на вкладке Variables.
Переменные задаются знаком %, т.е. переменная ''%metfile'' обозначает название заголовока файла (.met / MTL.txt) для сенсоров Landsat ETM + или TM5. Переменные могут быть следующих типов: строковые, целые числа, числа с плавающей точкой, векторные, растровые, набор данных или путь к файлу. Все переменные, используемые в модели, должны быть добавлены на вкладке Variables.


[[Файл:Modeler_variables.png|thumb|1000px|center|Вкладка Variables, позволяющая управлять переменными в GRASS Graphical Modeler]]
[[Файл:Modeler_variables.png|thumb|900px|center|Вкладка Variables, позволяющая управлять переменными в GRASS Graphical Modeler]]
Таким образом, первая команда будет выглядеть так:
Таким образом, первая команда будет выглядеть так:


Строка 38: Строка 79:


В результате мы должны получить список команд, которые будут выполнены автоматически при запуске модели.
В результате мы должны получить список команд, которые будут выполнены автоматически при запуске модели.
[[Файл:Modeler_items.png|thumb|1000px|center|Список команд, которые будут выполнены автоматически при запуске модели в wxGUI Modeler]]
[[Файл:Modeler_items.png|thumb|900px|center|Список команд, которые будут выполнены автоматически при запуске модели в wxGUI Modeler]]


Если вернуться к вкладке Model, то можно увидеть блок-схему всего процесса.
Если вернуться к вкладке Model, то можно увидеть блок-схему всего процесса.


[[Файл:Modeler_model1.png|thumb|1000px|center|Изначальная блок-схема в окне wxGUI Modeler]]
[[Файл:Modeler_model1.png|thumb|900px|center|Изначальная блок-схема в окне wxGUI Modeler]]
====Реорганизуем блок-схему====
 
===Реорганизуем блок-схему===
Я советую реорганизовать схему так, чтобы она выглядела более или менее понятной для тех, кто будет использовать модель позже.
Я советую реорганизовать схему так, чтобы она выглядела более или менее понятной для тех, кто будет использовать модель позже.
[[Файл:Model_image.png|thumb|1000px|center|Блок-схема, приведённая в нормальный вид]]
[[Файл:Model_image.png|thumb|900px|center|Блок-схема, приведённая в нормальный вид]]
====Проверяем и запускам модель====
 
===Проверяем и запускаем модель===
И наконец, следует проверить модель и запустить её!
И наконец, следует проверить модель и запустить её!
[[Файл:Model_in_process.png|1000px|center|Модель в действии]]
[[Файл:Model_in_process.png|900px|center|Модель в действии]]
 
==Экспорт в Python==
 
Впоследствии возможно сделать экспорт модели в скрипт Pyhton для более тонкой доработки модели. Вид первоначального скрипта имеет вид:
<syntaxhighlight lang="python">
    #!/usr/bin/env python
    #
    ############################################################################
    #
    # MODULE:      model_atcor7_composite
    #
    # AUTHOR(S):     Vladimir Naumov
    #             
    # PURPOSE:      Script generated by wxGUI Graphical Modeler.
    #
    # DATE:        Tue Jul 24 09:32:51 2012
    #
    #############################################################################
   
    import sys
    import os
    import atexit
   
    import grass.script as grass
   
    def cleanup():
        pass
   
    def main():
        grass.run_command("i.landsat.toar",
                      flags = 't',
                      overwrite = True,
                      verbose = True,
                      input_prefix = "B.",
                      output_prefix = "toar.",
                      metfile = metfile,
                      sensor = "tm7",
                      method = "uncorrected",
                      percent = 0.01,
                      pixel = 1000,
                      sat_zenith = 8.2000,
                      rayleigh = 0.0)
        grass.run_command("i.landsat.rgb",
                      verbose = True,
                      red = "toar.3",
                      green = "toar.2",
                      blue = "toar.1",
                      strength = 98)
        grass.run_command("r.composite",
                      overwrite = True,
                      verbose = True,
                      red = "toar.3",
                      green = "toar.2",
                      blue = "toar.1",
                      levels = 32,
                      output = "321")
        grass.run_command("i.landsat.rgb",
                      verbose = True,
                      red = "toar.4",
                      green = "toar.5",
                      blue = "toar.3",
                      strength = 98)
        grass.run_command("r.composite",
                      overwrite = True,
                      verbose = True,
                      red = "toar.4",
                      green = "toar.5",
                      blue = "toar.3",
                      levels = 32,
                      output = "453")
        grass.run_command("i.landsat.rgb",
                      verbose = True,
                      red = "toar.5",
                      green = "toar.4",
                      blue = "toar.3",
                      strength = 98)
        grass.run_command("r.composite",
                      overwrite = True,
                      verbose = True,
                      red = "toar.5",
                      green = "toar.4",
                      blue = "toar.3",
                      levels = 32,
                      output = "543")
        grass.run_command("i.landsat.rgb",
                      verbose = True,
                      red = "toar.7",
                      green = "toar.4",
                      blue = "toar.2",
                      strength = 98)
        grass.run_command("r.composite",
                      overwrite = True,
                      verbose = True,
                      red = "toar.7",
                      green = "toar.4",
                      blue = "toar.2",
                      levels = 32,
                      output = "742")
        grass.run_command("i.landsat.rgb",
                      verbose = True,
                      red = "toar.7",
                      green = "toar.4",
                      blue = "toar.5",
                      strength = 98)
        grass.run_command("r.composite",
                      overwrite = True,
                      verbose = True,
                      red = "toar.7",
                      green = "toar.4",
                      blue = "toar.5",
                      levels = 32,
                      output = "745")
        grass.run_command("i.landsat.rgb",
                      verbose = True,
                      red = "toar.7",
                      green = "toar.5",
                      blue = "toar.4",
                      strength = 98)
        rass.run_command("r.composite",
                      overwrite = True,
                      verbose = True,
                      red = "toar.7",
                      green = "toar.5",
                      blue = "toar.4",
                      levels = 32,
                      output = "754")
   
        return 0
   
    if __name__ == "__main__":
        options, flags = grass.parser()
        atexit.register(cleanup)
        sys.exit(main())</syntaxhighlight>
 
Зная язык программирования [http://www.python.org/ Python], первоначальный скрипт можно привести к более лаконичному виду и использовать его уже в повседневной работе:
<syntaxhighlight lang="python">#!/usr/bin/env python
  import sys
  import os
  import atexit
 
  import grass.script as grass
 
  def cleanup():
      pass
 
  def main():   
        grass.run_command("i.landsat.toar",
                      flags = 't',
                      overwrite = True,
                      verbose = True,
                      input_prefix = "B.",
                      output_prefix = "toar.",
                      metfile = metfile,
                      sensor = "tm7",
                      method = "uncorrected",
                      percent = 0.01,
                      pixel = 1000,
                      sat_zenith = 8.2000,
                      rayleigh = 0.0)
      list = ["321", "453", "543", "742", "745", "754"]
      for band in list:
          grass.run_command("i.landsat.rgb",
                      red="toar."+band[0],
                      green="toar."+band[1],
                      blue="toar."+band[2],
                      strength=98)
     
          grass.run_command("r.composite",
                      red="toar."+band[0],
                      green="toar."+band[1],
                      blue="toar."+band[2],
                      levels=32,
                      output=band)
   
        return 0
   
    if __name__ == "__main__":
        options, flags = grass.parser()
        atexit.register(cleanup)
        sys.exit(main())</syntaxhighlight>


=Выводы=
==Выводы==


В результате запуска модели, шесть растров были готовы менее, чем за десять минут.
В результате запуска модели, шесть растров были готовы менее, чем за десять минут.
[[Файл:Results grass modeler.png|thumb|1000px|center|Коллаж из растров, созданных в результате работы GRASS wxGUI Modeler.]]
[[Файл:Results grass modeler.png|thumb|900px|center|Коллаж из растров, созданных в результате работы GRASS wxGUI Modeler.]]
 
Время начала запуска: 9:34:16; время окончания работы модели: 9:41:35. Кроме того, помимо собственно композитных изображений были созданы скорректированные по атмосфере растры всех каналов, которые могут быть использованы для дальнейшего анализа.


Время начала запуска: 9:34:16; время окончания работы модели: 9:41:35. Кроме того, помимо собственно композитных изображений были созданы скорректированные по атмосфере растры всех каналов, которые могут быть использованы для дальнейшего анализа. Впоследствии возможно сделать экспорт в сценарий Pyhton для более тонкой доработки модели.
[http://wiki.gis-lab.info/w/%D0%A4%D0%B0%D0%B9%D0%BB:L7_toar_composite.zip Файл] модели и скрипт переименования каналов LANDSAT могут быть использованы для самостоятельного запуска модели.


=Ссылки=
=Ссылки=
Строка 65: Строка 290:


[http://en.wikipedia.org/wiki/ERDAS_IMAGINE#ERDAS_IMAGINE_Spatial_Modeler ERDAS IMAGINE Spatial Modeler (википедия)]
[http://en.wikipedia.org/wiki/ERDAS_IMAGINE#ERDAS_IMAGINE_Spatial_Modeler ERDAS IMAGINE Spatial Modeler (википедия)]
[[Файл:L7_toar_composite.zip|"Файл модели и скрипт для переименования каналов LANDSAT"]]

Текущая версия от 04:08, 18 октября 2012

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


Описание расширения GRASS для визуального моделирования и материалы для самостоятельной работы

GRASS Graphical Modeler - это расширение GRASS, которое позволяет пользователю создавать, редактировать, управлять и выполнять моделями геопространственного анализа. GRASS Graphical Modeler написана командой разработчиков GRASS. Документация была создана Мартином Ланда. Начиная с версии GRASS 6.4.2 это расширение включено в программу по умолчанию, отдельная установка не требуется.

На момент написания статьи расширение находилось в стадии разработки.

Введение

Расширение wxGUI Modeler в некоторой степени напоминает ArcGIS ModelBuilder, который в свою очередь, похож на ERDAS IMAGINE Spatial Modeler. Согласно Википедии, Spatial Modeler впервые появилась в 1993 году. После этого в 2004 году ESRI (Environmental Systems Research Institute) создали собственный инструмент под названием ModelBuilder, сообщает Википедия.

Расширение позволяет выполнять следующее:

  • задавать действия (команды GRASS);
  • задавать входящие данные (растровые, векторные и 3D-растровые);
  • устанавливать связи между действиями и входными данными;
  • задавать циклы и условия выполнения;
  • проверять модель на работоспособность;
  • запускать модель;
  • сохранять настройки модели в файл (*.gxm);
  • экспортировать модель в скрипт на Python'е;
  • экспортировать концептуальную модель в изображение (поддерживаемые форматы: PNG, BMP, GIF, JPG, PCX, PNM, TIF, XPM).
Главное окно расширения GRASS wxGUI Modeler

Работа расширения GRASS wxGUI Modeler рассматривается на примере создания серии композитных изображений по данным LANDSAT 7. Если неохота искать и качать сцены с сайта USGS, то можно потренироваться на доступных данных на этом сайте.

Задача

Часто нужно сделать композитные изображения различных каналов LANDSAT. Обычно этот процесс разделён на несколько этапов:

  1. Импорт растров в GRASS (модуль r.in.gdal);
  2. Атмосферная коррекция для устранения влияния атмосферы (модуль i.landsat.toar);
  3. Автоматическое улучшение цветовой карты (модуль i.landsat.rgb);
  4. Создание композитного изображения (модуль r.composite).

Цель

Автоматически создавать скорректированные по атмосфере, композитные изображения следующих комбинаций каналов: 321, 453, 543, 742, 745, 754.

Инструменты и данные

  • Операционная система Ubuntu 11.10
  • GRASS 7.0.svn50461 (2012)
  • Любой набор снимков LANDSAT (сенсор ETM+)

Алгоритм действий

Предположим, что растры уже импортированы в GRASS, район GRASS установлен корректно и метод, используемый при атмосферной коррекции - "uncorrected".

  1. Переименовать растры по шаблону B.* Например, ххххххххххххххх_B10 → B.1 (можно воспользоваться скриптом для переименования);
  2. Запустить расширение через меню File → Graphical Modeler или кликая на иконку Modeler icon
  3. Добавить команды, необходимые для решения поставленной задачи
  • i.landsat.toar -t --overwrite --verbose input_prefix=B. output_prefix=toar. metfile=%metfile sensor=tm7 method=uncorrected percent=0.01 pixel=1000 sat_zenith=8.2000 rayleigh=0.0
  • i.landsat.rgb --verbose red=toar.3 green=toar.2 blue=toar.1 strength=98
  • r.composite --overwrite --verbose red=toar.3 green=toar.2 blue=toar.1 levels=32 output=321
  • i.landsat.rgb --verbose red=toar.4 green=toar.5 blue=toar.3 strength=98
  • r.composite --overwrite --verbose red=toar.4 green=toar.5 blue=toar.3 levels=32 output=453
  • i.landsat.rgb --verbose red=toar.5 green=toar.4 blue=toar.3 strength=98
  • r.composite --overwrite --verbose red=toar.5 green=toar.4 blue=toar.3 levels=32 output=543
  • i.landsat.rgb --verbose red=toar.7 green=toar.4 blue=toar.2 strength=98
  • r.composite --overwrite --verbose red=toar.7 green=toar.4 blue=toar.2 levels=32 output=742
  • i.landsat.rgb --verbose red=toar.7 green=toar.4 blue=toar.5 strength=98
  • r.composite --overwrite --verbose red=toar.7 green=toar.4 blue=toar.5 levels=32 output=745
  • i.landsat.rgb --verbose red=toar.7 green=toar.5 blue=toar.4 strength=98
  • r.composite --overwrite --verbose red=toar.7 green=toar.5 blue=toar.4 levels=32 output=754
  1. Задать переменные (в нашем случае она одна - %metfile)
  2. Проверить модель на работоспособность
  3. Запустить модель

Добавляем команды

Прежде всего, следует начать с добавления новых команд (меню Model -> Add command).

Диалоговое окно Add command в GRASS wxGUI Modeler

Задаём переменные

Переменные задаются знаком %, т.е. переменная %metfile обозначает название заголовока файла (.met / MTL.txt) для сенсоров Landsat ETM + или TM5. Переменные могут быть следующих типов: строковые, целые числа, числа с плавающей точкой, векторные, растровые, набор данных или путь к файлу. Все переменные, используемые в модели, должны быть добавлены на вкладке Variables.

Вкладка Variables, позволяющая управлять переменными в GRASS Graphical Modeler

Таким образом, первая команда будет выглядеть так:

i.landsat.toar -t –overwrite –verbose input_prefix=B. output_prefix=toar. metfile=%metfile sensor=tm7 method=uncorrected percent=0.01 pixel=1000 sat_zenith=8.2000 rayleigh=0.0

В результате мы должны получить список команд, которые будут выполнены автоматически при запуске модели.

Список команд, которые будут выполнены автоматически при запуске модели в wxGUI Modeler

Если вернуться к вкладке Model, то можно увидеть блок-схему всего процесса.

Изначальная блок-схема в окне wxGUI Modeler

Реорганизуем блок-схему

Я советую реорганизовать схему так, чтобы она выглядела более или менее понятной для тех, кто будет использовать модель позже.

Блок-схема, приведённая в нормальный вид

Проверяем и запускаем модель

И наконец, следует проверить модель и запустить её!

Модель в действии

Экспорт в Python

Впоследствии возможно сделать экспорт модели в скрипт Pyhton для более тонкой доработки модели. Вид первоначального скрипта имеет вид:

    #!/usr/bin/env python
    #
    ############################################################################
    #
    # MODULE:       model_atcor7_composite
    #
    # AUTHOR(S):	    Vladimir Naumov
    #               
    # PURPOSE:      Script generated by wxGUI Graphical Modeler.
    #
    # DATE:         Tue Jul 24 09:32:51 2012
    #
    #############################################################################
    
    import sys
    import os
    import atexit
    
    import grass.script as grass
    
    def cleanup():
        pass
    
    def main():
        grass.run_command("i.landsat.toar",
                      flags = 't',
                      overwrite = True,
                      verbose = True,
                      input_prefix = "B.",
                      output_prefix = "toar.",
                      metfile = metfile,
                      sensor = "tm7",
                      method = "uncorrected",
                      percent = 0.01,
                      pixel = 1000,
                      sat_zenith = 8.2000,
                      rayleigh = 0.0)
        grass.run_command("i.landsat.rgb",
                      verbose = True,
                      red = "toar.3",
                      green = "toar.2",
                      blue = "toar.1",
                      strength = 98)
        grass.run_command("r.composite",
                      overwrite = True,
                      verbose = True,
                      red = "toar.3",
                      green = "toar.2",
                      blue = "toar.1",
                      levels = 32,
                      output = "321")
        grass.run_command("i.landsat.rgb",
                      verbose = True,
                      red = "toar.4",
                      green = "toar.5",
                      blue = "toar.3",
                      strength = 98)
        grass.run_command("r.composite",
                      overwrite = True,
                      verbose = True,
                      red = "toar.4",
                      green = "toar.5",
                      blue = "toar.3",
                      levels = 32,
                      output = "453")
        grass.run_command("i.landsat.rgb",
                      verbose = True,
                      red = "toar.5",
                      green = "toar.4",
                      blue = "toar.3",
                      strength = 98)
        grass.run_command("r.composite",
                      overwrite = True,
                      verbose = True,
                      red = "toar.5",
                      green = "toar.4",
                      blue = "toar.3",
                      levels = 32,
                      output = "543")
        grass.run_command("i.landsat.rgb",
                      verbose = True,
                      red = "toar.7",
                      green = "toar.4",
                      blue = "toar.2",
                      strength = 98)
        grass.run_command("r.composite",
                      overwrite = True,
                      verbose = True,
                      red = "toar.7",
                      green = "toar.4",
                      blue = "toar.2",
                      levels = 32,
                      output = "742")
        grass.run_command("i.landsat.rgb",
                      verbose = True,
                      red = "toar.7",
                      green = "toar.4",
                      blue = "toar.5",
                      strength = 98)
        grass.run_command("r.composite",
                      overwrite = True,
                      verbose = True,
                      red = "toar.7",
                      green = "toar.4",
                      blue = "toar.5",
                      levels = 32,
                      output = "745")
        grass.run_command("i.landsat.rgb",
                      verbose = True,
                      red = "toar.7",
                      green = "toar.5",
                      blue = "toar.4",
                      strength = 98)
        rass.run_command("r.composite",
                      overwrite = True,
                      verbose = True,
                      red = "toar.7",
                      green = "toar.5",
                      blue = "toar.4",
                      levels = 32,
                      output = "754")
    
        return 0
    
    if __name__ == "__main__":
        options, flags = grass.parser()
        atexit.register(cleanup)
        sys.exit(main())

Зная язык программирования Python, первоначальный скрипт можно привести к более лаконичному виду и использовать его уже в повседневной работе:

#!/usr/bin/env python
   import sys
   import os
   import atexit
   
   import grass.script as grass
   
   def cleanup():
       pass
   
   def main():    
        grass.run_command("i.landsat.toar",
                      flags = 't',
                      overwrite = True,
                      verbose = True,
                      input_prefix = "B.",
                      output_prefix = "toar.",
                      metfile = metfile,
                      sensor = "tm7",
                      method = "uncorrected",
                      percent = 0.01,
                      pixel = 1000,
                      sat_zenith = 8.2000,
                      rayleigh = 0.0)
       list = ["321", "453", "543", "742", "745", "754"]
       for band in list:
           grass.run_command("i.landsat.rgb",
                      red="toar."+band[0],
                      green="toar."+band[1],
                      blue="toar."+band[2],
                      strength=98)
       
           grass.run_command("r.composite",
                      red="toar."+band[0],
                      green="toar."+band[1],
                      blue="toar."+band[2],
                      levels=32,
                      output=band)
    
        return 0
    
    if __name__ == "__main__":
        options, flags = grass.parser()
        atexit.register(cleanup)
        sys.exit(main())

Выводы

В результате запуска модели, шесть растров были готовы менее, чем за десять минут.

Коллаж из растров, созданных в результате работы GRASS wxGUI Modeler.

Время начала запуска: 9:34:16; время окончания работы модели: 9:41:35. Кроме того, помимо собственно композитных изображений были созданы скорректированные по атмосфере растры всех каналов, которые могут быть использованы для дальнейшего анализа.

Файл модели и скрипт переименования каналов LANDSAT могут быть использованы для самостоятельного запуска модели.

Ссылки

Источник: Vladimir Naumov – Graphical Modeler in GRASS

Официальная страница GRASS Graphical Modeler

Справка ArcGIS ModelBuilder

ERDAS IMAGINE Spatial Modeler (википедия)

Файл:L7 toar composite.zip