mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-17 00:04:02 -04:00
Add square nautical miles as a supported areal unit, add API
method for converting a distance unit to corresponding area unit
This commit is contained in:
parent
bd3bbc4707
commit
35c2d185fb
@ -31,6 +31,7 @@ class QgsUnitTypes
|
||||
SquareMiles, /*!< square miles */
|
||||
Hectares, /*!< hectares */
|
||||
Acres, /*!< acres */
|
||||
SquareNauticalMiles, /*!< square nautical miles */
|
||||
SquareDegrees, /*!< square degrees, for planar geographic CRS area measurements */
|
||||
UnknownAreaUnit, /*!< unknown areal unit */
|
||||
};
|
||||
@ -113,5 +114,11 @@ class QgsUnitTypes
|
||||
*/
|
||||
static double fromUnitToUnitFactor( AreaUnit fromUnit, AreaUnit toUnit );
|
||||
|
||||
/** Converts a distance unit to its corresponding area unit, eg meters to square meters
|
||||
* @param distanceUnit distance unit to convert
|
||||
* @return matching areal unit
|
||||
*/
|
||||
static AreaUnit distanceToAreaUnit( QGis::UnitType distanceUnit );
|
||||
|
||||
};
|
||||
|
||||
|
@ -52,6 +52,7 @@ QgsUnitTypes::DistanceUnitType QgsUnitTypes::unitType( QgsUnitTypes::AreaUnit un
|
||||
case SquareMiles:
|
||||
case Hectares:
|
||||
case Acres:
|
||||
case SquareNauticalMiles:
|
||||
return Standard;
|
||||
|
||||
case SquareDegrees:
|
||||
@ -193,30 +194,74 @@ double QgsUnitTypes::fromUnitToUnitFactor( QGis::UnitType fromUnit, QGis::UnitTy
|
||||
{
|
||||
case QGis::Meters:
|
||||
{
|
||||
if ( toUnit == QGis::Feet ) return 1.0 / FEET_TO_METER;
|
||||
if ( toUnit == QGis::Degrees ) return 1.0 / DEGREE_TO_METER;
|
||||
if ( toUnit == QGis::NauticalMiles ) return 1.0 / NMILE_TO_METER;
|
||||
switch ( toUnit )
|
||||
{
|
||||
case QGis::Meters:
|
||||
return 1.0;
|
||||
case QGis::Feet:
|
||||
return 1.0 / FEET_TO_METER;
|
||||
case QGis::Degrees:
|
||||
return 1.0 / DEGREE_TO_METER;
|
||||
case QGis::NauticalMiles:
|
||||
return 1.0 / NMILE_TO_METER;
|
||||
case QGis::UnknownUnit:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case QGis::Feet:
|
||||
{
|
||||
if ( toUnit == QGis::Meters ) return FEET_TO_METER;
|
||||
if ( toUnit == QGis::Degrees ) return FEET_TO_METER / DEGREE_TO_METER;
|
||||
if ( toUnit == QGis::NauticalMiles ) return FEET_TO_METER / NMILE_TO_METER;
|
||||
switch ( toUnit )
|
||||
{
|
||||
case QGis::Meters:
|
||||
return FEET_TO_METER;
|
||||
case QGis::Feet:
|
||||
return 1.0;
|
||||
case QGis::Degrees:
|
||||
return FEET_TO_METER / DEGREE_TO_METER;
|
||||
case QGis::NauticalMiles:
|
||||
return FEET_TO_METER / NMILE_TO_METER;
|
||||
case QGis::UnknownUnit:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case QGis::Degrees:
|
||||
{
|
||||
if ( toUnit == QGis::Meters ) return DEGREE_TO_METER;
|
||||
if ( toUnit == QGis::Feet ) return DEGREE_TO_METER / FEET_TO_METER;
|
||||
if ( toUnit == QGis::NauticalMiles ) return DEGREE_TO_METER / NMILE_TO_METER;
|
||||
switch ( toUnit )
|
||||
{
|
||||
case QGis::Meters:
|
||||
return DEGREE_TO_METER;
|
||||
case QGis::Feet:
|
||||
return DEGREE_TO_METER / FEET_TO_METER;
|
||||
case QGis::Degrees:
|
||||
return 1.0;
|
||||
case QGis::NauticalMiles:
|
||||
return DEGREE_TO_METER / NMILE_TO_METER;
|
||||
case QGis::UnknownUnit:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case QGis::NauticalMiles:
|
||||
{
|
||||
if ( toUnit == QGis::Meters ) return NMILE_TO_METER;
|
||||
if ( toUnit == QGis::Feet ) return NMILE_TO_METER / FEET_TO_METER;
|
||||
if ( toUnit == QGis::Degrees ) return NMILE_TO_METER / DEGREE_TO_METER;
|
||||
switch ( toUnit )
|
||||
{
|
||||
case QGis::Meters:
|
||||
return NMILE_TO_METER;
|
||||
case QGis::Feet:
|
||||
return NMILE_TO_METER / FEET_TO_METER;
|
||||
case QGis::Degrees:
|
||||
return NMILE_TO_METER / DEGREE_TO_METER;
|
||||
case QGis::NauticalMiles:
|
||||
return 1.0;
|
||||
case QGis::UnknownUnit:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case QGis::UnknownUnit:
|
||||
@ -244,6 +289,8 @@ QString QgsUnitTypes::encodeUnit( QgsUnitTypes::AreaUnit unit )
|
||||
return "ha";
|
||||
case Acres:
|
||||
return "ac";
|
||||
case SquareNauticalMiles:
|
||||
return "nm2";
|
||||
case SquareDegrees:
|
||||
return "deg2";
|
||||
case UnknownAreaUnit:
|
||||
@ -273,8 +320,8 @@ QgsUnitTypes::AreaUnit QgsUnitTypes::decodeAreaUnit( const QString& string, bool
|
||||
return Hectares;
|
||||
if ( normalized == encodeUnit( Acres ) )
|
||||
return Acres;
|
||||
if ( normalized == encodeUnit( SquareMiles ) )
|
||||
return SquareMiles;
|
||||
if ( normalized == encodeUnit( SquareNauticalMiles ) )
|
||||
return SquareNauticalMiles;
|
||||
if ( normalized == encodeUnit( SquareDegrees ) )
|
||||
return SquareDegrees;
|
||||
if ( normalized == encodeUnit( UnknownAreaUnit ) )
|
||||
@ -304,6 +351,8 @@ QString QgsUnitTypes::toString( QgsUnitTypes::AreaUnit unit )
|
||||
return QCoreApplication::translate( "QgsUnitTypes::AreaUnit", "hectares" );
|
||||
case Acres:
|
||||
return QCoreApplication::translate( "QgsUnitTypes::AreaUnit", "acres" );
|
||||
case SquareNauticalMiles:
|
||||
return QCoreApplication::translate( "QgsUnitTypes::AreaUnit", "square nautical miles" );
|
||||
case SquareDegrees:
|
||||
return QCoreApplication::translate( "QgsUnitTypes::AreaUnit", "square degrees" );
|
||||
case UnknownAreaUnit:
|
||||
@ -333,6 +382,8 @@ QgsUnitTypes::AreaUnit QgsUnitTypes::stringToAreaUnit( const QString& string, bo
|
||||
return Hectares;
|
||||
if ( normalized == toString( Acres ) )
|
||||
return Acres;
|
||||
if ( normalized == toString( SquareNauticalMiles ) )
|
||||
return SquareNauticalMiles;
|
||||
if ( normalized == toString( SquareDegrees ) )
|
||||
return SquareDegrees;
|
||||
if ( normalized == toString( UnknownAreaUnit ) )
|
||||
@ -352,6 +403,7 @@ double QgsUnitTypes::fromUnitToUnitFactor( QgsUnitTypes::AreaUnit fromUnit, QgsU
|
||||
#define HA_TO_M2 10000.0
|
||||
#define AC_TO_FT2 43560.0
|
||||
#define DEG2_TO_M2 12392029030.5
|
||||
#define NM2_TO_M2 3429904.0
|
||||
|
||||
// Calculate the conversion factor between the specified units
|
||||
if ( fromUnit != toUnit )
|
||||
@ -360,98 +412,259 @@ double QgsUnitTypes::fromUnitToUnitFactor( QgsUnitTypes::AreaUnit fromUnit, QgsU
|
||||
{
|
||||
case SquareMeters:
|
||||
{
|
||||
if ( toUnit == SquareKilometers ) return 1.0 / KM2_TO_M2;
|
||||
if ( toUnit == SquareFeet ) return 1.0 / FT2_TO_M2;
|
||||
if ( toUnit == SquareYards ) return 1.0 / YD2_TO_M2;
|
||||
if ( toUnit == SquareMiles ) return 1.0 / MI2_TO_M2;
|
||||
if ( toUnit == Hectares ) return 1.0 / HA_TO_M2;
|
||||
if ( toUnit == Acres ) return 1.0 / AC_TO_FT2 / FT2_TO_M2;
|
||||
if ( toUnit == SquareDegrees ) return 1.0 / DEG2_TO_M2;
|
||||
switch ( toUnit )
|
||||
{
|
||||
case SquareMeters:
|
||||
return 1.0;
|
||||
case SquareKilometers:
|
||||
return 1.0 / KM2_TO_M2;
|
||||
case SquareFeet:
|
||||
return 1.0 / FT2_TO_M2;
|
||||
case SquareYards:
|
||||
return 1.0 / YD2_TO_M2;
|
||||
case SquareMiles:
|
||||
return 1.0 / MI2_TO_M2;
|
||||
case Hectares:
|
||||
return 1.0 / HA_TO_M2;
|
||||
case Acres:
|
||||
return 1.0 / AC_TO_FT2 / FT2_TO_M2;
|
||||
case SquareNauticalMiles:
|
||||
return 1.0 / NM2_TO_M2;
|
||||
case SquareDegrees:
|
||||
return 1.0 / DEG2_TO_M2;
|
||||
case UnknownAreaUnit:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SquareKilometers:
|
||||
{
|
||||
if ( toUnit == SquareMeters ) return KM2_TO_M2;
|
||||
if ( toUnit == SquareFeet ) return KM2_TO_M2 / FT2_TO_M2 ;
|
||||
if ( toUnit == SquareYards ) return KM2_TO_M2 / YD2_TO_M2;
|
||||
if ( toUnit == SquareMiles ) return KM2_TO_M2 / MI2_TO_M2;
|
||||
if ( toUnit == Hectares ) return KM2_TO_M2 / HA_TO_M2;
|
||||
if ( toUnit == Acres ) return KM2_TO_M2 / AC_TO_FT2 / FT2_TO_M2 ;
|
||||
if ( toUnit == SquareDegrees ) return KM2_TO_M2 / DEG2_TO_M2;
|
||||
switch ( toUnit )
|
||||
{
|
||||
case SquareMeters:
|
||||
return KM2_TO_M2;
|
||||
case SquareKilometers:
|
||||
return 1.0;
|
||||
case SquareFeet:
|
||||
return KM2_TO_M2 / FT2_TO_M2 ;
|
||||
case SquareYards:
|
||||
return KM2_TO_M2 / YD2_TO_M2;
|
||||
case SquareMiles:
|
||||
return KM2_TO_M2 / MI2_TO_M2;
|
||||
case Hectares:
|
||||
return KM2_TO_M2 / HA_TO_M2;
|
||||
case Acres:
|
||||
return KM2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
|
||||
case SquareNauticalMiles:
|
||||
return KM2_TO_M2 / NM2_TO_M2;
|
||||
case SquareDegrees:
|
||||
return KM2_TO_M2 / DEG2_TO_M2;
|
||||
case UnknownAreaUnit:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SquareFeet:
|
||||
{
|
||||
if ( toUnit == SquareMeters ) return FT2_TO_M2;
|
||||
if ( toUnit == SquareKilometers ) return FT2_TO_M2 / KM2_TO_M2;
|
||||
if ( toUnit == SquareYards ) return FT2_TO_M2 / YD2_TO_M2;
|
||||
if ( toUnit == SquareMiles ) return FT2_TO_M2 / MI2_TO_M2;
|
||||
if ( toUnit == Hectares ) return FT2_TO_M2 / HA_TO_M2;
|
||||
if ( toUnit == Acres ) return 1.0 / AC_TO_FT2;
|
||||
if ( toUnit == SquareDegrees ) return FT2_TO_M2 / DEG2_TO_M2;
|
||||
switch ( toUnit )
|
||||
{
|
||||
case SquareMeters:
|
||||
return FT2_TO_M2;
|
||||
case SquareKilometers:
|
||||
return FT2_TO_M2 / KM2_TO_M2;
|
||||
case SquareFeet:
|
||||
return 1.0;
|
||||
case SquareYards:
|
||||
return FT2_TO_M2 / YD2_TO_M2;
|
||||
case SquareMiles:
|
||||
return FT2_TO_M2 / MI2_TO_M2;
|
||||
case Hectares:
|
||||
return FT2_TO_M2 / HA_TO_M2;
|
||||
case Acres:
|
||||
return 1.0 / AC_TO_FT2;
|
||||
case SquareNauticalMiles:
|
||||
return FT2_TO_M2 / NM2_TO_M2;
|
||||
case SquareDegrees:
|
||||
return FT2_TO_M2 / DEG2_TO_M2;
|
||||
case UnknownAreaUnit:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case SquareYards:
|
||||
{
|
||||
if ( toUnit == SquareMeters ) return YD2_TO_M2;
|
||||
if ( toUnit == SquareKilometers ) return YD2_TO_M2 / KM2_TO_M2;
|
||||
if ( toUnit == SquareFeet ) return YD2_TO_M2 / FT2_TO_M2;
|
||||
if ( toUnit == SquareMiles ) return YD2_TO_M2 / MI2_TO_M2;
|
||||
if ( toUnit == Hectares ) return YD2_TO_M2 / HA_TO_M2;
|
||||
if ( toUnit == Acres ) return YD2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
|
||||
if ( toUnit == SquareDegrees ) return YD2_TO_M2 / DEG2_TO_M2;
|
||||
switch ( toUnit )
|
||||
{
|
||||
case SquareMeters:
|
||||
return YD2_TO_M2;
|
||||
case SquareKilometers:
|
||||
return YD2_TO_M2 / KM2_TO_M2;
|
||||
case SquareFeet:
|
||||
return YD2_TO_M2 / FT2_TO_M2;
|
||||
case SquareYards:
|
||||
return 1.0;
|
||||
case SquareMiles:
|
||||
return YD2_TO_M2 / MI2_TO_M2;
|
||||
case Hectares:
|
||||
return YD2_TO_M2 / HA_TO_M2;
|
||||
case Acres:
|
||||
return YD2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
|
||||
case SquareNauticalMiles:
|
||||
return YD2_TO_M2 / NM2_TO_M2;
|
||||
case SquareDegrees:
|
||||
return YD2_TO_M2 / DEG2_TO_M2;
|
||||
case UnknownAreaUnit:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case SquareMiles:
|
||||
{
|
||||
if ( toUnit == SquareMeters ) return MI2_TO_M2;
|
||||
if ( toUnit == SquareKilometers ) return MI2_TO_M2 / KM2_TO_M2;
|
||||
if ( toUnit == SquareFeet ) return MI2_TO_M2 / FT2_TO_M2;
|
||||
if ( toUnit == SquareYards ) return MI2_TO_M2 / YD2_TO_M2;
|
||||
if ( toUnit == Hectares ) return MI2_TO_M2 / HA_TO_M2;
|
||||
if ( toUnit == Acres ) return MI2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
|
||||
if ( toUnit == SquareDegrees ) return MI2_TO_M2 / DEG2_TO_M2;
|
||||
switch ( toUnit )
|
||||
{
|
||||
case SquareMeters:
|
||||
return MI2_TO_M2;
|
||||
case SquareKilometers:
|
||||
return MI2_TO_M2 / KM2_TO_M2;
|
||||
case SquareFeet:
|
||||
return MI2_TO_M2 / FT2_TO_M2;
|
||||
case SquareYards:
|
||||
return MI2_TO_M2 / YD2_TO_M2;
|
||||
case SquareMiles:
|
||||
return 1.0;
|
||||
case Hectares:
|
||||
return MI2_TO_M2 / HA_TO_M2;
|
||||
case Acres:
|
||||
return MI2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
|
||||
case SquareNauticalMiles:
|
||||
return MI2_TO_M2 / NM2_TO_M2;
|
||||
case SquareDegrees:
|
||||
return MI2_TO_M2 / DEG2_TO_M2;
|
||||
case UnknownAreaUnit:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Hectares:
|
||||
{
|
||||
if ( toUnit == SquareMeters ) return HA_TO_M2;
|
||||
if ( toUnit == SquareKilometers ) return HA_TO_M2 / KM2_TO_M2;
|
||||
if ( toUnit == SquareFeet ) return HA_TO_M2 / FT2_TO_M2;
|
||||
if ( toUnit == SquareYards ) return HA_TO_M2 / YD2_TO_M2;
|
||||
if ( toUnit == SquareMiles ) return HA_TO_M2 / MI2_TO_M2;
|
||||
if ( toUnit == Acres ) return HA_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
|
||||
if ( toUnit == SquareDegrees ) return HA_TO_M2 / DEG2_TO_M2;
|
||||
switch ( toUnit )
|
||||
{
|
||||
case SquareMeters:
|
||||
return HA_TO_M2;
|
||||
case SquareKilometers:
|
||||
return HA_TO_M2 / KM2_TO_M2;
|
||||
case SquareFeet:
|
||||
return HA_TO_M2 / FT2_TO_M2;
|
||||
case SquareYards:
|
||||
return HA_TO_M2 / YD2_TO_M2;
|
||||
case SquareMiles:
|
||||
return HA_TO_M2 / MI2_TO_M2;
|
||||
case Hectares:
|
||||
return 1.0;
|
||||
case Acres:
|
||||
return HA_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
|
||||
case SquareNauticalMiles:
|
||||
return HA_TO_M2 / NM2_TO_M2;
|
||||
case SquareDegrees:
|
||||
return HA_TO_M2 / DEG2_TO_M2;
|
||||
case UnknownAreaUnit:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case Acres:
|
||||
{
|
||||
if ( toUnit == SquareMeters ) return AC_TO_FT2 * FT2_TO_M2;
|
||||
if ( toUnit == SquareKilometers ) return AC_TO_FT2 * FT2_TO_M2 / KM2_TO_M2;
|
||||
if ( toUnit == SquareFeet ) return AC_TO_FT2;
|
||||
if ( toUnit == SquareYards ) return AC_TO_FT2 * FT2_TO_M2 / YD2_TO_M2;
|
||||
if ( toUnit == SquareMiles ) return AC_TO_FT2 * FT2_TO_M2 / MI2_TO_M2;
|
||||
if ( toUnit == Hectares ) return AC_TO_FT2 * FT2_TO_M2 / HA_TO_M2;
|
||||
if ( toUnit == SquareDegrees ) return AC_TO_FT2 * FT2_TO_M2 / DEG2_TO_M2;
|
||||
switch ( toUnit )
|
||||
{
|
||||
case SquareMeters:
|
||||
return AC_TO_FT2 * FT2_TO_M2;
|
||||
case SquareKilometers:
|
||||
return AC_TO_FT2 * FT2_TO_M2 / KM2_TO_M2;
|
||||
case SquareFeet:
|
||||
return AC_TO_FT2;
|
||||
case SquareYards:
|
||||
return AC_TO_FT2 * FT2_TO_M2 / YD2_TO_M2;
|
||||
case SquareMiles:
|
||||
return AC_TO_FT2 * FT2_TO_M2 / MI2_TO_M2;
|
||||
case Hectares:
|
||||
return AC_TO_FT2 * FT2_TO_M2 / HA_TO_M2;
|
||||
case Acres:
|
||||
return 1.0;
|
||||
case SquareNauticalMiles:
|
||||
return AC_TO_FT2 * FT2_TO_M2 / NM2_TO_M2;
|
||||
case SquareDegrees:
|
||||
return AC_TO_FT2 * FT2_TO_M2 / DEG2_TO_M2;
|
||||
case UnknownAreaUnit:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case SquareNauticalMiles:
|
||||
{
|
||||
switch ( toUnit )
|
||||
{
|
||||
case SquareMeters:
|
||||
return NM2_TO_M2;
|
||||
case SquareKilometers:
|
||||
return NM2_TO_M2 / KM2_TO_M2;
|
||||
case SquareFeet:
|
||||
return NM2_TO_M2 / FT2_TO_M2;
|
||||
case SquareYards:
|
||||
return NM2_TO_M2 / YD2_TO_M2;
|
||||
case SquareMiles:
|
||||
return NM2_TO_M2 / MI2_TO_M2;
|
||||
case Hectares:
|
||||
return NM2_TO_M2 / HA_TO_M2;
|
||||
case Acres:
|
||||
return NM2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
|
||||
case SquareNauticalMiles:
|
||||
return 1.0;
|
||||
case SquareDegrees:
|
||||
return NM2_TO_M2 / DEG2_TO_M2;
|
||||
case UnknownAreaUnit:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case SquareDegrees:
|
||||
{
|
||||
if ( toUnit == SquareMeters ) return DEG2_TO_M2;
|
||||
if ( toUnit == SquareKilometers ) return DEG2_TO_M2 / KM2_TO_M2;
|
||||
if ( toUnit == SquareFeet ) return DEG2_TO_M2 / FT2_TO_M2;
|
||||
if ( toUnit == SquareYards ) return DEG2_TO_M2 / YD2_TO_M2;
|
||||
if ( toUnit == SquareMiles ) return DEG2_TO_M2 / MI2_TO_M2;
|
||||
if ( toUnit == Hectares ) return DEG2_TO_M2 / HA_TO_M2;
|
||||
if ( toUnit == Acres ) return DEG2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
|
||||
switch ( toUnit )
|
||||
{
|
||||
case SquareMeters:
|
||||
return DEG2_TO_M2;
|
||||
case SquareKilometers:
|
||||
return DEG2_TO_M2 / KM2_TO_M2;
|
||||
case SquareFeet:
|
||||
return DEG2_TO_M2 / FT2_TO_M2;
|
||||
case SquareYards:
|
||||
return DEG2_TO_M2 / YD2_TO_M2;
|
||||
case SquareMiles:
|
||||
return DEG2_TO_M2 / MI2_TO_M2;
|
||||
case Hectares:
|
||||
return DEG2_TO_M2 / HA_TO_M2;
|
||||
case Acres:
|
||||
return DEG2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
|
||||
case SquareNauticalMiles:
|
||||
return DEG2_TO_M2 / NM2_TO_M2;
|
||||
case SquareDegrees:
|
||||
return 1.0;
|
||||
case UnknownAreaUnit:
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
@ -462,6 +675,29 @@ double QgsUnitTypes::fromUnitToUnitFactor( QgsUnitTypes::AreaUnit fromUnit, QgsU
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
QgsUnitTypes::AreaUnit QgsUnitTypes::distanceToAreaUnit( QGis::UnitType distanceUnit )
|
||||
{
|
||||
switch ( distanceUnit )
|
||||
{
|
||||
case QGis::Meters:
|
||||
return SquareMeters;
|
||||
|
||||
case QGis::Feet:
|
||||
return SquareFeet;
|
||||
|
||||
case QGis::Degrees:
|
||||
return SquareDegrees;
|
||||
|
||||
case QGis::UnknownUnit:
|
||||
return UnknownAreaUnit;
|
||||
|
||||
case QGis::NauticalMiles:
|
||||
return SquareNauticalMiles;
|
||||
}
|
||||
|
||||
return UnknownAreaUnit;
|
||||
}
|
||||
|
||||
// enable for QGIS 3.0
|
||||
#if 0
|
||||
|
||||
|
@ -55,6 +55,7 @@ class CORE_EXPORT QgsUnitTypes
|
||||
SquareMiles, /*!< square miles */
|
||||
Hectares, /*!< hectares */
|
||||
Acres, /*!< acres */
|
||||
SquareNauticalMiles, /*!< square nautical miles */
|
||||
SquareDegrees, /*!< square degrees, for planar geographic CRS area measurements */
|
||||
UnknownAreaUnit, /*!< unknown areal unit */
|
||||
};
|
||||
@ -141,6 +142,12 @@ class CORE_EXPORT QgsUnitTypes
|
||||
*/
|
||||
static double fromUnitToUnitFactor( AreaUnit fromUnit, AreaUnit toUnit );
|
||||
|
||||
/** Converts a distance unit to its corresponding area unit, eg meters to square meters
|
||||
* @param distanceUnit distance unit to convert
|
||||
* @return matching areal unit
|
||||
*/
|
||||
static AreaUnit distanceToAreaUnit( QGis::UnitType distanceUnit );
|
||||
|
||||
//TODO QGIS 3.0 - enable and move symbol units here! Otherwise creates circular dependancies...
|
||||
#if 0
|
||||
// SYMBOL UNITS
|
||||
|
@ -92,6 +92,7 @@ class TestQgsUnitTypes(unittest.TestCase):
|
||||
QgsUnitTypes.SquareMiles: QgsUnitTypes.Standard,
|
||||
QgsUnitTypes.Hectares: QgsUnitTypes.Standard,
|
||||
QgsUnitTypes.Acres: QgsUnitTypes.Standard,
|
||||
QgsUnitTypes.SquareNauticalMiles: QgsUnitTypes.Standard,
|
||||
QgsUnitTypes.SquareDegrees: QgsUnitTypes.Geographic,
|
||||
QgsUnitTypes.UnknownAreaUnit: QgsUnitTypes.UnknownType,
|
||||
}
|
||||
@ -108,6 +109,7 @@ class TestQgsUnitTypes(unittest.TestCase):
|
||||
QgsUnitTypes.SquareMiles,
|
||||
QgsUnitTypes.Hectares,
|
||||
QgsUnitTypes.Acres,
|
||||
QgsUnitTypes.SquareNauticalMiles,
|
||||
QgsUnitTypes.SquareDegrees,
|
||||
QgsUnitTypes.UnknownAreaUnit]
|
||||
|
||||
@ -135,6 +137,7 @@ class TestQgsUnitTypes(unittest.TestCase):
|
||||
QgsUnitTypes.SquareMiles,
|
||||
QgsUnitTypes.Hectares,
|
||||
QgsUnitTypes.Acres,
|
||||
QgsUnitTypes.SquareNauticalMiles,
|
||||
QgsUnitTypes.SquareDegrees,
|
||||
QgsUnitTypes.UnknownAreaUnit]
|
||||
|
||||
@ -206,14 +209,15 @@ class TestQgsUnitTypes(unittest.TestCase):
|
||||
def testAreaFromUnitToUnitFactor(self):
|
||||
"""Test calculation of conversion factor between areal units"""
|
||||
|
||||
expected = {QgsUnitTypes.SquareMeters: {QgsUnitTypes.SquareMeters: 1.0, QgsUnitTypes.SquareKilometers: 1e-6, QgsUnitTypes.SquareFeet: 10.7639104, QgsUnitTypes.SquareYards: 1.19599, QgsUnitTypes.SquareMiles: 3.86102e-7, QgsUnitTypes.Hectares: 0.0001, QgsUnitTypes.Acres: 0.000247105, QgsUnitTypes.SquareDegrees: 0.000000000080697, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.SquareKilometers: {QgsUnitTypes.SquareMeters: 1e6, QgsUnitTypes.SquareKilometers: 1, QgsUnitTypes.SquareFeet: 10763910.4167097, QgsUnitTypes.SquareYards: 1195990.04630108, QgsUnitTypes.SquareMiles: 0.386102158, QgsUnitTypes.Hectares: 100, QgsUnitTypes.Acres: 247.105381467, QgsUnitTypes.SquareDegrees: 0.000080697034968, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.SquareFeet: {QgsUnitTypes.SquareMeters: 0.092903, QgsUnitTypes.SquareKilometers: 9.2903e-8, QgsUnitTypes.SquareFeet: 1.0, QgsUnitTypes.SquareYards: 0.11111111111, QgsUnitTypes.SquareMiles: 3.58701e-8, QgsUnitTypes.Hectares: 9.2903e-6, QgsUnitTypes.Acres: 2.29568e-5, QgsUnitTypes.SquareDegrees: 0.000000000007497, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.SquareYards: {QgsUnitTypes.SquareMeters: 0.836127360, QgsUnitTypes.SquareKilometers: 8.36127e-7, QgsUnitTypes.SquareFeet: 9.0, QgsUnitTypes.SquareYards: 1.0, QgsUnitTypes.SquareMiles: 3.22831e-7, QgsUnitTypes.Hectares: 8.3612736E-5, QgsUnitTypes.Acres: 0.00020661157, QgsUnitTypes.SquareDegrees: 0.000000000067473, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.SquareMiles: {QgsUnitTypes.SquareMeters: 2589988.110336, QgsUnitTypes.SquareKilometers: 2.589988110, QgsUnitTypes.SquareFeet: 27878400, QgsUnitTypes.SquareYards: 3097600, QgsUnitTypes.SquareMiles: 1.0, QgsUnitTypes.Hectares: 258.998811, QgsUnitTypes.Acres: 640, QgsUnitTypes.SquareDegrees: 0.000209004361107, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.Hectares: {QgsUnitTypes.SquareMeters: 10000, QgsUnitTypes.SquareKilometers: 0.01, QgsUnitTypes.SquareFeet: 107639.1041670972, QgsUnitTypes.SquareYards: 11959.9004630, QgsUnitTypes.SquareMiles: 0.00386102, QgsUnitTypes.Hectares: 1.0, QgsUnitTypes.Acres: 2.471053814, QgsUnitTypes.SquareDegrees: 0.000000806970350, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.Acres: {QgsUnitTypes.SquareMeters: 4046.8564224, QgsUnitTypes.SquareKilometers: 0.00404686, QgsUnitTypes.SquareFeet: 43560, QgsUnitTypes.SquareYards: 4840, QgsUnitTypes.SquareMiles: 0.0015625, QgsUnitTypes.Hectares: 0.404685642, QgsUnitTypes.Acres: 1.0, QgsUnitTypes.SquareDegrees: 0.000000326569314, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.SquareDegrees: {QgsUnitTypes.SquareMeters: 12392029030.5, QgsUnitTypes.SquareKilometers: 12392.029030499, QgsUnitTypes.SquareFeet: 133386690365.5682220, QgsUnitTypes.SquareYards: 14820743373.9520263, QgsUnitTypes.SquareMiles: 4784.5891573967, QgsUnitTypes.Hectares: 1239202.903050, QgsUnitTypes.Acres: 3062137.060733889, QgsUnitTypes.SquareDegrees: 1.0, QgsUnitTypes.UnknownAreaUnit: 1.0}}
|
||||
expected = {QgsUnitTypes.SquareMeters: {QgsUnitTypes.SquareMeters: 1.0, QgsUnitTypes.SquareKilometers: 1e-6, QgsUnitTypes.SquareFeet: 10.7639104, QgsUnitTypes.SquareYards: 1.19599, QgsUnitTypes.SquareMiles: 3.86102e-7, QgsUnitTypes.Hectares: 0.0001, QgsUnitTypes.Acres: 0.000247105, QgsUnitTypes.SquareNauticalMiles: 2.91553e-7, QgsUnitTypes.SquareDegrees: 0.000000000080697, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.SquareKilometers: {QgsUnitTypes.SquareMeters: 1e6, QgsUnitTypes.SquareKilometers: 1, QgsUnitTypes.SquareFeet: 10763910.4167097, QgsUnitTypes.SquareYards: 1195990.04630108, QgsUnitTypes.SquareMiles: 0.386102158, QgsUnitTypes.Hectares: 100, QgsUnitTypes.Acres: 247.105381467, QgsUnitTypes.SquareNauticalMiles: 0.291553349598, QgsUnitTypes.SquareDegrees: 0.000080697034968, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.SquareFeet: {QgsUnitTypes.SquareMeters: 0.092903, QgsUnitTypes.SquareKilometers: 9.2903e-8, QgsUnitTypes.SquareFeet: 1.0, QgsUnitTypes.SquareYards: 0.11111111111, QgsUnitTypes.SquareMiles: 3.58701e-8, QgsUnitTypes.Hectares: 9.2903e-6, QgsUnitTypes.Acres: 2.29568e-5, QgsUnitTypes.SquareNauticalMiles: 2.70862e-8, QgsUnitTypes.SquareDegrees: 0.000000000007497, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.SquareYards: {QgsUnitTypes.SquareMeters: 0.836127360, QgsUnitTypes.SquareKilometers: 8.36127e-7, QgsUnitTypes.SquareFeet: 9.0, QgsUnitTypes.SquareYards: 1.0, QgsUnitTypes.SquareMiles: 3.22831e-7, QgsUnitTypes.Hectares: 8.3612736E-5, QgsUnitTypes.Acres: 0.00020661157, QgsUnitTypes.SquareNauticalMiles: 2.43776e-7, QgsUnitTypes.SquareDegrees: 0.000000000067473, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.SquareMiles: {QgsUnitTypes.SquareMeters: 2589988.110336, QgsUnitTypes.SquareKilometers: 2.589988110, QgsUnitTypes.SquareFeet: 27878400, QgsUnitTypes.SquareYards: 3097600, QgsUnitTypes.SquareMiles: 1.0, QgsUnitTypes.Hectares: 258.998811, QgsUnitTypes.Acres: 640, QgsUnitTypes.SquareNauticalMiles: 0.75511970898, QgsUnitTypes.SquareDegrees: 0.000209004361107, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.Hectares: {QgsUnitTypes.SquareMeters: 10000, QgsUnitTypes.SquareKilometers: 0.01, QgsUnitTypes.SquareFeet: 107639.1041670972, QgsUnitTypes.SquareYards: 11959.9004630, QgsUnitTypes.SquareMiles: 0.00386102, QgsUnitTypes.Hectares: 1.0, QgsUnitTypes.Acres: 2.471053814, QgsUnitTypes.SquareNauticalMiles: 0.00291553, QgsUnitTypes.SquareDegrees: 0.000000806970350, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.Acres: {QgsUnitTypes.SquareMeters: 4046.8564224, QgsUnitTypes.SquareKilometers: 0.00404686, QgsUnitTypes.SquareFeet: 43560, QgsUnitTypes.SquareYards: 4840, QgsUnitTypes.SquareMiles: 0.0015625, QgsUnitTypes.Hectares: 0.404685642, QgsUnitTypes.Acres: 1.0, QgsUnitTypes.SquareNauticalMiles: 0.00117987, QgsUnitTypes.SquareDegrees: 0.000000326569314, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.SquareNauticalMiles: {QgsUnitTypes.SquareMeters: 3429904, QgsUnitTypes.SquareKilometers: 3.4299040, QgsUnitTypes.SquareFeet: 36919179.39391434, QgsUnitTypes.SquareYards: 4102131.04376826, QgsUnitTypes.SquareMiles: 1.324293337, QgsUnitTypes.Hectares: 342.9904000000, QgsUnitTypes.Acres: 847.54773631, QgsUnitTypes.SquareNauticalMiles: 1.0, QgsUnitTypes.SquareDegrees: 0.000276783083025, QgsUnitTypes.UnknownAreaUnit: 1.0},
|
||||
QgsUnitTypes.SquareDegrees: {QgsUnitTypes.SquareMeters: 12392029030.5, QgsUnitTypes.SquareKilometers: 12392.029030499, QgsUnitTypes.SquareFeet: 133386690365.5682220, QgsUnitTypes.SquareYards: 14820743373.9520263, QgsUnitTypes.SquareMiles: 4784.5891573967, QgsUnitTypes.Hectares: 1239202.903050, QgsUnitTypes.Acres: 3062137.060733889, QgsUnitTypes.SquareNauticalMiles: 3612.93757215, QgsUnitTypes.SquareDegrees: 1.0, QgsUnitTypes.UnknownAreaUnit: 1.0}}
|
||||
|
||||
for from_unit in expected.keys():
|
||||
for to_unit in expected[from_unit].keys():
|
||||
@ -231,6 +235,18 @@ class TestQgsUnitTypes(unittest.TestCase):
|
||||
msg='got {:.7f}, expected 1.0 when converting from {} to unknown units'.format(res, expected_factor,
|
||||
QgsUnitTypes.toString(from_unit)))
|
||||
|
||||
def testDistanceToAreaUnit(self):
|
||||
"""Test distanceToAreaUnit conversion"""
|
||||
expected = {QGis.Meters: QgsUnitTypes.SquareMeters,
|
||||
QGis.Feet: QgsUnitTypes.SquareFeet,
|
||||
QGis.Degrees: QgsUnitTypes.SquareDegrees,
|
||||
QGis.UnknownUnit: QgsUnitTypes.UnknownAreaUnit,
|
||||
QGis.NauticalMiles: QgsUnitTypes.SquareNauticalMiles
|
||||
}
|
||||
|
||||
for t in expected.keys():
|
||||
self.assertEqual(QgsUnitTypes.distanceToAreaUnit(t), expected[t])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
Loading…
x
Reference in New Issue
Block a user