QGIS API Documentation 4.1.0-Master (60fea48833c)
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 <QString>
22
23#include "moc_qgsunittypes.cpp"
24
25using namespace Qt::StringLiterals;
26
27/***************************************************************************
28 * This class is considered CRITICAL and any change MUST be accompanied with
29 * full unit tests in test_qgsunittypes.py.
30 * See details in QEP #17
31 ****************************************************************************/
32
34{
35 switch ( type )
36 {
38 return u"distance"_s;
39
41 return u"area"_s;
42
44 return u"volume"_s;
45
47 return u"temporal"_s;
48
50 return u"<unknown>"_s;
51 }
52 return QString();
53}
54
55Qgis::UnitType QgsUnitTypes::decodeUnitType( const QString &string, bool *ok )
56{
57 const QString normalized = string.trimmed().toLower();
58
59 if ( ok )
60 *ok = true;
61
62 if ( normalized == encodeUnitType( Qgis::UnitType::Distance ) )
64 if ( normalized == encodeUnitType( Qgis::UnitType::Area ) )
66 if ( normalized == encodeUnitType( Qgis::UnitType::Volume ) )
68 if ( normalized == encodeUnitType( Qgis::UnitType::Temporal ) )
70 if ( normalized == encodeUnitType( Qgis::UnitType::Unknown ) )
72
73 if ( ok )
74 *ok = false;
75
77}
78
80{
81 switch ( unit )
82 {
132
135
138 }
140}
141
168
170{
171 switch ( unit )
172 {
174 return u"meters"_s;
175
177 return u"km"_s;
178
180 return u"feet"_s;
181
183 return u"yd"_s;
184
186 return u"mi"_s;
187
189 return u"degrees"_s;
190
192 return u"<unknown>"_s;
193
195 return u"nautical miles"_s;
196
198 return u"cm"_s;
199
201 return u"mm"_s;
202
204 return u"in"_s;
205
207 return u"chain"_s;
208
210 return u"chain british benoit b1895a"_s;
211
213 return u"chain british benoit b1895b"_s;
214
216 return u"chain british sears 1922 truncated"_s;
217
219 return u"chain british sears 1922"_s;
220
222 return u"chain clarkes"_s;
223
225 return u"chain us survey"_s;
226
228 return u"feet british 1865"_s;
229
231 return u"feet british 1936"_s;
232
234 return u"feet british benoit 1895a"_s;
235
237 return u"feet british benoit 1895b"_s;
238
240 return u"feet british sears 1922 truncated"_s;
241
243 return u"feet british sears 1922"_s;
244
246 return u"feet clarkes"_s;
247
249 return u"feet gold coast"_s;
250
252 return u"feet indian"_s;
254 return u"feet indian 1937"_s;
255
257 return u"feet indian 1962"_s;
258
260 return u"feet indian 1975"_s;
261
263 return u"feet us survey"_s;
264
266 return u"links"_s;
267
269 return u"links british benoit 1895a"_s;
270
272 return u"links british benoit 1895b"_s;
273
275 return u"links british sears 1922 truncated"_s;
276
278 return u"links british sears 1922"_s;
279
281 return u"links clarkes"_s;
282
284 return u"links us survey"_s;
285
287 return u"yards british benoit 1895a"_s;
288
290 return u"yards british benoit 1895b"_s;
291
293 return u"yards british sears 1922 truncated"_s;
294
296 return u"yards british sears 1922"_s;
297
299 return u"yards clarkes"_s;
300
302 return u"yards indian"_s;
303
305 return u"yards indian 1937"_s;
306
308 return u"yards indian 1962"_s;
309
311 return u"yards indian 1975"_s;
312
314 return u"miles us survey"_s;
315
317 return u"yards fathom"_s;
318
320 return u"german legal meters"_s;
321 }
322 return QString();
323}
324
325/***************************************************************************
326 * This class is considered CRITICAL and any change MUST be accompanied with
327 * full unit tests in test_qgsunittypes.py.
328 * See details in QEP #17
329 ****************************************************************************/
330
331Qgis::DistanceUnit QgsUnitTypes::decodeDistanceUnit( const QString &string, bool *ok )
332{
333 const QString normalized = string.trimmed().toLower();
334
335 if ( ok )
336 *ok = true;
337
338 for ( const Qgis::DistanceUnit unit : {
350
390 } )
391 {
392 if ( normalized == encodeUnit( unit ) )
393 return unit;
394 }
395 if ( ok )
396 *ok = false;
397
399}
400
402{
403 switch ( unit )
404 {
406 return QObject::tr( "meters", "distance" );
407
409 return QObject::tr( "kilometers", "distance" );
410
412 return QObject::tr( "feet", "distance" );
413
415 return QObject::tr( "yards", "distance" );
416
418 return QObject::tr( "miles", "distance" );
419
421 return QObject::tr( "degrees", "distance" );
422
424 return QObject::tr( "centimeters", "distance" );
425
427 return QObject::tr( "millimeters", "distance" );
428
430 return QObject::tr( "inches", "distance" );
431
433 return QObject::tr( "<unknown>", "distance" );
434
436 return QObject::tr( "nautical miles", "distance" );
437
439 return QObject::tr( "chains (international)", "distance" );
440
442 return QObject::tr( "chains (British, Benoit 1895 A)", "distance" );
443
445 return QObject::tr( "chains (British, Benoit 1895 B)", "distance" );
446
448 return QObject::tr( "chains (British, Sears 1922 truncated)", "distance" );
449
451 return QObject::tr( "chains (British, Sears 1922)", "distance" );
452
454 return QObject::tr( "chains (Clarke's)", "distance" );
455
457 return QObject::tr( "chains (US survey)", "distance" );
458
460 return QObject::tr( "feet (British, 1865)", "distance" );
461
463 return QObject::tr( "feet (British, 1936)", "distance" );
464
466 return QObject::tr( "feet (British, Benoit 1895 A)", "distance" );
467
469 return QObject::tr( "feet (British, Benoit 1895 B)", "distance" );
470
472 return QObject::tr( "feet (British, Sears 1922 truncated)", "distance" );
473
475 return QObject::tr( "feet (British, Sears 1922)", "distance" );
476
478 return QObject::tr( "feet (Clarke's)", "distance" );
479
481 return QObject::tr( "feet (Gold Coast)", "distance" );
482
484 return QObject::tr( "feet (Indian)", "distance" );
485
487 return QObject::tr( "feet (Indian 1937)", "distance" );
488
490 return QObject::tr( "feet (Indian 1962)", "distance" );
491
493 return QObject::tr( "feet (Indian 1975)", "distance" );
494
496 return QObject::tr( "feet (US survey)", "distance" );
497
499 return QObject::tr( "links", "distance" );
500
502 return QObject::tr( "links (British, Benoit 1895 A)", "distance" );
503
505 return QObject::tr( "links (British, Benoit 1895 B)", "distance" );
506
508 return QObject::tr( "links (British, Sears 1922 truncated)", "distance" );
509
511 return QObject::tr( "links (British, Sears 1922)", "distance" );
512
514 return QObject::tr( "links (Clarke's)", "distance" );
515
517 return QObject::tr( "links (US survey)", "distance" );
518
520 return QObject::tr( "yards (British, Benoit 1895 A)", "distance" );
521
523 return QObject::tr( "yards (British, Benoit 1895 B)", "distance" );
524
526 return QObject::tr( "yards (British, Sears 1922 truncated)", "distance" );
527
529 return QObject::tr( "yards (British, Sears 1922)", "distance" );
530
532 return QObject::tr( "yards (Clarke's)", "distance" );
533
535 return QObject::tr( "yards (Indian)", "distance" );
536
538 return QObject::tr( "yards (Indian 1937)", "distance" );
539
541 return QObject::tr( "yards (Indian 1962)", "distance" );
542
544 return QObject::tr( "yards (Indian 1975)", "distance" );
545
547 return QObject::tr( "miles (US survey)", "distance" );
548
550 return QObject::tr( "fathoms", "distance" );
551
553 return QObject::tr( "meters (German legal)", "distance" );
554 }
555 return QString();
556}
557
559{
560 switch ( unit )
561 {
563 return QObject::tr( "mm", "render" );
564
566 return QObject::tr( "map units", "render" );
567
569 return QObject::tr( "px", "render" );
570
572 return QObject::tr( "%", "render" );
573
575 return QObject::tr( "pt", "render" );
576
578 return QObject::tr( "in", "render" );
579
581 return QObject::tr( "unknown", "render" );
582
584 return QObject::tr( "m", "render" );
585 }
586
587 return QString();
588}
589
591{
592 switch ( unit )
593 {
595 return QObject::tr( "m", "distance" );
596
598 return QObject::tr( "km", "distance" );
599
614 return QObject::tr( "ft", "distance" );
615
626 return QObject::tr( "yd", "distance" );
627
630 return QObject::tr( "mi", "distance" );
631
633 return QObject::tr( "deg", "distance" );
634
636 return QObject::tr( "cm", "distance" );
637
639 return QObject::tr( "mm", "distance" );
640
642 return QObject::tr( "in", "distance" );
643
645 return QString();
646
648 return QObject::tr( "NM", "distance" );
649
657 return QObject::tr( "ch", "distance" );
658
666 return QObject::tr( "lk", "distance" );
667
669 return QObject::tr( "f", "distance" );
670
672 return QObject::tr( "glm", "distance" );
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 : {
741 } )
742 {
743 if ( normalized.compare( toString( unit ), Qt::CaseInsensitive ) == 0 )
744 return unit;
745 }
746
747 if ( ok )
748 *ok = false;
749
751}
752
753/***************************************************************************
754 * This class is considered CRITICAL and any change MUST be accompanied with
755 * full unit tests in test_qgsunittypes.py.
756 * See details in QEP #17
757 ****************************************************************************/
758
760{
761 // values are from the EPSG units database:
762 switch ( unit )
763 {
765 return 1.0;
767 return 1000.0;
769 return 0.3048;
771 return 1852.0;
773 return 0.9144;
775 return 1609.344;
777 return 111319.49079327358;
779 return 0.01;
781 return 0.001;
783 return 0.0254;
785 return 20.1168;
787 return 20.1167824;
789 return 20.116782494376;
791 return 20.116756;
793 return 20.116765121553;
795 return 20.1166195164;
797 return 20.11684023368;
799 return 0.30480083333333;
801 return 0.3048007491;
803 return 0.30479973333333;
805 return 0.30479973476327;
807 return 0.30479933333333;
809 return 0.30479947153868;
811 return 0.3047972654;
813 return 0.30479971018151;
815 return 0.30479951024815;
817 return 0.30479841;
819 return 0.3047996;
821 return 0.3047995;
823 return 0.30480060960122;
825 return 0.201168;
827 return 0.201167824;
829 return 0.20116782494376;
831 return 0.20116756;
833 return 0.20116765121553;
835 return 0.201166195164;
837 return 0.2011684023368;
839 return 0.9143992;
841 return 0.91439920428981;
843 return 0.914398;
845 return 0.91439841461603;
847 return 0.9143917962;
849 return 0.91439853074444;
851 return 0.91439523;
853 return 0.9143988;
855 return 0.9143985;
857 return 1609.3472186944;
859 return 1.8288;
861 return 1;
863 return 1.0000135965;
864 }
865 return 1;
866}
867
869{
870 if ( fromUnit == toUnit || fromUnit == Qgis::DistanceUnit::Unknown || toUnit == Qgis::DistanceUnit::Unknown )
871 return 1.0;
872
873 constexpr double FEET_TO_INCHES = 12;
874 constexpr double YARDS_TO_FEET = 3.0;
875
876 // Calculate the conversion factor between the specified units
877
878 // special cases, where we don't go through meters as an intermediate unit:
879 switch ( fromUnit )
880 {
882 {
883 switch ( toUnit )
884 {
886 return FEET_TO_INCHES;
888 return 1.0 / YARDS_TO_FEET;
889 default:
890 break;
891 }
892
893 break;
894 }
896 {
897 switch ( toUnit )
898 {
900 return YARDS_TO_FEET;
902 return YARDS_TO_FEET * FEET_TO_INCHES;
903 default:
904 break;
905 }
906
907 break;
908 }
909
911 {
912 switch ( toUnit )
913 {
915 return 1.0 / FEET_TO_INCHES;
917 return 1.0 / ( YARDS_TO_FEET * FEET_TO_INCHES );
918 default:
919 break;
920 }
921
922 break;
923 }
924
925 default:
926 break;
927 }
928
929 return distanceUnitToMeter( fromUnit ) / distanceUnitToMeter( toUnit );
930}
931
933{
934 switch ( unit )
935 {
937 return u"m2"_s;
939 return u"km2"_s;
941 return u"ft2"_s;
943 return u"y2"_s;
945 return u"mi2"_s;
947 return u"ha"_s;
949 return u"ac"_s;
951 return u"nm2"_s;
953 return u"deg2"_s;
955 return u"cm2"_s;
957 return u"mm2"_s;
959 return u"in2"_s;
961 return u"<unknown>"_s;
962 }
963 return QString();
964}
965
966Qgis::AreaUnit QgsUnitTypes::decodeAreaUnit( const QString &string, bool *ok )
967{
968 const QString normalized = string.trimmed().toLower();
969
970 if ( ok )
971 *ok = true;
972
973 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareMeters ) )
975 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareKilometers ) )
977 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareFeet ) )
979 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareYards ) )
981 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareMiles ) )
983 if ( normalized == encodeUnit( Qgis::AreaUnit::Hectares ) )
985 if ( normalized == encodeUnit( Qgis::AreaUnit::Acres ) )
987 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareNauticalMiles ) )
989 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareDegrees ) )
991 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareCentimeters ) )
993 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareMillimeters ) )
995 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareInches ) )
997 if ( normalized == encodeUnit( Qgis::AreaUnit::Unknown ) )
999
1000 if ( ok )
1001 *ok = false;
1002
1004}
1005
1007{
1008 switch ( unit )
1009 {
1011 return QObject::tr( "square meters", "area" );
1013 return QObject::tr( "square kilometers", "area" );
1015 return QObject::tr( "square feet", "area" );
1017 return QObject::tr( "square yards", "area" );
1019 return QObject::tr( "square miles", "area" );
1021 return QObject::tr( "hectares", "area" );
1023 return QObject::tr( "acres", "area" );
1025 return QObject::tr( "square nautical miles", "area" );
1027 return QObject::tr( "square degrees", "area" );
1029 return QObject::tr( "square millimeters", "area" );
1031 return QObject::tr( "square centimeters", "area" );
1033 return QObject::tr( "square inches", "area" );
1035 return QObject::tr( "<unknown>", "area" );
1036 }
1037 return QString();
1038}
1039
1041{
1042 switch ( unit )
1043 {
1045 return QObject::tr( "m²", "area" );
1047 return QObject::tr( "km²", "area" );
1049 return QObject::tr( "ft²", "area" );
1051 return QObject::tr( "yd²", "area" );
1053 return QObject::tr( "mi²", "area" );
1055 return QObject::tr( "ha", "area" );
1057 return QObject::tr( "ac", "area" );
1059 return QObject::tr( "NM²", "area" );
1061 return QObject::tr( "deg²", "area" );
1063 return QObject::tr( "cm²", "area" );
1065 return QObject::tr( "mm²", "area" );
1067 return QObject::tr( "in²", "area" );
1069 return QString();
1070 }
1071 return QString();
1072}
1073
1074Qgis::AreaUnit QgsUnitTypes::stringToAreaUnit( const QString &string, bool *ok )
1075{
1076 const QString normalized = string.trimmed().toLower();
1077
1078 if ( ok )
1079 *ok = true;
1080
1081 if ( normalized == toString( Qgis::AreaUnit::SquareMeters ) )
1083 if ( normalized == toString( Qgis::AreaUnit::SquareKilometers ) )
1085 if ( normalized == toString( Qgis::AreaUnit::SquareFeet ) )
1087 if ( normalized == toString( Qgis::AreaUnit::SquareYards ) )
1089 if ( normalized == toString( Qgis::AreaUnit::SquareMiles ) )
1091 if ( normalized == toString( Qgis::AreaUnit::Hectares ) )
1093 if ( normalized == toString( Qgis::AreaUnit::Acres ) )
1094 return Qgis::AreaUnit::Acres;
1095 if ( normalized == toString( Qgis::AreaUnit::SquareNauticalMiles ) )
1097 if ( normalized == toString( Qgis::AreaUnit::SquareDegrees ) )
1099 if ( normalized == toString( Qgis::AreaUnit::SquareMillimeters ) )
1101 if ( normalized == toString( Qgis::AreaUnit::SquareCentimeters ) )
1103 if ( normalized == toString( Qgis::AreaUnit::SquareInches ) )
1105 if ( normalized == toString( Qgis::AreaUnit::Unknown ) )
1107 if ( ok )
1108 *ok = false;
1109
1111}
1112
1114{
1115#define KM2_TO_M2 1000000.0
1116#define CM2_TO_M2 0.0001
1117#define MM2_TO_M2 0.000001
1118#define FT2_TO_M2 0.09290304
1119#define IN2_TO_M2 0.00064516
1120#define YD2_TO_M2 0.83612736
1121#define MI2_TO_M2 2589988.110336
1122#define HA_TO_M2 10000.0
1123#define AC_TO_FT2 43560.0
1124#define DEG2_TO_M2 12392029030.5
1125#define NM2_TO_M2 3429904.0
1126
1127 // Calculate the conversion factor between the specified units
1128 switch ( fromUnit )
1129 {
1131 {
1132 switch ( toUnit )
1133 {
1135 return 1.0;
1137 return 1.0 / KM2_TO_M2;
1139 return 1.0 / FT2_TO_M2;
1141 return 1.0 / YD2_TO_M2;
1143 return 1.0 / MI2_TO_M2;
1145 return 1.0 / HA_TO_M2;
1147 return 1.0 / AC_TO_FT2 / FT2_TO_M2;
1149 return 1.0 / NM2_TO_M2;
1151 return 1.0 / DEG2_TO_M2;
1153 return 1.0 / CM2_TO_M2;
1155 return 1.0 / MM2_TO_M2;
1157 return 1.0 / IN2_TO_M2;
1159 break;
1160 }
1161
1162 break;
1163 }
1165 {
1166 switch ( toUnit )
1167 {
1169 return KM2_TO_M2;
1171 return 1.0;
1173 return KM2_TO_M2 / FT2_TO_M2;
1175 return KM2_TO_M2 / YD2_TO_M2;
1177 return KM2_TO_M2 / MI2_TO_M2;
1179 return KM2_TO_M2 / HA_TO_M2;
1181 return KM2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
1183 return KM2_TO_M2 / NM2_TO_M2;
1185 return KM2_TO_M2 / DEG2_TO_M2;
1187 return KM2_TO_M2 / CM2_TO_M2;
1189 return KM2_TO_M2 / MM2_TO_M2;
1191 return KM2_TO_M2 / IN2_TO_M2;
1193 break;
1194 }
1195
1196 break;
1197 }
1199 {
1200 switch ( toUnit )
1201 {
1203 return FT2_TO_M2;
1205 return FT2_TO_M2 / KM2_TO_M2;
1207 return 1.0;
1209 return FT2_TO_M2 / YD2_TO_M2;
1211 return FT2_TO_M2 / MI2_TO_M2;
1213 return FT2_TO_M2 / HA_TO_M2;
1215 return 1.0 / AC_TO_FT2;
1217 return FT2_TO_M2 / NM2_TO_M2;
1219 return FT2_TO_M2 / DEG2_TO_M2;
1221 return FT2_TO_M2 / CM2_TO_M2;
1223 return FT2_TO_M2 / MM2_TO_M2;
1225 return FT2_TO_M2 / IN2_TO_M2;
1227 break;
1228 }
1229
1230 break;
1231 }
1232
1234 {
1235 switch ( toUnit )
1236 {
1238 return YD2_TO_M2;
1240 return YD2_TO_M2 / KM2_TO_M2;
1242 return YD2_TO_M2 / FT2_TO_M2;
1244 return 1.0;
1246 return YD2_TO_M2 / MI2_TO_M2;
1248 return YD2_TO_M2 / HA_TO_M2;
1250 return YD2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1252 return YD2_TO_M2 / NM2_TO_M2;
1254 return YD2_TO_M2 / DEG2_TO_M2;
1256 return YD2_TO_M2 / CM2_TO_M2;
1258 return YD2_TO_M2 / MM2_TO_M2;
1260 return YD2_TO_M2 / IN2_TO_M2;
1262 break;
1263 }
1264 break;
1265 }
1266
1268 {
1269 switch ( toUnit )
1270 {
1272 return MI2_TO_M2;
1274 return MI2_TO_M2 / KM2_TO_M2;
1276 return MI2_TO_M2 / FT2_TO_M2;
1278 return MI2_TO_M2 / YD2_TO_M2;
1280 return 1.0;
1282 return MI2_TO_M2 / HA_TO_M2;
1284 return MI2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1286 return MI2_TO_M2 / NM2_TO_M2;
1288 return MI2_TO_M2 / DEG2_TO_M2;
1290 return MI2_TO_M2 / CM2_TO_M2;
1292 return MI2_TO_M2 / MM2_TO_M2;
1294 return MI2_TO_M2 / IN2_TO_M2;
1296 break;
1297 }
1298
1299 break;
1300 }
1301
1303 {
1304 switch ( toUnit )
1305 {
1307 return HA_TO_M2;
1309 return HA_TO_M2 / KM2_TO_M2;
1311 return HA_TO_M2 / FT2_TO_M2;
1313 return HA_TO_M2 / YD2_TO_M2;
1315 return HA_TO_M2 / MI2_TO_M2;
1317 return 1.0;
1319 return HA_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1321 return HA_TO_M2 / NM2_TO_M2;
1323 return HA_TO_M2 / DEG2_TO_M2;
1325 return HA_TO_M2 / CM2_TO_M2;
1327 return HA_TO_M2 / MM2_TO_M2;
1329 return HA_TO_M2 / IN2_TO_M2;
1331 break;
1332 }
1333
1334 break;
1335 }
1336
1338 {
1339 switch ( toUnit )
1340 {
1342 return AC_TO_FT2 * FT2_TO_M2;
1344 return AC_TO_FT2 * FT2_TO_M2 / KM2_TO_M2;
1346 return AC_TO_FT2;
1348 return AC_TO_FT2 * FT2_TO_M2 / YD2_TO_M2;
1350 return AC_TO_FT2 * FT2_TO_M2 / MI2_TO_M2;
1352 return AC_TO_FT2 * FT2_TO_M2 / HA_TO_M2;
1354 return 1.0;
1356 return AC_TO_FT2 * FT2_TO_M2 / NM2_TO_M2;
1358 return AC_TO_FT2 * FT2_TO_M2 / DEG2_TO_M2;
1360 return AC_TO_FT2 * FT2_TO_M2 / CM2_TO_M2;
1362 return AC_TO_FT2 * FT2_TO_M2 / MM2_TO_M2;
1364 return AC_TO_FT2 * FT2_TO_M2 / IN2_TO_M2;
1366 break;
1367 }
1368
1369 break;
1370 }
1371
1373 {
1374 switch ( toUnit )
1375 {
1377 return NM2_TO_M2;
1379 return NM2_TO_M2 / KM2_TO_M2;
1381 return NM2_TO_M2 / FT2_TO_M2;
1383 return NM2_TO_M2 / YD2_TO_M2;
1385 return NM2_TO_M2 / MI2_TO_M2;
1387 return NM2_TO_M2 / HA_TO_M2;
1389 return NM2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1391 return 1.0;
1393 return NM2_TO_M2 / DEG2_TO_M2;
1395 return NM2_TO_M2 / CM2_TO_M2;
1397 return NM2_TO_M2 / MM2_TO_M2;
1399 return NM2_TO_M2 / IN2_TO_M2;
1401 break;
1402 }
1403
1404 break;
1405 }
1406
1408 {
1409 switch ( toUnit )
1410 {
1412 return DEG2_TO_M2;
1414 return DEG2_TO_M2 / KM2_TO_M2;
1416 return DEG2_TO_M2 / FT2_TO_M2;
1418 return DEG2_TO_M2 / YD2_TO_M2;
1420 return DEG2_TO_M2 / MI2_TO_M2;
1422 return DEG2_TO_M2 / HA_TO_M2;
1424 return DEG2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1426 return DEG2_TO_M2 / NM2_TO_M2;
1428 return 1.0;
1430 return DEG2_TO_M2 / CM2_TO_M2;
1432 return DEG2_TO_M2 / MM2_TO_M2;
1434 return DEG2_TO_M2 / IN2_TO_M2;
1436 break;
1437 }
1438
1439 break;
1440 }
1441
1443 {
1444 switch ( toUnit )
1445 {
1447 return MM2_TO_M2;
1449 return MM2_TO_M2 / KM2_TO_M2;
1451 return MM2_TO_M2 / FT2_TO_M2;
1453 return MM2_TO_M2 / YD2_TO_M2;
1455 return MM2_TO_M2 / MI2_TO_M2;
1457 return MM2_TO_M2 / HA_TO_M2;
1459 return MM2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
1461 return MM2_TO_M2 / NM2_TO_M2;
1463 return MM2_TO_M2 / DEG2_TO_M2;
1465 return MM2_TO_M2 / CM2_TO_M2;
1467 return 1.0;
1469 return MM2_TO_M2 / IN2_TO_M2;
1471 break;
1472 }
1473
1474 break;
1475 }
1477 {
1478 switch ( toUnit )
1479 {
1481 return CM2_TO_M2;
1483 return CM2_TO_M2 / KM2_TO_M2;
1485 return CM2_TO_M2 / FT2_TO_M2;
1487 return CM2_TO_M2 / YD2_TO_M2;
1489 return CM2_TO_M2 / MI2_TO_M2;
1491 return CM2_TO_M2 / HA_TO_M2;
1493 return CM2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
1495 return CM2_TO_M2 / NM2_TO_M2;
1497 return CM2_TO_M2 / DEG2_TO_M2;
1499 return 1.0;
1501 return CM2_TO_M2 / MM2_TO_M2;
1503 return CM2_TO_M2 / IN2_TO_M2;
1505 break;
1506 }
1507
1508 break;
1509 }
1511 {
1512 switch ( toUnit )
1513 {
1515 return IN2_TO_M2;
1517 return IN2_TO_M2 / KM2_TO_M2;
1519 return IN2_TO_M2 / FT2_TO_M2;
1521 return IN2_TO_M2 / YD2_TO_M2;
1523 return IN2_TO_M2 / MI2_TO_M2;
1525 return IN2_TO_M2 / HA_TO_M2;
1527 return IN2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
1529 return IN2_TO_M2 / NM2_TO_M2;
1531 return IN2_TO_M2 / DEG2_TO_M2;
1533 return IN2_TO_M2 / CM2_TO_M2;
1535 return IN2_TO_M2 / MM2_TO_M2;
1537 return 1;
1539 break;
1540 }
1541
1542 break;
1543 }
1545 break;
1546 }
1547 return 1.0;
1548}
1549
1551{
1552 switch ( distanceUnit )
1553 {
1557
1560
1563
1566
1606
1609
1613
1616
1619
1622
1625 }
1626
1628}
1629
1672
1674{
1675 switch ( unit )
1676 {
1678 return u"s"_s;
1680 return u"ms"_s;
1682 return u"min"_s;
1684 return u"h"_s;
1686 return u"d"_s;
1688 return u"wk"_s;
1690 return u"mon"_s;
1692 return u"y"_s;
1694 return u"dec"_s;
1696 return u"c"_s;
1698 return u"xxx"_s;
1700 return u"<unknown>"_s;
1701 }
1702 return QString();
1703}
1704
1706{
1707 const QString normalized = string.trimmed().toLower();
1708
1709 if ( ok )
1710 *ok = true;
1711
1712 if ( normalized == encodeUnit( Qgis::TemporalUnit::Seconds ) )
1714 if ( normalized == encodeUnit( Qgis::TemporalUnit::Milliseconds ) )
1716 if ( normalized == encodeUnit( Qgis::TemporalUnit::Minutes ) )
1718 if ( normalized == encodeUnit( Qgis::TemporalUnit::Hours ) )
1720 if ( normalized == encodeUnit( Qgis::TemporalUnit::Days ) )
1722 if ( normalized == encodeUnit( Qgis::TemporalUnit::Weeks ) )
1724 if ( normalized == encodeUnit( Qgis::TemporalUnit::Months ) )
1726 if ( normalized == encodeUnit( Qgis::TemporalUnit::Years ) )
1728 if ( normalized == encodeUnit( Qgis::TemporalUnit::Decades ) )
1730 if ( normalized == encodeUnit( Qgis::TemporalUnit::Centuries ) )
1732 if ( normalized == encodeUnit( Qgis::TemporalUnit::IrregularStep ) )
1734 if ( normalized == encodeUnit( Qgis::TemporalUnit::Unknown ) )
1736
1737 if ( ok )
1738 *ok = false;
1739
1741}
1742
1744{
1745 switch ( unit )
1746 {
1748 return QObject::tr( "seconds", "temporal" );
1750 return QObject::tr( "milliseconds", "temporal" );
1752 return QObject::tr( "minutes", "temporal" );
1754 return QObject::tr( "hours", "temporal" );
1756 return QObject::tr( "days", "temporal" );
1758 return QObject::tr( "weeks", "temporal" );
1760 return QObject::tr( "months", "temporal" );
1762 return QObject::tr( "years", "temporal" );
1764 return QObject::tr( "decades", "temporal" );
1766 return QObject::tr( "centuries", "temporal" );
1768 return QObject::tr( "steps", "temporal" );
1770 return QObject::tr( "<unknown>", "temporal" );
1771 }
1772 return QString();
1773}
1774
1776{
1777 switch ( unit )
1778 {
1780 return QObject::tr( "s", "temporal" );
1782 return QObject::tr( "ms", "temporal" );
1784 return QObject::tr( "min", "temporal" );
1786 return QObject::tr( "h", "temporal" );
1788 return QObject::tr( "d", "temporal" );
1790 return QObject::tr( "wk", "temporal" );
1792 return QObject::tr( "mon", "temporal" );
1794 return QObject::tr( "y", "temporal" );
1796 return QObject::tr( "dec", "temporal" );
1798 return QObject::tr( "cen", "temporal" );
1800 return QObject::tr( "steps", "temporal" );
1802 return QObject::tr( "<unknown>", "temporal" );
1803 }
1804 return QString();
1805}
1806
1808{
1809 const QString normalized = string.trimmed().toLower();
1810
1811 if ( ok )
1812 *ok = true;
1813
1814 if ( normalized == toString( Qgis::TemporalUnit::Seconds ) )
1816 if ( normalized == toString( Qgis::TemporalUnit::Milliseconds ) )
1818 if ( normalized == toString( Qgis::TemporalUnit::Minutes ) )
1820 if ( normalized == toString( Qgis::TemporalUnit::Hours ) )
1822 if ( normalized == toString( Qgis::TemporalUnit::Days ) )
1824 if ( normalized == toString( Qgis::TemporalUnit::Weeks ) )
1826 if ( normalized == toString( Qgis::TemporalUnit::Months ) )
1828 if ( normalized == toString( Qgis::TemporalUnit::Years ) )
1830 if ( normalized == toString( Qgis::TemporalUnit::Decades ) )
1832 if ( normalized == toString( Qgis::TemporalUnit::Centuries ) )
1834 if ( normalized == toString( Qgis::TemporalUnit::IrregularStep ) )
1836 if ( normalized == toString( Qgis::TemporalUnit::Unknown ) )
1838
1839 if ( ok )
1840 *ok = false;
1841
1843}
1844
1846{
1847 switch ( fromUnit )
1848 {
1850 {
1851 switch ( toUnit )
1852 {
1854 return 1.0;
1856 return 1000.0;
1858 return 1 / 60.0;
1860 return 1 / 3600.0;
1862 return 1 / 86400.0;
1864 return 1 / 604800.0;
1866 return 1 / 2592000.0;
1868 return 1 / 31557600.0;
1870 return 1 / 315576000.0;
1872 return 1 / 3155760000.0;
1875 return 1.0;
1876 }
1877 break;
1878 }
1880 {
1881 switch ( toUnit )
1882 {
1884 return 1 / 1000.0;
1886 return 1.0;
1888 return 1 / 60000.0;
1890 return 1 / 3600000.0;
1892 return 1 / 86400000.0;
1894 return 1 / 604800000.0;
1896 return 1 / 2592000000.0;
1898 return 1 / 31557600000.0;
1900 return 1 / 315576000000.0;
1902 return 1 / 3155760000000.0;
1905 return 1.0;
1906 }
1907 break;
1908 }
1910 {
1911 switch ( toUnit )
1912 {
1914 return 60.0;
1916 return 60000.0;
1918 return 1;
1920 return 1 / 60.0;
1922 return 1 / 1440.0;
1924 return 1 / 10080.0;
1926 return 1 / 43200.0;
1928 return 1 / 525960.0;
1930 return 1 / 5259600.0;
1932 return 1 / 52596000.0;
1935 return 1.0;
1936 }
1937 break;
1938 }
1940 {
1941 switch ( toUnit )
1942 {
1944 return 3600.0;
1946 return 3600000.0;
1948 return 60;
1950 return 1;
1952 return 1 / 24.0;
1954 return 1 / 168.0;
1956 return 1 / 720.0;
1958 return 1 / 8766.0;
1960 return 1 / 87660.0;
1962 return 1 / 876600.0;
1965 return 1.0;
1966 }
1967 break;
1968 }
1970 {
1971 switch ( toUnit )
1972 {
1974 return 86400.0;
1976 return 86400000.0;
1978 return 1440;
1980 return 24;
1982 return 1;
1984 return 1 / 7.0;
1986 return 1 / 30.0;
1988 return 1 / 365.25;
1990 return 1 / 3652.5;
1992 return 1 / 36525.0;
1995 return 1.0;
1996 }
1997 break;
1998 }
2000 {
2001 switch ( toUnit )
2002 {
2004 return 604800.0;
2006 return 604800000.0;
2008 return 10080;
2010 return 168;
2012 return 7;
2014 return 1;
2016 return 7 / 30.0;
2018 return 7 / 365.25;
2020 return 7 / 3652.5;
2022 return 7 / 36525.0;
2025 return 1.0;
2026 }
2027 break;
2028 }
2030 {
2031 switch ( toUnit )
2032 {
2034 return 2592000.0;
2036 return 2592000000.0;
2038 return 43200;
2040 return 720;
2042 return 30;
2044 return 30 / 7.0;
2046 return 1;
2048 return 30 / 365.25;
2050 return 30 / 3652.5;
2052 return 30 / 36525.0;
2055 return 1.0;
2056 }
2057 break;
2058 }
2060 {
2061 switch ( toUnit )
2062 {
2064 return 31557600.0;
2066 return 31557600000.0;
2068 return 525960.0;
2070 return 8766.0;
2072 return 365.25;
2074 return 365.25 / 7.0;
2076 return 365.25 / 30.0;
2078 return 1;
2080 return 0.1;
2082 return 0.01;
2085 return 1.0;
2086 }
2087 break;
2088 }
2090 {
2091 switch ( toUnit )
2092 {
2094 return 315576000.0;
2096 return 315576000000.0;
2098 return 5259600.0;
2100 return 87660.0;
2102 return 3652.5;
2104 return 3652.5 / 7.0;
2106 return 3652.5 / 30.0;
2108 return 10;
2110 return 1;
2112 return 0.1;
2115 return 1.0;
2116 }
2117 break;
2118 }
2119
2121 {
2122 switch ( toUnit )
2123 {
2125 return 3155760000.0;
2127 return 3155760000000.0;
2129 return 52596000.0;
2131 return 876600.0;
2133 return 36525;
2135 return 36525 / 7.0;
2137 return 36525 / 30.0;
2139 return 100;
2141 return 10;
2143 return 1;
2146 return 1.0;
2147 }
2148 break;
2149 }
2150
2153 {
2154 return 1.0;
2155 }
2156 }
2157 return 1.0;
2158}
2159
2160Qgis::VolumeUnit QgsUnitTypes::decodeVolumeUnit( const QString &string, bool *ok )
2161{
2162 const QString normalized = string.trimmed().toLower();
2163
2164 if ( ok )
2165 *ok = true;
2166
2167 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicMeters ) )
2169 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicFeet ) )
2171 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicYards ) )
2173 if ( normalized == encodeUnit( Qgis::VolumeUnit::Barrel ) )
2175 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicDecimeter ) )
2177 if ( normalized == encodeUnit( Qgis::VolumeUnit::Liters ) )
2179 if ( normalized == encodeUnit( Qgis::VolumeUnit::GallonUS ) )
2181 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicInch ) )
2183 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicCentimeter ) )
2185 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicDegrees ) )
2187 if ( normalized == encodeUnit( Qgis::VolumeUnit::Unknown ) )
2189
2190 if ( ok )
2191 *ok = false;
2192
2194}
2195
2197{
2198 switch ( unit )
2199 {
2201 return QObject::tr( "cubic meters", "volume" );
2203 return QObject::tr( "cubic feet", "volume" );
2205 return QObject::tr( "cubic yards", "volume" );
2207 return QObject::tr( "barrels", "volume" );
2209 return QObject::tr( "cubic decimeters", "volume" );
2211 return QObject::tr( "liters", "volume" );
2213 return QObject::tr( "gallons", "volume" );
2215 return QObject::tr( "cubic inches", "volume" );
2217 return QObject::tr( "cubic centimeters", "volume" );
2219 return QObject::tr( "cubic degrees", "volume" );
2221 return QObject::tr( "<unknown>", "volume" );
2222 }
2223 return QString();
2224}
2225
2227{
2228 switch ( unit )
2229 {
2231 return QObject::tr( "m³", "volume" );
2233 return QObject::tr( "ft³", "volume" );
2235 return QObject::tr( "yds³", "volume" );
2237 return QObject::tr( "bbl", "volume" );
2239 return QObject::tr( "dm³", "volume" );
2241 return QObject::tr( "l", "volume" );
2243 return QObject::tr( "gal", "volume" );
2245 return QObject::tr( "in³", "volume" );
2247 return QObject::tr( "cm³", "volume" );
2249 return QObject::tr( "deg³", "volume" );
2251 return QObject::tr( "<unknown>", "volume" );
2252 }
2253 return QString();
2254}
2255
2256Qgis::VolumeUnit QgsUnitTypes::stringToVolumeUnit( const QString &string, bool *ok )
2257{
2258 const QString normalized = string.trimmed().toLower();
2259
2260 if ( ok )
2261 *ok = true;
2262
2263 if ( normalized == toString( Qgis::VolumeUnit::CubicMeters ) )
2265 if ( normalized == toString( Qgis::VolumeUnit::CubicFeet ) )
2267 if ( normalized == toString( Qgis::VolumeUnit::CubicYards ) )
2269 if ( normalized == toString( Qgis::VolumeUnit::Barrel ) )
2271 if ( normalized == toString( Qgis::VolumeUnit::CubicDecimeter ) )
2273 if ( normalized == toString( Qgis::VolumeUnit::Liters ) )
2275 if ( normalized == toString( Qgis::VolumeUnit::GallonUS ) )
2277 if ( normalized == toString( Qgis::VolumeUnit::CubicInch ) )
2279 if ( normalized == toString( Qgis::VolumeUnit::CubicCentimeter ) )
2281 if ( normalized == toString( Qgis::VolumeUnit::CubicDegrees ) )
2283 if ( normalized == toString( Qgis::VolumeUnit::Unknown ) )
2285
2286 if ( ok )
2287 *ok = false;
2288
2290}
2291
2292#define DEG2_TO_M3 1379474361572186.2
2294{
2295 // cloned branches are intentional here for improved readability
2296 // NOLINTBEGIN(bugprone-branch-clone)
2297 switch ( fromUnit )
2298 {
2300 {
2301 switch ( toUnit )
2302 {
2304 return 1.0;
2306 return 35.314666572222;
2308 return 1.307950613786;
2310 return 6.2898107438466;
2312 return 1000;
2314 return 1000;
2316 return 264.17205124156;
2318 return 61023.7438368;
2320 return 1000000;
2322 return 1 / DEG2_TO_M3; // basically meaningless!
2324 return 1.0;
2325 }
2326 break;
2327 }
2329 {
2330 switch ( toUnit )
2331 {
2333 return 0.028316846592;
2335 return 1.0;
2337 return 0.037037037;
2339 return 0.178107622;
2341 return 28.31685;
2343 return 28.31685;
2345 return 7.480519954;
2347 return 1728.000629765;
2349 return 28316.85;
2351 return 0.028316846592 / DEG2_TO_M3; // basically meaningless!
2353 return 1.0;
2354 }
2355 break;
2356 }
2358 {
2359 switch ( toUnit )
2360 {
2362 return 0.764554900;
2364 return 26.999998234;
2366 return 1.0;
2368 return 4.808905491;
2370 return 764.5549;
2372 return 764.5549;
2374 return 201.974025549;
2376 return 46656.013952472;
2378 return 764554.9;
2380 return 0.764554900 / DEG2_TO_M3; // basically meaningless!
2382 return 1.0;
2383 }
2384 break;
2385 }
2387 {
2388 switch ( toUnit )
2389 {
2391 return 0.158987300;
2393 return 5.614582837;
2395 return 0.207947526;
2397 return 1.0;
2399 return 158.9873;
2401 return 158.9873;
2403 return 41.999998943;
2405 return 9702.002677722;
2407 return 158987.3;
2409 return 0.158987300 / DEG2_TO_M3; // basically meaningless!
2411 return 1.0;
2412 }
2413 break;
2414 }
2417 {
2418 switch ( toUnit )
2419 {
2421 return 0.001;
2423 return 0.035314662;
2425 return 0.001307951;
2427 return 0.006289811;
2430 return 1.0;
2432 return 0.264172037;
2434 return 61.023758990;
2436 return 1000;
2438 return 0.001 / DEG2_TO_M3; // basically meaningless!
2440 return 1.0;
2441 }
2442 break;
2443 }
2445 {
2446 switch ( toUnit )
2447 {
2449 return 0.003785412;
2451 return 0.133680547;
2453 return 0.004951132;
2455 return 0.023809524;
2458 return 3.785412000;
2460 return 1.0;
2462 return 231.000069567;
2464 return 3785.412;
2466 return 0.003785412 / DEG2_TO_M3; // basically meaningless!
2468 return 1.0;
2469 }
2470 break;
2471 }
2473 {
2474 switch ( toUnit )
2475 {
2477 return 0.000016387;
2479 return 0.000578703;
2481 return 0.000021433;
2483 return 0.000103072;
2486 return 0.016387060;
2488 return 0.004329003;
2490 return 1.0;
2492 return 16.387060000;
2494 return 0.000016387 / DEG2_TO_M3; // basically meaningless!
2496 return 1.0;
2497 }
2498 break;
2499 }
2501 {
2502 switch ( toUnit )
2503 {
2505 return 0.000001;
2507 return 0.000035315;
2509 return 0.000001308;
2511 return 0.000006290;
2514 return 0.001;
2516 return 0.000264172;
2518 return 0.061023759;
2520 return 1.0;
2522 return 0.000001 / DEG2_TO_M3; // basically meaningless!
2524 return 1.0;
2525 }
2526 break;
2527 }
2529 if ( toUnit == Qgis::VolumeUnit::Unknown || toUnit == Qgis::VolumeUnit::CubicDegrees )
2530 return 1.0;
2531 else
2533
2535 {
2536 return 1.0;
2537 }
2538 }
2539 // NOLINTEND(bugprone-branch-clone)
2540 return 1.0;
2541}
2542
2544{
2545 // cloned branches are intentional here for improved readability
2546 // NOLINTBEGIN(bugprone-branch-clone)
2547 switch ( distanceUnit )
2548 {
2552
2555
2558
2561
2577
2589
2608
2611
2614
2617
2620 }
2621 // NOLINTEND(bugprone-branch-clone)
2622
2624}
2625
2655
2677
2679{
2680 switch ( unit )
2681 {
2683 return u"m3"_s;
2685 return u"ft3"_s;
2687 return u"yd3"_s;
2689 return u"bbl"_s;
2691 return u"dm3"_s;
2693 return u"l"_s;
2695 return u"gal"_s;
2697 return u"in3"_s;
2699 return u"cm3"_s;
2701 return u"deg3"_s;
2703 return u"<unknown>"_s;
2704 }
2705 return QString();
2706}
2707
2709{
2710 switch ( unit )
2711 {
2713 return u"degrees"_s;
2715 return u"radians"_s;
2717 return u"gon"_s;
2719 return u"moa"_s;
2721 return u"soa"_s;
2723 return u"tr"_s;
2725 return u"milliradians"_s;
2727 return u"mil"_s;
2729 return u"<unknown>"_s;
2730 }
2731 return QString();
2732}
2733
2734Qgis::AngleUnit QgsUnitTypes::decodeAngleUnit( const QString &string, bool *ok )
2735{
2736 const QString normalized = string.trimmed().toLower();
2737
2738 if ( ok )
2739 *ok = true;
2740
2741 if ( normalized == encodeUnit( Qgis::AngleUnit::Degrees ) )
2743 if ( normalized == encodeUnit( Qgis::AngleUnit::Radians ) )
2745 if ( normalized == encodeUnit( Qgis::AngleUnit::Gon ) )
2746 return Qgis::AngleUnit::Gon;
2747 if ( normalized == encodeUnit( Qgis::AngleUnit::MinutesOfArc ) )
2749 if ( normalized == encodeUnit( Qgis::AngleUnit::SecondsOfArc ) )
2751 if ( normalized == encodeUnit( Qgis::AngleUnit::Turn ) )
2752 return Qgis::AngleUnit::Turn;
2753 if ( normalized == encodeUnit( Qgis::AngleUnit::MilliradiansSI ) )
2755 if ( normalized == encodeUnit( Qgis::AngleUnit::MilNATO ) )
2757 if ( normalized == encodeUnit( Qgis::AngleUnit::Unknown ) )
2759 if ( ok )
2760 *ok = false;
2761
2763}
2764
2766{
2767 switch ( unit )
2768 {
2770 return QObject::tr( "degrees", "angle" );
2772 return QObject::tr( "radians", "angle" );
2774 return QObject::tr( "gon", "angle" );
2776 return QObject::tr( "minutes of arc", "angle" );
2778 return QObject::tr( "seconds of arc", "angle" );
2780 return QObject::tr( "turns", "angle" );
2782 return QObject::tr( "milliradians", "angle" );
2784 return QObject::tr( "mil", "angle" );
2786 return QObject::tr( "<unknown>", "angle" );
2787 }
2788 return QString();
2789}
2790
2792{
2793 // Calculate the conversion factor between the specified units
2794 switch ( fromUnit )
2795 {
2797 {
2798 switch ( toUnit )
2799 {
2801 return 1.0;
2803 return M_PI / 180.0;
2805 return 400.0 / 360.0;
2807 return 60;
2809 return 3600;
2811 return 1.0 / 360.0;
2813 return M_PI / 180.0 * 1000;
2815 return 3200.0 / 180;
2817 break;
2818 }
2819 break;
2820 }
2822 {
2823 switch ( toUnit )
2824 {
2826 return 180.0 / M_PI;
2828 return 1.0;
2830 return 200.0 / M_PI;
2832 return 60 * 180.0 / M_PI;
2834 return 3600 * 180.0 / M_PI;
2836 return 0.5 / M_PI;
2838 return 1000;
2840 return 3200.0 / M_PI;
2842 break;
2843 }
2844 break;
2845 }
2847 {
2848 switch ( toUnit )
2849 {
2851 return 360.0 / 400.0;
2853 return M_PI / 200.0;
2855 return 1.0;
2857 return 60 * 360.0 / 400.0;
2859 return 3600 * 360.0 / 400.0;
2861 return 1.0 / 400.0;
2863 return M_PI / 200.0 * 1000;
2865 return 3200.0 / 200.0;
2867 break;
2868 }
2869 break;
2870 }
2872 {
2873 switch ( toUnit )
2874 {
2876 return 1 / 60.0;
2878 return M_PI / 180.0 / 60.0;
2880 return 400.0 / 360.0 / 60.0;
2882 return 1.0;
2884 return 60.0;
2886 return 1.0 / 360.0 / 60.0;
2888 return M_PI / 180.0 / 60.0 * 1000;
2890 return 3200.0 / 180.0 / 60.0;
2892 break;
2893 }
2894 break;
2895 }
2897 {
2898 switch ( toUnit )
2899 {
2901 return 1 / 3600.0;
2903 return M_PI / 180.0 / 3600.0;
2905 return 400.0 / 360.0 / 3600.0;
2907 return 1.0 / 60.0;
2909 return 1.0;
2911 return 1.0 / 360.0 / 3600.0;
2913 return M_PI / 180.0 / 3600.0 * 1000;
2915 return 3200.0 / 180.0 / 3600.0;
2917 break;
2918 }
2919 break;
2920 }
2922 {
2923 switch ( toUnit )
2924 {
2926 return 360.0;
2928 return 2 * M_PI;
2930 return 400.0;
2932 return 360.0 * 60.0;
2934 return 360.0 * 3600.0;
2936 return 1.0;
2938 return 2 * M_PI * 1000;
2940 return 2 * 3200;
2942 break;
2943 }
2944 break;
2945 }
2947 {
2948 switch ( toUnit )
2949 {
2951 return 180.0 / M_PI / 1000;
2953 return 0.001;
2955 return 200.0 / M_PI / 1000;
2957 return 180.0 * 60.0 / M_PI / 1000;
2959 return 180.0 * 3600.0 / M_PI / 1000;
2961 return M_PI / 2 / 1000;
2963 return 1.0;
2965 return 3200.0 / 1000.0 / M_PI;
2967 break;
2968 }
2969 break;
2970 }
2971
2973 {
2974 switch ( toUnit )
2975 {
2977 return 180.0 / 3200;
2979 return M_PI / 3200;
2981 return 200.0 / 3200;
2983 return 60 * 180.0 / 3200;
2985 return 3600.0 * 180 / 3200;
2987 return 1.0 / ( 2 * 32000 );
2989 return 1000.0 * M_PI / 3200.0;
2991 return 1.0;
2993 break;
2994 }
2995 break;
2996 }
2997
2999 break;
3000 }
3001 return 1.0;
3002}
3003
3004QString QgsUnitTypes::formatAngle( double angle, int decimals, Qgis::AngleUnit unit )
3005{
3006 QString unitLabel;
3007 int decimalPlaces = 2;
3008
3009 switch ( unit )
3010 {
3012 unitLabel = QObject::tr( "°", "angle" );
3013 decimalPlaces = 0;
3014 break;
3016 unitLabel = QObject::tr( " rad", "angle" );
3017 decimalPlaces = 2;
3018 break;
3020 unitLabel = QObject::tr( " gon", "angle" );
3021 decimalPlaces = 0;
3022 break;
3024 unitLabel = QObject::tr( "′", "angle minutes" );
3025 decimalPlaces = 0;
3026 break;
3028 unitLabel = QObject::tr( "″", "angle seconds" );
3029 decimalPlaces = 0;
3030 break;
3032 unitLabel = QObject::tr( " tr", "angle turn" );
3033 decimalPlaces = 3;
3034 break;
3036 unitLabel = QObject::tr( " millirad", "angular mil SI" );
3037 decimalPlaces = 0;
3038 break;
3040 unitLabel = QObject::tr( " mil", "angular mil NATO" );
3041 decimalPlaces = 0;
3042 break;
3044 break;
3045 }
3046
3047 if ( decimals >= 0 )
3048 decimalPlaces = decimals;
3049
3050 return u"%L1%2"_s.arg( angle, 0, 'f', decimalPlaces ).arg( unitLabel );
3051}
3052
3053QgsUnitTypes::DistanceValue QgsUnitTypes::scaledDistance( double distance, Qgis::DistanceUnit unit, int decimals, bool keepBaseUnit )
3054{
3055 DistanceValue result;
3056
3057 // cloned branches are intentional here for improved readability
3058 // NOLINTBEGIN(bugprone-branch-clone)
3059 switch ( unit )
3060 {
3062 if ( keepBaseUnit )
3063 {
3064 result.value = qgsRound( distance, decimals );
3066 }
3067 else if ( std::fabs( distance ) > 1000.0 )
3068 {
3069 result.value = qgsRound( distance / 1000, decimals );
3071 }
3072 else if ( std::fabs( distance ) < 0.01 )
3073 {
3074 result.value = qgsRound( distance * 1000, decimals );
3076 }
3077 else if ( std::fabs( distance ) < 0.1 )
3078 {
3079 result.value = qgsRound( distance * 100, decimals );
3081 }
3082 else
3083 {
3084 result.value = qgsRound( distance, decimals );
3086 }
3087 break;
3088
3090 if ( keepBaseUnit || std::fabs( distance ) >= 1.0 )
3091 {
3092 result.value = qgsRound( distance, decimals );
3094 }
3095 else
3096 {
3097 result.value = qgsRound( distance * 1000, decimals );
3099 }
3100 break;
3101
3103 if ( std::fabs( distance ) <= 5280.0 || keepBaseUnit )
3104 {
3105 result.value = qgsRound( distance, decimals );
3107 }
3108 else
3109 {
3110 result.value = qgsRound( distance / 5280.0, decimals );
3112 }
3113 break;
3114
3116 if ( std::fabs( distance ) <= 1760.0 || keepBaseUnit )
3117 {
3118 result.value = qgsRound( distance, decimals );
3120 }
3121 else
3122 {
3123 result.value = qgsRound( distance / 1760.0, decimals );
3125 }
3126 break;
3127
3129 if ( std::fabs( distance ) >= 1.0 || keepBaseUnit )
3130 {
3131 result.value = qgsRound( distance, decimals );
3133 }
3134 else
3135 {
3136 result.value = qgsRound( distance * 5280.0, decimals );
3138 }
3139 break;
3140
3142 result.value = qgsRound( distance, decimals );
3144 break;
3145
3147 result.value = qgsRound( distance, decimals );
3149 break;
3150
3152 result.value = qgsRound( distance, decimals );
3154 break;
3155
3156 default:
3157 result.value = qgsRound( distance, decimals );
3158 result.unit = unit;
3159 break;
3160 }
3161 // NOLINTEND(bugprone-branch-clone)
3162
3163 return result;
3164}
3165
3166QgsUnitTypes::AreaValue QgsUnitTypes::scaledArea( double area, Qgis::AreaUnit unit, int decimals, bool keepBaseUnit )
3167{
3169 result.value = -1.0;
3171
3172 // If we are not forced to keep the base units, switch to meter calculation
3174 {
3175 if ( keepBaseUnit )
3176 {
3177 result.value = qgsRound( area, decimals );
3179 }
3180 else
3181 {
3182 area /= 1000000.0;
3184 }
3185 }
3186 else if ( unit == Qgis::AreaUnit::SquareCentimeters )
3187 {
3188 if ( keepBaseUnit )
3189 {
3190 result.value = qgsRound( area, decimals );
3192 }
3193 else
3194 {
3195 area /= 10000.0;
3197 }
3198 }
3199
3200 // cloned branches are intentional here for improved readability
3201 // NOLINTBEGIN(bugprone-branch-clone)
3202 switch ( unit )
3203 {
3205 // handled in the if above
3206 break;
3208 // handled in the if above
3209 break;
3211 {
3212 if ( keepBaseUnit )
3213 {
3214 result.value = qgsRound( area, decimals );
3216 }
3218 {
3221 }
3223 {
3226 }
3227 else
3228 {
3229 result.value = qgsRound( area, decimals );
3231 }
3232 break;
3233 }
3234
3236 {
3237 result.value = qgsRound( area, decimals );
3239 break;
3240 }
3241
3243 {
3244 result.value = qgsRound( area, decimals );
3246 break;
3247 }
3248
3250 {
3251 if ( keepBaseUnit )
3252 {
3253 result.value = qgsRound( area, decimals );
3255 }
3257 {
3260 }
3261 else
3262 {
3263 result.value = qgsRound( area, decimals );
3265 }
3266 break;
3267 }
3268
3270 {
3271 if ( keepBaseUnit )
3272 {
3273 result.value = qgsRound( area, decimals );
3275 }
3277 {
3280 }
3281 else
3282 {
3283 result.value = qgsRound( area, decimals );
3285 }
3286 break;
3287 }
3288
3290 {
3291 result.value = qgsRound( area, decimals );
3293 break;
3294 }
3295
3297 {
3298 if ( keepBaseUnit )
3299 {
3300 result.value = qgsRound( area, decimals );
3302 }
3304 {
3307 }
3308 else
3309 {
3310 result.value = qgsRound( area, decimals );
3312 }
3313 break;
3314 }
3315
3317 {
3318 if ( keepBaseUnit )
3319 {
3320 result.value = qgsRound( area, decimals );
3321 result.unit = Qgis::AreaUnit::Acres;
3322 }
3324 {
3327 }
3328 else
3329 {
3330 result.value = qgsRound( area, decimals );
3331 result.unit = Qgis::AreaUnit::Acres;
3332 }
3333 break;
3334 }
3335
3337 {
3338 result.value = qgsRound( area, decimals );
3340 break;
3341 }
3342
3344 {
3345 result.value = qgsRound( area, decimals );
3347 break;
3348 }
3349
3351 {
3352 result.value = qgsRound( area, decimals );
3354 break;
3355 }
3356 }
3357 // NOLINTEND(bugprone-branch-clone)
3358 return result;
3359}
3360
3361
3362QString QgsUnitTypes::formatDistance( double distance, int decimals, Qgis::DistanceUnit unit, bool keepBaseUnit )
3363{
3364 const DistanceValue dist = scaledDistance( distance, unit, decimals, keepBaseUnit );
3365
3366 QString unitText;
3367
3368 if ( dist.unit != Qgis::DistanceUnit::Unknown )
3369 unitText = QChar( ' ' ) + QgsUnitTypes::toAbbreviatedString( dist.unit );
3370
3371 if ( qgsDoubleNear( dist.value, 0 ) )
3372 {
3373 unitText = QChar( ' ' ) + QgsUnitTypes::toAbbreviatedString( unit );
3374 return u"%L1%2"_s.arg( distance, 0, 'e', decimals ).arg( unitText );
3375 }
3376 else
3377 {
3378 return u"%L1%2"_s.arg( dist.value, 0, 'f', decimals ).arg( unitText );
3379 }
3380}
3381
3382QString QgsUnitTypes::formatArea( double area, int decimals, Qgis::AreaUnit unit, bool keepBaseUnit )
3383{
3384 const QgsUnitTypes::AreaValue areaValue = scaledArea( area, unit, decimals, keepBaseUnit );
3385
3386 QString unitText;
3387
3388 if ( areaValue.unit != Qgis::AreaUnit::Unknown )
3389 unitText = QChar( ' ' ) + QgsUnitTypes::toAbbreviatedString( areaValue.unit );
3390
3391 if ( qgsDoubleNear( areaValue.value, 0 ) )
3392 {
3393 unitText = QChar( ' ' ) + QgsUnitTypes::toAbbreviatedString( unit );
3394 return u"%L1%2"_s.arg( area, 0, 'e', decimals ).arg( unitText );
3395 }
3396 else
3397 {
3398 return u"%L1%2"_s.arg( areaValue.value, 0, 'f', decimals ).arg( unitText );
3399 }
3400}
3401
3403{
3404 switch ( unit )
3405 {
3407 return u"MM"_s;
3409 return u"RenderMetersInMapUnits"_s;
3411 return u"MapUnit"_s;
3413 return u"Pixel"_s;
3415 return u"Percentage"_s;
3417 return u"Point"_s;
3419 return u"Inch"_s;
3421 return QString();
3422 }
3423 return QString();
3424}
3425
3426Qgis::RenderUnit QgsUnitTypes::decodeRenderUnit( const QString &string, bool *ok )
3427{
3428 const QString normalized = string.trimmed().toLower();
3429
3430 if ( ok )
3431 *ok = true;
3432
3433 if ( normalized == encodeUnit( Qgis::RenderUnit::Millimeters ).toLower() )
3435 if ( normalized == encodeUnit( Qgis::RenderUnit::MetersInMapUnits ).toLower() )
3437 if ( normalized == "meters"_L1 )
3439 if ( normalized == encodeUnit( Qgis::RenderUnit::MapUnits ).toLower() )
3441 if ( normalized == "mapunits"_L1 )
3443 if ( normalized == encodeUnit( Qgis::RenderUnit::Pixels ).toLower() )
3445 if ( normalized == encodeUnit( Qgis::RenderUnit::Percentage ).toLower() )
3447 if ( normalized == "percent"_L1 )
3449 if ( normalized == encodeUnit( Qgis::RenderUnit::Points ).toLower() )
3451 if ( normalized == "points"_L1 )
3453 if ( normalized == encodeUnit( Qgis::RenderUnit::Inches ).toLower() )
3455
3456 if ( ok )
3457 *ok = false;
3458
3459 // millimeters are default
3461}
3462
3464{
3465 switch ( unit )
3466 {
3468 return QObject::tr( "millimeters", "render" );
3469
3471 return QObject::tr( "meters at scale", "render" );
3472
3474 return QObject::tr( "map units", "render" );
3475
3477 return QObject::tr( "pixels", "render" );
3478
3480 return QObject::tr( "percent", "render" );
3481
3483 return QObject::tr( "points", "render" );
3484
3486 return QObject::tr( "inches", "render" );
3487
3489 return QObject::tr( "<unknown>", "render" );
3490 }
3491 return QString();
3492}
3493
3494
3496{
3497 switch ( unit )
3498 {
3500 return u"cm"_s;
3502 return u"m"_s;
3504 return u"in"_s;
3506 return u"ft"_s;
3508 return u"pt"_s;
3510 return u"pi"_s;
3512 return u"px"_s;
3514 return u"mm"_s;
3515 }
3516 return QString();
3517}
3518
3519Qgis::LayoutUnit QgsUnitTypes::decodeLayoutUnit( const QString &string, bool *ok )
3520{
3521 const QString normalized = string.trimmed().toLower();
3522
3523 if ( ok )
3524 *ok = true;
3525
3526 if ( normalized == encodeUnit( Qgis::LayoutUnit::Millimeters ).toLower() )
3528 if ( normalized == encodeUnit( Qgis::LayoutUnit::Centimeters ).toLower() )
3530 if ( normalized == encodeUnit( Qgis::LayoutUnit::Meters ).toLower() )
3532 if ( normalized == encodeUnit( Qgis::LayoutUnit::Inches ).toLower() )
3534 if ( normalized == encodeUnit( Qgis::LayoutUnit::Feet ).toLower() )
3536 if ( normalized == encodeUnit( Qgis::LayoutUnit::Points ).toLower() )
3538 if ( normalized == encodeUnit( Qgis::LayoutUnit::Picas ).toLower() )
3540 if ( normalized == encodeUnit( Qgis::LayoutUnit::Pixels ).toLower() )
3542
3543 if ( ok )
3544 *ok = false;
3545
3546 // millimeters are default
3548}
3549
3569
3571{
3572 switch ( unit )
3573 {
3575 return QObject::tr( "px" );
3577 return QObject::tr( "mm" );
3579 return QObject::tr( "cm" );
3581 return QObject::tr( "m" );
3583 return QObject::tr( "in", "unit inch" );
3585 return QObject::tr( "ft" );
3587 return QObject::tr( "pt" );
3589 return QObject::tr( "pica" );
3590 }
3591 return QString(); // no warnings
3592}
3593
3595{
3596 switch ( unit )
3597 {
3599 return QObject::tr( "pixels" );
3601 return QObject::tr( "millimeters" );
3603 return QObject::tr( "centimeters" );
3605 return QObject::tr( "meters" );
3607 return QObject::tr( "inches" );
3609 return QObject::tr( "feet" );
3611 return QObject::tr( "points" );
3613 return QObject::tr( "picas" );
3614 }
3615 return QString(); // no warnings
3616}
DistanceUnitType
Types of distance units.
Definition qgis.h:5232
@ Geographic
Unit is a geographic (e.g., degree based) unit.
Definition qgis.h:5234
@ Unknown
Unknown unit type.
Definition qgis.h:5235
@ Standard
Unit is a standard measurement unit.
Definition qgis.h:5233
UnitType
Unit types.
Definition qgis.h:5153
@ Distance
Distance unit.
Definition qgis.h:5154
@ Temporal
Temporal unit.
Definition qgis.h:5158
@ Unknown
Unknown unit type.
Definition qgis.h:5157
@ Volume
Volume unit.
Definition qgis.h:5156
@ Area
Area unit.
Definition qgis.h:5155
LayoutUnit
Layout measurement units.
Definition qgis.h:5360
@ Feet
Feet.
Definition qgis.h:5365
@ Centimeters
Centimeters.
Definition qgis.h:5362
@ Millimeters
Millimeters.
Definition qgis.h:5361
@ Points
Typographic points.
Definition qgis.h:5366
@ Meters
Meters.
Definition qgis.h:5363
@ Picas
Typographic picas.
Definition qgis.h:5367
@ Pixels
Pixels.
Definition qgis.h:5368
@ Inches
Inches.
Definition qgis.h:5364
AngleUnit
Units of angles.
Definition qgis.h:5295
@ SecondsOfArc
Seconds of arc.
Definition qgis.h:5300
@ Radians
Square kilometers.
Definition qgis.h:5297
@ Turn
Turn/revolutions.
Definition qgis.h:5301
@ MinutesOfArc
Minutes of arc.
Definition qgis.h:5299
@ Unknown
Unknown angle unit.
Definition qgis.h:5304
@ MilliradiansSI
Angular milliradians (SI definition, 1/1000 of radian).
Definition qgis.h:5302
@ Degrees
Degrees.
Definition qgis.h:5296
@ Gon
Gon/gradian.
Definition qgis.h:5298
@ MilNATO
Angular mil (NATO definition, 6400 mil = 2PI radians).
Definition qgis.h:5303
DistanceUnit
Units of distance.
Definition qgis.h:5170
@ YardsBritishSears1922Truncated
British yards (Sears 1922 truncated).
Definition qgis.h:5210
@ Feet
Imperial feet.
Definition qgis.h:5173
@ MilesUSSurvey
US Survey miles.
Definition qgis.h:5217
@ LinksBritishSears1922
British links (Sears 1922).
Definition qgis.h:5205
@ YardsBritishBenoit1895A
British yards (Benoit 1895 A).
Definition qgis.h:5208
@ LinksBritishBenoit1895A
British links (Benoit 1895 A).
Definition qgis.h:5202
@ Centimeters
Centimeters.
Definition qgis.h:5178
@ YardsIndian1975
Indian yards (1975).
Definition qgis.h:5216
@ FeetUSSurvey
US Survey feet.
Definition qgis.h:5200
@ Millimeters
Millimeters.
Definition qgis.h:5179
@ FeetBritishSears1922
British feet (Sears 1922).
Definition qgis.h:5193
@ YardsClarkes
Clarke's yards.
Definition qgis.h:5212
@ YardsIndian
Indian yards.
Definition qgis.h:5213
@ FeetBritishBenoit1895B
British feet (Benoit 1895 B).
Definition qgis.h:5191
@ Miles
Terrestrial miles.
Definition qgis.h:5176
@ LinksUSSurvey
US Survey links.
Definition qgis.h:5207
@ Meters
Meters.
Definition qgis.h:5171
@ ChainsUSSurvey
US Survey chains.
Definition qgis.h:5187
@ FeetClarkes
Clarke's feet.
Definition qgis.h:5194
@ Unknown
Unknown distance unit.
Definition qgis.h:5220
@ Yards
Imperial yards.
Definition qgis.h:5175
@ FeetBritish1936
British feet (1936).
Definition qgis.h:5189
@ FeetIndian1962
Indian feet (1962).
Definition qgis.h:5198
@ YardsBritishSears1922
British yards (Sears 1922).
Definition qgis.h:5211
@ FeetIndian1937
Indian feet (1937).
Definition qgis.h:5197
@ YardsIndian1937
Indian yards (1937).
Definition qgis.h:5214
@ Degrees
Degrees, for planar geographic CRS distance measurements.
Definition qgis.h:5177
@ ChainsBritishBenoit1895B
British chains (Benoit 1895 B).
Definition qgis.h:5183
@ LinksBritishSears1922Truncated
British links (Sears 1922 truncated).
Definition qgis.h:5204
@ ChainsBritishBenoit1895A
British chains (Benoit 1895 A).
Definition qgis.h:5182
@ YardsBritishBenoit1895B
British yards (Benoit 1895 B).
Definition qgis.h:5209
@ FeetBritish1865
British feet (1865).
Definition qgis.h:5188
@ YardsIndian1962
Indian yards (1962).
Definition qgis.h:5215
@ FeetBritishSears1922Truncated
British feet (Sears 1922 truncated).
Definition qgis.h:5192
@ MetersGermanLegal
German legal meter.
Definition qgis.h:5219
@ LinksBritishBenoit1895B
British links (Benoit 1895 B).
Definition qgis.h:5203
@ ChainsInternational
International chains.
Definition qgis.h:5181
@ Inches
Inches.
Definition qgis.h:5180
@ Fathoms
Fathoms.
Definition qgis.h:5218
@ LinksInternational
International links.
Definition qgis.h:5201
@ ChainsBritishSears1922Truncated
British chains (Sears 1922 truncated).
Definition qgis.h:5184
@ FeetIndian
Indian (geodetic) feet.
Definition qgis.h:5196
@ NauticalMiles
Nautical miles.
Definition qgis.h:5174
@ ChainsClarkes
Clarke's chains.
Definition qgis.h:5186
@ LinksClarkes
Clarke's links.
Definition qgis.h:5206
@ ChainsBritishSears1922
British chains (Sears 1922).
Definition qgis.h:5185
@ Kilometers
Kilometers.
Definition qgis.h:5172
@ FeetIndian1975
Indian feet (1975).
Definition qgis.h:5199
@ FeetGoldCoast
Gold Coast feet.
Definition qgis.h:5195
@ FeetBritishBenoit1895A
British feet (Benoit 1895 A).
Definition qgis.h:5190
AreaUnit
Units of area.
Definition qgis.h:5247
@ Acres
Acres.
Definition qgis.h:5254
@ SquareFeet
Square feet.
Definition qgis.h:5250
@ SquareCentimeters
Square centimeters.
Definition qgis.h:5257
@ SquareInches
Square inches.
Definition qgis.h:5259
@ SquareNauticalMiles
Square nautical miles.
Definition qgis.h:5255
@ SquareMillimeters
Square millimeters.
Definition qgis.h:5258
@ SquareYards
Square yards.
Definition qgis.h:5251
@ Hectares
Hectares.
Definition qgis.h:5253
@ SquareKilometers
Square kilometers.
Definition qgis.h:5249
@ SquareMeters
Square meters.
Definition qgis.h:5248
@ Unknown
Unknown areal unit.
Definition qgis.h:5260
@ SquareDegrees
Square degrees, for planar geographic CRS area measurements.
Definition qgis.h:5256
@ SquareMiles
Square miles.
Definition qgis.h:5252
TemporalUnit
Temporal units.
Definition qgis.h:5316
@ IrregularStep
Special 'irregular step' time unit, used for temporal data which uses irregular, non-real-world unit ...
Definition qgis.h:5327
@ Milliseconds
Milliseconds.
Definition qgis.h:5317
@ Hours
Hours.
Definition qgis.h:5320
@ Unknown
Unknown time unit.
Definition qgis.h:5328
@ Centuries
Centuries.
Definition qgis.h:5326
@ Seconds
Seconds.
Definition qgis.h:5318
@ Weeks
Weeks.
Definition qgis.h:5322
@ Years
Years.
Definition qgis.h:5324
@ Decades
Decades.
Definition qgis.h:5325
@ Months
Months.
Definition qgis.h:5323
@ Minutes
Minutes.
Definition qgis.h:5319
RenderUnit
Rendering size units.
Definition qgis.h:5340
@ Percentage
Percentage of another measurement (e.g., canvas size, feature size).
Definition qgis.h:5344
@ Millimeters
Millimeters.
Definition qgis.h:5341
@ Points
Points (e.g., for font sizes).
Definition qgis.h:5345
@ Unknown
Mixed or unknown units.
Definition qgis.h:5347
@ MapUnits
Map units.
Definition qgis.h:5342
@ Pixels
Pixels.
Definition qgis.h:5343
@ Inches
Inches.
Definition qgis.h:5346
@ MetersInMapUnits
Meters value as Map units.
Definition qgis.h:5348
LayoutUnitType
Types of layout units.
Definition qgis.h:5380
@ PaperUnits
Unit is a paper based measurement unit.
Definition qgis.h:5381
@ ScreenUnits
Unit is a screen based measurement unit.
Definition qgis.h:5382
VolumeUnit
Units of volume.
Definition qgis.h:5272
@ CubicMeters
Cubic meters.
Definition qgis.h:5273
@ Barrel
Barrels.
Definition qgis.h:5276
@ CubicYards
Cubic yards.
Definition qgis.h:5275
@ CubicFeet
Cubic feet.
Definition qgis.h:5274
@ CubicDegrees
Cubic degrees, for planar geographic CRS volume measurements.
Definition qgis.h:5282
@ CubicDecimeter
Cubic decimeters.
Definition qgis.h:5277
@ Unknown
Unknown volume unit.
Definition qgis.h:5283
@ CubicInch
Cubic inches.
Definition qgis.h:5280
@ GallonUS
US Gallons.
Definition qgis.h:5279
@ Liters
Litres.
Definition qgis.h:5278
@ CubicCentimeter
Cubic Centimeters.
Definition qgis.h:5281
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:7015
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference).
Definition qgis.h:6975
#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.