Skip to Content

test

  1. import random
  2. from osgeo import gdal, ogr
  3. """http://stackoverflow.com/questions/2220749/rasterizing-a-gdal-layer"""
  4. champs_couleur = "__color__"
  5.  
  6. def rasterize(pixel_size=25)
  7. # Ouvrir le fichier source
  8. source_orig = ogr.Open("test.shp")
  9.  
  10. # En faire une copie virtuelle pour modifier la table d'attributs avec l'ajout de couleurs
  11. source_ds = ogr.GetDriverByName("Memory").CopyDataSource(source_orig, "")
  12. couche_virt = source_ds.GetLayer(0)
  13. source_srs = couche_virt.GetSpatialRef()
  14. x_min, x_max, y_min, y_max = couche_virt.GetExtent()
  15. # création d'un champs dans la couche virtuelle pour y placer les couleurs
  16. field_def = ogr.FieldDefn(champs_couleur ogr.OFTReal)
  17. couche_virt.CreateField(field_def)
  18. couche_virt_def = couche_virt.GetLayerDefn()
  19. field_index = couche_virt_def.GetFieldIndex(champs_couleur)
  20.  
  21. # génération de couleurs aléatoires pour le champs couleur
  22. # c'est ici que la valeur de l'attribut devrait être utilisée
  23. for feature in couche_virt:
  24. feature.SetField(field_index, random.randint(0, 255))
  25. couche_virt.SetFeature(feature)
  26.  
  27. # Creation de la couche raster au format GeoTiff en fonction du champs couleur
  28. x_res = int((x_max - x_min) / pixel_size)
  29. y_res = int((y_max - y_min) / pixel_size)
  30. target_ds = gdal.GetDriverByName('GTiff').Create('test.tif', x_res,y_res, 3, gdal.GDT_Byte)
  31. target_ds.SetGeoTransform((x_min, pixel_size, 0,y_max, 0, -pixel_size,))
  32.  
  33. # traitement des projections
  34. if source_srs:
  35. # si la couche shapefile a une projection (.prj), l'attribuer à raster résultant
  36. target_ds.SetProjection(source_srs.ExportToWkt())
  37. else:
  38. # couche shapefile n'a pas de projection
  39. target_ds.SetProjection('LOCAL_CS["arbitrary"]')
  40.  
  41. # Conversion vecteur - raster
  42. err = gdal.RasterizeLayer(target_ds, (3, 2, 1), couche_virt,burn_values=(0, 0, 0),options=["ATTRIBUTE=%s" % RASTERIZE_COLOR_FIELD])
  43. if err != 0:
  44. raise Exception("erreur en rasterisant la couche: %s" % err)
  45.  
  46.  
  47. if __name__ == '__main__':
  48. rasterize()