我有一个具有RGB波段的9000x10000形状的光栅图像。我使用下面的代码来获取图像中所有像素的XY坐标。但这很慢。有更快的方法吗?
filename='file.dat'
inDs = gdal.Open(filename)
outDs = gdal.Translate('{}.xyz'.format(filename), inDs, format='XYZ', creationOptions=["ADD_HEADER_LINE=YES"])
我想将XY坐标和像素值保存在数据框中。
答案 0 :(得分:0)
如果您的栅格文件具有GeoTransform
属性,则可以尝试以下操作:
import gdal
import pandas as pd
def ix2xy(r,c,gt):
'''Gets x,y from row and column'''
x = gt[0] + r * gt[1]
y = gt[3] + c * gt[5]
return(x,y)
这个小函数从GeoTransform
属性获取X / Y坐标,该属性是带有(xorigin, xres, 0, yorigin, 0, yres)
的元组。
ds = gdal.Open('file.dat')
gt = ds.GetGeoTransform()
df = pd.DataFrame.from_records(itertools.product(range(ds.RasterYSize),range(ds.RasterXSize)),columns=['Row','Column'])
ds = None
df['X'], df['Y'] = zip(*df.apply(lambda x: ix2xy(x['Column'],x['Row'],gt),axis=1))
这应该为您提供一个整洁的数据帧,其中包含列Row
,Column
,X
和Y
。