GDAL 栅格重分类(python)

case:将具有多个栅格属性值的影像进行重编码或重分类,这其中涉及到影像的属性值的读取和更新,影响的创建等方法。

以下将分三个步骤开始实现。

1.加载影像

# 为了支持中文路径,请添加下面这句代码
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO")
# 为了使属性表字段支持中文,请添加下面这句
gdal.SetConfigOption("SHAPE_ENCODING", "")
# 注册所有的驱动
ogr.RegisterAll()

filepath = r'。。。'
ds = gdal.Open(filepath)

#判断数据读取是否成功
if ds is None:
    print ('打开数据'+filepath+'失败!')
    sys.exit(1)

2.获取影像的属性信息,用于创建新的影像

#读取栅格数据集的x方向像素数,y方向像素数
cols = ds.RasterXSize
rows = ds.RasterYSize
#bands = ds.RasterCount
band = ds.GetRasterBand(1)
data = band.ReadAsArray(0, 0, cols, rows)
class_num = np.unique(data)

3.进行影像重分类并创建输出影像

获取个类别的二值图像
for value in class_num:
    #跳过不想进行重分类的值
    if value == -9999:
        continue
    img = data.copy()
    img[img != value] = 0
    #创建并输出图像
    driver = ds.GetDriver()
    filename = r'D:/temp/_'+str(value)+'.tiff'
    outimage = driver.Create(filename, cols, rows, 1, gdal.GDT_Int16)
    geotransform = ds.GetGeoTransform()
    outimage.SetGeoTransform(geotransform)
    #在写入之前,还需要先引入波段对象
    outBand = outimage.GetRasterBand(1)
    #波段对象支持直接写入矩阵,两个参数分别为x向偏移和y向偏移
    outBand.WriteArray(img, 0, 0)
    #设定NoData值
    outBand.SetNoDataValue(-9999)
    #计算band的统计量
    outBand.FlushCache()
    outBand.GetStatistics(0, 1)
    outimage = None
    print('数据处理成功')



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页