跳转到主要内容

描述平面仿射变换的矩阵

项目描述

描述二维平面仿射变换的矩阵。

https://github.com/rasterio/affine/actions/workflows/ci.yml/badge.svg?branch=main https://codecov.io/gh/rasterio/affine/branch/main/graph/badge.svg

仿射包是从Casey Duncan的Planar包派生出来的。请参阅affine/__init__.py中的版权声明。

用法

以下是二维变换的3x3增广仿射变换矩阵的示例。

| x' |   | a  b  c | | x |
| y' | = | d  e  f | | y |
| 1  |   | 0  0  1 | | 1 |

可以通过将值 a, b, c, d, e, f 传递给 affine.Affine 构造函数或使用其 identity()translation()scale()shear()rotation() 类方法来创建矩阵。

>>> 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)

这些矩阵可以应用于 (x, y) 元组以获得变换后的坐标 (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)

它们也可以相乘以组合变换。

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

与GIS数据包一起使用

地理参考的栅格数据集使用仿射变换将图像坐标映射到世界坐标。 affine.Affine.from_gdal() 类方法有助于转换 GDAL GeoTransform,其中包含6个数字的序列,前两个是x和y偏移,后两个是x和y像素大小。

使用GDAL数据集变换矩阵,可以轻松计算对应于原点下方100行像素左上角的像素的世界坐标 (x, y)

>>> 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)

反转换是通过使用~运算符获得的。

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

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源代码分发

affine-2.4.0.tar.gz (17.1 kB 查看散列)

上传时间 源代码

构建分发

affine-2.4.0-py3-none-any.whl (15.7 kB 查看散列)

上传时间 Python 3

由以下支持