在rasterio中是否有一个用于计算rasterio.transform.Affine对象的反仿射变换的方法?
我目前正在做以下工作:
from rasterio.transform import Affine
import numpy as np
transform = Affine(29.976, 0, 5.12e5, 0, -29.976, 6.94e6)
matrix_form_transform = np.vstack(
[
np.array(transform.column_vectors).T,
np.array([0,0,1])
]
)
matrix_form_inverse_transform = np.linalg.inv(matrix_form_transform)
inverse_transform = Affine(*matrix_form_inverse_transform[:2, :].ravel())
print(inverse_transform * transform)
# Affine(1.0, 0.0, 0.0,
# -0.0, 1.0, 0.0)这是相当笨重,我觉得应该有一个内置的方式来达到这一点,但我找不到它。
发布于 2022-07-06 09:24:57
Affine类在affine包中定义,该包也由rasterio组织管理。Affine类实现__invert__ dunder方法。这意味着它实现了使用~运算符的能力。发生这种情况时,__invert__的实现会找到逆Affine对象。
您可以执行以下操作之一:
from rasterio.transform import Affine
transform = Affine(29.976, 0, 5.12e5, 0, -29.976, 6.94e6)
print(~transform * transform)
# | 1.00, 0.00, 0.00|
# | 0.00, 1.00, 0.00|
# | 0.00, 0.00, 1.00|或者如果你想更明确
from rasterio.transform import Affine
transform = Affine(29.976, 0, 5.12e5, 0, -29.976, 6.94e6)
print(transform.__invert__() * transform)
# | 1.00, 0.00, 0.00|
# | 0.00, 1.00, 0.00|
# | 0.00, 0.00, 1.00|https://stackoverflow.com/questions/72870037
复制相似问题