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=[]
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")
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.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"])
效果展示
- 柵格矢量化
- 矢量柵格化
如上圖所示