00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef QGSDISTANCEAREA_H
00018 #define QGSDISTANCEAREA_H
00019
00020 #include <QList>
00021 #include "qgscoordinatetransform.h"
00022
00023 class QgsGeometry;
00024
00035 class CORE_EXPORT QgsDistanceArea
00036 {
00037 public:
00039 QgsDistanceArea();
00040
00042 ~QgsDistanceArea();
00043
00045 void setProjectionsEnabled( bool flag );
00046
00048 bool hasCrsTransformEnabled() { return mProjectionsEnabled; }
00049
00051 void setSourceCrs( long srsid );
00052
00054 void setSourceEpsgCrsId( long epsgId );
00055
00057 long sourceCrs() { return mSourceRefSys; }
00059 bool geographic() { return mCoordTransform->sourceCrs().geographicFlag(); }
00060
00062 bool setEllipsoid( const QString& ellipsoid );
00063
00065 const QString& ellipsoid() { return mEllipsoid; }
00066
00068 double ellipsoidSemiMajor() { return mSemiMajor; }
00070 double ellipsoidSemiMinor() { return mSemiMinor; }
00072 double ellipsoidInverseFlattening() { return mInvFlattening; }
00073
00075 double measure( QgsGeometry* geometry );
00076
00078 double measureLine( const QList<QgsPoint>& points );
00080 double measureLine( const QgsPoint& p1, const QgsPoint& p2 );
00081
00083 double measurePolygon( const QList<QgsPoint>& points );
00084
00086 double bearing( const QgsPoint& p1, const QgsPoint& p2 );
00087
00088 static QString textUnit( double value, int decimals, QGis::UnitType u, bool isArea, bool keepBaseUnit = false );
00089
00090 protected:
00091
00093 unsigned char* measureLine( unsigned char* feature, double* area, bool hasZptr = false );
00095 unsigned char* measurePolygon( unsigned char* feature, double* area, bool hasZptr = false );
00096
00107 double computeDistanceBearing( const QgsPoint& p1, const QgsPoint& p2,
00108 double* course1 = NULL, double* course2 = NULL );
00109
00110
00116 double computePolygonArea( const QList<QgsPoint>& points );
00117
00118 double computePolygonFlatArea( const QList<QgsPoint>& points );
00119
00124 void computeAreaInit();
00125
00126 private:
00127
00129 QgsCoordinateTransform* mCoordTransform;
00130
00132 bool mProjectionsEnabled;
00133
00135 long mSourceRefSys;
00136
00138 QString mEllipsoid;
00139
00141 double mSemiMajor, mSemiMinor, mInvFlattening;
00142
00143
00144
00145 double getQ( double x );
00146 double getQbar( double x );
00147
00148
00149
00150 double m_QA, m_QB, m_QC;
00151 double m_QbarA, m_QbarB, m_QbarC, m_QbarD;
00152 double m_AE;
00153 double m_Qp;
00154 double m_E;
00155 double m_TwoPI;
00156
00157 };
00158
00159 #endif