Страница 1 из 1
					
				Проблема с модулем r.fill.dir
				Добавлено: 09 ноя 2012, 22:36
				 Ремесленник
				Уважаемые Господа!
Столкнулся со следующей проблемой:
модуль  r.fill.dir при загрузке цмр  ASTER GDEM v2 (разрешение примерно 22 м, объем растра 105 мегабайт, версия  GRASS 6.4.2  Win 7 pro x64 rus) очень долго работает и не выдает никакого результата. Загружает одно из ядер процессора примерно от 25 до 50 % и больше никакой информации. Ни полоски на прогресс-баре, ни чего.
Как быть ?
Заранее благодарен за ответы и подсказки!
			 
			
					
				Re: Проблема с модулем r.fill.dir
				Добавлено: 10 ноя 2012, 07:42
				 KolesovDmitry
				Ничего не могу сказать по существу дела, никогда не пользовался этим модулем, но все-таки задам стандартный вопрос: попробуйте запустить модуль на  значительно меньшей территории -- изменится ли поведение программы?
			 
			
					
				Re: Проблема с модулем r.fill.dir
				Добавлено: 10 ноя 2012, 11:44
				 Ремесленник
				Благодарю за подсказку! При обработке данных  SRTM  объемом примерно 10 мегабайт, такого не происходит. Может проблема в значениях  nodata? На моих данных есть участки с отрицательными высотами (-10--15 м ниже уровня моря , просто местность такая).
			 
			
					
				Re: Проблема с модулем r.fill.dir
				Добавлено: 13 ноя 2012, 00:17
				 Александр Мурый
				Ремесленник, опишите последовательность ваших действий с ASTER GDEM v2.
Какие-то странные ошибки выдаёт Питон...
			 
			
					
				Re: Проблема с модулем r.fill.dir
				Добавлено: 13 ноя 2012, 22:14
				 Ремесленник
				Последовательность примерно следующая 
1. Тайлы скачаны с 
http://reverb.echo.nasa.gov (одноградусные фрагменты в формате Geotiff)
2. Объединил в единый фрагмент примерно 100 мегабайт объемом, в Global mapper 13, перепроецировал в UTM 38N WGS84.
3. Открываю  Grass 6.4.2, который идет в составе с  NextGIS (сборка NextGIS-QGIS-c64bb9d-22.10.2012.exe).
4.Открываю рабочий набор  в который уже импортирован Aster GDEM.
5.Загружаю в  GRASS GIS Layer Manager  тот самый слой.
6. Набираю во вкладке  Command console  комманду  r.fill.dir.
7. Указываю в открывшемся интерфейсе мой растр в раскрывающемся списке "Имя существующего растрового слоя содержащего поверхность высот"
8. Даю название  в "Вывести растровый слой высот после заполнения"
9. Даю название  в "Вывести растровый слой направлений"
10. Ставлю галочку "Закрыть диалоговое окно после окончания операции"
Нажимаю выполнить... и ждууууу.
Когда открываешь диспетчер задач, в списке процессов, процесс r.fill.dir.exe*32 занимает примерно 19-20 мегабайт и загружает процессор на 25 процентов.
Необходимо отметить, что в  GRASS 7  ситуация повторяется (кроме сообщений на черном экране) .
 
			
					
				Re: Проблема с модулем r.fill.dir
				Добавлено: 13 ноя 2012, 22:39
				 Александр Мурый
				-- Операции с растрами очень ресурсоёмкие, поэтому (и в GRASS тоже) часто лучше обрабатывать по частям, а потом сшивать выходные растры (модуль 
r.patch);
-- перед запуском <r.fill.dir> надо задать текущий регион по нужному растру, для этого вызовите модуль <g.region> и укажите на входе растр, или в командной строке:
 
			
					
				Re: Проблема с модулем r.fill.dir
				Добавлено: 13 ноя 2012, 23:04
				 Ремесленник
				Надо пробовать. Но боюсь возможны артефакты в местах стыковки.
Интересно, а как макросы (или скрипты. Как это правильно ?)  создают?
Фрагментов будет много...
			 
			
					
				Re: Проблема с модулем r.fill.dir
				Добавлено: 13 ноя 2012, 23:08
				 Александр Мурый
				Ремесленник писал(а):
Интересно, а как макросы (или скрипты. Как это правильно ?)  создают?
Фрагментов будет много...
Вам интересно, как создаются модули GRASS или как обработать много растровых фрагментов в скрипте?
 
			
					
				Re: Проблема с модулем r.fill.dir
				Добавлено: 13 ноя 2012, 23:20
				 Ремесленник
				Как обработать много фрагментов с помощью скрипта. (Спасибо , что поправили 

 ).
 
			
					
				Re: Проблема с модулем r.fill.dir
				Добавлено: 14 ноя 2012, 00:39
				 Александр Мурый
				Ремесленник писал(а):Как обработать много фрагментов с помощью скрипта.
Можно сделать такой Python-скрипт с одним циклом внутри:
Код: Выделить всё
import sys,os
import grass.script as grass
for raster in grass.read_command('g.mlist', 
                                 type = "rast",
                                 pat = "my_raster_part*").splitlines():
    grass.read_command('g.region', rast = raster)
    grass.read_command('r.fill.dir',
                       input = raster,
                       elevation = "raster."+"fill",
                       direction = "raster."+"dir")
Параметр <pat> в модуле <g.mlist> значит "pattern" и является шаблоном для имени растра, т.е. в случае выше растры называются, например, my_raster_part1, my_raster_part2, my_raster_part3 и т.д.
После того, как импортируете все нужные фрагменты ЦМР в GRASS, напишите сюда все имена этих растров, чтобы составить цикл с ними.
 
			
					
				Re: Проблема с модулем r.fill.dir
				Добавлено: 14 ноя 2012, 17:59
				 Ремесленник
				Бесподобно!!! У меня нет слов!!!  amuriy Вы мне здорово помогли. Вышла большая экономия времени. Большое Вам Спасибо!!!
И напоследок... , а как научиться писать такие скрипты? Что нужно знать ?
			 
			
					
				Re: Проблема с модулем r.fill.dir
				Добавлено: 14 ноя 2012, 20:12
				 Александр Мурый
				На здоровье 
 
  
Ремесленник писал(а):а как научиться писать такие скрипты? Что нужно знать ?
1. Элементарное программирование на Питоне (переменные, циклы, типы данных, отступы, создание простейшего скрипта); почитайте статьи типа "Учимся программировать на Python за 10 минут", а затем, конечно, документацию  

 ;
2. общее устройство GRASS хотя бы на уровне 
пособия (т.е. создание области и набора / импорт и экспорт данных / запуск модулей); 
3. работу нужных для решения задачи модулей GRASS (что уже сложнее); до того, как писать скрипт с исп-ем тех или иных модулей, желательно поиграться с каждым отдельно (опции, запуск, что на входе, что на выходе и т.д.).