Страница 1 из 1
GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 12 авг 2013, 18:54
syroezhka
Моя задача состоит в том, что бы экспортировать из грасса более сотни изображений. Со скриптами я не дружу, решила делать это через моделлер. Что я делаю:
1. Добавляю команду add command (r.out.gdal)
2. В свойствах команды, в поле input выставляю %map
3. Добавляю серию растров (add loop/series) и связываю ее с командой
Не могу понять как свойствах команды задать output. Мне нужно что бы у каждого результирующего файла имя было аналогично входящему растру.
Re: GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 12 авг 2013, 22:05
rhot
Вам надо задать переменную пути, куда хотите сохранить растры (например path), а в output прописать path+map.
Re: GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 12 авг 2013, 23:07
syroezhka
Пытаюсь сделать:
Переменная пути должна быть типа string? Нужно ли в ней прописывать дефолтное значение?
И еще вопрос:
а в output прописать path+map.
как именно эта запись выглядит? вот прям дословно со всеми значками %. я, просто, не понимаю как их соединить вместе.
Спасибо за помощь!
Re: GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 13 авг 2013, 09:42
rhot
Да, типа string. Дефолтное значение указывайте по желанию, я указывал.
Знак процента (%) обозначает переменную, поэтому их надо использовать.
Если не получится, делайте экспорт модели в скрипт на питоне, выкладывайте сюда - посмотрим что там не так.
Re: GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 14 авг 2013, 00:06
syroezhka
Не получается. Я так вижу проблема именно в задании output. К сожалению, я не владею синтаксисом и поэтому не могу правильно прописать. Если делаю жестко вывод в файл, то все работает. Файл, при этом, естественно, переписывается столько раз, сколько у меня файлов для экспорта.
Вот так выглядят у меня свойства команды:

- routgdal.jpg (50.38 КБ) 10638 просмотров
Так выглядит код в окне 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']:
Re: GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 14 авг 2013, 00:13
rhot
Видно, что переменная path нигде не задана.
Почему различается код?
Re: GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 14 авг 2013, 13:36
syroezhka
Видно, что переменная path нигде не задана.
Я ее задавала через вкладку Variables. Или этого не достаточно?

- Var.jpg (75.16 КБ) 10597 просмотров
Почему различается код?
Меня этот вопрос тоже очень занимает.
Пожалуйста, напишите как у вас выглядит запись в Output. У меня она %path+%map. Это правильно? Каким знаком соединяются две переменные?
Re: GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 14 авг 2013, 15:09
rhot
Вот как-то так...
Код: Выделить всё
#!/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. Или этого не достаточно?
Бывает, переменная не сохраняется, особенно когда делаешь много изменений в самой модели. Поэтому на помощь приходит скрипт на питоне, который потом дорабатывают.
Re: GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 14 авг 2013, 23:12
Александр Мурый
Я тоже после многих попыток сегодня не смог заставить моделлер работать как надо. Надо, видимо, пробовать в версии 7.0.
Вот кроссплатформенное "костыльное" решение в виде мини-модуля для массового экспорта растров в геотиффы из данного набора:
Код: Выделить всё
> ./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") для имён растров; если не задано, то экспортированы будут все растры в текущем наборе.
Re: GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 14 авг 2013, 23:21
syroezhka
Спасибо, большое!
Без скриптов ни куда

буду разбираться. Статья по теме как раз есть на гислабе.
Кстати, окно Python Editor живет своей жизнью, результат в нем каждый раз разный. При одинаковой модели. Прототип, блин
Re: GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 14 авг 2013, 23:25
Александр Мурый
syroezhka писал(а):
Кстати, окно Python Editor живет своей жизнью, результат в нем каждый раз разный. При одинаковой модели.
Подтверждаю. По крайней мере, в GRASS 6.4.*
syroezhka писал(а):
Прототип, блин
Ну да, как и весь wxGUI.
Re: GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 16 авг 2013, 00:40
syroezhka
Александр Мурый, на Win7+Osgeo4W (Grass 6.4.3) отработал отлично. Запускала правда не через "Command console", а через File -> Launch Script. Сработала сила привычки работы через менюшки.
Еще раз спасибо!
Re: GRASS Graphical Modeler - массовый экспорт растров
Добавлено: 16 авг 2013, 00:56
Александр Мурый
На здоровье

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