Комбинация растровых плиток с растерио приводит к ошибке памяти - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу прочитать большое количество JPEG, объединить их с растерио и в конце объединить их и вырезать их в соответствии с вектором.

Я загрузил Ортофото Австрии с помощью этого инструмента: https://www.basemap.at/downloads/basemap-downloader.zip

Затем я пытаюсь объединить миллионы плиток в кусочки по 50 (первоначально 500) каждый, чтобы объединить их позже вQGIS.Но в какой-то момент происходит MemoryError.

import rasterio
from rasterio.merge import merge
from rasterio.plot import show
import glob
import os

dirName = r"/home/christian/Documents/Windows/Orthofoto_Austria/17"

listOfFiles = list()
for (dirpath, dirnames, filenames) in os.walk(dirName):
    listOfFiles += [os.path.join(dirpath, file) for file in filenames]

out_fp = r""

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

fileList = [name for name in listOfFiles if name.endswith(".jpeg")]
sel = list(chunks(range(0, len(fileList)), 50))

# Combine Objects
out_datpfad = []
in_bildpfad = []
zwischen = []

for i in range(0, len(sel)):

    for j in sel[i]:
        zwischen.append(fileList[j])

    src_files_to_mosaic = []

    for fp in zwischen:
        src = rasterio.open(fp)
        src_files_to_mosaic.append(src)

    zwischen = []

    mosaic, out_trans = merge(src_files_to_mosaic)
    # show(mosaic, cmap='terrain')
    src_files_to_mosaic = []

    out_meta = src.meta.copy()

    out_meta.update({"driver": "GTiff",
                 "height": mosaic.shape[1],
                 "width": mosaic.shape[2],
                 "transform": out_trans,
                 "crs": "+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs" # EPSG: 31287
}
)
    out_name = "/home/christian/Documents/Windows/Orthofoto_Austria/out_1/Slice_"+str(i)+".tif"

    with rasterio.open(out_name, "w", **out_meta) as dest:
        dest.write(mosaic)
...