我有坐标值如 (475224.0, 4186282.0) 的地理参考图像。我的图像的尺寸是 (647, 2180)。即有 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) 的值。如何将其保存到单元格中。对于上述程序,我收到如下错误
回溯(最近一次调用):文件“/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) File "", line 3, in coord[i,j] = rr.transform*(i,j) ValueError: 用序列设置数组元素。
假设你的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
两个值中的一个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句