Two images processed to the same geographic coordinates

Two images processed to the same geographic coordinates

from osgeo import osr, gdal


def read_img(img_path):
    dataset = gdal.Open(img_path)
    width = dataset.RasterXSize  # 获取数据宽度
    height = dataset.RasterYSize  # 获取数据高度
    im_geotrans = dataset.GetGeoTransform()  # 获取仿射矩阵信息
    im_proj = dataset.GetProjection()  # 获取投影信息
    src_img = dataset.ReadAsArray()
    del dataset
    return src_img,im_geotrans,im_proj,width,height

def change_geotrans_proj(img1,img2,img_new):
    """
    坐标对齐:两幅相同大小的影像,将其中一幅的geotrans、proj赋值给另一幅
     newRasterfn: 输出tif路径
     rasterOrigin: 栅格数据左上角的经纬度
     xsize: x方向像元大小
     ysize: y方向像元大小
     array: 计算后的栅格数据
    """
    _, im_geotrans, im_proj, width, height = read_img(img1)
    array, im_geotrans2, im_proj2, width2, height2 = read_img(img2)
    cols = array.shape[1]  # 矩阵列数
    rows = array.shape[0]  # 矩阵行数
    # originX = rasterOrigin[0]  # 起始像元经度
    # originY = rasterOrigin[1]  # 起始像元纬度
    driver = gdal.GetDriverByName('GTiff')
    outRaster = driver.Create(img_new, width, height,3, gdal.GDT_Byte)
    # 3 is num of bands
    # 括号中两个0表示起始像元的行列号从(0,0)开始
    outRaster.SetGeoTransform(im_geotrans)
    # 获取数据集第一个波段,是从1开始,不是从0开始
    for i in range(1, 4):
        outband = outRaster.GetRasterBand(i)
        outband.WriteArray(array[i-1,:, :])
    # outRasterSRS = osr.SpatialReference()
    # # 代码4326表示WGS84坐标
    # outRasterSRS.ImportFromEPSG(4326)
    outRaster.SetProjection(im_proj)
    outband.FlushCache()

    del outRaster


if __name__ == "__main__":
    #-------------------------------------------------------------
    #坐标对齐:两幅相同大小的影像,将其中一幅的geotrans、proj赋值给另一幅
    #-------------------------------------------------------------
    img1=r'./1_after.tif'
    img2=r"./1_before.tif"
    img_new=r"./1_1_before.tif"
    change_geotrans_proj(img1,img2,img_new)
    print('finsh...')

Guess you like

Origin blog.csdn.net/weixin_38353277/article/details/129030970