double QgsScaleCalculator::calculate( const QgsRectangle &mapExtent, int canvasWidth ) { double conversionFactor = 0; double delta = 0; // calculation is based on the map units and extent, the dpi of the // users display, and the canvas width switch ( mMapUnits ) { case QGis::Meters: // convert meters to inches conversionFactor = 39.3700787; delta = mapExtent.xMaximum() - mapExtent.xMinimum(); break; case QGis::Feet: conversionFactor = 12.0; delta = mapExtent.xMaximum() - mapExtent.xMinimum(); break; default: case QGis::Degrees: // degrees require conversion to meters first conversionFactor = 39.3700787; delta = calculateGeographicDistance( mapExtent ); break; } if ( canvasWidth == 0 || mDpi == 0 ) { QgsDebugMsg( "Can't calculate scale from the input values" ); return 0; } double scale = ( delta * conversionFactor ) / (( double )canvasWidth / mDpi ); QgsDebugMsg( QString( "scale = %1 conversionFactor = %2" ).arg( scale ).arg( conversionFactor ) ); return scale; }
double QgsScaleCalculator::calculate( const QgsRectangle &mapExtent, double canvasWidth ) { double conversionFactor = 0; double delta = 0; // calculation is based on the map units and extent, the dpi of the // users display, and the canvas width switch ( mMapUnits ) { case QgsUnitTypes::DistanceMeters: // convert meters to inches conversionFactor = 39.3700787; delta = mapExtent.xMaximum() - mapExtent.xMinimum(); break; case QgsUnitTypes::DistanceFeet: conversionFactor = 12.0; delta = mapExtent.xMaximum() - mapExtent.xMinimum(); break; case QgsUnitTypes::DistanceNauticalMiles: // convert nautical miles to inches conversionFactor = 72913.4; delta = mapExtent.xMaximum() - mapExtent.xMinimum(); break; default: case QgsUnitTypes::DistanceDegrees: // degrees require conversion to meters first conversionFactor = 39.3700787; delta = calculateGeographicDistance( mapExtent ); break; } if ( qgsDoubleNear( canvasWidth, 0. ) || qgsDoubleNear( mDpi, 0.0 ) ) { QgsDebugMsg( QStringLiteral( "Can't calculate scale from the input values" ) ); return 0; } double scale = ( delta * conversionFactor ) / ( static_cast< double >( canvasWidth ) / mDpi ); QgsDebugMsgLevel( QStringLiteral( "scale = %1 conversionFactor = %2" ).arg( scale ).arg( conversionFactor ), 4 ); return scale; }