Skip to content

Commit

Permalink
Const correctness for QgsDistanceArea
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed May 14, 2015
1 parent 5194ce5 commit c5bc778
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 46 deletions.
28 changes: 14 additions & 14 deletions python/core/qgsdistancearea.sip
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -56,35 +56,35 @@ class QgsDistanceArea
double ellipsoidInverseFlattening() const; double ellipsoidInverseFlattening() const;


//! general measurement (line distance or polygon area) //! general measurement (line distance or polygon area)
double measure( const QgsGeometry* geometry ); double measure( const QgsGeometry* geometry ) const;


//! measures perimeter of polygon //! measures perimeter of polygon
double measurePerimeter( const QgsGeometry* geometry ); double measurePerimeter( const QgsGeometry* geometry ) const;


//! measures line //! measures line
double measureLine( const QList<QgsPoint>& points ); double measureLine( const QList<QgsPoint>& points ) const;


//! measures line with one segment //! measures line with one segment
double measureLine( const QgsPoint& p1, const QgsPoint& p2 ); double measureLine( const QgsPoint& p1, const QgsPoint& p2 ) const;


//! measures polygon area //! measures polygon area
double measurePolygon( const QList<QgsPoint>& points ); double measurePolygon( const QList<QgsPoint>& points ) const;


//! compute bearing - in radians //! compute bearing - in radians
double bearing( const QgsPoint& p1, const QgsPoint& p2 ); double bearing( const QgsPoint& p1, const QgsPoint& p2 ) const;


static QString textUnit( double value, int decimals, QGis::UnitType u, bool isArea, bool keepBaseUnit = false ); static QString textUnit( double value, int decimals, QGis::UnitType u, bool isArea, bool keepBaseUnit = false );


//! Helper for conversion between physical units //! Helper for conversion between physical units
void convertMeasurement( double &measure /In,Out/, QGis::UnitType &measureUnits /In,Out/, QGis::UnitType displayUnits, bool isArea ); void convertMeasurement( double &measure /In,Out/, QGis::UnitType &measureUnits /In,Out/, QGis::UnitType displayUnits, bool isArea ) const;


protected: protected:
//! measures line distance, line points are extracted from WKB //! measures line distance, line points are extracted from WKB
// @note available in python bindings // @note available in python bindings
// const unsigned char* measureLine( const unsigned char* feature, double* area, bool hasZptr = false ); // const unsigned char* measureLine( const unsigned char* feature, double* area, bool hasZptr = false ) const;
//! measures polygon area and perimeter, vertices are extracted from WKB //! measures polygon area and perimeter, vertices are extracted from WKB
// @note available in python bindings // @note available in python bindings
// const unsigned char* measurePolygon( const unsigned char* feature, double* area, double* perimeter, bool hasZptr = false ); // const unsigned char* measurePolygon( const unsigned char* feature, double* area, double* perimeter, bool hasZptr = false ) const;


/** /**
calculates distance from two points on ellipsoid calculates distance from two points on ellipsoid
Expand All @@ -97,22 +97,22 @@ class QgsDistanceArea
@return distance in meters @return distance in meters
*/ */
double computeDistanceBearing( const QgsPoint& p1, const QgsPoint& p2, double computeDistanceBearing( const QgsPoint& p1, const QgsPoint& p2,
double* course1 = NULL, double* course2 = NULL ); double* course1 = NULL, double* course2 = NULL ) const;


//! uses flat / planimetric / Euclidean distance //! uses flat / planimetric / Euclidean distance
double computeDistanceFlat( const QgsPoint& p1, const QgsPoint& p2 ); double computeDistanceFlat( const QgsPoint& p1, const QgsPoint& p2 ) const;


//! calculate distance with given coordinates (does not do a transform anymore) //! calculate distance with given coordinates (does not do a transform anymore)
double computeDistance( const QList<QgsPoint>& points ); double computeDistance( const QList<QgsPoint>& points ) const;


/** /**
calculates area of polygon on ellipsoid calculates area of polygon on ellipsoid
algorithm has been taken from GRASS: gis/area_poly1.c algorithm has been taken from GRASS: gis/area_poly1.c


*/ */
double computePolygonArea( const QList<QgsPoint>& points ); double computePolygonArea( const QList<QgsPoint>& points ) const;


double computePolygonFlatArea( const QList<QgsPoint>& points ); double computePolygonFlatArea( const QList<QgsPoint>& points ) const;


/** /**
precalculates some values precalculates some values
Expand Down
32 changes: 16 additions & 16 deletions src/core/qgsdistancearea.cpp
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ bool QgsDistanceArea::setEllipsoid( double semiMajor, double semiMinor )
return true; return true;
} }


double QgsDistanceArea::measure( const QgsGeometry *geometry ) double QgsDistanceArea::measure( const QgsGeometry *geometry ) const
{ {
if ( !geometry ) if ( !geometry )
return 0.0; return 0.0;
Expand Down Expand Up @@ -329,7 +329,7 @@ double QgsDistanceArea::measure( const QgsGeometry *geometry )
} }
} }


double QgsDistanceArea::measurePerimeter( const QgsGeometry* geometry ) double QgsDistanceArea::measurePerimeter( const QgsGeometry* geometry ) const
{ {
if ( !geometry ) if ( !geometry )
return 0.0; return 0.0;
Expand Down Expand Up @@ -389,7 +389,7 @@ double QgsDistanceArea::measurePerimeter( const QgsGeometry* geometry )
} }




const unsigned char* QgsDistanceArea::measureLine( const unsigned char* feature, double* area, bool hasZptr ) const unsigned char* QgsDistanceArea::measureLine( const unsigned char* feature, double* area, bool hasZptr ) const
{ {
QgsConstWkbPtr wkbPtr( feature + 1 + sizeof( int ) ); QgsConstWkbPtr wkbPtr( feature + 1 + sizeof( int ) );
int nPoints; int nPoints;
Expand All @@ -416,7 +416,7 @@ const unsigned char* QgsDistanceArea::measureLine( const unsigned char* feature,
return wkbPtr; return wkbPtr;
} }


double QgsDistanceArea::measureLine( const QList<QgsPoint> &points ) double QgsDistanceArea::measureLine( const QList<QgsPoint> &points ) const
{ {
if ( points.size() < 2 ) if ( points.size() < 2 )
return 0; return 0;
Expand Down Expand Up @@ -458,7 +458,7 @@ double QgsDistanceArea::measureLine( const QList<QgsPoint> &points )


} }


double QgsDistanceArea::measureLine( const QgsPoint &p1, const QgsPoint &p2 ) double QgsDistanceArea::measureLine( const QgsPoint &p1, const QgsPoint &p2 ) const
{ {
double result; double result;


Expand Down Expand Up @@ -494,7 +494,7 @@ double QgsDistanceArea::measureLine( const QgsPoint &p1, const QgsPoint &p2 )
} }




const unsigned char *QgsDistanceArea::measurePolygon( const unsigned char* feature, double* area, double* perimeter, bool hasZptr ) const unsigned char *QgsDistanceArea::measurePolygon( const unsigned char* feature, double* area, double* perimeter, bool hasZptr ) const
{ {
if ( !feature ) if ( !feature )
{ {
Expand Down Expand Up @@ -589,7 +589,7 @@ const unsigned char *QgsDistanceArea::measurePolygon( const unsigned char* featu
} }




double QgsDistanceArea::measurePolygon( const QList<QgsPoint>& points ) double QgsDistanceArea::measurePolygon( const QList<QgsPoint>& points ) const
{ {
try try
{ {
Expand All @@ -616,7 +616,7 @@ double QgsDistanceArea::measurePolygon( const QList<QgsPoint>& points )
} }




double QgsDistanceArea::bearing( const QgsPoint& p1, const QgsPoint& p2 ) double QgsDistanceArea::bearing( const QgsPoint& p1, const QgsPoint& p2 ) const
{ {
QgsPoint pp1 = p1, pp2 = p2; QgsPoint pp1 = p1, pp2 = p2;
double bearing; double bearing;
Expand All @@ -643,7 +643,7 @@ double QgsDistanceArea::bearing( const QgsPoint& p1, const QgsPoint& p2 )


double QgsDistanceArea::computeDistanceBearing( double QgsDistanceArea::computeDistanceBearing(
const QgsPoint& p1, const QgsPoint& p2, const QgsPoint& p1, const QgsPoint& p2,
double* course1, double* course2 ) double* course1, double* course2 ) const
{ {
if ( p1.x() == p2.x() && p1.y() == p2.y() ) if ( p1.x() == p2.x() && p1.y() == p2.y() )
return 0; return 0;
Expand Down Expand Up @@ -718,12 +718,12 @@ double QgsDistanceArea::computeDistanceBearing(
return s; return s;
} }


double QgsDistanceArea::computeDistanceFlat( const QgsPoint& p1, const QgsPoint& p2 ) double QgsDistanceArea::computeDistanceFlat( const QgsPoint& p1, const QgsPoint& p2 ) const
{ {
return sqrt(( p2.x() - p1.x() ) * ( p2.x() - p1.x() ) + ( p2.y() - p1.y() ) * ( p2.y() - p1.y() ) ); return sqrt(( p2.x() - p1.x() ) * ( p2.x() - p1.x() ) + ( p2.y() - p1.y() ) * ( p2.y() - p1.y() ) );
} }


double QgsDistanceArea::computeDistance( const QList<QgsPoint>& points ) double QgsDistanceArea::computeDistance( const QList<QgsPoint>& points ) const
{ {
if ( points.size() < 2 ) if ( points.size() < 2 )
return 0; return 0;
Expand Down Expand Up @@ -767,7 +767,7 @@ double QgsDistanceArea::computeDistance( const QList<QgsPoint>& points )
// don't know how does it work, but it's working .) // don't know how does it work, but it's working .)
// see G_begin_ellipsoid_polygon_area() in area_poly1.c // see G_begin_ellipsoid_polygon_area() in area_poly1.c


double QgsDistanceArea::getQ( double x ) double QgsDistanceArea::getQ( double x ) const
{ {
double sinx, sinx2; double sinx, sinx2;


Expand All @@ -778,7 +778,7 @@ double QgsDistanceArea::getQ( double x )
} }




double QgsDistanceArea::getQbar( double x ) double QgsDistanceArea::getQbar( double x ) const
{ {
double cosx, cosx2; double cosx, cosx2;


Expand Down Expand Up @@ -824,7 +824,7 @@ void QgsDistanceArea::computeAreaInit()
} }




double QgsDistanceArea::computePolygonArea( const QList<QgsPoint>& points ) double QgsDistanceArea::computePolygonArea( const QList<QgsPoint>& points ) const
{ {
double x1, y1, x2, y2, dx, dy; double x1, y1, x2, y2, dx, dy;
double Qbar1, Qbar2; double Qbar1, Qbar2;
Expand Down Expand Up @@ -881,7 +881,7 @@ double QgsDistanceArea::computePolygonArea( const QList<QgsPoint>& points )
return area; return area;
} }


double QgsDistanceArea::computePolygonFlatArea( const QList<QgsPoint>& points ) double QgsDistanceArea::computePolygonFlatArea( const QList<QgsPoint>& points ) const
{ {
// Normal plane area calculations. // Normal plane area calculations.
double area = 0.0; double area = 0.0;
Expand Down Expand Up @@ -1031,7 +1031,7 @@ QString QgsDistanceArea::textUnit( double value, int decimals, QGis::UnitType u,
return QLocale::system().toString( value, 'f', decimals ) + unitLabel; return QLocale::system().toString( value, 'f', decimals ) + unitLabel;
} }


void QgsDistanceArea::convertMeasurement( double &measure, QGis::UnitType &measureUnits, QGis::UnitType displayUnits, bool isArea ) void QgsDistanceArea::convertMeasurement( double &measure, QGis::UnitType &measureUnits, QGis::UnitType displayUnits, bool isArea ) const
{ {
// Helper for converting between meters and feet and degrees and NauticalMiles... // Helper for converting between meters and feet and degrees and NauticalMiles...
// The parameters measure and measureUnits are in/out // The parameters measure and measureUnits are in/out
Expand Down
32 changes: 16 additions & 16 deletions src/core/qgsdistancearea.h
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -87,35 +87,35 @@ class CORE_EXPORT QgsDistanceArea
double ellipsoidInverseFlattening() const { return mInvFlattening; } double ellipsoidInverseFlattening() const { return mInvFlattening; }


//! general measurement (line distance or polygon area) //! general measurement (line distance or polygon area)
double measure( const QgsGeometry* geometry ); double measure( const QgsGeometry* geometry ) const;


//! measures perimeter of polygon //! measures perimeter of polygon
double measurePerimeter( const QgsGeometry *geometry ); double measurePerimeter( const QgsGeometry *geometry ) const;


//! measures line //! measures line
double measureLine( const QList<QgsPoint>& points ); double measureLine( const QList<QgsPoint>& points ) const;


//! measures line with one segment //! measures line with one segment
double measureLine( const QgsPoint& p1, const QgsPoint& p2 ); double measureLine( const QgsPoint& p1, const QgsPoint& p2 ) const;


//! measures polygon area //! measures polygon area
double measurePolygon( const QList<QgsPoint>& points ); double measurePolygon( const QList<QgsPoint>& points ) const;


//! compute bearing - in radians //! compute bearing - in radians
double bearing( const QgsPoint& p1, const QgsPoint& p2 ); double bearing( const QgsPoint& p1, const QgsPoint& p2 ) const;


static QString textUnit( double value, int decimals, QGis::UnitType u, bool isArea, bool keepBaseUnit = false ); static QString textUnit( double value, int decimals, QGis::UnitType u, bool isArea, bool keepBaseUnit = false );


//! Helper for conversion between physical units //! Helper for conversion between physical units
void convertMeasurement( double &measure, QGis::UnitType &measureUnits, QGis::UnitType displayUnits, bool isArea ); void convertMeasurement( double &measure, QGis::UnitType &measureUnits, QGis::UnitType displayUnits, bool isArea ) const;


protected: protected:
//! measures line distance, line points are extracted from WKB //! measures line distance, line points are extracted from WKB
// @note available in python bindings // @note available in python bindings
const unsigned char* measureLine( const unsigned char* feature, double* area, bool hasZptr = false ); const unsigned char* measureLine( const unsigned char* feature, double* area, bool hasZptr = false ) const;
//! measures polygon area and perimeter, vertices are extracted from WKB //! measures polygon area and perimeter, vertices are extracted from WKB
// @note available in python bindings // @note available in python bindings
const unsigned char* measurePolygon( const unsigned char* feature, double* area, double* perimeter, bool hasZptr = false ); const unsigned char* measurePolygon( const unsigned char* feature, double* area, double* perimeter, bool hasZptr = false ) const;


/** /**
calculates distance from two points on ellipsoid calculates distance from two points on ellipsoid
Expand All @@ -128,22 +128,22 @@ class CORE_EXPORT QgsDistanceArea
@return distance in meters @return distance in meters
*/ */
double computeDistanceBearing( const QgsPoint& p1, const QgsPoint& p2, double computeDistanceBearing( const QgsPoint& p1, const QgsPoint& p2,
double* course1 = NULL, double* course2 = NULL ); double* course1 = NULL, double* course2 = NULL ) const;


//! uses flat / planimetric / Euclidean distance //! uses flat / planimetric / Euclidean distance
double computeDistanceFlat( const QgsPoint& p1, const QgsPoint& p2 ); double computeDistanceFlat( const QgsPoint& p1, const QgsPoint& p2 ) const;


//! calculate distance with given coordinates (does not do a transform anymore) //! calculate distance with given coordinates (does not do a transform anymore)
double computeDistance( const QList<QgsPoint>& points ); double computeDistance( const QList<QgsPoint>& points ) const;


/** /**
calculates area of polygon on ellipsoid calculates area of polygon on ellipsoid
algorithm has been taken from GRASS: gis/area_poly1.c algorithm has been taken from GRASS: gis/area_poly1.c
*/ */
double computePolygonArea( const QList<QgsPoint>& points ); double computePolygonArea( const QList<QgsPoint>& points ) const;


double computePolygonFlatArea( const QList<QgsPoint>& points ); double computePolygonFlatArea( const QList<QgsPoint>& points ) const;


/** /**
precalculates some values precalculates some values
Expand All @@ -169,8 +169,8 @@ class CORE_EXPORT QgsDistanceArea


// utility functions for polygon area measurement // utility functions for polygon area measurement


double getQ( double x ); double getQ( double x ) const;
double getQbar( double x ); double getQbar( double x ) const;


// temporary area measurement stuff // temporary area measurement stuff


Expand Down

0 comments on commit c5bc778

Please sign in to comment.