r.fillnulls
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
r.fillnulls
Здравствуйте
Пытаюсь заполнить null-значения в растре при помощи модуля r.fillnulls:
r.filnulls input=ls_07.1 output=ls_07_fill.1 (прочие параметры не трогаю)
После некоторых раздумий (записи выходного растрового слоя, получения точек, построения топологии выходного векторного слоя, построения примитивов) выдается ошибка: G_realloc: невозможно выделить 20924004 байт в struct_alloc.c:133, далее ругается на ненайденные векторные и растровые слои.
В какую сторону мне копать?
Пытаюсь заполнить null-значения в растре при помощи модуля r.fillnulls:
r.filnulls input=ls_07.1 output=ls_07_fill.1 (прочие параметры не трогаю)
После некоторых раздумий (записи выходного растрового слоя, получения точек, построения топологии выходного векторного слоя, построения примитивов) выдается ошибка: G_realloc: невозможно выделить 20924004 байт в struct_alloc.c:133, далее ругается на ненайденные векторные и растровые слои.
В какую сторону мне копать?
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: r.fillnulls
Какая версия GRASS? Какая ОС и какой размер оперативки на машине?
Приведите свойства растра (размеры, разрешение). По растру был задан регион до запуска <r.fillnulls>?
Приведите свойства растра (размеры, разрешение). По растру был задан регион до запуска <r.fillnulls>?
Редактор материалов, модератор форума
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: r.fillnulls
GRASS 6.4.2 на Ubuntu 12.10, оперативка 2 Гб., регион задан по размеру растра. Растр – один из каналов снимка landsat, свойства растра:
Rows: 7421
Columns: 8281
Total Cells: 61453301
В консоли имеем следующее:
r.fillnulls input=ls_07.1@kizi_set output=ls_07_fill.1
Locating and isolating NULL areas...
Чтение исходного растрового слоя <r_fillnulls_6544@kizi_set>...
Построение буферных зон...
Запись выходного растрового слоя <r_fillnulls_6544.buf>...
Creating interpolation points...
Получение точек...
Построение топологии для векторного слоя <vecttmp_fillnulls_6544>...
Регистрируются примитивы...
6310086 примитивов зарегистрировано
6310086 узлов зарегистрировано
Построение полигонов...
0 полигонов построено
0 островов создано
Назначаются острова...
Назначаются центроиды...
Количество узлов: 6310086
Количество примитивов: 6310086
Количество точек: 6310086
Количество линий: 0
Количество границ: 0
Количество центроидов: 0
Количество полигонов: 0
Количество островов: 0
dbmi: Protocol error
dbmi: Protocol error
Segmentation fault (core dumped)
ERROR: /usr/lib/grass64/scripts/r.fillnulls abandoned. Removing temporary maps, restoring user mask if needed:
Растровый слой <r_fillnulls_6544_filled> не найден
<r_fillnulls_6544_filled> nothing removed
Таблица <vecttmp_fillnulls_6544> связанная с векторным слоем <vecttmp_fillnulls_6544> не существует
raster <usermask_mask.6544> не найден
(Fri Dec 28 19:07:29 2012) Операция завершена (3281 sec)
при этом Ubuntu выдает сообщение об ошибке:
«Извините, программа r.to.vect аварийно завершила свою работу
В вашем компьютере недостаточно свободной памяти, чтобы автоматически проанализировать неполадку и отправить отчет разработчикам.»
Т.е. видимо, недостаточно памяти?
Где можно узнать поподробнее о работе модуля? Мне, честно признаться, не совсем понятно, как связаны интерполяция нулевых значений растра и векторные слои. Стоит ли приложить растр?
Rows: 7421
Columns: 8281
Total Cells: 61453301
В консоли имеем следующее:
r.fillnulls input=ls_07.1@kizi_set output=ls_07_fill.1
Locating and isolating NULL areas...
Чтение исходного растрового слоя <r_fillnulls_6544@kizi_set>...
Построение буферных зон...
Запись выходного растрового слоя <r_fillnulls_6544.buf>...
Creating interpolation points...
Получение точек...
Построение топологии для векторного слоя <vecttmp_fillnulls_6544>...
Регистрируются примитивы...
6310086 примитивов зарегистрировано
6310086 узлов зарегистрировано
Построение полигонов...
0 полигонов построено
0 островов создано
Назначаются острова...
Назначаются центроиды...
Количество узлов: 6310086
Количество примитивов: 6310086
Количество точек: 6310086
Количество линий: 0
Количество границ: 0
Количество центроидов: 0
Количество полигонов: 0
Количество островов: 0
dbmi: Protocol error
dbmi: Protocol error
Segmentation fault (core dumped)
ERROR: /usr/lib/grass64/scripts/r.fillnulls abandoned. Removing temporary maps, restoring user mask if needed:
Растровый слой <r_fillnulls_6544_filled> не найден
<r_fillnulls_6544_filled> nothing removed
Таблица <vecttmp_fillnulls_6544> связанная с векторным слоем <vecttmp_fillnulls_6544> не существует
raster <usermask_mask.6544> не найден
(Fri Dec 28 19:07:29 2012) Операция завершена (3281 sec)
при этом Ubuntu выдает сообщение об ошибке:
«Извините, программа r.to.vect аварийно завершила свою работу
В вашем компьютере недостаточно свободной памяти, чтобы автоматически проанализировать неполадку и отправить отчет разработчикам.»
Т.е. видимо, недостаточно памяти?
Где можно узнать поподробнее о работе модуля? Мне, честно признаться, не совсем понятно, как связаны интерполяция нулевых значений растра и векторные слои. Стоит ли приложить растр?
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: r.fillnulls
Попробуйте вдвое меньше регион задать,- сработает ли?
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: r.fillnulls
Вот как я себе представляю работу этого модуля (к сожалению, сейчас нет возможности проверить истинность предположения): модуль считывает данные из растра в векторный точечный слой и потом интерполирует вектор. Затем из проинтерполированных значений считываются данные для заполнения дыркок.
Если мое предположение верно, то идея заполнять дырки, используя весь растр Landsat, представляется не только крайне затратной, но и бессмысленной: значения пикселей в достаточном отдалении от дыры практически не оказывают влияния на результат при интерполяции.
Соответсвенно, для решения проблемы нужно попробовать выбрать регион, покрывающий дырку с не слишком большим нахлестом, и интерполировать разумное число точек, а не все 6.5 миллионов.
Если мое предположение верно, то идея заполнять дырки, используя весь растр Landsat, представляется не только крайне затратной, но и бессмысленной: значения пикселей в достаточном отдалении от дыры практически не оказывают влияния на результат при интерполяции.
Соответсвенно, для решения проблемы нужно попробовать выбрать регион, покрывающий дырку с не слишком большим нахлестом, и интерполировать разумное число точек, а не все 6.5 миллионов.
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: r.fillnulls
Судя по тому, что пишется в консоли, именно так оно и есть. Тогда модуль не сработает и на вдвое меньшем регионе. Попробую посчитать на разных регионах.
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: r.fillnulls
Действительно, при сокращении рабочей области до определенного размера модуль заработал, однако результат вышел странный: на месте нулей так и остались нули, по их краям -- полосы шириной в одну ячейку
-
- Гуру
- Сообщения: 4069
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1064
- Ваше звание: программист
- Откуда: Казань
Re: r.fillnulls
меня гложут смутные сомнения - есть у вас вообще null в растре? Профильные специалисты помогут составить запрос к растру, чтобы определить, так ли это.Игорь Черниенко писал(а):Пытаюсь заполнить null-значения в растре при помощи модуля r.fillnulls
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: r.fillnulls
Полосы на ландсатовских снимках имеют значение 0 -- я предварительно обработал их модулем r.nullgamm писал(а):есть у вас вообще null в растре
А я сам хочу :0)gamm писал(а):Профильные специалисты
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: r.fillnulls
Как именно вы обработали растры с помощью <r.null>? Вообще, <r.fillnulls> предназначен для заполнения небольших "дырок" в ЦМР, явно не для ландсатов.Игорь Черниенко писал(а): Полосы на ландсатовских снимках имеют значение 0 -- я предварительно обработал их модулем r.null
Редактор материалов, модератор форума
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: r.fillnulls
"полосы" имеют значение 0, я выполнил r.null map=ls_07.1 setnull=0
я правильно понимаю, что бороться с дефектами снимка бесполезно?
PS
С Новым Годом всех!
я правильно понимаю, что бороться с дефектами снимка бесполезно?
PS
С Новым Годом всех!
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: r.fillnulls
если вы о полосатости LANDSAT 7, то ничего лучше масок пока не придумали.Игорь Черниенко писал(а):я правильно понимаю, что бороться с дефектами снимка бесполезно?
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
- Игорь Черниенко
- Активный участник
- Сообщения: 137
- Зарегистрирован: 28 мар 2009, 01:05
- Репутация: 11
- Откуда: Хабаровск, Южно-Сахалинск
Re: r.fillnulls
Спасибо, буду иметь ввиду. Но r.fillnuls все-таки тоже сработал :0)
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя