class QgsDistanceArea
{
%TypeHeaderCode
#include <qgsdistancearea.h>
%End

  public:

    //! Constructor
    QgsDistanceArea();
    
    //! Destructor
    ~QgsDistanceArea();
    
    //! sets whether coordinates must be projected to ellipsoid before measuring
    void setProjectionsEnabled(bool flag);

    //! returns projections enabled flag
    bool projectionsEnabled();
    
    //! sets source spatial reference system (by QGIS SRS)
    void setSourceSRS(long srsid);
    
    //! returns source spatial reference system
    long sourceSRS();
    //! What sort of coordinate system is being used?
    bool geographic();

    //! sets ellipsoid by its acronym
    bool setEllipsoid(const QString& ellipsoid);
    
    //! returns ellipsoid's acronym
    const QString& ellipsoid();
    
    //! returns ellipsoid's semi major axis
    double ellipsoidSemiMajor();
    //! returns ellipsoid's semi minor axis
    double ellipsoidSemiMinor();
    //! returns ellipsoid's inverse flattening
    double ellipsoidInvFlattening();
    
    //! general measurement (line distance or polygon area)
    double measure(QgsGeometry* geometry);
    
    //! measures line with more segments
    double measureLine(const QList<QgsPoint>& points);
    
    //! measures line with one segment
    double measureLine(const QgsPoint& p1, const QgsPoint& p2);
    
    //! measures polygon area
    double measurePolygon(const QList<QgsPoint>& points);
    
    //! compute bearing - in radians
    double getBearing(const QgsPoint& p1, const QgsPoint& p2);

    static QString textUnit(double value, int decimals, QGis::units u, bool isArea);    

};