caTools (version 1.17.1)

read.ENVI & write.ENVI: Read and Write Binary Data in ENVI Format

Description

Read and write binary data in ENVI format, which is supported by most GIS software.

Usage

read.ENVI(filename, headerfile=paste(filename, ".hdr", sep="")) write.ENVI (X, filename, interleave = c("bsq", "bil", "bip"))

Arguments

X
data to be saved in ENVI file. Can be a matrix or 3D array.
filename
character string with name of the file (connection)
headerfile
optional character string with name of the header file
interleave
optional character string specifying interleave to be used

Value

read.ENVI returns either a matrix or 3D array. Function write.ENVI does not return anything.

Details

ENVI binary files use a generalized raster data format that consists of two parts:
  • binary file - flat binary file equivalent to memory dump, as produced by writeBin in R or fwrite in C/C++.
  • header file - small text (ASCII) file containing the metadata associated with the binary file. This file can contain the following fields, followed by equal sign and a variable:
    • samples - number of columns
    • lines - number of rows
    • bands - number of bands (channels, planes)
    • data type - following types are supported:
      • 1 - 1-byte unsigned integer
      • 2 - 2-byte signed integer
      • 3 - 4-byte signed integer
      • 4 - 4-byte float
      • 5 - 8-byte double
      • 9 - 2x8-byte complex number made up from 2 doubles
      • 12 - 2-byte unsigned integer

    • header offset - number of bytes to skip before raster data starts in binary file.
    • interleave - Permutations of dimensions in binary data:
      • BSQ - Band Sequential (X[col,row,band])
      • BIL - Band Interleave by Line (X[col,band,row])
      • BIP - Band Interleave by Pixel (X[band,col,row])

    • byte order - the endian-ness of the saved data:
      • 0 - means little-endian byte order, format used on PC/Intel machines
      • 1 - means big-endian (aka IEEE, aka "network") byte order, format used on UNIX and Macintosh machines

Fields samples, lines, bands, data type are required, while header offset, interleave, byte order are optional. All of them are in form of integers except interleave which is a string. This generic format allows reading of many raw file formats, including those with embedded header information. Also it is a handy binary format to exchange data between PC and UNIX/Mac machines, as well as different languages like: C, Fortran, Matlab, etc. Especially since header files are simple enough to edit by hand. File type supported by most of GIS (geographic information system) software including: ENVI software, Freelook (free file viewer by ENVI), ArcGIS, etc.

See Also

Displaying of images can be done through functions: image, image.plot and add.image from fields or plot.im from spatstat. ENVI files are practically C-style memory-dumps as performed by readBin and writeBin functions plus separate meta-data header file. GIF file formats can also store 3D data (see read.gif and write.gif functions). Packages related to GIS data: shapefiles, maptools, sp, spdep, adehabitat, GRASS, PBSmapping.

Examples

Run this code
  X = array(1:60, 3:5)
  write.ENVI(X, "temp.nvi")
  Y = read.ENVI("temp.nvi")
  stopifnot(X == Y)
  readLines("temp.nvi.hdr")
  
  d = c(20,30,40)
  X = array(runif(prod(d)), d)
  write.ENVI(X, "temp.nvi", interleave="bil")
  Y = read.ENVI("temp.nvi")
  stopifnot(X == Y)
  readLines("temp.nvi.hdr")
  
  file.remove("temp.nvi")
  file.remove("temp.nvi.hdr")

Run the code above in your browser using DataLab