rasterio库中索引像元坐标

1.根据像元所在行列号查询坐标以及反查询

rasterio库提供了专门用于行列号及像元中心坐标转换的函数,其中dataset.xy可将像元的行列号转化为像元中心坐标,而dataset.index可将像元中心坐标转化为行列号

import rasterio as rs
path=r"C:\Users\Lenovo\Desktop\test_images\images_doys2010_127_37.tif"
dataset=rs.open(path)
#获取波段数
>>>print(Landsat_dataset.count)
26
#获取波段索引号
>>>print(Landsat_dataset.indexes)
 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26)
#根据row 和col查询具体的像元中心坐标
row=0;col=0
c1=dataset.xy(row,col)
#根据像元中心坐标反查询像元行列号
row,col=dateset.index(*c1)

2.像元所在范围的查询

确定一个像元的范围需要知道像元的左上角坐标以及右下角坐标,rasterio提供的dataset.transform可将获取某个行列号下像元的左上角坐标。

import rasterio as rs
path=r"C:\Users\Lenovo\Desktop\test_images\images_doys2010_127_37.tif"
#获取0行0列像元的左上角以及右下角坐标
>>> Landsat_dataset.transform*(0,0)
(107.17691856995917, 34.224195357442355)
#0行0列像元左上角坐标
>>> Landsat_dataset.xy(0,0)
(107.17705331725179, 34.224060610149735)
>>> Landsat_dataset.transform
Affine(0.00026949458523585647, 0.0, 107.17691856995917,
       0.0, -0.00026949458523585647, 34.224195357442355)
#0行0列像元右下角坐标
>>> Landsat_dataset.transform*(1,1)
(107.17718806454441, 34.22392586285712)

如上所示,dataset.transform *(col,row)可以获取像元的左上角顶点坐标(row为像元行号,col为像元列号),如果要获取像元的右下角坐标,则需要获取该像元东南方向斜对角像元的左上角坐标。
示意图如下:
在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐