Skip to content

Commit

Permalink
Improve QgsScaleCalculator unit support, use standard unit conversion…
Browse files Browse the repository at this point in the history
… methods
  • Loading branch information
nyalldawson committed Apr 6, 2023
1 parent 693f744 commit 28b1159
Showing 1 changed file with 18 additions and 8 deletions.
26 changes: 18 additions & 8 deletions src/core/qgsscalecalculator.cpp
Expand Up @@ -20,6 +20,7 @@
#include "qgslogger.h"
#include "qgsscalecalculator.h"
#include "qgsrectangle.h"
#include "qgsunittypes.h"
#include <QSizeF>

QgsScaleCalculator::QgsScaleCalculator( double dpi, Qgis::DistanceUnit mapUnits )
Expand Down Expand Up @@ -89,20 +90,29 @@ QSizeF QgsScaleCalculator::calculateImageSize( const QgsRectangle &mapExtent, do
void QgsScaleCalculator::calculateMetrics( const QgsRectangle &mapExtent, double &delta, double &conversionFactor ) const
{
delta = mapExtent.xMaximum() - mapExtent.xMinimum();

switch ( mMapUnits )
{
case Qgis::DistanceUnit::Meters:
// convert meters to inches
conversionFactor = 39.3700787;
case Qgis::DistanceUnit::Inches:
conversionFactor = 1;
break;

case Qgis::DistanceUnit::Meters:
case Qgis::DistanceUnit::Kilometers:
case Qgis::DistanceUnit::Feet:
conversionFactor = 12.0;
break;
case Qgis::DistanceUnit::Yards:
case Qgis::DistanceUnit::Millimeters:
case Qgis::DistanceUnit::Centimeters:
case Qgis::DistanceUnit::Miles:
case Qgis::DistanceUnit::NauticalMiles:
// convert nautical miles to inches
conversionFactor = 72913.4;
// convert to inches
conversionFactor = QgsUnitTypes::fromUnitToUnitFactor( mMapUnits, Qgis::DistanceUnit::Inches );
break;
default:

case Qgis::DistanceUnit::Unknown:
// assume degrees to maintain old API
FALLTHROUGH

case Qgis::DistanceUnit::Degrees:
// degrees require conversion to meters first
conversionFactor = 39.3700787;
Expand Down

0 comments on commit 28b1159

Please sign in to comment.