지형 정보가 포함 된 tif가 있습니다. gdal을 사용하면 래스터 파일을 배열 (numpy)로 변환 할 수 있습니다.지오 티프의 셀 좌표를 얻는 방법은 무엇입니까?
배열의 한 항목에 대한 좌표는 어떻게 얻을 수 있습니까?
지형 정보가 포함 된 tif가 있습니다. gdal을 사용하면 래스터 파일을 배열 (numpy)로 변환 할 수 있습니다.지오 티프의 셀 좌표를 얻는 방법은 무엇입니까?
배열의 한 항목에 대한 좌표는 어떻게 얻을 수 있습니까?
픽셀 좌표를 세계 좌표에 매핑하는 아핀 변환 행렬을 사용합니다. 예를 들어, affine 패키지를 사용하십시오. (간단한 계산을 사용하여 동일한 기능을 수행하는 다른 방법이있다.) 여기서, 아핀 변환 행렬 T0
를 얻는 두 가지 방법이
from affine import Affine
fname = '/path/to/raster.tif'
. 예컨대, GDAL/파이썬 사용 :
from osgeo import gdal
ds = gdal.Open(path, gdal.GA_ReadOnly)
T0 = Affine.from_gdal(*ds.GetGeoTransform())
ds = None # close
예 rasterio를 사용하면 :
import rasterio
with rasterio.open(fname, 'r') as r:
T0 = r.affine
GDAL (T0
)에 의해 사용 된 변환 어레이 협약 화소 모서리를 참조한다. 대신 픽셀 중심을 참조 할 수 있습니다, 그래서 50 % 번역 할 필요가 : 픽셀로 변환하는 지금
T1 = T0 * Affine.translation(0.5, 0.5)
을하고, 함께 할 수있는 행렬과 좌표를 곱 좌표 세계 좌표 간단한 함수 : 또한
print(rc2xy(0, 1))
: 지금
rc2xy = lambda r, c: (c, r) * T1
은 첫 번째 행에, 두 번째 열 (인덱스 [0, 1]
)를 래스터의 좌표를 얻을 월드 좌표에서 픽셀 좌표를 가져와야하는 경우, 역상 아핀 변환 행렬 ~T0
을 사용할 수 있습니다.
매우 지연된 의견을 드려 죄송합니다. 그러나 람다의 매개 변수가 왜 반전되었는지 설명 할 수 있습니까? r, c : (c, r) * T1. 그것은 r이 아니어야한다. c : (r, c) * T1? – jhc
@jhc 행은 Y 방향으로 정렬되고 X와 Y는 X로 정렬됩니다. 따라서 픽셀과 좌표 공간간에 X와 Y 방향을 정렬하려면 매개 변수가 정렬됩니다. 이 함수는 (col, row) 또는'cr2xy = lambda c, r : (c, r) * T1 '의 용어로도 쓸 수있다. 하지만 대부분의 배열 액세스 (예 : Numpy)는 (행, 열) 순서를 사용합니다. –
'row, col'에서'x, y'로 변환하는 표준 방법은 곱셈 연산자를 사용하고 있습니다. 번역 단계 나 추가 기능이 필요 없습니다 :'(0.5, 0.5) * affine' – perrygeo