如何使用Python中的GDAL库进行矢量数据与栅格数据相互转换

今天继续更新GDAL相关内容,主要是进行矢量数据与栅格数据的相互转换。矢栅转换在ArcGIS软件中很好实现,有专门的工具可以使用,这里主要讲述如何利用Python中的GDAL库完成矢栅转换,直接上代码。

矢量转栅格

from osgeo import ogr,gdal

def shape_to_raster(shapefile, rasterfile, savefile):
    data = gdal.Open(rasterfile, gdal.GA_ReadOnly)
    x_res = data.RasterXSize
    y_res = data.RasterYSize
    shape = ogr.Open(shapefile)
    layer = shape.GetLayer()
    targetDataset = gdal.GetDriverByName('GTiff').Create(savefile, x_res, y_res, 3, gdal.GDT_Byte)
    targetDataset.SetGeoTransform(data.GetGeoTransform())
    targetDataset.SetProjection(data.GetProjection())
    band = targetDataset.GetRasterBand(1)
    NoData_value = -9999
    band.SetNoDataValue(NoData_value)
    band.FlushCache()
    gdal.RasterizeLayer(targetDataset, [1, 2, 3], layer, )

代码比较简单,很容易看懂。这样需要输入栅格数据,是因为需要设置转换后的栅格数据大小、投影等信息。

栅格转矢量

from osgeo import ogr,osr,gdal

def raster_to_shape(rasterfile,shapefile):
    data = gdal.Open(rasterfile, gdal.GA_ReadOnly)
    inband = data.GetRasterBand(1)
    drv = ogr.GetDriverByName('ESRI Shapefile')
    Polygon = drv.CreateDataSource(shapefile)
    prj = osr.SpatialReference()
    prj.ImportFromWkt(data.GetProjection()) ## 使用栅格的投影信息
    Polygon_layer = Polygon.CreateLayer(shapefile, srs=prj, geom_type = ogr.wkbMultiPolygon)
    newField = ogr.FieldDefn('Value', ogr.OFTInteger)
    Polygon_layer.CreateField(newField)
    gdal.FPolygonize(inband, None, Polygon_layer, 0)

总结

在实际应用中,矢量数据和栅格数据之间的相互转换经常会遇见,数据比较少时,ArcGIS就可以解决了。但遇到批量数据转换时,利用代码写个for循环就比较方便快捷了。

你可能感兴趣的:(遥感,Python,python,gdal)