我的地理参考图像的坐标值如(475224.0,4186282.0)。我的图像尺寸为(647,2188)。即有647列和2180行。我想把坐标值变成一个大小为(647,2180)的numpy数组,这样我就可以得到每个像素的坐标作为一个数组。我编码如下。
rr = rasterio.open(fname) #fname is the georefered image
col = rr.width
row = rr.height
coord = np.empty(shape=(col,row),dtype=rr.dtypes[0])
for i in range(0,col):
for j in range(0,row):
coord[i,j] = rr.transform*(i,j)
问题是rr.transform *(i,j)会给出像(475224.0,4186282.0)这样的值。如何将其保存到单元格中。对于上面的程序,我收到如下错误
Traceback(最近一次调用最后一次):文件 “/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/IPython/core/interactiveshell.py” 第2881行,在run_code中 exec(code_obj,self.user_global_ns,self.user_ns)文件“”,第3行,in coord [i,j] = rr.transform *(i,j)ValueError:用序列设置数组元素。
答案 0 :(得分:1)
假设您的rr.transform*()
输出是有效的Python tuple
,我认为您这样做会比以前复杂得多。默认情况下,numpy
将在创建和/或分配给np.array
:s时处理元组和列表相等。因此,一个更简单的解决方案是添加额外的维度并直接分配您的值:
rr = rasterio.open(fname) #fname is the georefered image
col = rr.width
row = rr.height
coord = np.empty(shape=(col,row,2)
for i in range(0,col):
for j in range(0,row):
coord[i,j] = rr.transform*(i,j)
正如您所看到的,唯一的区别是我添加了额外的尺寸以适应rr
的大小。在这里,我将第三维硬编码为2
。可能会从rr
对象中动态地找到它。在一般情况下,我们不限于tuple
两个值。