[R-sig-Geo] Cannot correctly assign Data type of upper left cell in ascii grid with writeRaster
Loïc Dutrieux
loic.dutrieux at conabio.gob.mx
Wed May 17 16:34:32 CEST 2017
writeRaster() defaults to Float 8, regardless of the data type of your
input matrix. You can set it explicitly to write to integer by using the
datatype= argument.
writeRaster(r, "Test_writeRaster.asc",NAflag =-999,overwrite=T,
datatype='INT2S')
Cheers,
Loïc
On 17/05/2017 03:21, Michael Koehler wrote:
> Dear list,
>
> I encountered a problem when trying to write an Ascii-grid of integers
> with raster::writeRaster.
> When using that function, the upper left cell (only that cell!) in the
> resulting ascii grid will always
> be a floating point number, even if I convert the whole raster to
> integers before.
>
> However, when I convert the raster to a SpatialPixelDataFrame and write
> the Ascii file with
> maptools::writeAsciiGrid, the resulting upper left cell will be
> correctly saved as an integer.
> So Is this a bug or am I doing something wrong here?
>
> Here is a reproducible example:
>
> library(raster)
> library(maptools)
> library(SDMTools)
> library(adehabitat)
>
> # create raster
>
> m <- matrix(c(-999,-999,-999,-999,-999,-999.999,-999.9,-999,1,6,
> -999,-999,-999,7,1,6,7,2,6,3,
> 4,7,3,4,5,3,7,9,3,8,
> 9,3,6,8,3,4,7,3,7,8,
> 3,3,-999.999,7,5,3,2,8,9,8,
> 7,6,2,6,5,2,2,7,7,7,
> 4,7,2,5,7,7,7,3,3,5,
> 7,6,7,5,-999,6,5,2,3,2,
> 4,9,2,5,5,8,3,3,1,2,
> 5,2,6,5,1,5,3,7,7,2),nrow=10, ncol=10, byrow = T)
>
> r <- raster(m)
> values(r)<-as.integer(values(r))
>
> #------------------------------------------------------
> # write the raster and read the resulting file in again
> writeRaster(r, "Test_writeRaster.asc",NAflag =-999,overwrite=T)
> a<-read.table("Test_writeRaster.asc",stringsAsFactors = F)
>
> a[7,] # upper left cell in the ascii file is a floating point number!
>
> #------------------------------------------------------
> # convert, write with writeAsciiGrid and read the resulting file in again
> asc <- asc.from.raster(r) # convert to asc
> rasc <- asc2spixdf(asc) # convert to SpatialPixelDataFrame
>
> writeAsciiGrid(rasc,"Test_writeAsciiGrid.asc", na.value =-999)
> a<-read.table("Test_writeAsciiGrid.asc",stringsAsFactors = F)
>
> a[7,] # upper left cell in the ascii file is a
>
> # R version 3.2.5 (2016-04-14)
> # Platform: i386-w64-mingw32/i386 (32-bit)
> # Running under: Windows 7 x64 (build 7601) Service Pack 1
> #
> # locale:
> # [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United
> States.1252
> # [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
> # [5] LC_TIME=English_United States.1252
> #
> # attached base packages:
> # [1] stats graphics grDevices utils datasets methods base
> #
> # loaded via a namespace (and not attached):
> # [1] tools_3.2.5
>
More information about the R-sig-Geo
mailing list