Matrices describing affine transformation of the plane.

## Project description

Matrices describing affine transformation of the plane.  The Affine package is derived from Casey Duncan’s Planar package. Please see the copyright statement in affine/__init__.py.

## Usage

The 3x3 augmented affine transformation matrix for transformations in two dimensions is illustrated below.

Matrices can be created by passing the values a, b, c, d, e, f to the affine.Affine constructor or by using its identity(), translation(), scale(), shear(), and rotation() class methods.

```>>> from affine import Affine
>>> Affine.identity()
Affine(1.0, 0.0, 0.0,
0.0, 1.0, 0.0)
>>> Affine.translation(1.0, 5.0)
Affine(1.0, 0.0, 1.0,
0.0, 1.0, 5.0)
>>> Affine.scale(2.0)
Affine(2.0, 0.0, 0.0,
0.0, 2.0, 0.0)
>>> Affine.shear(45.0, 45.0)  # decimal degrees
Affine(1.0, 0.9999999999999999, 0.0,
0.9999999999999999, 1.0, 0.0)
>>> Affine.rotation(45.0)     # decimal degrees
Affine(0.7071067811865476, -0.7071067811865475, 0.0,
0.7071067811865475, 0.7071067811865476, 0.0)
```

These matrices can be applied to (x, y) tuples to obtain transformed coordinates (x', y').

```>>> Affine.translation(1.0, 5.0) * (1.0, 1.0)
(2.0, 6.0)
>>> Affine.rotation(45.0) * (1.0, 1.0)
(1.1102230246251565e-16, 1.414213562373095)
```

They may also be multiplied together to combine transformations.

```>>> Affine.translation(1.0, 5.0) * Affine.rotation(45.0)
Affine(0.7071067811865476, -0.7071067811865475, 1.0,
0.7071067811865475, 0.7071067811865476, 5.0)
```

## Usage with GIS data packages

Georeferenced raster datasets use affine transformations to map from image coordinates to world coordinates. The affine.Affine.from_gdal() class method helps convert GDAL GeoTransform, sequences of 6 numbers in which the first and fourth are the x and y offsets and the second and sixth are the x and y pixel sizes.

Using a GDAL dataset transformation matrix, the world coordinates (x, y) corresponding to the top left corner of the pixel 100 rows down from the origin can be easily computed.

```>>> geotransform = (-237481.5, 425.0, 0.0, 237536.4, 0.0, -425.0)
>>> fwd = Affine.from_gdal(*geotransform)
>>> col, row = 0, 100
>>> fwd * (col, row)
(-237481.5, 195036.4)
```

The reverse transformation is obtained using the ~ operator.

```>>> rev = ~fwd
>>> rev * fwd * (col, row)
(0.0, 99.99999999999999)
```

## Project details

This version 2.2.2 2.2.1 2.2.0 2.1.0 2.0.0.post1 2.0.0 2.0b2 pre-release 2.0b1 pre-release 1.3.0 1.2.0 1.1.0 1.0.1 1.0