获取光栅图像中所有像素的像素坐标

时间:2018-07-29 18:22:20

标签: python gis raster gdal

我有一个具有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坐标和像素值保存在数据框中。

1 个答案:

答案 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))

这应该为您提供一个整洁的数据帧,其中包含列RowColumnXY