ADF File Documentation


Summary

An .adf file, under this identity, is part of an Esri ARC/INFO coverage or binary grid: the internal working format of ArcInfo, in which a dataset is a folder of .adf files, not a single document. A grid’s cell values live in w001001.adf, its header in hdr.adf, its tile index in w001001x.adf, and its bounds, statistics and projection in further .adf files. You open the whole folder in QGIS, ArcGIS or GDAL. Note that .adf is also the unrelated Amiga Disk File (a floppy image). Its generic MIME type is application/octet-stream.

Technical details

FeatureValue
Full name (SITE identity)Esri ARC/INFO coverage / ArcInfo Binary Grid file
File extension.adf
MIME typeapplication/octet-stream
Format typeBinary GIS data; a coverage/grid is a folder of .adf files
DeveloperEsri (Environmental Systems Research Institute)
Byte orderBig-endian (MSB) integers and doubles
Grid data filew001001.adf — tiled cell values, run-length compressed
Grid index filew001001x.adf — per-tile offset and size
Header filehdr.adf — 308 bytes; magic GRID1.2, cell type, tile geometry
Bounds filedblbnd.adf — 32 bytes; four MSB doubles (LLX, LLY, URX, URY)
Statistics filesta.adf — 32 bytes; min, max, mean, std-dev
Projection fileprj.adf — optional map-projection text
Attribute filevat.adf — value attribute table (for integer grids)
Block header magicw001001.adf / w001001x.adf begin with a 100-byte header
Read byQGIS, ArcGIS, GDAL (AIG driver), GRASS GIS
Open standardNo (Esri format; documented by GDAL through reverse engineering)
Also uses .adfAmiga Disk File (floppy image, mounted in WinUAE/FS-UAE)
SpecificationGDAL — Arc/Info Binary Grid
File signature (magic bytes)
47 52 49 44 31 2E 32

ASCII GRID1.2 at offset 0 of hdr.adf, the header file of an ArcInfo Binary Grid (the field is 8 bytes, e.g. GRID1.2 or GRID1.20). The raster and index files w001001.adf and w001001x.adf instead begin with a 100-byte block header whose first bytes are a fixed magic (commonly 00 00 27 0A) rather than an ASCII tag. Because a grid is a folder of several .adf files, you identify the dataset by the presence of hdr.adf + w001001.adf together, not by any single file’s first bytes. All multi-byte fields are big-endian (MSB).

What is an ADF file?

Under the identity this page uses, an .adf file is a piece of an Esri ARC/INFO coverage or binary grid — the native internal format of Esri’s ARC/INFO (later ArcInfo) GIS. The defining fact is that a single .adf is not a standalone dataset. An ArcInfo grid or coverage is a directory (a workspace subfolder) containing several .adf files that only make sense together: one holds the raster cell values, another the header, another the tile index, others the bounds, statistics and projection. You point a GIS application at the folder, and it assembles them into one raster or feature dataset.

This article describes that GIS format, following the layout documented by the GDAL Arc/Info Binary Grid driver. One caveat up front, because .adf is badly overloaded: the same extension is used for the Amiga Disk File, a raw 1:1 image of a Commodore Amiga floppy that you mount in an emulator such as WinUAE or FS-UAE. If your .adf is a single file of about 901,120 bytes and has nothing to do with maps, it is an Amiga floppy image, not GIS data. The sections below cover the multi-file structure, each companion file, and then the real substance: the tiled, run-length-compressed raster in w001001.adf and its index.

A grid is a folder, not a file

An ArcInfo binary grid is organised as a coverage-level directory inside an ARC/INFO workspace. The files you find in it are:

a_grid/                (the grid directory = the dataset)
 ├─ hdr.adf            header: cell type, tile geometry, pixel size
 ├─ w001001.adf        the raster data itself (tiled, compressed)
 ├─ w001001x.adf       tile index: offset + size of each tile
 ├─ dblbnd.adf         georeferenced bounds of the grid
 ├─ sta.adf            statistics: min, max, mean, std-dev
 ├─ vat.adf            value attribute table (integer grids)
 └─ prj.adf            projection definition (optional)

Every one of these is a binary file, and every multi-byte value in them is stored big-endian (most-significant byte first), a legacy of ARC/INFO’s origins on big-endian workstations. Because the dataset is the folder, you cannot meaningfully double-click a lone w001001.adf; the reader needs hdr.adf to know the grid’s geometry and w001001x.adf to locate tiles within the data file.

hdr.adf: the 308-byte header

The header file hdr.adf is a fixed 308-byte record that describes the grid’s geometry and how its data is stored. Its documented fields include:

OffsetSizeFieldMeaning
08HMagicASCII GRID1.2
164HCellType1 = integer, 2 = floating-point
204CompFlagcompression flag
2568HPixelSizeXcell width (double)
2648HPixelSizeYcell height (double)
2884HTilesPerRowtiles across
2924HTilesPerColumntiles down
2964HTileXSizecells per tile, horizontally
3044HTileYSizecells per tile, vertically

The magic string GRID1.2 at offset 0 is the closest thing the format has to a signature. HCellType tells the reader whether cells are integers (with an attribute table in vat.adf) or floating-point values. The tile fields matter because the raster is not stored as one continuous scanline image; it is cut into rectangular tiles, and these numbers say how many tiles there are and how big each is.

dblbnd.adf and sta.adf: georeferencing and statistics

Two small 32-byte files pin the grid to the world and summarise its values. dblbnd.adf holds four big-endian doubles — lower-left X, lower-left Y, upper-right X, upper-right Y — the georeferenced bounding box of the grid. Combined with the pixel size from hdr.adf, the bounds give the raster’s true row and column count (the raster dimensions come from the bounds and pixel size, because tiles are allocated a little larger than the data they hold). sta.adf holds four more doubles: the minimum, maximum, mean and standard deviation of the cell values, which a GIS uses to stretch a display or report grid statistics without rescanning every cell. The optional prj.adf is a small text file naming the map projection, and vat.adf is the value attribute table that pairs each distinct integer value (a “zone”) with attribute data.

w001001x.adf: the tile index

The index file w001001x.adf is what lets a reader find any tile without scanning the whole data file. It begins with a 100-byte header (its first bytes are a fixed magic, commonly 00 00 27 0A, and a file-size field near offset 24, measured in 16-bit shorts). After the header comes one 8-byte entry per tile, at offsets 100 + t×8: a 4-byte tile offset followed by a 4-byte tile size, both expressed in shorts (multiply by 2 for bytes). To read tile t, the reader jumps to entry t in the index, reads the offset and size, and then seeks to exactly that place in w001001.adf. Because tiles are variable length once compressed, this index is essential; without it, tile boundaries in the data file could not be found.

w001001.adf: tiled cells and run-length compression

The raster values live in w001001.adf. It too opens with a 100-byte header, after which the tiles follow, each pointed to by the index. Every tile starts with a short block header before its pixel data:

Tile block
  RTileSize  int16   size of this tile, in shorts
  RTileType  byte    how the pixels are encoded (see table)
  RMinSize   byte    number of bytes in the following minimum value
  RMin       ...     the tile's base/minimum value (RMinSize bytes)
  data       ...     pixel data, encoded per RTileType

The RTileType byte selects the encoding, and this is where the format’s compression lives. A tile that is entirely one value (very common in classified or masked rasters) is stored as a single constant block with type 0x00 and no pixel data at all — every cell equals RMin. Other types store raw pixels at a given bit depth, and several use run-length encoding, which is efficient for the large uniform regions typical of elevation, land-cover and mask grids:

RTileTypeEncoding
0x00Constant block — every cell equals RMin
0x01 / 0x04 / 0x08Raw 1-bit / 4-bit / 8-bit pixels
0x10 / 0x20Raw 16-bit / 32-bit pixels
0xF0 / 0xFCRun-length encoded 16-bit / 8-bit
0xE0Run-length encoded 32-bit
0xDF / 0xD7 / 0xCFRuns mixing RMin/literal/no-data values
0xFFCCITT RLE (1-bit)

Storing a per-tile RMin and coding pixels as offsets from it, then run-length compressing runs of equal cells, is what keeps ArcInfo grids compact for the smoothly varying or blocky data GIS rasters usually contain.

Coverages, grids and reading them today

The .adf extension appears in two related Esri contexts. A grid is the raster case described above. A coverage is the older ARC/INFO vector model (arcs, nodes, polygons, labels), whose geometry and topology are likewise stored as a set of .adf files in a coverage directory (for example arc.adf, lab.adf) with an INFO subfolder holding attribute tables. Both are legacy Esri formats: ArcInfo Workstation and ArcMap are retired, and reading these datasets today is done in tools that implemented the format independently — the free GDAL library (its AIG driver), QGIS, and GRASS GIS all open an ArcInfo grid folder directly, and modern ArcGIS Pro can still read them. The practical workflow is to open or point the tool at the whole grid/coverage directory and, if you want a portable copy, export to GeoTIFF for a raster or a shapefile/GeoPackage for a coverage.

FAQ

Why can’t I open a single w001001.adf on its own?

Because an ArcInfo grid is a whole folder, not one file. w001001.adf holds only the compressed cell data; the reader also needs hdr.adf for the grid geometry and w001001x.adf for the tile index to locate anything inside it. Point QGIS, GDAL or ArcGIS at the containing directory, not at the lone file.

My .adf is a single file about 901 KB and has no GIS files — what is it?

That is almost certainly an Amiga Disk File, a raw image of a Commodore Amiga floppy (the standard double-density image is exactly 901,120 bytes). It is unrelated to Esri GIS data. Mount it in an Amiga emulator such as WinUAE or FS-UAE, or extract its files with ADFlib’s unadf.

How do I convert an ArcInfo grid to something more portable?

Open the grid folder in GDAL, QGIS or ArcGIS and export it. For a raster grid, GeoTIFF is the usual portable target (gdal_translate a_grid out.tif, giving GDAL the grid directory). A vector coverage exports to a shapefile or GeoPackage. There is no in-place file swap because the source is a multi-file Esri dataset.

References