Parece que hay al menos dos formas diferentes de calcular el área de un polígono en QGIS usando Python:
1) area = feature.geometry().area()
2) d = QgsDistanceArea()
area_v2 = d.measurePolygon(feature.geometry().asPolygon()[0])
Estos dos enfoques producen resultados muy similares, pero no iguales. También parece que QGIS prefiere el segundo enfoque - una vez que la columna de geometría se añade a través de Vector -> Export/Add Geometry Columns. Presumiblemente, esto está relacionado con las proyecciones. Sin embargo, todo lo que trato en QGIS es en EPSG:3857 ya que estoy utilizando datos OSM. Además, los valores de perímetro obtenidos de este enfoque coinciden con el primer enfoque cuando se ejecuta la siguiente sentencia:
perimeter = feature.geometry().length()
Me inclino por el primer enfoque debido a su simplicidad, así que ¿por qué QGIS se basa en el segundo?