[GRASS-dev] Re: [STATSGRASS] cant read raster created with r.neighbours

CC-ed to GRASS-dev, short file name buffer issue in raster/r.out.bin/main.c line 225:

On Thu, 26 Jul 2007, Carlos "Guâno" Grohmann wrote:

Here is the debug output:

debug(readBinGrid)
slopeavg<-readRAST6("dem3arcsec_srtm_reprojected_slope_avg2")

Creating BIL support files ...
Header File = .wld
World File =
/home/guano/grassdata/srtm_krig_utm/death_valley/.tmp/eclipse/dem3arcsec_srtm_reprojected_slope_avg2.wld
Exporting Raster as floating values (bytes=4)
Using the Current Region settings ...
north=4031000.000000
south=4002650.000000
east=494850.000000
west=466500.000000
r=315
c=315
100%
debugging in: readBinGrid(rtmpfl11, colname = vname[i], proj4string =
p4, integer = to_int)
debug: {
   if (missing(integer))
       stop("integer TRUE/FALSE required")
   if (!file.exists(fname))
       stop(paste("no such file:", fname))
   if (!file.exists(paste(fname, "hdr", sep = ".")))
       stop(paste("no such file:", paste(fname, "hdr", sep = ".")))
   if (!file.exists(paste(fname, "wld", sep = ".")))
       stop(paste("no such file:", paste(fname, "wld", sep = ".")))
   con <- file(paste(fname, "hdr", sep = "."), "r")
   l8 <- readLines(con, n = 8)
   close(con)
   l8 <- read.dcf(textConnection(gsub(" ", ":", l8)))
   lres <- as.list(l8)
   names(lres) <- colnames(l8)
   lres$nrows <- as.integer(lres$nrows)
   lres$ncols <- as.integer(lres$ncols)
   lres$nbands <- as.integer(lres$nbands)
   lres$nbits <- as.integer(lres$nbits)
   lres$skipbytes <- as.integer(lres$skipbytes)
   lres$nodata <- ifelse(integer, as.integer(lres$nodata),
as.numeric(lres$nodata))
   con <- file(paste(fname, "wld", sep = "."), "r")
   l6 <- readLines(con, n = 6)
   close(con)
   lres$ewres <- abs(as.numeric(l6[1]))
   lres$nsres <- abs(as.numeric(l6[4]))
   lres$n_cc <- as.numeric(l6[6])
   lres$w_cc <- as.numeric(l6[5])
   lres$s_cc <- lres$n_cc - lres$nsres * (lres$nrows - 1)
   what <- ifelse(integer, "integer", "double")
   n <- lres$nrows * lres$ncols
   size <- lres$nbits/8
   map <- readBin(fname, what = what, n = n, size = size, signed = TRUE)
   is.na(map) <- map == lres$nodata
   grid = GridTopology(c(lres$w_cc, lres$s_cc), c(lres$ewres,
       lres$nsres), c(lres$ncols, lres$nrows))
   df <- list(var1 = map)
   names(df) <- colname
   if (.sp_lt_0.9()) {
       df1 <- AttributeList(df)
   }
   else {
       df1 <- data.frame(df)
   }
   res <- SpatialGridDataFrame(grid, data = df1, proj4string = proj4string)
   res
}
Browse[1]> list.files(dirname(fname))
[1] "162.0"
[2] "162.1"
[3] "162.2"
[4] "260.0"
[5] "260.1"
[6] "260.2"
[7] "284.0"
[8] "284.1"
[9] "284.2"
[10] "336.0"
[11] "336.1"
[12] "393.0"
[13] "393.1"
[14] "436.0"
[15] "436.1"
[16] "436.2"
[17] "436.3"
[18] "441.0"
[19] "60.0"
[20] "60.1"
[21] "60.2"
[22] "60.3"
[23] "6183.0"
[24] "6183.1"
[25] "6183.1.ppm"
[26] "6183.2"
[27] "6183.2.pgm"
[28] "6183.2.ppm"
[29] "6183.3"
[30] "6183.3.pgm"
[31] "6183.3.ppm"
[32] "653.0"
[33] "653.1"
[34] "653.2"
[35] "653.3"
[36] "653.4"
[37] "653.5"
[38] "661.0"
[39] "661.1"
[40] "661.2"
[41] "6630.0"
[42] "6630.1"
[43] "753.0"
[44] "753.1"
[45] "753.2"
[46] "786.0"
[47] "786.1"
[48] "786.2"
[49] "796.0"
[50] "796.1"
[51] "796.2"
[52] "796.3"
[53] "796.4"
[54] "846.0"
[55] "846.1"
[56] "846.2"
[57] "846.3"
[58] "847.0"
[59] "847.1"
[60] "847.2"
[61] "847.3"
[62] "940.0"
[63] "dem3arcsec_srtm_reprojected_aspect"
[64] "dem3arcsec_srtm_reprojected_slope_avg2"
[65] "dem3arcsec_srtm_reprojected_slope_avg2.wld"
Browse[1]>
debug: if (missing(integer)) stop("integer TRUE/FALSE required")
Browse[1]>
debug: if (!file.exists(fname)) stop(paste("no such file:", fname))
Browse[1]>
debug: if (!file.exists(paste(fname, "hdr", sep = ".")))
stop(paste("no such file:",
  paste(fname, "hdr", sep = ".")))
Browse[1]>
Error in readBinGrid(rtmpfl11, colname = vname[i], proj4string = p4,
integer = to_int) :
      no such file:
/home/guano/grassdata/srtm_krig_utm/death_valley/.tmp/eclipse/dem3arcsec_srtm_reprojected_slope_avg2.hdr

and then with a short file name

elev<-readRAST6("srtm3sec_reprojected")

Creating BIL support files ...
Header File =
/home/guano/grassdata/srtm_krig_utm/death_valley/.tmp/eclipse/srtm3sec_reprojected.hdr
World File =
/home/guano/grassdata/srtm_krig_utm/death_valley/.tmp/eclipse/srtm3sec_reprojected.wld
Exporting Raster as floating values (bytes=4)
Using the Current Region settings ...
north=4031000.000000
south=4002650.000000
east=494850.000000
west=466500.000000
r=315
c=315
100%
debugging in: readBinGrid(rtmpfl11, colname = vname[i], proj4string =
p4, integer = to_int)
debug: {

<snip>

[60] "847.1"
[61] "847.2"
[62] "847.3"
[63] "940.0"
[64] "dem3arcsec_srtm_reprojected_aspect"
[65] "dem3arcsec_srtm_reprojected_slope_avg2"
[66] "dem3arcsec_srtm_reprojected_slope_avg2.wld"
[67] "srtm3sec_reprojected"
[68] "srtm3sec_reprojected.hdr"
[69] "srtm3sec_reprojected.wld"
Browse[1]>
debug: if (missing(integer)) stop("integer TRUE/FALSE required")

So it appears to me that for some reason the .hdr was not attached to
the file...

Yes, because a shorter file name buffer is declared on line 225 of main.c in r.out.bin - with a length of 100, so fname fits, but the header overwrites it, I think - could I suggest that the lengths of the out_bufs in line 255 be set to [GNAME_MAX] instead?

Roger

Carlos

+-----------------------------------------------------------+
             Carlos Henrique Grohmann - Guano
Visiting Researcher at Kingston University London - UK
Geologist M.Sc - Doctorate Student at IGc-USP - Brazil
Linux User #89721 - carlos dot grohmann at gmail dot com
+-----------------------------------------------------------+
_________________
"Good morning, doctors. I have taken the liberty of removing Windows
95 from my hard drive."
--The winning entry in a "What were HAL's first words" contest judged
by 2001: A SPACE ODYSSEY creator Arthur C. Clarke

Can't stop the signal.

_______________________________________________
statsgrass mailing list
statsgrass@grass.itc.it
http://grass.itc.it/mailman/listinfo/statsgrass

--
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand@nhh.no

Roger, Carlos,

I have fixed the r.out.bin buffer issue in CVS (also in 6.2.3-CVS).

Markus

On Thu, Jul 26, 2007 at 07:39:47PM +0200, Roger Bivand wrote:

CC-ed to GRASS-dev, short file name buffer issue in raster/r.out.bin/main.c
line 225:

On Thu, 26 Jul 2007, Carlos "Guâno" Grohmann wrote:

Here is the debug output:

debug(readBinGrid)
slopeavg<-readRAST6("dem3arcsec_srtm_reprojected_slope_avg2")

Creating BIL support files ...
Header File = .wld
World File =
/home/guano/grassdata/srtm_krig_utm/death_valley/.tmp/eclipse/dem3arcsec_srtm_reprojected_slope_avg2.wld
Exporting Raster as floating values (bytes=4)
Using the Current Region settings ...
north=4031000.000000
south=4002650.000000
east=494850.000000
west=466500.000000
r=315
c=315
100%
debugging in: readBinGrid(rtmpfl11, colname = vname[i], proj4string =
p4, integer = to_int)
debug: {
   if (missing(integer))
       stop("integer TRUE/FALSE required")
   if (!file.exists(fname))
       stop(paste("no such file:", fname))
   if (!file.exists(paste(fname, "hdr", sep = ".")))
       stop(paste("no such file:", paste(fname, "hdr", sep = ".")))
   if (!file.exists(paste(fname, "wld", sep = ".")))
       stop(paste("no such file:", paste(fname, "wld", sep = ".")))
   con <- file(paste(fname, "hdr", sep = "."), "r")
   l8 <- readLines(con, n = 8)
   close(con)
   l8 <- read.dcf(textConnection(gsub(" ", ":", l8)))
   lres <- as.list(l8)
   names(lres) <- colnames(l8)
   lres$nrows <- as.integer(lres$nrows)
   lres$ncols <- as.integer(lres$ncols)
   lres$nbands <- as.integer(lres$nbands)
   lres$nbits <- as.integer(lres$nbits)
   lres$skipbytes <- as.integer(lres$skipbytes)
   lres$nodata <- ifelse(integer, as.integer(lres$nodata),
as.numeric(lres$nodata))
   con <- file(paste(fname, "wld", sep = "."), "r")
   l6 <- readLines(con, n = 6)
   close(con)
   lres$ewres <- abs(as.numeric(l6[1]))
   lres$nsres <- abs(as.numeric(l6[4]))
   lres$n_cc <- as.numeric(l6[6])
   lres$w_cc <- as.numeric(l6[5])
   lres$s_cc <- lres$n_cc - lres$nsres * (lres$nrows - 1)
   what <- ifelse(integer, "integer", "double")
   n <- lres$nrows * lres$ncols
   size <- lres$nbits/8
   map <- readBin(fname, what = what, n = n, size = size, signed = TRUE)
   is.na(map) <- map == lres$nodata
   grid = GridTopology(c(lres$w_cc, lres$s_cc), c(lres$ewres,
       lres$nsres), c(lres$ncols, lres$nrows))
   df <- list(var1 = map)
   names(df) <- colname
   if (.sp_lt_0.9()) {
       df1 <- AttributeList(df)
   }
   else {
       df1 <- data.frame(df)
   }
   res <- SpatialGridDataFrame(grid, data = df1, proj4string =
proj4string)
   res
}
Browse[1]> list.files(dirname(fname))
[1] "162.0"
[2] "162.1"
[3] "162.2"
[4] "260.0"
[5] "260.1"
[6] "260.2"
[7] "284.0"
[8] "284.1"
[9] "284.2"
[10] "336.0"
[11] "336.1"
[12] "393.0"
[13] "393.1"
[14] "436.0"
[15] "436.1"
[16] "436.2"
[17] "436.3"
[18] "441.0"
[19] "60.0"
[20] "60.1"
[21] "60.2"
[22] "60.3"
[23] "6183.0"
[24] "6183.1"
[25] "6183.1.ppm"
[26] "6183.2"
[27] "6183.2.pgm"
[28] "6183.2.ppm"
[29] "6183.3"
[30] "6183.3.pgm"
[31] "6183.3.ppm"
[32] "653.0"
[33] "653.1"
[34] "653.2"
[35] "653.3"
[36] "653.4"
[37] "653.5"
[38] "661.0"
[39] "661.1"
[40] "661.2"
[41] "6630.0"
[42] "6630.1"
[43] "753.0"
[44] "753.1"
[45] "753.2"
[46] "786.0"
[47] "786.1"
[48] "786.2"
[49] "796.0"
[50] "796.1"
[51] "796.2"
[52] "796.3"
[53] "796.4"
[54] "846.0"
[55] "846.1"
[56] "846.2"
[57] "846.3"
[58] "847.0"
[59] "847.1"
[60] "847.2"
[61] "847.3"
[62] "940.0"
[63] "dem3arcsec_srtm_reprojected_aspect"
[64] "dem3arcsec_srtm_reprojected_slope_avg2"
[65] "dem3arcsec_srtm_reprojected_slope_avg2.wld"
Browse[1]>
debug: if (missing(integer)) stop("integer TRUE/FALSE required")
Browse[1]>
debug: if (!file.exists(fname)) stop(paste("no such file:", fname))
Browse[1]>
debug: if (!file.exists(paste(fname, "hdr", sep = ".")))
stop(paste("no such file:",
  paste(fname, "hdr", sep = ".")))
Browse[1]>
Error in readBinGrid(rtmpfl11, colname = vname[i], proj4string = p4,
integer = to_int) :
      no such file:
/home/guano/grassdata/srtm_krig_utm/death_valley/.tmp/eclipse/dem3arcsec_srtm_reprojected_slope_avg2.hdr

and then with a short file name

elev<-readRAST6("srtm3sec_reprojected")

Creating BIL support files ...
Header File =
/home/guano/grassdata/srtm_krig_utm/death_valley/.tmp/eclipse/srtm3sec_reprojected.hdr
World File =
/home/guano/grassdata/srtm_krig_utm/death_valley/.tmp/eclipse/srtm3sec_reprojected.wld
Exporting Raster as floating values (bytes=4)
Using the Current Region settings ...
north=4031000.000000
south=4002650.000000
east=494850.000000
west=466500.000000
r=315
c=315
100%
debugging in: readBinGrid(rtmpfl11, colname = vname[i], proj4string =
p4, integer = to_int)
debug: {

<snip>

[60] "847.1"
[61] "847.2"
[62] "847.3"
[63] "940.0"
[64] "dem3arcsec_srtm_reprojected_aspect"
[65] "dem3arcsec_srtm_reprojected_slope_avg2"
[66] "dem3arcsec_srtm_reprojected_slope_avg2.wld"
[67] "srtm3sec_reprojected"
[68] "srtm3sec_reprojected.hdr"
[69] "srtm3sec_reprojected.wld"
Browse[1]>
debug: if (missing(integer)) stop("integer TRUE/FALSE required")

So it appears to me that for some reason the .hdr was not attached to
the file...

Yes, because a shorter file name buffer is declared on line 225 of main.c
in r.out.bin - with a length of 100, so fname fits, but the header
overwrites it, I think - could I suggest that the lengths of the out_bufs
in line 255 be set to [GNAME_MAX] instead?

Roger

Carlos

+-----------------------------------------------------------+
             Carlos Henrique Grohmann - Guano
Visiting Researcher at Kingston University London - UK
Geologist M.Sc - Doctorate Student at IGc-USP - Brazil
Linux User #89721 - carlos dot grohmann at gmail dot com
+-----------------------------------------------------------+
_________________
"Good morning, doctors. I have taken the liberty of removing Windows
95 from my hard drive."
--The winning entry in a "What were HAL's first words" contest judged
by 2001: A SPACE ODYSSEY creator Arthur C. Clarke

Can't stop the signal.

_______________________________________________
statsgrass mailing list
statsgrass@grass.itc.it
http://grass.itc.it/mailman/listinfo/statsgrass

--
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand@nhh.no

_______________________________________________
grass-dev mailing list
grass-dev@grass.itc.it
http://grass.itc.it/mailman/listinfo/grass-dev

Roger Bivand wrote:

CC-ed to GRASS-dev, short file name buffer issue in
raster/r.out.bin/main.c line 225:

Yes, because a shorter file name buffer is declared on line 225 of main.c
in r.out.bin - with a length of 100, so fname fits, but the header
overwrites it, I think - could I suggest that the lengths of the out_bufs
in line 255 be set to [GNAME_MAX] instead?

GPATH_MAX is the standard constant for pathnames.

Fixed in CVS.

--
Glynn Clements <glynn@gclements.plus.com>

Markus Neteler wrote:

I have fixed the r.out.bin buffer issue in CVS (also in 6.2.3-CVS).

This should be changed to GPATH_MAX (the parameter is a pathname, not
a map name); but first, GPATH_MAX needs to be added to 6.2.

--
Glynn Clements <glynn@gclements.plus.com>

Glynn Clements wrote:

Markus Neteler wrote:

I have fixed the r.out.bin buffer issue in CVS (also in 6.2.3-CVS).

This should be changed to GPATH_MAX (the parameter is a pathname, not
a map name); but first, GPATH_MAX needs to be added to 6.2.

Both done in 6.2.3-CVS (will appear in 6.2.3).

Markus
--
View this message in context: http://www.nabble.com/Re%3A--STATSGRASS--cant-read-raster-created-with-r.neighbours-tf4153115.html#a11823290
Sent from the Grass - Dev mailing list archive at Nabble.com.