QGIS/python/core/qgsdistancearea.sip

124 lines
4.1 KiB
Plaintext
Raw Normal View History

class QgsDistanceArea
{
%TypeHeaderCode
#include <qgsdistancearea.h>
%End
public:
//! Constructor
QgsDistanceArea();
2012-09-03 23:49:46 +02:00
//! Destructor
~QgsDistanceArea();
2012-09-01 23:55:32 +02:00
2012-09-03 23:49:46 +02:00
//! Copy constructor
QgsDistanceArea( const QgsDistanceArea &origDA );
2012-09-01 23:55:32 +02:00
//! sets whether coordinates must be projected to ellipsoid before measuring
2012-09-03 23:49:46 +02:00
void setEllipsoidalMode( bool flag );
//! returns projections enabled flag
2012-09-03 23:49:46 +02:00
bool ellipsoidalEnabled() const;
//! sets source spatial reference system (by QGIS CRS)
2012-09-03 23:49:46 +02:00
void setSourceCrs( long srsid );
2014-01-27 09:22:24 +01:00
/**
* Sets source spatial reference system (by QGIS CRS)
* @note: missing in Python bindings in QGIS < 2.2
*/
void setSourceCrs( const QgsCoordinateReferenceSystem& srcCRS );
//! sets source spatial reference system by authid
void setSourceAuthId( QString authid );
//! returns source spatial reference system
2014-01-27 09:22:24 +01:00
long sourceCrs() const;
//! What sort of coordinate system is being used?
2014-01-27 09:22:24 +01:00
bool geographic() const;
//! sets ellipsoid by its acronym
2012-09-03 23:49:46 +02:00
bool setEllipsoid( const QString& ellipsoid );
2012-09-03 15:47:48 +02:00
//! Sets ellipsoid by supplied radii
// Inverse flattening is calculated with invf = a/(a-b)
bool setEllipsoid( double semiMajor, double semiMinor );
//! returns ellipsoid's acronym
2014-01-27 09:22:24 +01:00
const QString& ellipsoid() const;
2012-09-03 23:49:46 +02:00
//! returns ellipsoid's semi major axis
2014-01-27 09:22:24 +01:00
double ellipsoidSemiMajor() const;
//! returns ellipsoid's semi minor axis
2014-01-27 09:22:24 +01:00
double ellipsoidSemiMinor() const;
//! returns ellipsoid's inverse flattening
2014-01-27 09:22:24 +01:00
double ellipsoidInverseFlattening() const;
2012-09-03 23:49:46 +02:00
//! general measurement (line distance or polygon area)
2015-05-14 20:03:13 +10:00
double measure( const QgsGeometry* geometry ) const;
2012-09-03 23:49:46 +02:00
//! measures perimeter of polygon
2015-05-14 20:03:13 +10:00
double measurePerimeter( const QgsGeometry* geometry ) const;
2012-09-03 23:49:46 +02:00
//! measures line
2015-05-14 20:03:13 +10:00
double measureLine( const QList<QgsPoint>& points ) const;
2012-09-03 23:49:46 +02:00
//! measures line with one segment
2015-05-14 20:03:13 +10:00
double measureLine( const QgsPoint& p1, const QgsPoint& p2 ) const;
2012-09-03 23:49:46 +02:00
//! measures polygon area
2015-05-14 20:03:13 +10:00
double measurePolygon( const QList<QgsPoint>& points ) const;
2012-09-03 23:49:46 +02:00
//! compute bearing - in radians
2015-05-14 20:03:13 +10:00
double bearing( const QgsPoint& p1, const QgsPoint& p2 ) const;
static QString textUnit( double value, int decimals, QGis::UnitType u, bool isArea, bool keepBaseUnit = false );
//! Helper for conversion between physical units
2015-05-14 20:03:13 +10:00
void convertMeasurement( double &measure /In,Out/, QGis::UnitType &measureUnits /In,Out/, QGis::UnitType displayUnits, bool isArea ) const;
2014-05-27 23:22:50 +02:00
protected:
//! measures line distance, line points are extracted from WKB
// @note available in python bindings
2015-05-14 20:03:13 +10:00
// const unsigned char* measureLine( const unsigned char* feature, double* area, bool hasZptr = false ) const;
2014-05-27 23:22:50 +02:00
//! measures polygon area and perimeter, vertices are extracted from WKB
// @note available in python bindings
2015-05-14 20:03:13 +10:00
// const unsigned char* measurePolygon( const unsigned char* feature, double* area, double* perimeter, bool hasZptr = false ) const;
2014-05-27 23:22:50 +02:00
/**
calculates distance from two points on ellipsoid
based on inverse Vincenty's formulae
Points p1 and p2 are expected to be in degrees and in currently used ellipsoid
@note if course1 is not NULL, bearing (in radians) from first point is calculated
(the same for course2)
@return distance in meters
*/
double computeDistanceBearing( const QgsPoint& p1, const QgsPoint& p2,
2015-05-14 20:03:13 +10:00
double* course1 = NULL, double* course2 = NULL ) const;
2014-05-27 23:22:50 +02:00
//! uses flat / planimetric / Euclidean distance
2015-05-14 20:03:13 +10:00
double computeDistanceFlat( const QgsPoint& p1, const QgsPoint& p2 ) const;
//! calculate distance with given coordinates (does not do a transform anymore)
2015-05-14 20:03:13 +10:00
double computeDistance( const QList<QgsPoint>& points ) const;
2014-05-27 23:22:50 +02:00
/**
calculates area of polygon on ellipsoid
algorithm has been taken from GRASS: gis/area_poly1.c
*/
2015-05-14 20:03:13 +10:00
double computePolygonArea( const QList<QgsPoint>& points ) const;
2014-05-27 23:22:50 +02:00
2015-05-14 20:03:13 +10:00
double computePolygonFlatArea( const QList<QgsPoint>& points ) const;
2014-05-27 23:22:50 +02:00
/**
precalculates some values
(must be called always when changing ellipsoid)
*/
void computeAreaInit();
};