@@ -989,7 +989,7 @@ QString QgsDistanceArea::textUnit( double value, int decimals, QGis::UnitType u,
989989
990990void QgsDistanceArea::convertMeasurement ( double &measure, QGis::UnitType &measureUnits, QGis::UnitType displayUnits, bool isArea )
991991{
992- // Helper for converting between meters and feet
992+ // Helper for converting between meters and feet and degrees and NauticalMiles...
993993 // The parameters measure and measureUnits are in/out
994994
995995 if (( measureUnits == QGis::Degrees || measureUnits == QGis::Feet || measureUnits == QGis::NauticalMiles ) &&
@@ -1001,73 +1001,12 @@ void QgsDistanceArea::convertMeasurement( double &measure, QGis::UnitType &measu
10011001 QgsDebugMsg ( " We're measuring on an ellipsoid or using projections, the system is returning meters" );
10021002 }
10031003
1004- // Only convert between meters and feet
1005- if ( measureUnits == QGis::Meters && displayUnits == QGis::Feet )
1006- {
1007- QgsDebugMsg ( QString ( " Converting %1 meters" ).arg ( QString::number ( measure ) ) );
1008- measure /= 0.3048 ;
1009- if ( isArea )
1010- {
1011- measure /= 0.3048 ;
1012- }
1013- QgsDebugMsg ( QString ( " to %1 feet" ).arg ( QString::number ( measure ) ) );
1014- measureUnits = QGis::Feet;
1015- }
1016- if ( measureUnits == QGis::Feet && displayUnits == QGis::Meters )
1017- {
1018- QgsDebugMsg ( QString ( " Converting %1 feet" ).arg ( QString::number ( measure ) ) );
1019- measure *= 0.3048 ;
1020- if ( isArea )
1021- {
1022- measure *= 0.3048 ;
1023- }
1024- QgsDebugMsg ( QString ( " to %1 meters" ).arg ( QString::number ( measure ) ) );
1025- measureUnits = QGis::Meters;
1026- }
1004+ // Gets the conversion factor between the specified units
1005+ double factorUnits = QGis::fromUnitToUnitFactor ( measureUnits, displayUnits );
1006+ if ( isArea ) factorUnits *= factorUnits;
10271007
1028- if ( measureUnits == QGis::Meters && displayUnits == QGis::NauticalMiles )
1029- {
1030- QgsDebugMsg ( QString ( " Converting %1 meters" ).arg ( QString::number ( measure ) ) );
1031- measure /= 1852.0 ;
1032- if ( isArea )
1033- {
1034- measure /= 1852.0 ;
1035- }
1036- QgsDebugMsg ( QString ( " to %1 nautical miles" ).arg ( QString::number ( measure ) ) );
1037- measureUnits = QGis::NauticalMiles;
1038- }
1039- if ( measureUnits == QGis::NauticalMiles && displayUnits == QGis::Meters )
1040- {
1041- QgsDebugMsg ( QString ( " Converting %1 nautical miles" ).arg ( QString::number ( measure ) ) );
1042- measure *= 1852.0 ;
1043- if ( isArea )
1044- {
1045- measure *= 1852.0 ;
1046- }
1047- QgsDebugMsg ( QString ( " to %1 meters" ).arg ( QString::number ( measure ) ) );
1048- measureUnits = QGis::Meters;
1049- }
1050-
1051- if ( measureUnits == QGis::Feet && displayUnits == QGis::NauticalMiles )
1052- {
1053- QgsDebugMsg ( QString ( " Converting %1 meters" ).arg ( QString::number ( measure ) ) );
1054- measure /= 6076.12 ;
1055- if ( isArea )
1056- {
1057- measure /= 6076.12 ;
1058- }
1059- QgsDebugMsg ( QString ( " to %1 nautical miles" ).arg ( QString::number ( measure ) ) );
1060- measureUnits = QGis::Feet;
1061- }
1062- if ( measureUnits == QGis::NauticalMiles && displayUnits == QGis::Feet )
1063- {
1064- QgsDebugMsg ( QString ( " Converting %1 nautical miles" ).arg ( QString::number ( measure ) ) );
1065- measure *= 6076.12 ;
1066- if ( isArea )
1067- {
1068- measure *= 6076.12 ;
1069- }
1070- QgsDebugMsg ( QString ( " to %1 meters" ).arg ( QString::number ( measure ) ) );
1071- measureUnits = QGis::Feet;
1072- }
1008+ QgsDebugMsg ( QString ( " Converting %1 %2" ).arg ( QString::number ( measure ), QGis::toLiteral ( measureUnits ) ) );
1009+ measure *= factorUnits;
1010+ QgsDebugMsg ( QString ( " to %1 %2" ).arg ( QString::number ( measure ), QGis::toLiteral ( displayUnits ) ) );
1011+ measureUnits = displayUnits;
10731012}
0 commit comments