我提出了两种解决方案:第一种使用QGIS,第二种使用Python(GDAL)。
使用QGIS的解决方案
在QGIS中,您可以创建VRT镶嵌图。
请按照以下步骤操作(请参见下图):
- 在图层面板中加载栅格;
- 右键单击它,然后选择
Save As...
;
- 检查
Create VRT
选项;
- 选择要保存输出的文件夹;
- 设置范围(如果要在整个栅格上工作,请勿进行任何修改);
- 选择是否使用当前分辨率(我建议保留为默认值);
- 设置最大列数和行数(在您的情况下,应为20000列和2000行);
- 按下
OK
按钮。
例如,在上面的对话框中使用此示例栅格中的参数(我设置的参数是随机选择的):
将在第4步指定的路径中生成100个图块:
将它们加载到QGIS中,如下所示:
就像@ bugmenot123在评论中正确说的那样,结果看起来很奇怪,只是因为每个图像的样式都适合每个图像的值分布(但是数据非常好)。
使用Python(GDAL)的解决方案
获得相同结果的另一种方法是使用GDAL(gdal_translate)。
参考上述相同的示例,您可以使用以下脚本:
import os, gdal
in_path = 'C:/Users/Marco/Desktop/'
input_filename = 'dtm_5.tif'
out_path = 'C:/Users/Marco/Desktop/output_folder/'
output_filename = 'tile_'
tile_size_x = 50
tile_size_y = 70
ds = gdal.Open(in_path + input_filename)
band = ds.GetRasterBand(1)
xsize = band.XSize
ysize = band.YSize
for i in range(0, xsize, tile_size_x):
for j in range(0, ysize, tile_size_y):
com_string = "gdal_translate -of GTIFF -srcwin " + str(i)+ ", " + str(j) + ", " + str(tile_size_x) + ", " + str(tile_size_y) + " " + str(in_path) + str(input_filename) + " " + str(out_path) + str(output_filename) + str(i) + "_" + str(j) + ".tif"
os.system(com_string)
您显然需要根据具体情况调整值。