Calculate area of polygons using OGR in python script

I ran your script (slightly modified) at the Python Console of QGIS:

from osgeo import ogr

vlayer = iface.activeLayer()

provider = vlayer.dataProvider()

path = provider.dataSourceUri()

tmp = path.split("|")

path_to_shp_data = tmp[0]

driver = ogr.GetDriverByName("ESRI Shapefile")
dataSource = driver.Open(path_to_shp_data, 1)
layer = dataSource.GetLayer()
new_field = ogr.FieldDefn("Area", ogr.OFTReal)
new_field.SetWidth(32)
new_field.SetPrecision(2) #added line to set precision
layer.CreateField(new_field)

for feature in layer:
    geom = feature.GetGeometryRef()
    area = geom.GetArea() 
    print area
    feature.SetField("Area", area)
    layer.SetFeature(feature)

dataSource = None 

and it worked (see next image).

enter image description here

However, the precision of values (0 decimal) at the field "Area" is different to values printed at the Python Console:

1062218109.64
1241319130.43 

As you are pointed out that your printed areas are very small (0.00000x) and likely do not reflect square meters, this is the reason for your resulting "Area" field contains all 0's. Probably, you have a projection problem in your shapefile. It is not in meters.

Editing Note:

I included the code line to set the precision (2 decimals) of 'Area' field and it worked.


Your code is perfect. I think you are not working in a projection in meters e.g mollweide.

All you need to do is reproject the layer to -- +proj=moll +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m no_defs

Then run the code again and it would be 100%