Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

r.in.bin(1grass) vs. f32 data: min = max = 0

3 views
Skip to first unread message

Ivan Shmakov

unread,
Jan 19, 2013, 3:24:01 PM1/19/13
to

> В GRASS загружается растровый слой из беззаголовочного файла,
> содержащего 32-разрядные числа с плавающей точкой, подобно:

> $ r.in.bin -f input=example.dat output=example \
> bytes=4 \
> north=100000 south=-100000 east=200000 west=-200000 \
> rows=200 cols=400

> однако, r.info(1grass) в отношении результирующего слоя дает min = 0,
> max = 0. В чем может быть причина?

Какая используется версия GRASS? Нельзя ли привести исходный
файл (или фрагмент оного), с которым возникает проблема?

Для начала, я бы проверил, действительно ли исходный файл
содержит искомые данные, причем соответствующего указанному
формата. (Включая разрядность и порядок байт в слове;
по-умолчанию, если верить документации, r.in.bin(1grass)
использует «родной» для исполняющей платформы порядок байт.)

E. g.:

$ od -t f4 < example.dat | head

Кроме того, параметр bytes= кажется подозрительным; AIUI, опции
-f, -d уже предполагают определенную разрядность (32 и 64 бита,
соответственно.) Возможно, наличие bytes= в данном случае
мешает корректной работе программы?

Не исключено, кроме того, что метаданные min, max не были
корректно сформированы при усвоении. Проверить, e. g.:

$ g.region -u save=region-1358626695
$ WIND_OVERRIDE=region-1358626695 r.stats -c input=example

Стоит также проверить, не возникло ли некоей «нештатной
ситуации», вроде недостаточного пространства (или квоты) на
целевой ФС (df(1), quota(1).) Характерным признаком такой
ситуации являются нулевые размеры соответствующих файлов; e. g.:

$ find ~/.grass-data/LOCATION/DATASET/ \
-name example \
-exec ls -l -- {} +

--
FSF associate member #7257

Ivan Shmakov

unread,
Jan 19, 2013, 3:29:44 PM1/19/13
to
>>>>> Ivan Shmakov <onei...@gmail.com> writes:

[…]

> Не исключено, кроме того, что метаданные min, max не были корректно
> сформированы при усвоении. Проверить, e. g.:

> $ g.region -u save=region-1358626695

Здесь, разумеется, забыто rast=example.

> $ WIND_OVERRIDE=region-1358626695 r.stats -c input=example

[…]

Ivan Shmakov

unread,
Jan 22, 2013, 2:31:35 PM1/22/13
to
Еще одна возможная проблема (которая, похоже, и была в ответе за
наблюдаемое поведение r.info(1grass) и r.stats(1grass)) —
фиксированное количество знаков после запятой в форматном выводе
(подобно: %.6f.) Как следствие, достаточно малые (в данном
случае — порядка 10⁻⁸ или меньше) значения ячеек могут
выдаваться как 0.000000.

Для диагностики можно также применить r.out.ascii(1grass) —
IIRC, эта команда использует E-запись [1] для малых значений
(C-формат %e; или, возможно, %g.)

[1] https://en.wikipedia.org/wiki/Scientific_notation#E_notation
0 new messages