Как повысить производительность, получая значения из большого файла GeoTiff с Gdal за Python? - PullRequest
0 голосов
/ 09 апреля 2020

У меня проблема с получением значений из указанных c RasterBands очень большого файла геотифов (36+ Гб).

У меня есть этот фрагмент кода, который работает, но мне требуется более 3 минут, чтобы дать мне результат:

from osgeo import gdal


driver = gdal.GetDriverByName('GTiff')
filename = 'geotiffs\test.tif'  # path to raster

dataset = gdal.Open(filename)
band = dataset.GetRasterBand(1)

projection = osr.SpatialReference(wkt=dataset.GetProjection())

cols = dataset.RasterXSize
rows = dataset.RasterYSize

transform = dataset.GetGeoTransform()

x_axes_origin = transform[0]
y_axes_origin = transform[3]
pixel_width = transform[1]
pixel_height = -transform[5]

data = band.ReadAsArray(0, 0, cols, rows)

current_epsg = int(projection.GetAttrValue('AUTHORITY', 1))
print(f'Current file ESPG: {current_epsg}')

coords = convert_coord(31.117132, 25.8679313, file_espg=current_epsg)  # samples coordinates... those are fake ones

points_list = [coords]  # list of X,Y coordinates

for point in points_list:
    col = int((point[0] - x_axes_origin) / pixel_width)
    row = int((y_axes_origin - point[1]) / pixel_height)

    print(row, col, data[row][col])

Я не нашел ни одного предложения о том, как "заполнить" параметры ReadAsArray , так как нет никакой дополнительной информации об официальном do c.

Спасибо всем, кто поможет мне улучшить время выполнения!

...