GDAL+Python实现栅格影像处理之栅格矢量化及矢量栅格化
程序员文章站
2022-07-14 19:42:54
...
相关概念
栅格矢量化:将栅格数据生成矢量数据。
矢量栅格化:将矢量数据生成栅格数据。
使用方法
- 栅格矢量化
使用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"])
效果展示
- 栅格矢量化
- 矢量栅格化
如上图所示
上一篇: 关于梯度下降算法的矢量化过程