GDAL+Python | 实现栅格影像处理之栅格矢量化及矢量栅格化


栅格矢量化:将栅格数据生成矢量数据。
矢量栅格化:将矢量数据生成栅格数据。

使用方法


栅格矢量化
使用gdal.Polygonize()方法
参数说明(未列完)
参数    说明
srcBand    输入数据波段
maskBand    设置掩码波段(只对掩码区域进行处理)
outLayer    矢量化后的矢量图层
iPixValField    需要将DN值写入矢量字段的索引
options    算法选项
GDALProgressFunc    进度条回调函数
callback    进度条参数

代码实现
def PolygonizeTheRaster():
    inputfile = r'G:/studyprojects/gdal/GdalStudy/Files/images/2016CHA.tif'
    ds = gdal.Open(inputfile, gdal.GA_ReadOnly)
    srcband=ds.GetRasterBand(1)
    maskband=srcband.GetMaskBand()
    dst_filename='G:/studyprojects/gdal/GdalStudy/Files/plogon/test.shp'
    drv = ogr.GetDriverByName('ESRI Shapefile')
    dst_ds = drv.CreateDataSource(dst_filename)
    srs = None
    dst_layername = 'out'
    dst_layer = dst_ds.CreateLayer(dst_layername, srs=srs)
    dst_fieldname = 'DN'
    fd = ogr.FieldDefn(dst_fieldname, ogr.OFTInteger)
    dst_layer.CreateField(fd)
    dst_field = 0
    prog_func =test()
    options=[]
    # 参数  输入栅格图像波段\掩码图像波段、矢量化后的矢量图层、需要将DN值写入矢量字段的索引、算法选项、进度条回调函数、进度条参数
    gdal.Polygonize(srcband, maskband, dst_layer,dst_field, options,callback=prog_func)


矢量栅格化


使用gdal.RasterizeLayer()方法
参数说明(未列完)
参数    说明
dataset    输出的栅格数据,注意该数据必须以update模式打开
bands    指定要更新的波段个数(更新123波段)
layer    指定的图层
pfnTransformer    几何图形坐标转换图像行列号函数
pTransformArg    几何图形坐标转换图像行列号参数
burn_values    输出图像的像素值
options    控制栅格化的参数
GDALProgressFunc    进度条回调函数
callback    进度条参数

代码实现
def RasterzeTheVectorToRasterr():
    print("lets gogogogo")
    # 参数说明: 输出的栅格数据,注意该数据必须以update模式打开、指定要更新的波段个数(更新123波段)、指定的图层、几何图形坐标转换图像行列号函数、几何图形坐标转换图像行列号参数、以及图层中属性字段属性值
    inputfilePath='G:/studyprojects/gdal/GdalStudy/Files/plogon/test.shp'
    outputfile='G:/studyprojects/gdal/GdalStudy/Files/images/vector.tif'
    templetefile='G:/studyprojects/gdal/GdalStudy/Files/images/2016CHA.tif'
    data = gdal.Open(templetefile, gdalconst.GA_ReadOnly)
    x_res = data.RasterXSize
    y_res = data.RasterYSize
    vector = ogr.Open(inputfilePath)
    layer = vector.GetLayer()
    targetDataSet = gdal.GetDriverByName('GTiff').Create(outputfile, x_res, y_res, 3, gdal.GDT_Byte)
    #targetDataSet=gdal.GetDriverByName('GTiff').CreateCopy(templetefile,data)
    targetDataSet.SetGeoTransform(data.GetGeoTransform())
    targetDataSet.SetProjection(data.GetProjection())
    band = targetDataSet.GetRasterBand(1)
    NoData_value = -999
    band.SetNoDataValue(NoData_value)
    band.FlushCache()
    gdal.RasterizeLayer(targetDataSet, [1,2,3], layer, options=["ATTRIBUTE=DN"])

 

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值