【问题标题】:get pixel coordinates of all pixels in a raster image获取光栅图像中所有像素的像素坐标
【发布时间】:2018-07-29 18:22:19
【问题描述】:

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

【问题讨论】:

    标签: python gis raster gdal


    【解决方案1】:

    如果您的光栅文件有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 列。

    【讨论】:

      猜你喜欢
      • 2010-11-28
      • 2014-02-26
      • 1970-01-01
      • 2013-04-12
      • 2020-03-27
      • 2016-08-04
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      相关资源
      最近更新 更多