我使用gdal模块中的osgeo来处理地理栅格数据。
#Get size of input raster (cols, rows)
cols = ds.RasterXSize #3531
rows = ds.RasterYSize #3314
所以为了读取所有数据,我创建了一个数组:
data = band.ReadAsArray(0, 0, cols, rows).astype(float)
ReadAsArray的结果是2D numpy数组。直到这里它才有效。
因此,为了进一步对该栅格中的每个像素应用地理变换,我需要每个像素的列索引和行索引。我想我可能需要一个numpy函数来读取它,但我不知道它如何与2D数组一起工作。
我可以通过简单地调用它的索引来访问数组(例如band [0] [1]),但是我需要将整个列索引和整个行索引分别存储在例如: col_idx和row_idx。
我试过类似的东西,但没有工作:
for idx, val in enumerate(ints):
print idx, val
任何帮助表示赞赏!
答案 0 :(得分:0)
您可以使用numpy.meshgrid
i, j = numpy.meshgrid(range(ncols), range(nrows))
result = f(data, i, j)
In [28]: nrows = 2 ; ncols = 4
In [29]: icol, irow = np.meshgrid(range(ncols),range(nrows))
In [30]: def a(r,c): return 100*r+c
In [31]: a(irow, icol)
Out[31]:
array([[ 0, 1, 2, 3],
[100, 101, 102, 103]])
In [32]:
在这种情况下,不是生成具有行索引和列索引的两个大矩阵,而是可以在数组的行上使用for循环(它的较慢,但不能像double一样慢)环)
icol = range(ncols)
for irow, row in enumerate(data):
if irow>0:
result = np.vstack((result, f(row, irow, icol)))
else:
result = f(row, irow, icol)