26 , mMapUnits( mapUnits )
40 QgsDebugMsgLevel( QString(
"Map units set to %1" ).arg( QString::number( mapUnits ) ), 3 );
46 QgsDebugMsgLevel( QString(
"Map units returned as %1" ).arg( QString::number( mMapUnits ) ), 4 );
52 double conversionFactor = 0;
60 conversionFactor = 39.3700787;
64 conversionFactor = 12.0;
69 conversionFactor = 72913.4;
76 conversionFactor = 39.3700787;
82 QgsDebugMsg(
"Can't calculate scale from the input values" );
85 double scale = ( delta * conversionFactor ) / ( static_cast< double >( canvasWidth ) / mDpi );
86 QgsDebugMsgLevel( QString(
"scale = %1 conversionFactor = %2" ).arg( scale ).arg( conversionFactor ), 4 );
118 static const double RADS = ( 4.0 * std::atan( 1.0 ) ) / 180.0;
119 double a = std::pow( std::cos( lat * RADS ), 2 );
120 double c = 2.0 * std::atan2( std::sqrt( a ), std::sqrt( 1.0 - a ) );
121 static const double RA = 6378000;
124 static const double E = 0.0810820288;
125 double radius = RA * ( 1.0 - E * E ) /
126 std::pow( 1.0 - E * E * std::sin( lat * RADS ) * std::sin( lat * RADS ), 1.5 );
127 double meters = ( mapExtent.
xMaximum() - mapExtent.
xMinimum() ) / 180.0 * radius * c;
129 QgsDebugMsgLevel(
"Distance across map extent (m): " + QString::number( meters ), 4 );
double calculateGeographicDistance(const QgsRectangle &mapExtent)
Calculate the distance between two points in geographic coordinates.
A rectangle specified with double values.
QgsScaleCalculator(double dpi=0, QgsUnitTypes::DistanceUnit mapUnits=QgsUnitTypes::DistanceMeters)
Constructor.
void setDpi(double dpi)
Set the dpi to be used in scale calculations.
bool qgsDoubleNear(double a, double b, double epsilon=4 *DBL_EPSILON)
Compare two doubles (but allow some difference)
double calculate(const QgsRectangle &mapExtent, int canvasWidth)
Calculate the scale denominator.
#define QgsDebugMsgLevel(str, level)
void setMapUnits(QgsUnitTypes::DistanceUnit mapUnits)
Set the map units.
Degrees, for planar geographic CRS distance measurements.
double dpi()
Accessor for dpi used in scale calculations.
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
DistanceUnit
Units of distance.
double xMaximum() const
Returns the x maximum value (right side of rectangle).
double xMinimum() const
Returns the x minimum value (left side of rectangle).
double yMaximum() const
Returns the y maximum value (top side of rectangle).
QgsUnitTypes::DistanceUnit mapUnits() const
Returns current map units.