GDAL+Python實現柵格影像處理之柵格矢量化及矢量柵格化

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"])

效果展示

  • 柵格矢量化
    在這裏插入圖片描述
    在這裏插入圖片描述
  • 矢量柵格化
    如上圖所示
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章