文章目录
1-介绍
1.1 主要内容
(1)在本教程中,使用GDAL将栅格数据拆分为几个相等的部分
(2)拆分手段: gdal.Warp或者 gdal.Translate
(3)关键流程:
1)找出较小瓦片的xmin、ymin、xmax和ymax坐标,(这里是以xmin等指的是地理坐标范围)
2) gdal.Warp或者 gdal.Translate进行裁剪
1.2 裁剪要点
(1)裁剪示意如下,主要找到每个小块的地理坐标范围xmin、ymin、xmax和ymax;
注意gt = dem.GetGeoTransform()中表示原始图像xmin = gt[0],ymax = gt[3],(ymin,xmin)是值的左上角坐标。
(2)gdal.Warp或者 gdal.Translate进行裁剪
- gdal.Warp(“dem”+str(i)+str(j)+“.tif”, dem, outputBounds = (xmin, ymin, xmax, ymax), dstNodata = -9999)
- gdal.Translate(“dem_translate”+str(i)+str(j)+“.tif”, dem, projWin = (xmin, ymax, xmax, ymin), xRes = res, yRes = -res)
2-代码实现
2.1 数据介绍
(1)原始数据信息:选用了1个波段的WordView3全色影像,影像分辨率为0.31米,影像元数据如下图:
(2)原始影像在QGIS显示效果:
2.2 代码实现
(1)计算裁剪分片
(2)进行裁剪
from osgeo import gdal
dem = gdal.Open(r"GDAL_testing_data\JAX_IMG1_PAN.TIF")
gt = dem.GetGeoTransform()
# ================================1.获取原始图像左上角的地理坐标===============================================
xmin = gt[0]+0*gt[1]+0*gt[2]#g[0-2]分别是x方向分辨率
ymin = gt[3]+0*gt[4]+0*gt[5]
res = gt[1]# 影像分辨率,注意x方向为正,y方向分辨率为负,但数值上x,y方向上一致
# ================================2.计算原始图像地理坐标范围长度和宽度========================================
xlen = res * dem.RasterXSize
ylen = res * dem.RasterYSize
print(f'xlen={
xlen},ylen={
ylen}')
# ================================3.设置x,y方向上的分块数=============================================
xdiv