User Tools

Site Tools


The Geospatial Data Abstraction Library (GDAL/OGR) is an open-source, cross-platform set of libraries and low-level tools for working with spatial data in many formats. Although GDAL itself is geared towards raster data, it provides vector support via the OGR Simple Features Library. The term GDAL is often used to refer jointly to the full suite of GDAL and OGR functionality. GDAL/OGR plays a particular important role in the open-source geospatial software world as a file import/export/translation engine, as it can read (and often write) many spatial file formats. The associated command-line utilities can also be used to accomplish a variety of common tasks such as reprojecting, merging, and subsetting spatial data.

=Installation guides= As of 'Jun 2010', the latest release is 'GDAL/OGR 1.7.2'.


Binary installers for recent releases can be downloaded [ here]. These are available for various flavors of Linux, OS X, and Windows. Windows and Linux users may find it useful to install the [ FWTools kit], which includes the GDAL/OGR tools plus several other useful utility programs. Note that for the most recent version, it is often necessary to build from source.


Although the official Ubuntu repositories provide gdal packages, more up-to-date versions can be obtained from the [ UbuntuGIS] repository. The stable incarnation of this repository is updated every 6 months, and the unstable repository is updated even more frequently. To enable the stable repository, add the following lines to your /etc/apt/sources.list file (substituting your Ubuntu version for karmic if appropriate):

deb karmic main deb-src karmic main

Then authenticate the repository and update your package list before installing gdal and proj as described above: sudo apt-key adv –keyserver –recv-keys 314DF160 sudo apt-get update

Finally, install gdal-bin to get the main utilities, and (if desired) python-gdal to get some additional command line tools. sudo apt-get install gdal-bin python-gdal

=How can I…=

See what formats are supported by my version of GDAL/OGR

ogrinfo –formats gdalinfo –formats

Obtain vector projection and other information

Get projection info and list of attribute columns # Shapefile ogrinfo -al -so myshapefile.shp

# PostGIS table ogrinfo -al -so PG:dbname=mydatabase mytable

# …or simply list the spatial layers in a PostGIS database ogrinfo -so PG:dbname=mydatabase

Obtain raster projection and other information

Get projection info, bounding box coordinates, and other info gdalinfo myraster

Reproject a vector

When using ogr2ogr, remember that the output filename should come 'before' the input filename!

Option 1: Use the EPSG code (if known) to specify the projection ogr2ogr -t_srs EPSG:2784 output_vector input_vector

Option 2: Use an appopriate projection file (e.g. the *.prj file associated with a shapefile) to specify the new projection ogr2ogr -t_srs some_shapefile.prj output_vector input_vector

Option 3: Manually specify full Proj.4 definition string ogr2ogr -t_srs '+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 \

               +k=0.999990 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs \
               ''output_vector'' ''input_vector''
Reproject a raster

Because a square grid in one projection is not necessarily a square grid in another, reprojecting a raster layer often requires “warping”. Fortunately, this can usually be done quite easily using gdalwarp. As with other GDAL/OGR tools, the output projection can be specified using the EPSG code, an appropriate file, or the full Proj.4 definition string. Using EPSG code 2784 as an example, the general syntax is as below. In contrast to ogr2ogr, the output filename should come 'after' the input filename gdalwarp -t_srs EPSG:2784 input_raster output_raster

Align two rasters

Imagine you have two rasters, raster_A and raster_B, where raster_A falls entirely within the extent of raster_B, and is of finer resolution (i.e., smaller pixel size). For now, we'll assume that they are both in the same projection. Prior to doing subsequent analysis comparing the two rasters, it is often necessary to align these rasters such that the value associated with a particular row and column of one raster refers to the same geographic location as the value in that same row and column of the other raster. Fortunately, this can be done in a straightforward way using GDAL utilities. First, you need to determine the resolution and bounding coordinates of raster_A. This information can be obtained using the gdalinfo command:

gdalinfo raster_A

This will produce output that includes the following (edited for clarity): <…> Pixel Size = (0.01,-0.01) <…> Corner Coordinates: Upper Left (-150, 80) Lower Left (-150, 40) Upper Right (-120, 80) Lower Right (-120, 40)

Then, use gdalwarp to extract the desired portion of raster_B and resample it to produce a new map (raster_B_resamp) with the same extent and resolution as raster_A: gdalwarp -te -150 40 -120 80 -tr 0.01 0.01 raster_B raster_B_resamp

The four numbers appearing after -te are, in order, xmin, ymin, xmax, and ymax, which together specify the desired extent of the output raster. Notice how these values come directly from the 'Corner Coordinates' of raster_A, as displayed by gdalinfo. The two numbers after -tr specify the desired resolution, given as pixel size in the x and y dimension. Notice how these values come directly from the Pixel Size information displayed by gdalinfo.

The default resampling method is nearest-neighbor (which can be specified explicitly by adding -r near). This method is appropriate when the raster values are discrete or categorical, in which case it would be undesirable for the values to be modified by a smoothing algorithm. If the raster values are continuous (e.g., a DEM), it may be more useful to use bilinear or cubic resampling.

If raster_B also needs to be reprojected to match raster_A, no problem! The -t_srs specification (as described in the previous section) can simply be added to the gdalwarp statement, allowing all of the operations to be done in one fell swoop. Note that the coordinates and pixel size should always be given in the 'target' units. As long as you want to reproject raster_B to match raster_A (and not the reverse), the steps above will work. Otherwise, first use gdalwarp to reproject raster_A to match raster_B, then follow these steps to subset and resample raster_B to align with the reprojected version of raster_A.

Assign a "nodata" value to a raster

You may occasionally have a raster dataset in which a particular value indicates lack of information. Prior to analysis and display, it is often useful to designate this nodata value explicitly. This can be done using gdal_translate:

gdal_translate -a_nodata 255 input_raster output_raster (Note that nodata values are not supported by all raster formats.)

"Burn" polygons into an raster

The gdal_rasterize function will (re)assign a specified value to all cells of the input raster that overlap any polygons of the input vector. The example below assumes you have a polygon shapefile mypolygons.shp, and a single band raster layer myraster in the same projection. (Other supported vector and raster formats can be substituted.)

gdal_rasterize -b 1 -burn 255 -l mypolygons mypolygons.shp myraster

Note that if the raster layer has a nodata value, specifying this value as the -burn value can be a convenient way to “clip out” portions of the raster.

=GDAL/OGR resources on the web=

Resource portals

* [ Main GDAL website] * [ Main OGR website] * [ Documentation for all GDAL utility programs] * [ Additional documentation for selected utilities]

Online tutorials and demos

* [ Raster processing tutorial] (FOSS4G workshop, 2007) * [ Basic conversion and reprojection examples] (CA Soil Resources Lab)

gdal.txt · Last modified: 2012/02/07 11:32 (external edit)