python学习——实现不同大小两景影像的合成

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

 直奔主题,这次要实现的是将一个有随机数生成的栅格和一个目标栅格进行合成,最终为一个栅格。

第一景,坐标系为WGS-84,像元大小为1KM,换算成度为0.009009009

第二景,坐标系为WGS-84,像元大小为1KM

 

import gdal,ogr
import numpy as np
def rasterlayer(radom_raster,dust_path):
    dust_raster = dust_path+'\\'+'dust_raster.tif'
    dust_ds = gdal.Open(dust_raster)
    radom_ds = gdal.Open(radom_raster)

    dust_geo_transform = dust_ds.GetGeoTransform()
    dust_cols=dust_ds.RasterXSize
    dust_rows=dust_ds.RasterYSize
    dust_x_min = dust_geo_transform[0] #获取左至坐标
    dust_y_max = dust_geo_transform[3] #获取上至坐标

    #对随机数栅格进行操作
    radom_geo_transform = radom_ds.GetGeoTransform()
    radom_cols=radom_ds.RasterXSize
    radom_rows=radom_ds.RasterYSize
    radom_x_min = radom_geo_transform[0] #获取左至坐标
    radom_y_max = radom_geo_transform[3] #获取上至坐标


    # 进行沙尘栅格和随机数栅格的叠加
    dust_band = dust_ds.GetRasterBand(1)
    dust_data = dust_band.ReadAsArray()
    radom_band = radom_ds.GetRasterBand(1)
    radom_data = radom_band.ReadAsArray()
    # 沙尘栅格在随机数栅格中的下行号
    down_row = round((radom_y_max - dust_y_max) / 0.009009009)
    # 沙尘栅格在随机数栅格中的上行号
    up_row = down_row+dust_rows
    # 沙尘栅格在随机数栅格中的左列号
    left_col = round((dust_x_min - radom_x_min) / 0.009009009)
    # 沙尘栅格在随机数栅格中的右列号
    right_col = left_col+dust_cols
    print(down_row,up_row,left_col,right_col)
    #制作一个掩膜文件
    mask1 = dust_data == 0
    #使用np.choose将大栅格中小栅格所在的所有行和列替换成小栅格的值
    radom_data[down_row:up_row, left_col:right_col] \
        = np.choose(mask1, (dust_data, radom_data[down_row:up_row, left_col:right_col]))
    #之后进行输出。
    radom_proj = radom_ds.GetProjection()
    driver = gdal.GetDriverByName("GTiff")  
    subset = driver.Create(dust_path+'\\'+'dust_random.tif', 6837, 3932, 1, gdal.GDT_Float32)
    ''':type:osgeo.gdal.Dataset'''
    inband = subset.GetRasterBand(1)
    subset_array = subset.GetRasterBand(1)
    subset_array.WriteArray(radom_data)
    subset_array.FlushCache()
    transform = [radom_x_min, radom_geo_transform[1], 0, radom_y_max, 0,
                 -radom_geo_transform[1]]
    subset.SetGeoTransform(transform)
    subset.SetProjection(radom_proj)


if __name__ == '__main__':
    radom_raster = r'E:\JS\Temp\random_raster.dat'#随机数栅格
    dust_path = r'G:\rasterdust'   #行列数较小栅格
    rasterlayer(radom_raster,dust_path)

 结果图:

 

 

 如有错误,欢迎指正,万分感谢!

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三十二号星期八

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值