GRASS Graphical Modeler - массовый экспорт растров

Ответить
Аватара пользователя
syroezhka
Завсегдатай
Сообщения: 290
Зарегистрирован: 21 апр 2008, 21:22
Репутация: 5
Откуда: 50°26'N 30°31'E
Контактная информация:

GRASS Graphical Modeler - массовый экспорт растров

Сообщение syroezhka » 12 авг 2013, 18:54

Моя задача состоит в том, что бы экспортировать из грасса более сотни изображений. Со скриптами я не дружу, решила делать это через моделлер. Что я делаю:
1. Добавляю команду add command (r.out.gdal)
2. В свойствах команды, в поле input выставляю %map
3. Добавляю серию растров (add loop/series) и связываю ее с командой
Не могу понять как свойствах команды задать output. Мне нужно что бы у каждого результирующего файла имя было аналогично входящему растру.

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: GRASS Graphical Modeler - массовый экспорт растров

Сообщение rhot » 12 авг 2013, 22:05

Вам надо задать переменную пути, куда хотите сохранить растры (например path), а в output прописать path+map.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Аватара пользователя
syroezhka
Завсегдатай
Сообщения: 290
Зарегистрирован: 21 апр 2008, 21:22
Репутация: 5
Откуда: 50°26'N 30°31'E
Контактная информация:

Re: GRASS Graphical Modeler - массовый экспорт растров

Сообщение syroezhka » 12 авг 2013, 23:07

Пытаюсь сделать:
Переменная пути должна быть типа string? Нужно ли в ней прописывать дефолтное значение?
И еще вопрос:
а в output прописать path+map.
как именно эта запись выглядит? вот прям дословно со всеми значками %. я, просто, не понимаю как их соединить вместе.
Спасибо за помощь!

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: GRASS Graphical Modeler - массовый экспорт растров

Сообщение rhot » 13 авг 2013, 09:42

Да, типа string. Дефолтное значение указывайте по желанию, я указывал.
Знак процента (%) обозначает переменную, поэтому их надо использовать.

Если не получится, делайте экспорт модели в скрипт на питоне, выкладывайте сюда - посмотрим что там не так.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Аватара пользователя
syroezhka
Завсегдатай
Сообщения: 290
Зарегистрирован: 21 апр 2008, 21:22
Репутация: 5
Откуда: 50°26'N 30°31'E
Контактная информация:

Re: GRASS Graphical Modeler - массовый экспорт растров

Сообщение syroezhka » 14 авг 2013, 00:06

Не получается. Я так вижу проблема именно в задании output. К сожалению, я не владею синтаксисом и поэтому не могу правильно прописать. Если делаю жестко вывод в файл, то все работает. Файл, при этом, естественно, переписывается столько раз, сколько у меня файлов для экспорта.
Вот так выглядят у меня свойства команды:
routgdal.jpg
routgdal.jpg (50.38 КБ) 9908 просмотров
Так выглядит код в окне Python Editor

Код: Выделить всё

import sys
import os
import atexit
import grass.script as grass
def cleanup():
    pass
def main():
    for map in ['TSX1_1DEM_x3_ASM_0@classification', 'TSX1_1DEM_x3_ASM_135@classification']:
        grass.run_command("r.out.gdal",
                          input = map,
                          format = "GTiff",
                          output = path+%map)
    return 0
if __name__ == "__main__":
    options, flags = grass.parser()
    atexit.register(cleanup)
    sys.exit(main())
Так выглядит код при экпорте в скрипт

Код: Выделить всё

import sys
import os
import atexit
import grass.script as grass
def cleanup():
    pass
def main():
    for map in ['TSX1_1DEM_x3_ASM_0@classification', 'TSX1_1DEM_x3_ASM_135@classification']:

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: GRASS Graphical Modeler - массовый экспорт растров

Сообщение rhot » 14 авг 2013, 00:13

Видно, что переменная path нигде не задана.
Почему различается код?
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Аватара пользователя
syroezhka
Завсегдатай
Сообщения: 290
Зарегистрирован: 21 апр 2008, 21:22
Репутация: 5
Откуда: 50°26'N 30°31'E
Контактная информация:

Re: GRASS Graphical Modeler - массовый экспорт растров

Сообщение syroezhka » 14 авг 2013, 13:36

Видно, что переменная path нигде не задана.
Я ее задавала через вкладку Variables. Или этого не достаточно?
Var.jpg
Var.jpg (75.16 КБ) 9867 просмотров
Почему различается код?
Меня этот вопрос тоже очень занимает.
Пожалуйста, напишите как у вас выглядит запись в Output. У меня она %path+%map. Это правильно? Каким знаком соединяются две переменные?

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: GRASS Graphical Modeler - массовый экспорт растров

Сообщение rhot » 14 авг 2013, 15:09

Вот как-то так...

Код: Выделить всё

#!/usr/bin/env python
#
##############################################################################
#
# MODULE:       model
#
# AUTHOR(S):    rhot
#               
# PURPOSE:      Script generated by wxGUI Graphical Modeler.
#
# DATE:         Mon Aug 12 20:41:49 2013
#
##############################################################################

import sys
import os
import atexit

import grass.script as grass

def cleanup():
    pass

def main():
    tiffsdir = '/home/rhot/GIS_data/tiffs_export'
    grass.run_command("g.region",
                      flags = 'd')
    for map in ['B10@PERMANENT', 'B20@PERMANENT', 'B30@PERMANENT', 'B40@PERMANENT', 'B50@PERMANENT', 'B61@PERMANENT', 'B62@PERMANENT', 'B70@PERMANENT', 'B80@PERMANENT']:
        grass.run_command("r.out.gdal",
                          input = map,
                          output = tiffsdir+map,
                          format = "GTiff", overwrite = True)

    return 0

if __name__ == "__main__":
    options, flags = grass.parser()
    atexit.register(cleanup)
    sys.exit(main())
Не могу знать тонкостей работы этой программы в вашей операционной системе, т.к. у меня не виндоус.
syroezhka писал(а):Я ее задавала через вкладку Variables. Или этого не достаточно?
Бывает, переменная не сохраняется, особенно когда делаешь много изменений в самой модели. Поэтому на помощь приходит скрипт на питоне, который потом дорабатывают.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: GRASS Graphical Modeler - массовый экспорт растров

Сообщение Александр Мурый » 14 авг 2013, 23:12

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

Вот кроссплатформенное "костыльное" решение в виде мини-модуля для массового экспорта растров в геотиффы из данного набора:
r.out.geotiffz.py
(1.34 КБ) 845 скачиваний

Код: Выделить всё

> ./r.out.geotiffz.py -help

Description:
 Mass raster export to GTiff

Keywords:
 raster

Usage:
 r.out.geotiffz.py [pattern=name] path=name [--verbose] [--quiet]

Flags:
 --v   Verbose module output
 --q   Quiet module output

Parameters:
  pattern   Pattern to select rasters
     path   Path to export rasters
Как видно, параметров у скрипта два: "pattern", т.е. шаблон для выбора растров, и "path", т.е. полный путь к каталогу, куда мы хотим их экспортировать.
Пример шаблона: "TSX1_1DEM_x3_ASM*".
Примеры путей: "C:\", "D:\Work","/home/user/Desktop" и т.п. (без кавычек, ест-но).

Проверено на Linux (GRASS 6.4.3), Win7 (OSGeo4W).

Краткая инструкция на примере OSGeo4W (для запуска из граф. интерфейса):
- скопировать скрипт в папку "C:\OSGeo4W\apps\grass\grass-6.4.3RC2\etc\gui\scripts";
- запустить GRASS с wxGUI;
- главном окне на вкладке "Command console" набрать "r.out.geotiffz.py", запустить модуль;
- в окне модуля в графе "Path" указать _полный_ путь (со всеми слэшами) к папке, куда будет производиться экспорт;
- на вкладке "Optional" можно задать шаблон ("Pattern") для имён растров; если не задано, то экспортированы будут все растры в текущем наборе.
Редактор материалов, модератор форума

Аватара пользователя
syroezhka
Завсегдатай
Сообщения: 290
Зарегистрирован: 21 апр 2008, 21:22
Репутация: 5
Откуда: 50°26'N 30°31'E
Контактная информация:

Re: GRASS Graphical Modeler - массовый экспорт растров

Сообщение syroezhka » 14 авг 2013, 23:21

Спасибо, большое!
Без скриптов ни куда :( буду разбираться. Статья по теме как раз есть на гислабе.
Кстати, окно Python Editor живет своей жизнью, результат в нем каждый раз разный. При одинаковой модели. Прототип, блин

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: GRASS Graphical Modeler - массовый экспорт растров

Сообщение Александр Мурый » 14 авг 2013, 23:25

syroezhka писал(а): Кстати, окно Python Editor живет своей жизнью, результат в нем каждый раз разный. При одинаковой модели.
Подтверждаю. По крайней мере, в GRASS 6.4.*
syroezhka писал(а): Прототип, блин
Ну да, как и весь wxGUI.
Редактор материалов, модератор форума

Аватара пользователя
syroezhka
Завсегдатай
Сообщения: 290
Зарегистрирован: 21 апр 2008, 21:22
Репутация: 5
Откуда: 50°26'N 30°31'E
Контактная информация:

Re: GRASS Graphical Modeler - массовый экспорт растров

Сообщение syroezhka » 16 авг 2013, 00:40

Александр Мурый, на Win7+Osgeo4W (Grass 6.4.3) отработал отлично. Запускала правда не через "Command console", а через File -> Launch Script. Сработала сила привычки работы через менюшки.
Еще раз спасибо!

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: GRASS Graphical Modeler - массовый экспорт растров

Сообщение Александр Мурый » 16 авг 2013, 00:56

На здоровье :) Обращайтесь, если что.
syroezhka писал(а): Запускала правда не через "Command console", а через File -> Launch Script. Сработала сила привычки работы через менюшки.
Это по сути то же самое, разницы нет. Главное -- скопировать файл скрипта куда надо (в каталог, который прописан в спец. переменной GRASS_ADDON_PATH). Ну или указать нужный каталог в переменной.
Редактор материалов, модератор форума

Ответить

Вернуться в «GRASS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 18 гостей