Я хочу прочитать большое количество 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)