QGIS API Documentation 3.99.0-Master (26c88405ac0)
Loading...
Searching...
No Matches
qgsunittypes.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsunittypes.cpp
3 --------------
4 begin : February 2016
5 copyright : (C) 2016 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8/***************************************************************************
9 * *
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 ***************************************************************************/
16
17#include "qgsunittypes.h"
18
19#include "qgis.h"
20
21#include "moc_qgsunittypes.cpp"
22
23/***************************************************************************
24 * This class is considered CRITICAL and any change MUST be accompanied with
25 * full unit tests in test_qgsunittypes.py.
26 * See details in QEP #17
27 ****************************************************************************/
28
30{
31 switch ( type )
32 {
34 return QStringLiteral( "distance" );
35
37 return QStringLiteral( "area" );
38
40 return QStringLiteral( "volume" );
41
43 return QStringLiteral( "temporal" );
44
46 return QStringLiteral( "<unknown>" );
47
48 }
49 return QString();
50}
51
52Qgis::UnitType QgsUnitTypes::decodeUnitType( const QString &string, bool *ok )
53{
54 const QString normalized = string.trimmed().toLower();
55
56 if ( ok )
57 *ok = true;
58
59 if ( normalized == encodeUnitType( Qgis::UnitType::Distance ) )
61 if ( normalized == encodeUnitType( Qgis::UnitType::Area ) )
63 if ( normalized == encodeUnitType( Qgis::UnitType::Volume ) )
65 if ( normalized == encodeUnitType( Qgis::UnitType::Temporal ) )
67 if ( normalized == encodeUnitType( Qgis::UnitType::Unknown ) )
69
70 if ( ok )
71 *ok = false;
72
74}
75
77{
78 switch ( unit )
79 {
129
132
135 }
137}
138
165
167{
168 switch ( unit )
169 {
171 return QStringLiteral( "meters" );
172
174 return QStringLiteral( "km" );
175
177 return QStringLiteral( "feet" );
178
180 return QStringLiteral( "yd" );
181
183 return QStringLiteral( "mi" );
184
186 return QStringLiteral( "degrees" );
187
189 return QStringLiteral( "<unknown>" );
190
192 return QStringLiteral( "nautical miles" );
193
195 return QStringLiteral( "cm" );
196
198 return QStringLiteral( "mm" );
199
201 return QStringLiteral( "in" );
202
204 return QStringLiteral( "chain" );
205
207 return QStringLiteral( "chain british benoit b1895a" );
208
210 return QStringLiteral( "chain british benoit b1895b" );
211
213 return QStringLiteral( "chain british sears 1922 truncated" );
214
216 return QStringLiteral( "chain british sears 1922" );
217
219 return QStringLiteral( "chain clarkes" );
220
222 return QStringLiteral( "chain us survey" );
223
225 return QStringLiteral( "feet british 1865" );
226
228 return QStringLiteral( "feet british 1936" );
229
231 return QStringLiteral( "feet british benoit 1895a" );
232
234 return QStringLiteral( "feet british benoit 1895b" );
235
237 return QStringLiteral( "feet british sears 1922 truncated" );
238
240 return QStringLiteral( "feet british sears 1922" );
241
243 return QStringLiteral( "feet clarkes" );
244
246 return QStringLiteral( "feet gold coast" );
247
249 return QStringLiteral( "feet indian" );
251 return QStringLiteral( "feet indian 1937" );
252
254 return QStringLiteral( "feet indian 1962" );
255
257 return QStringLiteral( "feet indian 1975" );
258
260 return QStringLiteral( "feet us survey" );
261
263 return QStringLiteral( "links" );
264
266 return QStringLiteral( "links british benoit 1895a" );
267
269 return QStringLiteral( "links british benoit 1895b" );
270
272 return QStringLiteral( "links british sears 1922 truncated" );
273
275 return QStringLiteral( "links british sears 1922" );
276
278 return QStringLiteral( "links clarkes" );
279
281 return QStringLiteral( "links us survey" );
282
284 return QStringLiteral( "yards british benoit 1895a" );
285
287 return QStringLiteral( "yards british benoit 1895b" );
288
290 return QStringLiteral( "yards british sears 1922 truncated" );
291
293 return QStringLiteral( "yards british sears 1922" );
294
296 return QStringLiteral( "yards clarkes" );
297
299 return QStringLiteral( "yards indian" );
300
302 return QStringLiteral( "yards indian 1937" );
303
305 return QStringLiteral( "yards indian 1962" );
306
308 return QStringLiteral( "yards indian 1975" );
309
311 return QStringLiteral( "miles us survey" );
312
314 return QStringLiteral( "yards fathom" );
315
317 return QStringLiteral( "german legal meters" );
318 }
319 return QString();
320}
321
322/***************************************************************************
323 * This class is considered CRITICAL and any change MUST be accompanied with
324 * full unit tests in test_qgsunittypes.py.
325 * See details in QEP #17
326 ****************************************************************************/
327
328Qgis::DistanceUnit QgsUnitTypes::decodeDistanceUnit( const QString &string, bool *ok )
329{
330 const QString normalized = string.trimmed().toLower();
331
332 if ( ok )
333 *ok = true;
334
335 for ( const Qgis::DistanceUnit unit :
336 {
348
388 } )
389 {
390 if ( normalized == encodeUnit( unit ) )
391 return unit;
392 }
393 if ( ok )
394 *ok = false;
395
397}
398
400{
401 switch ( unit )
402 {
404 return QObject::tr( "meters", "distance" );
405
407 return QObject::tr( "kilometers", "distance" );
408
410 return QObject::tr( "feet", "distance" );
411
413 return QObject::tr( "yards", "distance" );
414
416 return QObject::tr( "miles", "distance" );
417
419 return QObject::tr( "degrees", "distance" );
420
422 return QObject::tr( "centimeters", "distance" );
423
425 return QObject::tr( "millimeters", "distance" );
426
428 return QObject::tr( "inches", "distance" );
429
431 return QObject::tr( "<unknown>", "distance" );
432
434 return QObject::tr( "nautical miles", "distance" );
435
437 return QObject::tr( "chains (international)", "distance" );
438
440 return QObject::tr( "chains (British, Benoit 1895 A)", "distance" );
441
443 return QObject::tr( "chains (British, Benoit 1895 B)", "distance" );
444
446 return QObject::tr( "chains (British, Sears 1922 truncated)", "distance" );
447
449 return QObject::tr( "chains (British, Sears 1922)", "distance" );
450
452 return QObject::tr( "chains (Clarke's)", "distance" );
453
455 return QObject::tr( "chains (US survey)", "distance" );
456
458 return QObject::tr( "feet (British, 1865)", "distance" );
459
461 return QObject::tr( "feet (British, 1936)", "distance" );
462
464 return QObject::tr( "feet (British, Benoit 1895 A)", "distance" );
465
467 return QObject::tr( "feet (British, Benoit 1895 B)", "distance" );
468
470 return QObject::tr( "feet (British, Sears 1922 truncated)", "distance" );
471
473 return QObject::tr( "feet (British, Sears 1922)", "distance" );
474
476 return QObject::tr( "feet (Clarke's)", "distance" );
477
479 return QObject::tr( "feet (Gold Coast)", "distance" );
480
482 return QObject::tr( "feet (Indian)", "distance" );
483
485 return QObject::tr( "feet (Indian 1937)", "distance" );
486
488 return QObject::tr( "feet (Indian 1962)", "distance" );
489
491 return QObject::tr( "feet (Indian 1975)", "distance" );
492
494 return QObject::tr( "feet (US survey)", "distance" );
495
497 return QObject::tr( "links", "distance" );
498
500 return QObject::tr( "links (British, Benoit 1895 A)", "distance" );
501
503 return QObject::tr( "links (British, Benoit 1895 B)", "distance" );
504
506 return QObject::tr( "links (British, Sears 1922 truncated)", "distance" );
507
509 return QObject::tr( "links (British, Sears 1922)", "distance" );
510
512 return QObject::tr( "links (Clarke's)", "distance" );
513
515 return QObject::tr( "links (US survey)", "distance" );
516
518 return QObject::tr( "yards (British, Benoit 1895 A)", "distance" );
519
521 return QObject::tr( "yards (British, Benoit 1895 B)", "distance" );
522
524 return QObject::tr( "yards (British, Sears 1922 truncated)", "distance" );
525
527 return QObject::tr( "yards (British, Sears 1922)", "distance" );
528
530 return QObject::tr( "yards (Clarke's)", "distance" );
531
533 return QObject::tr( "yards (Indian)", "distance" );
534
536 return QObject::tr( "yards (Indian 1937)", "distance" );
537
539 return QObject::tr( "yards (Indian 1962)", "distance" );
540
542 return QObject::tr( "yards (Indian 1975)", "distance" );
543
545 return QObject::tr( "miles (US survey)", "distance" );
546
548 return QObject::tr( "fathoms", "distance" );
549
551 return QObject::tr( "meters (German legal)", "distance" );
552 }
553 return QString();
554}
555
557{
558 switch ( unit )
559 {
561 return QObject::tr( "mm", "render" );
562
564 return QObject::tr( "map units", "render" );
565
567 return QObject::tr( "px", "render" );
568
570 return QObject::tr( "%", "render" );
571
573 return QObject::tr( "pt", "render" );
574
576 return QObject::tr( "in", "render" );
577
579 return QObject::tr( "unknown", "render" );
580
582 return QObject::tr( "m", "render" );
583
584 }
585
586 return QString();
587}
588
590{
591 switch ( unit )
592 {
594 return QObject::tr( "m", "distance" );
595
597 return QObject::tr( "km", "distance" );
598
613 return QObject::tr( "ft", "distance" );
614
625 return QObject::tr( "yd", "distance" );
626
629 return QObject::tr( "mi", "distance" );
630
632 return QObject::tr( "deg", "distance" );
633
635 return QObject::tr( "cm", "distance" );
636
638 return QObject::tr( "mm", "distance" );
639
641 return QObject::tr( "in", "distance" );
642
644 return QString();
645
647 return QObject::tr( "NM", "distance" );
648
656 return QObject::tr( "ch", "distance" );
657
665 return QObject::tr( "lk", "distance" );
666
668 return QObject::tr( "f", "distance" );
669
671 return QObject::tr( "glm", "distance" );
672
673 }
674 return QString();
675}
676
677/***************************************************************************
678 * This class is considered CRITICAL and any change MUST be accompanied with
679 * full unit tests in test_qgsunittypes.py.
680 * See details in QEP #17
681 ****************************************************************************/
682
684{
685 const QString normalized = string.trimmed().toLower();
686
687 if ( ok )
688 *ok = true;
689
690 for ( const Qgis::DistanceUnit unit :
691 {
742 } )
743 {
744 if ( normalized.compare( toString( unit ), Qt::CaseInsensitive ) == 0 )
745 return unit;
746 }
747
748 if ( ok )
749 *ok = false;
750
752}
753
754/***************************************************************************
755 * This class is considered CRITICAL and any change MUST be accompanied with
756 * full unit tests in test_qgsunittypes.py.
757 * See details in QEP #17
758 ****************************************************************************/
759
761{
762 // values are from the EPSG units database:
763 switch ( unit )
764 {
766 return 1.0;
768 return 1000.0;
770 return 0.3048;
772 return 1852.0;
774 return 0.9144;
776 return 1609.344;
778 return 111319.49079327358;
780 return 0.01;
782 return 0.001;
784 return 0.0254;
786 return 20.1168;
788 return 20.1167824;
790 return 20.116782494376;
792 return 20.116756;
794 return 20.116765121553;
796 return 20.1166195164;
798 return 20.11684023368;
800 return 0.30480083333333;
802 return 0.3048007491;
804 return 0.30479973333333;
806 return 0.30479973476327;
808 return 0.30479933333333;
810 return 0.30479947153868;
812 return 0.3047972654;
814 return 0.30479971018151;
816 return 0.30479951024815;
818 return 0.30479841;
820 return 0.3047996;
822 return 0.3047995;
824 return 0.30480060960122;
826 return 0.201168;
828 return 0.201167824;
830 return 0.20116782494376;
832 return 0.20116756;
834 return 0.20116765121553;
836 return 0.201166195164;
838 return 0.2011684023368;
840 return 0.9143992;
842 return 0.91439920428981;
844 return 0.914398;
846 return 0.91439841461603;
848 return 0.9143917962;
850 return 0.91439853074444;
852 return 0.91439523;
854 return 0.9143988;
856 return 0.9143985;
858 return 1609.3472186944;
860 return 1.8288;
862 return 1;
864 return 1.0000135965;
865 }
866 return 1;
867}
868
870{
871 if ( fromUnit == toUnit || fromUnit == Qgis::DistanceUnit::Unknown || toUnit == Qgis::DistanceUnit::Unknown )
872 return 1.0;
873
874 constexpr double FEET_TO_INCHES = 12;
875 constexpr double YARDS_TO_FEET = 3.0;
876
877 // Calculate the conversion factor between the specified units
878
879 // special cases, where we don't go through meters as an intermediate unit:
880 switch ( fromUnit )
881 {
883 {
884 switch ( toUnit )
885 {
887 return FEET_TO_INCHES;
889 return 1.0 / YARDS_TO_FEET;
890 default:
891 break;
892 }
893
894 break;
895 }
897 {
898 switch ( toUnit )
899 {
901 return YARDS_TO_FEET;
903 return YARDS_TO_FEET * FEET_TO_INCHES;
904 default:
905 break;
906 }
907
908 break;
909 }
910
912 {
913 switch ( toUnit )
914 {
916 return 1.0 / FEET_TO_INCHES;
918 return 1.0 / ( YARDS_TO_FEET * FEET_TO_INCHES );
919 default:
920 break;
921 }
922
923 break;
924 }
925
926 default:
927 break;
928 }
929
930 return distanceUnitToMeter( fromUnit ) / distanceUnitToMeter( toUnit );
931}
932
934{
935 switch ( unit )
936 {
938 return QStringLiteral( "m2" );
940 return QStringLiteral( "km2" );
942 return QStringLiteral( "ft2" );
944 return QStringLiteral( "y2" );
946 return QStringLiteral( "mi2" );
948 return QStringLiteral( "ha" );
950 return QStringLiteral( "ac" );
952 return QStringLiteral( "nm2" );
954 return QStringLiteral( "deg2" );
956 return QStringLiteral( "cm2" );
958 return QStringLiteral( "mm2" );
960 return QStringLiteral( "in2" );
962 return QStringLiteral( "<unknown>" );
963 }
964 return QString();
965}
966
967Qgis::AreaUnit QgsUnitTypes::decodeAreaUnit( const QString &string, bool *ok )
968{
969 const QString normalized = string.trimmed().toLower();
970
971 if ( ok )
972 *ok = true;
973
974 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareMeters ) )
976 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareKilometers ) )
978 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareFeet ) )
980 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareYards ) )
982 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareMiles ) )
984 if ( normalized == encodeUnit( Qgis::AreaUnit::Hectares ) )
986 if ( normalized == encodeUnit( Qgis::AreaUnit::Acres ) )
988 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareNauticalMiles ) )
990 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareDegrees ) )
992 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareCentimeters ) )
994 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareMillimeters ) )
996 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareInches ) )
998 if ( normalized == encodeUnit( Qgis::AreaUnit::Unknown ) )
1000
1001 if ( ok )
1002 *ok = false;
1003
1005}
1006
1008{
1009 switch ( unit )
1010 {
1012 return QObject::tr( "square meters", "area" );
1014 return QObject::tr( "square kilometers", "area" );
1016 return QObject::tr( "square feet", "area" );
1018 return QObject::tr( "square yards", "area" );
1020 return QObject::tr( "square miles", "area" );
1022 return QObject::tr( "hectares", "area" );
1024 return QObject::tr( "acres", "area" );
1026 return QObject::tr( "square nautical miles", "area" );
1028 return QObject::tr( "square degrees", "area" );
1030 return QObject::tr( "square millimeters", "area" );
1032 return QObject::tr( "square centimeters", "area" );
1034 return QObject::tr( "square inches", "area" );
1036 return QObject::tr( "<unknown>", "area" );
1037 }
1038 return QString();
1039}
1040
1042{
1043 switch ( unit )
1044 {
1046 return QObject::tr( "m²", "area" );
1048 return QObject::tr( "km²", "area" );
1050 return QObject::tr( "ft²", "area" );
1052 return QObject::tr( "yd²", "area" );
1054 return QObject::tr( "mi²", "area" );
1056 return QObject::tr( "ha", "area" );
1058 return QObject::tr( "ac", "area" );
1060 return QObject::tr( "NM²", "area" );
1062 return QObject::tr( "deg²", "area" );
1064 return QObject::tr( "cm²", "area" );
1066 return QObject::tr( "mm²", "area" );
1068 return QObject::tr( "in²", "area" );
1070 return QString();
1071 }
1072 return QString();
1073}
1074
1075Qgis::AreaUnit QgsUnitTypes::stringToAreaUnit( const QString &string, bool *ok )
1076{
1077 const QString normalized = string.trimmed().toLower();
1078
1079 if ( ok )
1080 *ok = true;
1081
1082 if ( normalized == toString( Qgis::AreaUnit::SquareMeters ) )
1084 if ( normalized == toString( Qgis::AreaUnit::SquareKilometers ) )
1086 if ( normalized == toString( Qgis::AreaUnit::SquareFeet ) )
1088 if ( normalized == toString( Qgis::AreaUnit::SquareYards ) )
1090 if ( normalized == toString( Qgis::AreaUnit::SquareMiles ) )
1092 if ( normalized == toString( Qgis::AreaUnit::Hectares ) )
1094 if ( normalized == toString( Qgis::AreaUnit::Acres ) )
1095 return Qgis::AreaUnit::Acres;
1096 if ( normalized == toString( Qgis::AreaUnit::SquareNauticalMiles ) )
1098 if ( normalized == toString( Qgis::AreaUnit::SquareDegrees ) )
1100 if ( normalized == toString( Qgis::AreaUnit::SquareMillimeters ) )
1102 if ( normalized == toString( Qgis::AreaUnit::SquareCentimeters ) )
1104 if ( normalized == toString( Qgis::AreaUnit::SquareInches ) )
1106 if ( normalized == toString( Qgis::AreaUnit::Unknown ) )
1108 if ( ok )
1109 *ok = false;
1110
1112}
1113
1115{
1116#define KM2_TO_M2 1000000.0
1117#define CM2_TO_M2 0.0001
1118#define MM2_TO_M2 0.000001
1119#define FT2_TO_M2 0.09290304
1120#define IN2_TO_M2 0.00064516
1121#define YD2_TO_M2 0.83612736
1122#define MI2_TO_M2 2589988.110336
1123#define HA_TO_M2 10000.0
1124#define AC_TO_FT2 43560.0
1125#define DEG2_TO_M2 12392029030.5
1126#define NM2_TO_M2 3429904.0
1127
1128 // Calculate the conversion factor between the specified units
1129 switch ( fromUnit )
1130 {
1132 {
1133 switch ( toUnit )
1134 {
1136 return 1.0;
1138 return 1.0 / KM2_TO_M2;
1140 return 1.0 / FT2_TO_M2;
1142 return 1.0 / YD2_TO_M2;
1144 return 1.0 / MI2_TO_M2;
1146 return 1.0 / HA_TO_M2;
1148 return 1.0 / AC_TO_FT2 / FT2_TO_M2;
1150 return 1.0 / NM2_TO_M2;
1152 return 1.0 / DEG2_TO_M2;
1154 return 1.0 / CM2_TO_M2;
1156 return 1.0 / MM2_TO_M2;
1158 return 1.0 / IN2_TO_M2;
1160 break;
1161 }
1162
1163 break;
1164 }
1166 {
1167 switch ( toUnit )
1168 {
1170 return KM2_TO_M2;
1172 return 1.0;
1174 return KM2_TO_M2 / FT2_TO_M2;
1176 return KM2_TO_M2 / YD2_TO_M2;
1178 return KM2_TO_M2 / MI2_TO_M2;
1180 return KM2_TO_M2 / HA_TO_M2;
1182 return KM2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
1184 return KM2_TO_M2 / NM2_TO_M2;
1186 return KM2_TO_M2 / DEG2_TO_M2;
1188 return KM2_TO_M2 / CM2_TO_M2;
1190 return KM2_TO_M2 / MM2_TO_M2;
1192 return KM2_TO_M2 / IN2_TO_M2;
1194 break;
1195 }
1196
1197 break;
1198 }
1200 {
1201 switch ( toUnit )
1202 {
1204 return FT2_TO_M2;
1206 return FT2_TO_M2 / KM2_TO_M2;
1208 return 1.0;
1210 return FT2_TO_M2 / YD2_TO_M2;
1212 return FT2_TO_M2 / MI2_TO_M2;
1214 return FT2_TO_M2 / HA_TO_M2;
1216 return 1.0 / AC_TO_FT2;
1218 return FT2_TO_M2 / NM2_TO_M2;
1220 return FT2_TO_M2 / DEG2_TO_M2;
1222 return FT2_TO_M2 / CM2_TO_M2;
1224 return FT2_TO_M2 / MM2_TO_M2;
1226 return FT2_TO_M2 / IN2_TO_M2;
1228 break;
1229 }
1230
1231 break;
1232 }
1233
1235 {
1236 switch ( toUnit )
1237 {
1239 return YD2_TO_M2;
1241 return YD2_TO_M2 / KM2_TO_M2;
1243 return YD2_TO_M2 / FT2_TO_M2;
1245 return 1.0;
1247 return YD2_TO_M2 / MI2_TO_M2;
1249 return YD2_TO_M2 / HA_TO_M2;
1251 return YD2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1253 return YD2_TO_M2 / NM2_TO_M2;
1255 return YD2_TO_M2 / DEG2_TO_M2;
1257 return YD2_TO_M2 / CM2_TO_M2;
1259 return YD2_TO_M2 / MM2_TO_M2;
1261 return YD2_TO_M2 / IN2_TO_M2;
1263 break;
1264 }
1265 break;
1266 }
1267
1269 {
1270 switch ( toUnit )
1271 {
1273 return MI2_TO_M2;
1275 return MI2_TO_M2 / KM2_TO_M2;
1277 return MI2_TO_M2 / FT2_TO_M2;
1279 return MI2_TO_M2 / YD2_TO_M2;
1281 return 1.0;
1283 return MI2_TO_M2 / HA_TO_M2;
1285 return MI2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1287 return MI2_TO_M2 / NM2_TO_M2;
1289 return MI2_TO_M2 / DEG2_TO_M2;
1291 return MI2_TO_M2 / CM2_TO_M2;
1293 return MI2_TO_M2 / MM2_TO_M2;
1295 return MI2_TO_M2 / IN2_TO_M2;
1297 break;
1298 }
1299
1300 break;
1301 }
1302
1304 {
1305 switch ( toUnit )
1306 {
1308 return HA_TO_M2;
1310 return HA_TO_M2 / KM2_TO_M2;
1312 return HA_TO_M2 / FT2_TO_M2;
1314 return HA_TO_M2 / YD2_TO_M2;
1316 return HA_TO_M2 / MI2_TO_M2;
1318 return 1.0;
1320 return HA_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1322 return HA_TO_M2 / NM2_TO_M2;
1324 return HA_TO_M2 / DEG2_TO_M2;
1326 return HA_TO_M2 / CM2_TO_M2;
1328 return HA_TO_M2 / MM2_TO_M2;
1330 return HA_TO_M2 / IN2_TO_M2;
1332 break;
1333 }
1334
1335 break;
1336 }
1337
1339 {
1340 switch ( toUnit )
1341 {
1343 return AC_TO_FT2 * FT2_TO_M2;
1345 return AC_TO_FT2 * FT2_TO_M2 / KM2_TO_M2;
1347 return AC_TO_FT2;
1349 return AC_TO_FT2 * FT2_TO_M2 / YD2_TO_M2;
1351 return AC_TO_FT2 * FT2_TO_M2 / MI2_TO_M2;
1353 return AC_TO_FT2 * FT2_TO_M2 / HA_TO_M2;
1355 return 1.0;
1357 return AC_TO_FT2 * FT2_TO_M2 / NM2_TO_M2;
1359 return AC_TO_FT2 * FT2_TO_M2 / DEG2_TO_M2;
1361 return AC_TO_FT2 * FT2_TO_M2 / CM2_TO_M2;
1363 return AC_TO_FT2 * FT2_TO_M2 / MM2_TO_M2;
1365 return AC_TO_FT2 * FT2_TO_M2 / IN2_TO_M2;
1367 break;
1368 }
1369
1370 break;
1371 }
1372
1374 {
1375 switch ( toUnit )
1376 {
1378 return NM2_TO_M2;
1380 return NM2_TO_M2 / KM2_TO_M2;
1382 return NM2_TO_M2 / FT2_TO_M2;
1384 return NM2_TO_M2 / YD2_TO_M2;
1386 return NM2_TO_M2 / MI2_TO_M2;
1388 return NM2_TO_M2 / HA_TO_M2;
1390 return NM2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1392 return 1.0;
1394 return NM2_TO_M2 / DEG2_TO_M2;
1396 return NM2_TO_M2 / CM2_TO_M2;
1398 return NM2_TO_M2 / MM2_TO_M2;
1400 return NM2_TO_M2 / IN2_TO_M2;
1402 break;
1403 }
1404
1405 break;
1406 }
1407
1409 {
1410 switch ( toUnit )
1411 {
1413 return DEG2_TO_M2;
1415 return DEG2_TO_M2 / KM2_TO_M2;
1417 return DEG2_TO_M2 / FT2_TO_M2;
1419 return DEG2_TO_M2 / YD2_TO_M2;
1421 return DEG2_TO_M2 / MI2_TO_M2;
1423 return DEG2_TO_M2 / HA_TO_M2;
1425 return DEG2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1427 return DEG2_TO_M2 / NM2_TO_M2;
1429 return 1.0;
1431 return DEG2_TO_M2 / CM2_TO_M2;
1433 return DEG2_TO_M2 / MM2_TO_M2;
1435 return DEG2_TO_M2 / IN2_TO_M2;
1437 break;
1438 }
1439
1440 break;
1441 }
1442
1444 {
1445 switch ( toUnit )
1446 {
1448 return MM2_TO_M2;
1450 return MM2_TO_M2 / KM2_TO_M2;
1452 return MM2_TO_M2 / FT2_TO_M2;
1454 return MM2_TO_M2 / YD2_TO_M2;
1456 return MM2_TO_M2 / MI2_TO_M2;
1458 return MM2_TO_M2 / HA_TO_M2;
1460 return MM2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
1462 return MM2_TO_M2 / NM2_TO_M2;
1464 return MM2_TO_M2 / DEG2_TO_M2;
1466 return MM2_TO_M2 / CM2_TO_M2;
1468 return 1.0;
1470 return MM2_TO_M2 / IN2_TO_M2;
1472 break;
1473 }
1474
1475 break;
1476 }
1478 {
1479 switch ( toUnit )
1480 {
1482 return CM2_TO_M2;
1484 return CM2_TO_M2 / KM2_TO_M2;
1486 return CM2_TO_M2 / FT2_TO_M2;
1488 return CM2_TO_M2 / YD2_TO_M2;
1490 return CM2_TO_M2 / MI2_TO_M2;
1492 return CM2_TO_M2 / HA_TO_M2;
1494 return CM2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
1496 return CM2_TO_M2 / NM2_TO_M2;
1498 return CM2_TO_M2 / DEG2_TO_M2;
1500 return 1.0;
1502 return CM2_TO_M2 / MM2_TO_M2;
1504 return CM2_TO_M2 / IN2_TO_M2;
1506 break;
1507 }
1508
1509 break;
1510 }
1512 {
1513 switch ( toUnit )
1514 {
1516 return IN2_TO_M2;
1518 return IN2_TO_M2 / KM2_TO_M2;
1520 return IN2_TO_M2 / FT2_TO_M2;
1522 return IN2_TO_M2 / YD2_TO_M2;
1524 return IN2_TO_M2 / MI2_TO_M2;
1526 return IN2_TO_M2 / HA_TO_M2;
1528 return IN2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
1530 return IN2_TO_M2 / NM2_TO_M2;
1532 return IN2_TO_M2 / DEG2_TO_M2;
1534 return IN2_TO_M2 / CM2_TO_M2;
1536 return IN2_TO_M2 / MM2_TO_M2;
1538 return 1;
1540 break;
1541 }
1542
1543 break;
1544 }
1546 break;
1547 }
1548 return 1.0;
1549}
1550
1552{
1553 switch ( distanceUnit )
1554 {
1558
1561
1564
1567
1607
1610
1614
1617
1620
1623
1626 }
1627
1629}
1630
1673
1675{
1676 switch ( unit )
1677 {
1679 return QStringLiteral( "s" );
1681 return QStringLiteral( "ms" );
1683 return QStringLiteral( "min" );
1685 return QStringLiteral( "h" );
1687 return QStringLiteral( "d" );
1689 return QStringLiteral( "wk" );
1691 return QStringLiteral( "mon" );
1693 return QStringLiteral( "y" );
1695 return QStringLiteral( "dec" );
1697 return QStringLiteral( "c" );
1699 return QStringLiteral( "xxx" );
1701 return QStringLiteral( "<unknown>" );
1702 }
1703 return QString();
1704}
1705
1707{
1708 const QString normalized = string.trimmed().toLower();
1709
1710 if ( ok )
1711 *ok = true;
1712
1713 if ( normalized == encodeUnit( Qgis::TemporalUnit::Seconds ) )
1715 if ( normalized == encodeUnit( Qgis::TemporalUnit::Milliseconds ) )
1717 if ( normalized == encodeUnit( Qgis::TemporalUnit::Minutes ) )
1719 if ( normalized == encodeUnit( Qgis::TemporalUnit::Hours ) )
1721 if ( normalized == encodeUnit( Qgis::TemporalUnit::Days ) )
1723 if ( normalized == encodeUnit( Qgis::TemporalUnit::Weeks ) )
1725 if ( normalized == encodeUnit( Qgis::TemporalUnit::Months ) )
1727 if ( normalized == encodeUnit( Qgis::TemporalUnit::Years ) )
1729 if ( normalized == encodeUnit( Qgis::TemporalUnit::Decades ) )
1731 if ( normalized == encodeUnit( Qgis::TemporalUnit::Centuries ) )
1733 if ( normalized == encodeUnit( Qgis::TemporalUnit::IrregularStep ) )
1735 if ( normalized == encodeUnit( Qgis::TemporalUnit::Unknown ) )
1737
1738 if ( ok )
1739 *ok = false;
1740
1742}
1743
1745{
1746 switch ( unit )
1747 {
1749 return QObject::tr( "seconds", "temporal" );
1751 return QObject::tr( "milliseconds", "temporal" );
1753 return QObject::tr( "minutes", "temporal" );
1755 return QObject::tr( "hours", "temporal" );
1757 return QObject::tr( "days", "temporal" );
1759 return QObject::tr( "weeks", "temporal" );
1761 return QObject::tr( "months", "temporal" );
1763 return QObject::tr( "years", "temporal" );
1765 return QObject::tr( "decades", "temporal" );
1767 return QObject::tr( "centuries", "temporal" );
1769 return QObject::tr( "steps", "temporal" );
1771 return QObject::tr( "<unknown>", "temporal" );
1772 }
1773 return QString();
1774}
1775
1777{
1778 switch ( unit )
1779 {
1781 return QObject::tr( "s", "temporal" );
1783 return QObject::tr( "ms", "temporal" );
1785 return QObject::tr( "min", "temporal" );
1787 return QObject::tr( "h", "temporal" );
1789 return QObject::tr( "d", "temporal" );
1791 return QObject::tr( "wk", "temporal" );
1793 return QObject::tr( "mon", "temporal" );
1795 return QObject::tr( "y", "temporal" );
1797 return QObject::tr( "dec", "temporal" );
1799 return QObject::tr( "cen", "temporal" );
1801 return QObject::tr( "steps", "temporal" );
1803 return QObject::tr( "<unknown>", "temporal" );
1804 }
1805 return QString();
1806}
1807
1809{
1810 const QString normalized = string.trimmed().toLower();
1811
1812 if ( ok )
1813 *ok = true;
1814
1815 if ( normalized == toString( Qgis::TemporalUnit::Seconds ) )
1817 if ( normalized == toString( Qgis::TemporalUnit::Milliseconds ) )
1819 if ( normalized == toString( Qgis::TemporalUnit::Minutes ) )
1821 if ( normalized == toString( Qgis::TemporalUnit::Hours ) )
1823 if ( normalized == toString( Qgis::TemporalUnit::Days ) )
1825 if ( normalized == toString( Qgis::TemporalUnit::Weeks ) )
1827 if ( normalized == toString( Qgis::TemporalUnit::Months ) )
1829 if ( normalized == toString( Qgis::TemporalUnit::Years ) )
1831 if ( normalized == toString( Qgis::TemporalUnit::Decades ) )
1833 if ( normalized == toString( Qgis::TemporalUnit::Centuries ) )
1835 if ( normalized == toString( Qgis::TemporalUnit::IrregularStep ) )
1837 if ( normalized == toString( Qgis::TemporalUnit::Unknown ) )
1839
1840 if ( ok )
1841 *ok = false;
1842
1844}
1845
1847{
1848 switch ( fromUnit )
1849 {
1851 {
1852 switch ( toUnit )
1853 {
1855 return 1.0;
1857 return 1000.0;
1859 return 1 / 60.0;
1861 return 1 / 3600.0;
1863 return 1 / 86400.0;
1865 return 1 / 604800.0;
1867 return 1 / 2592000.0;
1869 return 1 / 31557600.0;
1871 return 1 / 315576000.0;
1873 return 1 / 3155760000.0;
1876 return 1.0;
1877 }
1878 break;
1879 }
1881 {
1882 switch ( toUnit )
1883 {
1885 return 1 / 1000.0;
1887 return 1.0;
1889 return 1 / 60000.0;
1891 return 1 / 3600000.0;
1893 return 1 / 86400000.0;
1895 return 1 / 604800000.0;
1897 return 1 / 2592000000.0;
1899 return 1 / 31557600000.0;
1901 return 1 / 315576000000.0;
1903 return 1 / 3155760000000.0;
1906 return 1.0;
1907 }
1908 break;
1909 }
1911 {
1912 switch ( toUnit )
1913 {
1915 return 60.0;
1917 return 60000.0;
1919 return 1;
1921 return 1 / 60.0;
1923 return 1 / 1440.0;
1925 return 1 / 10080.0;
1927 return 1 / 43200.0;
1929 return 1 / 525960.0;
1931 return 1 / 5259600.0;
1933 return 1 / 52596000.0;
1936 return 1.0;
1937 }
1938 break;
1939 }
1941 {
1942 switch ( toUnit )
1943 {
1945 return 3600.0;
1947 return 3600000.0;
1949 return 60;
1951 return 1;
1953 return 1 / 24.0;
1955 return 1 / 168.0;
1957 return 1 / 720.0;
1959 return 1 / 8766.0;
1961 return 1 / 87660.0;
1963 return 1 / 876600.0;
1966 return 1.0;
1967 }
1968 break;
1969 }
1971 {
1972 switch ( toUnit )
1973 {
1975 return 86400.0;
1977 return 86400000.0;
1979 return 1440;
1981 return 24;
1983 return 1;
1985 return 1 / 7.0;
1987 return 1 / 30.0;
1989 return 1 / 365.25;
1991 return 1 / 3652.5;
1993 return 1 / 36525.0;
1996 return 1.0;
1997 }
1998 break;
1999 }
2001 {
2002 switch ( toUnit )
2003 {
2005 return 604800.0;
2007 return 604800000.0;
2009 return 10080;
2011 return 168;
2013 return 7;
2015 return 1;
2017 return 7 / 30.0;
2019 return 7 / 365.25;
2021 return 7 / 3652.5;
2023 return 7 / 36525.0;
2026 return 1.0;
2027 }
2028 break;
2029 }
2031 {
2032 switch ( toUnit )
2033 {
2035 return 2592000.0;
2037 return 2592000000.0;
2039 return 43200;
2041 return 720;
2043 return 30;
2045 return 30 / 7.0;
2047 return 1;
2049 return 30 / 365.25;
2051 return 30 / 3652.5;
2053 return 30 / 36525.0;
2056 return 1.0;
2057 }
2058 break;
2059 }
2061 {
2062 switch ( toUnit )
2063 {
2065 return 31557600.0;
2067 return 31557600000.0;
2069 return 525960.0;
2071 return 8766.0;
2073 return 365.25;
2075 return 365.25 / 7.0;
2077 return 365.25 / 30.0;
2079 return 1;
2081 return 0.1;
2083 return 0.01;
2086 return 1.0;
2087 }
2088 break;
2089 }
2091 {
2092 switch ( toUnit )
2093 {
2095 return 315576000.0;
2097 return 315576000000.0;
2099 return 5259600.0;
2101 return 87660.0;
2103 return 3652.5;
2105 return 3652.5 / 7.0;
2107 return 3652.5 / 30.0;
2109 return 10;
2111 return 1;
2113 return 0.1;
2116 return 1.0;
2117 }
2118 break;
2119 }
2120
2122 {
2123 switch ( toUnit )
2124 {
2126 return 3155760000.0;
2128 return 3155760000000.0;
2130 return 52596000.0;
2132 return 876600.0;
2134 return 36525;
2136 return 36525 / 7.0;
2138 return 36525 / 30.0;
2140 return 100;
2142 return 10;
2144 return 1;
2147 return 1.0;
2148 }
2149 break;
2150 }
2151
2154 {
2155 return 1.0;
2156 }
2157 }
2158 return 1.0;
2159}
2160
2161Qgis::VolumeUnit QgsUnitTypes::decodeVolumeUnit( const QString &string, bool *ok )
2162{
2163 const QString normalized = string.trimmed().toLower();
2164
2165 if ( ok )
2166 *ok = true;
2167
2168 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicMeters ) )
2170 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicFeet ) )
2172 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicYards ) )
2174 if ( normalized == encodeUnit( Qgis::VolumeUnit::Barrel ) )
2176 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicDecimeter ) )
2178 if ( normalized == encodeUnit( Qgis::VolumeUnit::Liters ) )
2180 if ( normalized == encodeUnit( Qgis::VolumeUnit::GallonUS ) )
2182 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicInch ) )
2184 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicCentimeter ) )
2186 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicDegrees ) )
2188 if ( normalized == encodeUnit( Qgis::VolumeUnit::Unknown ) )
2190
2191 if ( ok )
2192 *ok = false;
2193
2195}
2196
2198{
2199 switch ( unit )
2200 {
2202 return QObject::tr( "cubic meters", "volume" );
2204 return QObject::tr( "cubic feet", "volume" );
2206 return QObject::tr( "cubic yards", "volume" );
2208 return QObject::tr( "barrels", "volume" );
2210 return QObject::tr( "cubic decimeters", "volume" );
2212 return QObject::tr( "liters", "volume" );
2214 return QObject::tr( "gallons", "volume" );
2216 return QObject::tr( "cubic inches", "volume" );
2218 return QObject::tr( "cubic centimeters", "volume" );
2220 return QObject::tr( "cubic degrees", "volume" );
2222 return QObject::tr( "<unknown>", "volume" );
2223 }
2224 return QString();
2225}
2226
2228{
2229 switch ( unit )
2230 {
2232 return QObject::tr( "m³", "volume" );
2234 return QObject::tr( "ft³", "volume" );
2236 return QObject::tr( "yds³", "volume" );
2238 return QObject::tr( "bbl", "volume" );
2240 return QObject::tr( "dm³", "volume" );
2242 return QObject::tr( "l", "volume" );
2244 return QObject::tr( "gal", "volume" );
2246 return QObject::tr( "in³", "volume" );
2248 return QObject::tr( "cm³", "volume" );
2250 return QObject::tr( "deg³", "volume" );
2252 return QObject::tr( "<unknown>", "volume" );
2253 }
2254 return QString();
2255
2256}
2257
2258Qgis::VolumeUnit QgsUnitTypes::stringToVolumeUnit( const QString &string, bool *ok )
2259{
2260 const QString normalized = string.trimmed().toLower();
2261
2262 if ( ok )
2263 *ok = true;
2264
2265 if ( normalized == toString( Qgis::VolumeUnit::CubicMeters ) )
2267 if ( normalized == toString( Qgis::VolumeUnit::CubicFeet ) )
2269 if ( normalized == toString( Qgis::VolumeUnit::CubicYards ) )
2271 if ( normalized == toString( Qgis::VolumeUnit::Barrel ) )
2273 if ( normalized == toString( Qgis::VolumeUnit::CubicDecimeter ) )
2275 if ( normalized == toString( Qgis::VolumeUnit::Liters ) )
2277 if ( normalized == toString( Qgis::VolumeUnit::GallonUS ) )
2279 if ( normalized == toString( Qgis::VolumeUnit::CubicInch ) )
2281 if ( normalized == toString( Qgis::VolumeUnit::CubicCentimeter ) )
2283 if ( normalized == toString( Qgis::VolumeUnit::CubicDegrees ) )
2285 if ( normalized == toString( Qgis::VolumeUnit::Unknown ) )
2287
2288 if ( ok )
2289 *ok = false;
2290
2292}
2293
2294#define DEG2_TO_M3 1379474361572186.2
2296{
2297 // cloned branches are intentional here for improved readability
2298 // NOLINTBEGIN(bugprone-branch-clone)
2299 switch ( fromUnit )
2300 {
2302 {
2303 switch ( toUnit )
2304 {
2306 return 1.0;
2308 return 35.314666572222;
2310 return 1.307950613786;
2312 return 6.2898107438466;
2314 return 1000;
2316 return 1000;
2318 return 264.17205124156;
2320 return 61023.7438368;
2322 return 1000000;
2324 return 1 / DEG2_TO_M3; // basically meaningless!
2326 return 1.0;
2327 }
2328 break;
2329 }
2331 {
2332 switch ( toUnit )
2333 {
2335 return 0.028316846592;
2337 return 1.0;
2339 return 0.037037037;
2341 return 0.178107622;
2343 return 28.31685;
2345 return 28.31685;
2347 return 7.480519954;
2349 return 1728.000629765;
2351 return 28316.85;
2353 return 0.028316846592 / DEG2_TO_M3; // basically meaningless!
2355 return 1.0;
2356 }
2357 break;
2358 }
2360 {
2361 switch ( toUnit )
2362 {
2364 return 0.764554900;
2366 return 26.999998234;
2368 return 1.0;
2370 return 4.808905491;
2372 return 764.5549;
2374 return 764.5549;
2376 return 201.974025549;
2378 return 46656.013952472;
2380 return 764554.9;
2382 return 0.764554900 / DEG2_TO_M3; // basically meaningless!
2384 return 1.0;
2385 }
2386 break;
2387 }
2389 {
2390 switch ( toUnit )
2391 {
2393 return 0.158987300;
2395 return 5.614582837;
2397 return 0.207947526;
2399 return 1.0;
2401 return 158.9873;
2403 return 158.9873;
2405 return 41.999998943;
2407 return 9702.002677722;
2409 return 158987.3;
2411 return 0.158987300 / DEG2_TO_M3; // basically meaningless!
2413 return 1.0;
2414 }
2415 break;
2416 }
2419 {
2420 switch ( toUnit )
2421 {
2423 return 0.001;
2425 return 0.035314662;
2427 return 0.001307951;
2429 return 0.006289811;
2432 return 1.0;
2434 return 0.264172037;
2436 return 61.023758990;
2438 return 1000;
2440 return 0.001 / DEG2_TO_M3; // basically meaningless!
2442 return 1.0;
2443 }
2444 break;
2445 }
2447 {
2448 switch ( toUnit )
2449 {
2451 return 0.003785412;
2453 return 0.133680547;
2455 return 0.004951132;
2457 return 0.023809524;
2460 return 3.785412000;
2462 return 1.0;
2464 return 231.000069567;
2466 return 3785.412;
2468 return 0.003785412 / DEG2_TO_M3; // basically meaningless!
2470 return 1.0;
2471 }
2472 break;
2473 }
2475 {
2476 switch ( toUnit )
2477 {
2479 return 0.000016387;
2481 return 0.000578703;
2483 return 0.000021433;
2485 return 0.000103072;
2488 return 0.016387060;
2490 return 0.004329003;
2492 return 1.0;
2494 return 16.387060000;
2496 return 0.000016387 / DEG2_TO_M3; // basically meaningless!
2498 return 1.0;
2499 }
2500 break;
2501 }
2503 {
2504 switch ( toUnit )
2505 {
2507 return 0.000001;
2509 return 0.000035315;
2511 return 0.000001308;
2513 return 0.000006290;
2516 return 0.001;
2518 return 0.000264172 ;
2520 return 0.061023759;
2522 return 1.0;
2524 return 0.000001 / DEG2_TO_M3; // basically meaningless!
2526 return 1.0;
2527 }
2528 break;
2529 }
2531 if ( toUnit == Qgis::VolumeUnit::Unknown || toUnit == Qgis::VolumeUnit::CubicDegrees )
2532 return 1.0;
2533 else
2535
2537 {
2538 return 1.0;
2539 }
2540 }
2541 // NOLINTEND(bugprone-branch-clone)
2542 return 1.0;
2543}
2544
2546{
2547 // cloned branches are intentional here for improved readability
2548 // NOLINTBEGIN(bugprone-branch-clone)
2549 switch ( distanceUnit )
2550 {
2554
2557
2560
2563
2579
2591
2610
2613
2616
2619
2622 }
2623 // NOLINTEND(bugprone-branch-clone)
2624
2626}
2627
2657
2679
2681{
2682 switch ( unit )
2683 {
2685 return QStringLiteral( "m3" );
2687 return QStringLiteral( "ft3" );
2689 return QStringLiteral( "yd3" );
2691 return QStringLiteral( "bbl" );
2693 return QStringLiteral( "dm3" );
2695 return QStringLiteral( "l" );
2697 return QStringLiteral( "gal" );
2699 return QStringLiteral( "in3" );
2701 return QStringLiteral( "cm3" );
2703 return QStringLiteral( "deg3" );
2705 return QStringLiteral( "<unknown>" );
2706 }
2707 return QString();
2708}
2709
2711{
2712 switch ( unit )
2713 {
2715 return QStringLiteral( "degrees" );
2717 return QStringLiteral( "radians" );
2719 return QStringLiteral( "gon" );
2721 return QStringLiteral( "moa" );
2723 return QStringLiteral( "soa" );
2725 return QStringLiteral( "tr" );
2727 return QStringLiteral( "milliradians" );
2729 return QStringLiteral( "mil" );
2731 return QStringLiteral( "<unknown>" );
2732 }
2733 return QString();
2734}
2735
2736Qgis::AngleUnit QgsUnitTypes::decodeAngleUnit( const QString &string, bool *ok )
2737{
2738 const QString normalized = string.trimmed().toLower();
2739
2740 if ( ok )
2741 *ok = true;
2742
2743 if ( normalized == encodeUnit( Qgis::AngleUnit::Degrees ) )
2745 if ( normalized == encodeUnit( Qgis::AngleUnit::Radians ) )
2747 if ( normalized == encodeUnit( Qgis::AngleUnit::Gon ) )
2748 return Qgis::AngleUnit::Gon;
2749 if ( normalized == encodeUnit( Qgis::AngleUnit::MinutesOfArc ) )
2751 if ( normalized == encodeUnit( Qgis::AngleUnit::SecondsOfArc ) )
2753 if ( normalized == encodeUnit( Qgis::AngleUnit::Turn ) )
2754 return Qgis::AngleUnit::Turn;
2755 if ( normalized == encodeUnit( Qgis::AngleUnit::MilliradiansSI ) )
2757 if ( normalized == encodeUnit( Qgis::AngleUnit::MilNATO ) )
2759 if ( normalized == encodeUnit( Qgis::AngleUnit::Unknown ) )
2761 if ( ok )
2762 *ok = false;
2763
2765}
2766
2768{
2769 switch ( unit )
2770 {
2772 return QObject::tr( "degrees", "angle" );
2774 return QObject::tr( "radians", "angle" );
2776 return QObject::tr( "gon", "angle" );
2778 return QObject::tr( "minutes of arc", "angle" );
2780 return QObject::tr( "seconds of arc", "angle" );
2782 return QObject::tr( "turns", "angle" );
2784 return QObject::tr( "milliradians", "angle" );
2786 return QObject::tr( "mil", "angle" );
2788 return QObject::tr( "<unknown>", "angle" );
2789 }
2790 return QString();
2791}
2792
2794{
2795 // Calculate the conversion factor between the specified units
2796 switch ( fromUnit )
2797 {
2799 {
2800 switch ( toUnit )
2801 {
2803 return 1.0;
2805 return M_PI / 180.0;
2807 return 400.0 / 360.0;
2809 return 60;
2811 return 3600;
2813 return 1.0 / 360.0;
2815 return M_PI / 180.0 * 1000;
2817 return 3200.0 / 180;
2819 break;
2820 }
2821 break;
2822 }
2824 {
2825 switch ( toUnit )
2826 {
2828 return 180.0 / M_PI;
2830 return 1.0;
2832 return 200.0 / M_PI;
2834 return 60 * 180.0 / M_PI;
2836 return 3600 * 180.0 / M_PI;
2838 return 0.5 / M_PI;
2840 return 1000;
2842 return 3200.0 / M_PI;
2844 break;
2845 }
2846 break;
2847 }
2849 {
2850 switch ( toUnit )
2851 {
2853 return 360.0 / 400.0;
2855 return M_PI / 200.0;
2857 return 1.0;
2859 return 60 * 360.0 / 400.0;
2861 return 3600 * 360.0 / 400.0;
2863 return 1.0 / 400.0;
2865 return M_PI / 200.0 * 1000;
2867 return 3200.0 / 200.0;
2869 break;
2870 }
2871 break;
2872 }
2874 {
2875 switch ( toUnit )
2876 {
2878 return 1 / 60.0;
2880 return M_PI / 180.0 / 60.0;
2882 return 400.0 / 360.0 / 60.0;
2884 return 1.0;
2886 return 60.0;
2888 return 1.0 / 360.0 / 60.0;
2890 return M_PI / 180.0 / 60.0 * 1000;
2892 return 3200.0 / 180.0 / 60.0;
2894 break;
2895 }
2896 break;
2897 }
2899 {
2900 switch ( toUnit )
2901 {
2903 return 1 / 3600.0;
2905 return M_PI / 180.0 / 3600.0;
2907 return 400.0 / 360.0 / 3600.0;
2909 return 1.0 / 60.0;
2911 return 1.0;
2913 return 1.0 / 360.0 / 3600.0;
2915 return M_PI / 180.0 / 3600.0 * 1000;
2917 return 3200.0 / 180.0 / 3600.0;
2919 break;
2920 }
2921 break;
2922 }
2924 {
2925 switch ( toUnit )
2926 {
2928 return 360.0;
2930 return 2 * M_PI;
2932 return 400.0;
2934 return 360.0 * 60.0;
2936 return 360.0 * 3600.0;
2938 return 1.0;
2940 return 2 * M_PI * 1000;
2942 return 2 * 3200;
2944 break;
2945 }
2946 break;
2947 }
2949 {
2950 switch ( toUnit )
2951 {
2953 return 180.0 / M_PI / 1000;
2955 return 0.001;
2957 return 200.0 / M_PI / 1000;
2959 return 180.0 * 60.0 / M_PI / 1000;
2961 return 180.0 * 3600.0 / M_PI / 1000;
2963 return M_PI / 2 / 1000;
2965 return 1.0;
2967 return 3200.0 / 1000.0 / M_PI;
2969 break;
2970 }
2971 break;
2972 }
2973
2975 {
2976 switch ( toUnit )
2977 {
2979 return 180.0 / 3200;
2981 return M_PI / 3200;
2983 return 200.0 / 3200;
2985 return 60 * 180.0 / 3200;
2987 return 3600.0 * 180 / 3200;
2989 return 1.0 / ( 2 * 32000 );
2991 return 1000.0 * M_PI / 3200.0;
2993 return 1.0;
2995 break;
2996 }
2997 break;
2998 }
2999
3001 break;
3002 }
3003 return 1.0;
3004}
3005
3006QString QgsUnitTypes::formatAngle( double angle, int decimals, Qgis::AngleUnit unit )
3007{
3008 QString unitLabel;
3009 int decimalPlaces = 2;
3010
3011 switch ( unit )
3012 {
3014 unitLabel = QObject::tr( "°", "angle" );
3015 decimalPlaces = 0;
3016 break;
3018 unitLabel = QObject::tr( " rad", "angle" );
3019 decimalPlaces = 2;
3020 break;
3022 unitLabel = QObject::tr( " gon", "angle" );
3023 decimalPlaces = 0;
3024 break;
3026 unitLabel = QObject::tr( "′", "angle minutes" );
3027 decimalPlaces = 0;
3028 break;
3030 unitLabel = QObject::tr( "″", "angle seconds" );
3031 decimalPlaces = 0;
3032 break;
3034 unitLabel = QObject::tr( " tr", "angle turn" );
3035 decimalPlaces = 3;
3036 break;
3038 unitLabel = QObject::tr( " millirad", "angular mil SI" );
3039 decimalPlaces = 0;
3040 break;
3042 unitLabel = QObject::tr( " mil", "angular mil NATO" );
3043 decimalPlaces = 0;
3044 break;
3046 break;
3047 }
3048
3049 if ( decimals >= 0 )
3050 decimalPlaces = decimals;
3051
3052 return QStringLiteral( "%L1%2" ).arg( angle, 0, 'f', decimalPlaces ).arg( unitLabel );
3053}
3054
3055QgsUnitTypes::DistanceValue QgsUnitTypes::scaledDistance( double distance, Qgis::DistanceUnit unit, int decimals, bool keepBaseUnit )
3056{
3057 DistanceValue result;
3058
3059 // cloned branches are intentional here for improved readability
3060 // NOLINTBEGIN(bugprone-branch-clone)
3061 switch ( unit )
3062 {
3064 if ( keepBaseUnit )
3065 {
3066 result.value = qgsRound( distance, decimals );
3068 }
3069 else if ( std::fabs( distance ) > 1000.0 )
3070 {
3071 result.value = qgsRound( distance / 1000, decimals );
3073 }
3074 else if ( std::fabs( distance ) < 0.01 )
3075 {
3076 result.value = qgsRound( distance * 1000, decimals );
3078 }
3079 else if ( std::fabs( distance ) < 0.1 )
3080 {
3081
3082 result.value = qgsRound( distance * 100, decimals );
3084 }
3085 else
3086 {
3087 result.value = qgsRound( distance, decimals );
3089 }
3090 break;
3091
3093 if ( keepBaseUnit || std::fabs( distance ) >= 1.0 )
3094 {
3095 result.value = qgsRound( distance, decimals );
3097 }
3098 else
3099 {
3100 result.value = qgsRound( distance * 1000, decimals );
3102 }
3103 break;
3104
3106 if ( std::fabs( distance ) <= 5280.0 || keepBaseUnit )
3107 {
3108 result.value = qgsRound( distance, decimals );
3110 }
3111 else
3112 {
3113 result.value = qgsRound( distance / 5280.0, decimals );
3115 }
3116 break;
3117
3119 if ( std::fabs( distance ) <= 1760.0 || keepBaseUnit )
3120 {
3121 result.value = qgsRound( distance, decimals );
3123 }
3124 else
3125 {
3126 result.value = qgsRound( distance / 1760.0, decimals );
3128 }
3129 break;
3130
3132 if ( std::fabs( distance ) >= 1.0 || keepBaseUnit )
3133 {
3134 result.value = qgsRound( distance, decimals );
3136 }
3137 else
3138 {
3139 result.value = qgsRound( distance * 5280.0, decimals );
3141 }
3142 break;
3143
3145 result.value = qgsRound( distance, decimals );
3147 break;
3148
3150 result.value = qgsRound( distance, decimals );
3152 break;
3153
3155 result.value = qgsRound( distance, decimals );
3157 break;
3158
3159 default:
3160 result.value = qgsRound( distance, decimals );
3161 result.unit = unit;
3162 break;
3163 }
3164 // NOLINTEND(bugprone-branch-clone)
3165
3166 return result;
3167}
3168
3169QgsUnitTypes::AreaValue QgsUnitTypes::scaledArea( double area, Qgis::AreaUnit unit, int decimals, bool keepBaseUnit )
3170{
3172 result.value = -1.0;
3174
3175 // If we are not forced to keep the base units, switch to meter calculation
3177 {
3178 if ( keepBaseUnit )
3179 {
3180 result.value = qgsRound( area, decimals );
3182 }
3183 else
3184 {
3185 area /= 1000000.0;
3187 }
3188 }
3189 else if ( unit == Qgis::AreaUnit::SquareCentimeters )
3190 {
3191 if ( keepBaseUnit )
3192 {
3193 result.value = qgsRound( area, decimals );
3195 }
3196 else
3197 {
3198 area /= 10000.0;
3200 }
3201 }
3202
3203 // cloned branches are intentional here for improved readability
3204 // NOLINTBEGIN(bugprone-branch-clone)
3205 switch ( unit )
3206 {
3208 // handled in the if above
3209 break;
3211 // handled in the if above
3212 break;
3214 {
3215 if ( keepBaseUnit )
3216 {
3217 result.value = qgsRound( area, decimals );
3219 }
3221 {
3224 }
3226 {
3229 }
3230 else
3231 {
3232 result.value = qgsRound( area, decimals );
3234 }
3235 break;
3236 }
3237
3239 {
3240 result.value = qgsRound( area, decimals );
3242 break;
3243 }
3244
3246 {
3247 result.value = qgsRound( area, decimals );
3249 break;
3250 }
3251
3253 {
3254 if ( keepBaseUnit )
3255 {
3256 result.value = qgsRound( area, decimals );
3258 }
3260 {
3263 }
3264 else
3265 {
3266 result.value = qgsRound( area, decimals );
3268 }
3269 break;
3270 }
3271
3273 {
3274 if ( keepBaseUnit )
3275 {
3276 result.value = qgsRound( area, decimals );
3278 }
3280 {
3283 }
3284 else
3285 {
3286 result.value = qgsRound( area, decimals );
3288 }
3289 break;
3290 }
3291
3293 {
3294 result.value = qgsRound( area, decimals );
3296 break;
3297 }
3298
3300 {
3301 if ( keepBaseUnit )
3302 {
3303 result.value = qgsRound( area, decimals );
3305 }
3307 {
3310 }
3311 else
3312 {
3313 result.value = qgsRound( area, decimals );
3315 }
3316 break;
3317 }
3318
3320 {
3321 if ( keepBaseUnit )
3322 {
3323 result.value = qgsRound( area, decimals );
3324 result.unit = Qgis::AreaUnit::Acres;
3325 }
3327 {
3330 }
3331 else
3332 {
3333 result.value = qgsRound( area, decimals );
3334 result.unit = Qgis::AreaUnit::Acres;
3335 }
3336 break;
3337 }
3338
3340 {
3341 result.value = qgsRound( area, decimals );
3343 break;
3344 }
3345
3347 {
3348 result.value = qgsRound( area, decimals );
3350 break;
3351 }
3352
3354 {
3355 result.value = qgsRound( area, decimals );
3357 break;
3358 }
3359 }
3360 // NOLINTEND(bugprone-branch-clone)
3361 return result;
3362}
3363
3364
3365QString QgsUnitTypes::formatDistance( double distance, int decimals, Qgis::DistanceUnit unit, bool keepBaseUnit )
3366{
3367 const DistanceValue dist = scaledDistance( distance, unit, decimals, keepBaseUnit );
3368
3369 QString unitText;
3370
3371 if ( dist.unit != Qgis::DistanceUnit::Unknown )
3372 unitText = QChar( ' ' ) + QgsUnitTypes::toAbbreviatedString( dist.unit );
3373
3374 if ( qgsDoubleNear( dist.value, 0 ) )
3375 {
3376 unitText = QChar( ' ' ) + QgsUnitTypes::toAbbreviatedString( unit );
3377 return QStringLiteral( "%L1%2" ).arg( distance, 0, 'e', decimals ).arg( unitText );
3378 }
3379 else
3380 {
3381 return QStringLiteral( "%L1%2" ).arg( dist.value, 0, 'f', decimals ).arg( unitText );
3382 }
3383}
3384
3385QString QgsUnitTypes::formatArea( double area, int decimals, Qgis::AreaUnit unit, bool keepBaseUnit )
3386{
3387 const QgsUnitTypes::AreaValue areaValue = scaledArea( area, unit, decimals, keepBaseUnit );
3388
3389 QString unitText;
3390
3391 if ( areaValue.unit != Qgis::AreaUnit::Unknown )
3392 unitText = QChar( ' ' ) + QgsUnitTypes::toAbbreviatedString( areaValue.unit );
3393
3394 if ( qgsDoubleNear( areaValue.value, 0 ) )
3395 {
3396 unitText = QChar( ' ' ) + QgsUnitTypes::toAbbreviatedString( unit );
3397 return QStringLiteral( "%L1%2" ).arg( area, 0, 'e', decimals ).arg( unitText );
3398 }
3399 else
3400 {
3401 return QStringLiteral( "%L1%2" ).arg( areaValue.value, 0, 'f', decimals ).arg( unitText );
3402 }
3403}
3404
3406{
3407 switch ( unit )
3408 {
3410 return QStringLiteral( "MM" );
3412 return QStringLiteral( "RenderMetersInMapUnits" );
3414 return QStringLiteral( "MapUnit" );
3416 return QStringLiteral( "Pixel" );
3418 return QStringLiteral( "Percentage" );
3420 return QStringLiteral( "Point" );
3422 return QStringLiteral( "Inch" );
3424 return QString();
3425 }
3426 return QString();
3427}
3428
3429Qgis::RenderUnit QgsUnitTypes::decodeRenderUnit( const QString &string, bool *ok )
3430{
3431 const QString normalized = string.trimmed().toLower();
3432
3433 if ( ok )
3434 *ok = true;
3435
3436 if ( normalized == encodeUnit( Qgis::RenderUnit::Millimeters ).toLower() )
3438 if ( normalized == encodeUnit( Qgis::RenderUnit::MetersInMapUnits ).toLower() )
3440 if ( normalized == QLatin1String( "meters" ) )
3442 if ( normalized == encodeUnit( Qgis::RenderUnit::MapUnits ).toLower() )
3444 if ( normalized == QLatin1String( "mapunits" ) )
3446 if ( normalized == encodeUnit( Qgis::RenderUnit::Pixels ).toLower() )
3448 if ( normalized == encodeUnit( Qgis::RenderUnit::Percentage ).toLower() )
3450 if ( normalized == QLatin1String( "percent" ) )
3452 if ( normalized == encodeUnit( Qgis::RenderUnit::Points ).toLower() )
3454 if ( normalized == QLatin1String( "points" ) )
3456 if ( normalized == encodeUnit( Qgis::RenderUnit::Inches ).toLower() )
3458
3459 if ( ok )
3460 *ok = false;
3461
3462 // millimeters are default
3464}
3465
3467{
3468 switch ( unit )
3469 {
3471 return QObject::tr( "millimeters", "render" );
3472
3474 return QObject::tr( "meters at scale", "render" );
3475
3477 return QObject::tr( "map units", "render" );
3478
3480 return QObject::tr( "pixels", "render" );
3481
3483 return QObject::tr( "percent", "render" );
3484
3486 return QObject::tr( "points", "render" );
3487
3489 return QObject::tr( "inches", "render" );
3490
3492 return QObject::tr( "<unknown>", "render" );
3493
3494 }
3495 return QString();
3496}
3497
3498
3499
3501{
3502 switch ( unit )
3503 {
3505 return QStringLiteral( "cm" );
3507 return QStringLiteral( "m" );
3509 return QStringLiteral( "in" );
3511 return QStringLiteral( "ft" );
3513 return QStringLiteral( "pt" );
3515 return QStringLiteral( "pi" );
3517 return QStringLiteral( "px" );
3519 return QStringLiteral( "mm" );
3520 }
3521 return QString();
3522}
3523
3524Qgis::LayoutUnit QgsUnitTypes::decodeLayoutUnit( const QString &string, bool *ok )
3525{
3526 const QString normalized = string.trimmed().toLower();
3527
3528 if ( ok )
3529 *ok = true;
3530
3531 if ( normalized == encodeUnit( Qgis::LayoutUnit::Millimeters ).toLower() )
3533 if ( normalized == encodeUnit( Qgis::LayoutUnit::Centimeters ).toLower() )
3535 if ( normalized == encodeUnit( Qgis::LayoutUnit::Meters ).toLower() )
3537 if ( normalized == encodeUnit( Qgis::LayoutUnit::Inches ).toLower() )
3539 if ( normalized == encodeUnit( Qgis::LayoutUnit::Feet ).toLower() )
3541 if ( normalized == encodeUnit( Qgis::LayoutUnit::Points ).toLower() )
3543 if ( normalized == encodeUnit( Qgis::LayoutUnit::Picas ).toLower() )
3545 if ( normalized == encodeUnit( Qgis::LayoutUnit::Pixels ).toLower() )
3547
3548 if ( ok )
3549 *ok = false;
3550
3551 // millimeters are default
3553}
3554
3574
3576{
3577 switch ( unit )
3578 {
3580 return QObject::tr( "px" );
3582 return QObject::tr( "mm" );
3584 return QObject::tr( "cm" );
3586 return QObject::tr( "m" );
3588 return QObject::tr( "in", "unit inch" );
3590 return QObject::tr( "ft" );
3592 return QObject::tr( "pt" );
3594 return QObject::tr( "pica" );
3595 }
3596 return QString(); // no warnings
3597}
3598
3600{
3601 switch ( unit )
3602 {
3604 return QObject::tr( "pixels" );
3606 return QObject::tr( "millimeters" );
3608 return QObject::tr( "centimeters" );
3610 return QObject::tr( "meters" );
3612 return QObject::tr( "inches" );
3614 return QObject::tr( "feet" );
3616 return QObject::tr( "points" );
3618 return QObject::tr( "picas" );
3619 }
3620 return QString(); // no warnings
3621}
DistanceUnitType
Types of distance units.
Definition qgis.h:5075
@ Geographic
Unit is a geographic (e.g., degree based) unit.
Definition qgis.h:5077
@ Unknown
Unknown unit type.
Definition qgis.h:5078
@ Standard
Unit is a standard measurement unit.
Definition qgis.h:5076
UnitType
Unit types.
Definition qgis.h:4996
@ Distance
Distance unit.
Definition qgis.h:4997
@ Temporal
Temporal unit.
Definition qgis.h:5001
@ Unknown
Unknown unit type.
Definition qgis.h:5000
@ Volume
Volume unit.
Definition qgis.h:4999
@ Area
Area unit.
Definition qgis.h:4998
LayoutUnit
Layout measurement units.
Definition qgis.h:5203
@ Feet
Feet.
Definition qgis.h:5208
@ Centimeters
Centimeters.
Definition qgis.h:5205
@ Millimeters
Millimeters.
Definition qgis.h:5204
@ Points
Typographic points.
Definition qgis.h:5209
@ Meters
Meters.
Definition qgis.h:5206
@ Picas
Typographic picas.
Definition qgis.h:5210
@ Pixels
Pixels.
Definition qgis.h:5211
@ Inches
Inches.
Definition qgis.h:5207
AngleUnit
Units of angles.
Definition qgis.h:5138
@ SecondsOfArc
Seconds of arc.
Definition qgis.h:5143
@ Radians
Square kilometers.
Definition qgis.h:5140
@ Turn
Turn/revolutions.
Definition qgis.h:5144
@ MinutesOfArc
Minutes of arc.
Definition qgis.h:5142
@ Unknown
Unknown angle unit.
Definition qgis.h:5147
@ MilliradiansSI
Angular milliradians (SI definition, 1/1000 of radian).
Definition qgis.h:5145
@ Degrees
Degrees.
Definition qgis.h:5139
@ Gon
Gon/gradian.
Definition qgis.h:5141
@ MilNATO
Angular mil (NATO definition, 6400 mil = 2PI radians).
Definition qgis.h:5146
DistanceUnit
Units of distance.
Definition qgis.h:5013
@ YardsBritishSears1922Truncated
British yards (Sears 1922 truncated).
Definition qgis.h:5053
@ Feet
Imperial feet.
Definition qgis.h:5016
@ MilesUSSurvey
US Survey miles.
Definition qgis.h:5060
@ LinksBritishSears1922
British links (Sears 1922).
Definition qgis.h:5048
@ YardsBritishBenoit1895A
British yards (Benoit 1895 A).
Definition qgis.h:5051
@ LinksBritishBenoit1895A
British links (Benoit 1895 A).
Definition qgis.h:5045
@ Centimeters
Centimeters.
Definition qgis.h:5021
@ YardsIndian1975
Indian yards (1975).
Definition qgis.h:5059
@ FeetUSSurvey
US Survey feet.
Definition qgis.h:5043
@ Millimeters
Millimeters.
Definition qgis.h:5022
@ FeetBritishSears1922
British feet (Sears 1922).
Definition qgis.h:5036
@ YardsClarkes
Clarke's yards.
Definition qgis.h:5055
@ YardsIndian
Indian yards.
Definition qgis.h:5056
@ FeetBritishBenoit1895B
British feet (Benoit 1895 B).
Definition qgis.h:5034
@ Miles
Terrestrial miles.
Definition qgis.h:5019
@ LinksUSSurvey
US Survey links.
Definition qgis.h:5050
@ Meters
Meters.
Definition qgis.h:5014
@ ChainsUSSurvey
US Survey chains.
Definition qgis.h:5030
@ FeetClarkes
Clarke's feet.
Definition qgis.h:5037
@ Unknown
Unknown distance unit.
Definition qgis.h:5063
@ Yards
Imperial yards.
Definition qgis.h:5018
@ FeetBritish1936
British feet (1936).
Definition qgis.h:5032
@ FeetIndian1962
Indian feet (1962).
Definition qgis.h:5041
@ YardsBritishSears1922
British yards (Sears 1922).
Definition qgis.h:5054
@ FeetIndian1937
Indian feet (1937).
Definition qgis.h:5040
@ YardsIndian1937
Indian yards (1937).
Definition qgis.h:5057
@ Degrees
Degrees, for planar geographic CRS distance measurements.
Definition qgis.h:5020
@ ChainsBritishBenoit1895B
British chains (Benoit 1895 B).
Definition qgis.h:5026
@ LinksBritishSears1922Truncated
British links (Sears 1922 truncated).
Definition qgis.h:5047
@ ChainsBritishBenoit1895A
British chains (Benoit 1895 A).
Definition qgis.h:5025
@ YardsBritishBenoit1895B
British yards (Benoit 1895 B).
Definition qgis.h:5052
@ FeetBritish1865
British feet (1865).
Definition qgis.h:5031
@ YardsIndian1962
Indian yards (1962).
Definition qgis.h:5058
@ FeetBritishSears1922Truncated
British feet (Sears 1922 truncated).
Definition qgis.h:5035
@ MetersGermanLegal
German legal meter.
Definition qgis.h:5062
@ LinksBritishBenoit1895B
British links (Benoit 1895 B).
Definition qgis.h:5046
@ ChainsInternational
International chains.
Definition qgis.h:5024
@ Inches
Inches.
Definition qgis.h:5023
@ Fathoms
Fathoms.
Definition qgis.h:5061
@ LinksInternational
International links.
Definition qgis.h:5044
@ ChainsBritishSears1922Truncated
British chains (Sears 1922 truncated).
Definition qgis.h:5027
@ FeetIndian
Indian (geodetic) feet.
Definition qgis.h:5039
@ NauticalMiles
Nautical miles.
Definition qgis.h:5017
@ ChainsClarkes
Clarke's chains.
Definition qgis.h:5029
@ LinksClarkes
Clarke's links.
Definition qgis.h:5049
@ ChainsBritishSears1922
British chains (Sears 1922).
Definition qgis.h:5028
@ Kilometers
Kilometers.
Definition qgis.h:5015
@ FeetIndian1975
Indian feet (1975).
Definition qgis.h:5042
@ FeetGoldCoast
Gold Coast feet.
Definition qgis.h:5038
@ FeetBritishBenoit1895A
British feet (Benoit 1895 A).
Definition qgis.h:5033
AreaUnit
Units of area.
Definition qgis.h:5090
@ Acres
Acres.
Definition qgis.h:5097
@ SquareFeet
Square feet.
Definition qgis.h:5093
@ SquareCentimeters
Square centimeters.
Definition qgis.h:5100
@ SquareInches
Square inches.
Definition qgis.h:5102
@ SquareNauticalMiles
Square nautical miles.
Definition qgis.h:5098
@ SquareMillimeters
Square millimeters.
Definition qgis.h:5101
@ SquareYards
Square yards.
Definition qgis.h:5094
@ Hectares
Hectares.
Definition qgis.h:5096
@ SquareKilometers
Square kilometers.
Definition qgis.h:5092
@ SquareMeters
Square meters.
Definition qgis.h:5091
@ Unknown
Unknown areal unit.
Definition qgis.h:5103
@ SquareDegrees
Square degrees, for planar geographic CRS area measurements.
Definition qgis.h:5099
@ SquareMiles
Square miles.
Definition qgis.h:5095
TemporalUnit
Temporal units.
Definition qgis.h:5159
@ IrregularStep
Special 'irregular step' time unit, used for temporal data which uses irregular, non-real-world unit ...
Definition qgis.h:5170
@ Milliseconds
Milliseconds.
Definition qgis.h:5160
@ Hours
Hours.
Definition qgis.h:5163
@ Unknown
Unknown time unit.
Definition qgis.h:5171
@ Centuries
Centuries.
Definition qgis.h:5169
@ Seconds
Seconds.
Definition qgis.h:5161
@ Weeks
Weeks.
Definition qgis.h:5165
@ Years
Years.
Definition qgis.h:5167
@ Decades
Decades.
Definition qgis.h:5168
@ Months
Months.
Definition qgis.h:5166
@ Minutes
Minutes.
Definition qgis.h:5162
RenderUnit
Rendering size units.
Definition qgis.h:5183
@ Percentage
Percentage of another measurement (e.g., canvas size, feature size).
Definition qgis.h:5187
@ Millimeters
Millimeters.
Definition qgis.h:5184
@ Points
Points (e.g., for font sizes).
Definition qgis.h:5188
@ Unknown
Mixed or unknown units.
Definition qgis.h:5190
@ MapUnits
Map units.
Definition qgis.h:5185
@ Pixels
Pixels.
Definition qgis.h:5186
@ Inches
Inches.
Definition qgis.h:5189
@ MetersInMapUnits
Meters value as Map units.
Definition qgis.h:5191
LayoutUnitType
Types of layout units.
Definition qgis.h:5223
@ PaperUnits
Unit is a paper based measurement unit.
Definition qgis.h:5224
@ ScreenUnits
Unit is a screen based measurement unit.
Definition qgis.h:5225
VolumeUnit
Units of volume.
Definition qgis.h:5115
@ CubicMeters
Cubic meters.
Definition qgis.h:5116
@ Barrel
Barrels.
Definition qgis.h:5119
@ CubicYards
Cubic yards.
Definition qgis.h:5118
@ CubicFeet
Cubic feet.
Definition qgis.h:5117
@ CubicDegrees
Cubic degrees, for planar geographic CRS volume measurements.
Definition qgis.h:5125
@ CubicDecimeter
Cubic decimeters.
Definition qgis.h:5120
@ Unknown
Unknown volume unit.
Definition qgis.h:5126
@ CubicInch
Cubic inches.
Definition qgis.h:5123
@ GallonUS
US Gallons.
Definition qgis.h:5122
@ Liters
Litres.
Definition qgis.h:5121
@ CubicCentimeter
Cubic Centimeters.
Definition qgis.h:5124
static Q_INVOKABLE Qgis::VolumeUnit decodeVolumeUnit(const QString &string, bool *ok=nullptr)
Decodes a volume unit from a string.
static Q_INVOKABLE Qgis::DistanceUnit stringToDistanceUnit(const QString &string, bool *ok=nullptr)
Converts a translated string to a distance unit.
static Q_INVOKABLE QgsUnitTypes::AreaValue scaledArea(double area, Qgis::AreaUnit unit, int decimals, bool keepBaseUnit=false)
Will convert an area with a given unit to an area value which is nice to display.
static Q_INVOKABLE QgsUnitTypes::DistanceValue scaledDistance(double distance, Qgis::DistanceUnit unit, int decimals, bool keepBaseUnit=false)
Will convert a distance with a given unit to a distance value which is nice to display.
static Q_INVOKABLE QString toString(Qgis::DistanceUnit unit)
Returns a translated string representing a distance unit.
static Q_INVOKABLE QString formatArea(double area, int decimals, Qgis::AreaUnit unit, bool keepBaseUnit=false)
Returns an area formatted as a friendly string.
static Q_INVOKABLE double fromUnitToUnitFactor(Qgis::DistanceUnit fromUnit, Qgis::DistanceUnit toUnit)
Returns the conversion factor between the specified distance units.
static Q_INVOKABLE Qgis::VolumeUnit stringToVolumeUnit(const QString &string, bool *ok=nullptr)
Converts a translated string to a volume unit.
static Q_INVOKABLE QString formatDistance(double distance, int decimals, Qgis::DistanceUnit unit, bool keepBaseUnit=false)
Returns an distance formatted as a friendly string.
static Q_INVOKABLE QString toAbbreviatedString(Qgis::DistanceUnit unit)
Returns a translated abbreviation representing a distance unit.
static Q_INVOKABLE Qgis::DistanceUnitType unitType(Qgis::DistanceUnit unit)
Returns the type for a distance unit.
static Q_INVOKABLE Qgis::UnitType decodeUnitType(const QString &string, bool *ok=nullptr)
Decodes a unit type from a string.
static Q_INVOKABLE Qgis::AreaUnit decodeAreaUnit(const QString &string, bool *ok=nullptr)
Decodes an areal unit from a string.
static Q_INVOKABLE Qgis::RenderUnit decodeRenderUnit(const QString &string, bool *ok=nullptr)
Decodes a render unit from a string.
static Q_INVOKABLE Qgis::TemporalUnit stringToTemporalUnit(const QString &string, bool *ok=nullptr)
Converts a translated string to a temporal unit.
static Q_INVOKABLE Qgis::LayoutUnit decodeLayoutUnit(const QString &string, bool *ok=nullptr)
Decodes a layout unit from a string.
static Q_INVOKABLE Qgis::AreaUnit stringToAreaUnit(const QString &string, bool *ok=nullptr)
Converts a translated string to an areal unit.
static Q_INVOKABLE Qgis::AreaUnit distanceToAreaUnit(Qgis::DistanceUnit distanceUnit)
Converts a distance unit to its corresponding area unit, e.g., meters to square meters.
static Q_INVOKABLE Qgis::TemporalUnit decodeTemporalUnit(const QString &string, bool *ok=nullptr)
Decodes a temporal unit from a string.
static Q_INVOKABLE Qgis::AngleUnit decodeAngleUnit(const QString &string, bool *ok=nullptr)
Decodes an angular unit from a string.
static Q_INVOKABLE Qgis::DistanceUnit areaToDistanceUnit(Qgis::AreaUnit areaUnit)
Converts an area unit to its corresponding distance unit, e.g., square meters to meters.
static Q_INVOKABLE Qgis::DistanceUnit volumeToDistanceUnit(Qgis::VolumeUnit volumeUnit)
Converts a volume unit to its corresponding distance unit, e.g., cubic meters to meters.
static Q_INVOKABLE QString encodeUnit(Qgis::DistanceUnit unit)
Encodes a distance unit to a string.
static Q_INVOKABLE QString encodeUnitType(Qgis::UnitType type)
Encodes a unit type to a string.
static Q_INVOKABLE QString formatAngle(double angle, int decimals, Qgis::AngleUnit unit)
Returns an angle formatted as a friendly string.
static Q_INVOKABLE Qgis::VolumeUnit distanceToVolumeUnit(Qgis::DistanceUnit distanceUnit)
Converts a distance unit to its corresponding volume unit, e.g., meters to cubic meters.
static Q_INVOKABLE Qgis::DistanceUnit decodeDistanceUnit(const QString &string, bool *ok=nullptr)
Decodes a distance unit from a string.
double qgsRound(double number, int places)
Returns a double number, rounded (as close as possible) to the specified number of places.
Definition qgis.h:6648
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference).
Definition qgis.h:6607
#define KM2_TO_M2
#define DEG2_TO_M3
#define MI2_TO_M2
#define AC_TO_FT2
#define YD2_TO_M2
#define NM2_TO_M2
#define IN2_TO_M2
#define MM2_TO_M2
#define DEG2_TO_M2
#define CM2_TO_M2
#define FT2_TO_M2
constexpr double distanceUnitToMeter(Qgis::DistanceUnit unit)
#define HA_TO_M2
A combination of area value and unit.
double value
The value part of the distance.
Qgis::AreaUnit unit
The value part of the distance.
A combination of distance value and unit.
double value
The value part of the distance.
Qgis::DistanceUnit unit
The value part of the distance.