import random
from osgeo import gdal, ogr    
"""http://stackoverflow.com/questions/2220749/rasterizing-a-gdal-layer"""
champs_couleur = "__color__"
 
def rasterize(pixel_size=25)
    # Ouvrir le fichier source
    source_orig = ogr.Open("test.shp")
 
    # En faire une copie virtuelle pour modifier la table d'attributs avec l'ajout de couleurs
    source_ds = ogr.GetDriverByName("Memory").CopyDataSource(source_orig, "")
    couche_virt = source_ds.GetLayer(0)
    source_srs = couche_virt.GetSpatialRef()
    x_min, x_max, y_min, y_max = couche_virt.GetExtent()
    # création d'un champs dans la couche virtuelle pour y placer les couleurs
    field_def = ogr.FieldDefn(champs_couleur ogr.OFTReal)
    couche_virt.CreateField(field_def)
    couche_virt_def = couche_virt.GetLayerDefn()
    field_index = couche_virt_def.GetFieldIndex(champs_couleur)
 
    # génération de couleurs aléatoires pour le champs couleur
    # c'est ici que la valeur de l'attribut devrait être utilisée
    for feature in couche_virt:
        feature.SetField(field_index, random.randint(0, 255))
        couche_virt.SetFeature(feature)
 
    # Creation de la couche raster au format GeoTiff en fonction du champs couleur
    x_res = int((x_max - x_min) / pixel_size)
    y_res = int((y_max - y_min) / pixel_size)
    target_ds = gdal.GetDriverByName('GTiff').Create('test.tif', x_res,y_res, 3, gdal.GDT_Byte)
    target_ds.SetGeoTransform((x_min, pixel_size, 0,y_max, 0, -pixel_size,))
 
    # traitement des projections
    if source_srs:
        # si la couche shapefile a une projection (.prj), l'attribuer à raster résultant
        target_ds.SetProjection(source_srs.ExportToWkt())
    else:
        # couche shapefile n'a pas de projection 
        target_ds.SetProjection('LOCAL_CS["arbitrary"]')
 
    # Conversion vecteur - raster
    err = gdal.RasterizeLayer(target_ds, (3, 2, 1), couche_virt,burn_values=(0, 0, 0),options=["ATTRIBUTE=%s" % RASTERIZE_COLOR_FIELD])
    if err != 0:
        raise Exception("erreur en rasterisant la couche: %s" % err)
 
 
if __name__ == '__main__':
    rasterize()