QGIS API Documentation 3.99.0-Master (d270888f95f)
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 }
53 return QString();
54}
55
56Qgis::UnitType QgsUnitTypes::decodeUnitType( const QString &string, bool *ok )
57{
58 const QString normalized = string.trimmed().toLower();
59
60 if ( ok )
61 *ok = true;
62
63 if ( normalized == encodeUnitType( Qgis::UnitType::Distance ) )
65 if ( normalized == encodeUnitType( Qgis::UnitType::Area ) )
67 if ( normalized == encodeUnitType( Qgis::UnitType::Volume ) )
69 if ( normalized == encodeUnitType( Qgis::UnitType::Temporal ) )
71 if ( normalized == encodeUnitType( Qgis::UnitType::Unknown ) )
73
74 if ( ok )
75 *ok = false;
76
78}
79
81{
82 switch ( unit )
83 {
133
136
139 }
141}
142
169
171{
172 switch ( unit )
173 {
175 return u"meters"_s;
176
178 return u"km"_s;
179
181 return u"feet"_s;
182
184 return u"yd"_s;
185
187 return u"mi"_s;
188
190 return u"degrees"_s;
191
193 return u"<unknown>"_s;
194
196 return u"nautical miles"_s;
197
199 return u"cm"_s;
200
202 return u"mm"_s;
203
205 return u"in"_s;
206
208 return u"chain"_s;
209
211 return u"chain british benoit b1895a"_s;
212
214 return u"chain british benoit b1895b"_s;
215
217 return u"chain british sears 1922 truncated"_s;
218
220 return u"chain british sears 1922"_s;
221
223 return u"chain clarkes"_s;
224
226 return u"chain us survey"_s;
227
229 return u"feet british 1865"_s;
230
232 return u"feet british 1936"_s;
233
235 return u"feet british benoit 1895a"_s;
236
238 return u"feet british benoit 1895b"_s;
239
241 return u"feet british sears 1922 truncated"_s;
242
244 return u"feet british sears 1922"_s;
245
247 return u"feet clarkes"_s;
248
250 return u"feet gold coast"_s;
251
253 return u"feet indian"_s;
255 return u"feet indian 1937"_s;
256
258 return u"feet indian 1962"_s;
259
261 return u"feet indian 1975"_s;
262
264 return u"feet us survey"_s;
265
267 return u"links"_s;
268
270 return u"links british benoit 1895a"_s;
271
273 return u"links british benoit 1895b"_s;
274
276 return u"links british sears 1922 truncated"_s;
277
279 return u"links british sears 1922"_s;
280
282 return u"links clarkes"_s;
283
285 return u"links us survey"_s;
286
288 return u"yards british benoit 1895a"_s;
289
291 return u"yards british benoit 1895b"_s;
292
294 return u"yards british sears 1922 truncated"_s;
295
297 return u"yards british sears 1922"_s;
298
300 return u"yards clarkes"_s;
301
303 return u"yards indian"_s;
304
306 return u"yards indian 1937"_s;
307
309 return u"yards indian 1962"_s;
310
312 return u"yards indian 1975"_s;
313
315 return u"miles us survey"_s;
316
318 return u"yards fathom"_s;
319
321 return u"german legal meters"_s;
322 }
323 return QString();
324}
325
326/***************************************************************************
327 * This class is considered CRITICAL and any change MUST be accompanied with
328 * full unit tests in test_qgsunittypes.py.
329 * See details in QEP #17
330 ****************************************************************************/
331
332Qgis::DistanceUnit QgsUnitTypes::decodeDistanceUnit( const QString &string, bool *ok )
333{
334 const QString normalized = string.trimmed().toLower();
335
336 if ( ok )
337 *ok = true;
338
339 for ( const Qgis::DistanceUnit unit :
340 {
352
392 } )
393 {
394 if ( normalized == encodeUnit( unit ) )
395 return unit;
396 }
397 if ( ok )
398 *ok = false;
399
401}
402
404{
405 switch ( unit )
406 {
408 return QObject::tr( "meters", "distance" );
409
411 return QObject::tr( "kilometers", "distance" );
412
414 return QObject::tr( "feet", "distance" );
415
417 return QObject::tr( "yards", "distance" );
418
420 return QObject::tr( "miles", "distance" );
421
423 return QObject::tr( "degrees", "distance" );
424
426 return QObject::tr( "centimeters", "distance" );
427
429 return QObject::tr( "millimeters", "distance" );
430
432 return QObject::tr( "inches", "distance" );
433
435 return QObject::tr( "<unknown>", "distance" );
436
438 return QObject::tr( "nautical miles", "distance" );
439
441 return QObject::tr( "chains (international)", "distance" );
442
444 return QObject::tr( "chains (British, Benoit 1895 A)", "distance" );
445
447 return QObject::tr( "chains (British, Benoit 1895 B)", "distance" );
448
450 return QObject::tr( "chains (British, Sears 1922 truncated)", "distance" );
451
453 return QObject::tr( "chains (British, Sears 1922)", "distance" );
454
456 return QObject::tr( "chains (Clarke's)", "distance" );
457
459 return QObject::tr( "chains (US survey)", "distance" );
460
462 return QObject::tr( "feet (British, 1865)", "distance" );
463
465 return QObject::tr( "feet (British, 1936)", "distance" );
466
468 return QObject::tr( "feet (British, Benoit 1895 A)", "distance" );
469
471 return QObject::tr( "feet (British, Benoit 1895 B)", "distance" );
472
474 return QObject::tr( "feet (British, Sears 1922 truncated)", "distance" );
475
477 return QObject::tr( "feet (British, Sears 1922)", "distance" );
478
480 return QObject::tr( "feet (Clarke's)", "distance" );
481
483 return QObject::tr( "feet (Gold Coast)", "distance" );
484
486 return QObject::tr( "feet (Indian)", "distance" );
487
489 return QObject::tr( "feet (Indian 1937)", "distance" );
490
492 return QObject::tr( "feet (Indian 1962)", "distance" );
493
495 return QObject::tr( "feet (Indian 1975)", "distance" );
496
498 return QObject::tr( "feet (US survey)", "distance" );
499
501 return QObject::tr( "links", "distance" );
502
504 return QObject::tr( "links (British, Benoit 1895 A)", "distance" );
505
507 return QObject::tr( "links (British, Benoit 1895 B)", "distance" );
508
510 return QObject::tr( "links (British, Sears 1922 truncated)", "distance" );
511
513 return QObject::tr( "links (British, Sears 1922)", "distance" );
514
516 return QObject::tr( "links (Clarke's)", "distance" );
517
519 return QObject::tr( "links (US survey)", "distance" );
520
522 return QObject::tr( "yards (British, Benoit 1895 A)", "distance" );
523
525 return QObject::tr( "yards (British, Benoit 1895 B)", "distance" );
526
528 return QObject::tr( "yards (British, Sears 1922 truncated)", "distance" );
529
531 return QObject::tr( "yards (British, Sears 1922)", "distance" );
532
534 return QObject::tr( "yards (Clarke's)", "distance" );
535
537 return QObject::tr( "yards (Indian)", "distance" );
538
540 return QObject::tr( "yards (Indian 1937)", "distance" );
541
543 return QObject::tr( "yards (Indian 1962)", "distance" );
544
546 return QObject::tr( "yards (Indian 1975)", "distance" );
547
549 return QObject::tr( "miles (US survey)", "distance" );
550
552 return QObject::tr( "fathoms", "distance" );
553
555 return QObject::tr( "meters (German legal)", "distance" );
556 }
557 return QString();
558}
559
561{
562 switch ( unit )
563 {
565 return QObject::tr( "mm", "render" );
566
568 return QObject::tr( "map units", "render" );
569
571 return QObject::tr( "px", "render" );
572
574 return QObject::tr( "%", "render" );
575
577 return QObject::tr( "pt", "render" );
578
580 return QObject::tr( "in", "render" );
581
583 return QObject::tr( "unknown", "render" );
584
586 return QObject::tr( "m", "render" );
587
588 }
589
590 return QString();
591}
592
594{
595 switch ( unit )
596 {
598 return QObject::tr( "m", "distance" );
599
601 return QObject::tr( "km", "distance" );
602
617 return QObject::tr( "ft", "distance" );
618
629 return QObject::tr( "yd", "distance" );
630
633 return QObject::tr( "mi", "distance" );
634
636 return QObject::tr( "deg", "distance" );
637
639 return QObject::tr( "cm", "distance" );
640
642 return QObject::tr( "mm", "distance" );
643
645 return QObject::tr( "in", "distance" );
646
648 return QString();
649
651 return QObject::tr( "NM", "distance" );
652
660 return QObject::tr( "ch", "distance" );
661
669 return QObject::tr( "lk", "distance" );
670
672 return QObject::tr( "f", "distance" );
673
675 return QObject::tr( "glm", "distance" );
676
677 }
678 return QString();
679}
680
681/***************************************************************************
682 * This class is considered CRITICAL and any change MUST be accompanied with
683 * full unit tests in test_qgsunittypes.py.
684 * See details in QEP #17
685 ****************************************************************************/
686
688{
689 const QString normalized = string.trimmed().toLower();
690
691 if ( ok )
692 *ok = true;
693
694 for ( const Qgis::DistanceUnit unit :
695 {
746 } )
747 {
748 if ( normalized.compare( toString( unit ), Qt::CaseInsensitive ) == 0 )
749 return unit;
750 }
751
752 if ( ok )
753 *ok = false;
754
756}
757
758/***************************************************************************
759 * This class is considered CRITICAL and any change MUST be accompanied with
760 * full unit tests in test_qgsunittypes.py.
761 * See details in QEP #17
762 ****************************************************************************/
763
765{
766 // values are from the EPSG units database:
767 switch ( unit )
768 {
770 return 1.0;
772 return 1000.0;
774 return 0.3048;
776 return 1852.0;
778 return 0.9144;
780 return 1609.344;
782 return 111319.49079327358;
784 return 0.01;
786 return 0.001;
788 return 0.0254;
790 return 20.1168;
792 return 20.1167824;
794 return 20.116782494376;
796 return 20.116756;
798 return 20.116765121553;
800 return 20.1166195164;
802 return 20.11684023368;
804 return 0.30480083333333;
806 return 0.3048007491;
808 return 0.30479973333333;
810 return 0.30479973476327;
812 return 0.30479933333333;
814 return 0.30479947153868;
816 return 0.3047972654;
818 return 0.30479971018151;
820 return 0.30479951024815;
822 return 0.30479841;
824 return 0.3047996;
826 return 0.3047995;
828 return 0.30480060960122;
830 return 0.201168;
832 return 0.201167824;
834 return 0.20116782494376;
836 return 0.20116756;
838 return 0.20116765121553;
840 return 0.201166195164;
842 return 0.2011684023368;
844 return 0.9143992;
846 return 0.91439920428981;
848 return 0.914398;
850 return 0.91439841461603;
852 return 0.9143917962;
854 return 0.91439853074444;
856 return 0.91439523;
858 return 0.9143988;
860 return 0.9143985;
862 return 1609.3472186944;
864 return 1.8288;
866 return 1;
868 return 1.0000135965;
869 }
870 return 1;
871}
872
874{
875 if ( fromUnit == toUnit || fromUnit == Qgis::DistanceUnit::Unknown || toUnit == Qgis::DistanceUnit::Unknown )
876 return 1.0;
877
878 constexpr double FEET_TO_INCHES = 12;
879 constexpr double YARDS_TO_FEET = 3.0;
880
881 // Calculate the conversion factor between the specified units
882
883 // special cases, where we don't go through meters as an intermediate unit:
884 switch ( fromUnit )
885 {
887 {
888 switch ( toUnit )
889 {
891 return FEET_TO_INCHES;
893 return 1.0 / YARDS_TO_FEET;
894 default:
895 break;
896 }
897
898 break;
899 }
901 {
902 switch ( toUnit )
903 {
905 return YARDS_TO_FEET;
907 return YARDS_TO_FEET * FEET_TO_INCHES;
908 default:
909 break;
910 }
911
912 break;
913 }
914
916 {
917 switch ( toUnit )
918 {
920 return 1.0 / FEET_TO_INCHES;
922 return 1.0 / ( YARDS_TO_FEET * FEET_TO_INCHES );
923 default:
924 break;
925 }
926
927 break;
928 }
929
930 default:
931 break;
932 }
933
934 return distanceUnitToMeter( fromUnit ) / distanceUnitToMeter( toUnit );
935}
936
938{
939 switch ( unit )
940 {
942 return u"m2"_s;
944 return u"km2"_s;
946 return u"ft2"_s;
948 return u"y2"_s;
950 return u"mi2"_s;
952 return u"ha"_s;
954 return u"ac"_s;
956 return u"nm2"_s;
958 return u"deg2"_s;
960 return u"cm2"_s;
962 return u"mm2"_s;
964 return u"in2"_s;
966 return u"<unknown>"_s;
967 }
968 return QString();
969}
970
971Qgis::AreaUnit QgsUnitTypes::decodeAreaUnit( const QString &string, bool *ok )
972{
973 const QString normalized = string.trimmed().toLower();
974
975 if ( ok )
976 *ok = true;
977
978 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareMeters ) )
980 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareKilometers ) )
982 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareFeet ) )
984 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareYards ) )
986 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareMiles ) )
988 if ( normalized == encodeUnit( Qgis::AreaUnit::Hectares ) )
990 if ( normalized == encodeUnit( Qgis::AreaUnit::Acres ) )
992 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareNauticalMiles ) )
994 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareDegrees ) )
996 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareCentimeters ) )
998 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareMillimeters ) )
1000 if ( normalized == encodeUnit( Qgis::AreaUnit::SquareInches ) )
1002 if ( normalized == encodeUnit( Qgis::AreaUnit::Unknown ) )
1004
1005 if ( ok )
1006 *ok = false;
1007
1009}
1010
1012{
1013 switch ( unit )
1014 {
1016 return QObject::tr( "square meters", "area" );
1018 return QObject::tr( "square kilometers", "area" );
1020 return QObject::tr( "square feet", "area" );
1022 return QObject::tr( "square yards", "area" );
1024 return QObject::tr( "square miles", "area" );
1026 return QObject::tr( "hectares", "area" );
1028 return QObject::tr( "acres", "area" );
1030 return QObject::tr( "square nautical miles", "area" );
1032 return QObject::tr( "square degrees", "area" );
1034 return QObject::tr( "square millimeters", "area" );
1036 return QObject::tr( "square centimeters", "area" );
1038 return QObject::tr( "square inches", "area" );
1040 return QObject::tr( "<unknown>", "area" );
1041 }
1042 return QString();
1043}
1044
1046{
1047 switch ( unit )
1048 {
1050 return QObject::tr( "m²", "area" );
1052 return QObject::tr( "km²", "area" );
1054 return QObject::tr( "ft²", "area" );
1056 return QObject::tr( "yd²", "area" );
1058 return QObject::tr( "mi²", "area" );
1060 return QObject::tr( "ha", "area" );
1062 return QObject::tr( "ac", "area" );
1064 return QObject::tr( "NM²", "area" );
1066 return QObject::tr( "deg²", "area" );
1068 return QObject::tr( "cm²", "area" );
1070 return QObject::tr( "mm²", "area" );
1072 return QObject::tr( "in²", "area" );
1074 return QString();
1075 }
1076 return QString();
1077}
1078
1079Qgis::AreaUnit QgsUnitTypes::stringToAreaUnit( const QString &string, bool *ok )
1080{
1081 const QString normalized = string.trimmed().toLower();
1082
1083 if ( ok )
1084 *ok = true;
1085
1086 if ( normalized == toString( Qgis::AreaUnit::SquareMeters ) )
1088 if ( normalized == toString( Qgis::AreaUnit::SquareKilometers ) )
1090 if ( normalized == toString( Qgis::AreaUnit::SquareFeet ) )
1092 if ( normalized == toString( Qgis::AreaUnit::SquareYards ) )
1094 if ( normalized == toString( Qgis::AreaUnit::SquareMiles ) )
1096 if ( normalized == toString( Qgis::AreaUnit::Hectares ) )
1098 if ( normalized == toString( Qgis::AreaUnit::Acres ) )
1099 return Qgis::AreaUnit::Acres;
1100 if ( normalized == toString( Qgis::AreaUnit::SquareNauticalMiles ) )
1102 if ( normalized == toString( Qgis::AreaUnit::SquareDegrees ) )
1104 if ( normalized == toString( Qgis::AreaUnit::SquareMillimeters ) )
1106 if ( normalized == toString( Qgis::AreaUnit::SquareCentimeters ) )
1108 if ( normalized == toString( Qgis::AreaUnit::SquareInches ) )
1110 if ( normalized == toString( Qgis::AreaUnit::Unknown ) )
1112 if ( ok )
1113 *ok = false;
1114
1116}
1117
1119{
1120#define KM2_TO_M2 1000000.0
1121#define CM2_TO_M2 0.0001
1122#define MM2_TO_M2 0.000001
1123#define FT2_TO_M2 0.09290304
1124#define IN2_TO_M2 0.00064516
1125#define YD2_TO_M2 0.83612736
1126#define MI2_TO_M2 2589988.110336
1127#define HA_TO_M2 10000.0
1128#define AC_TO_FT2 43560.0
1129#define DEG2_TO_M2 12392029030.5
1130#define NM2_TO_M2 3429904.0
1131
1132 // Calculate the conversion factor between the specified units
1133 switch ( fromUnit )
1134 {
1136 {
1137 switch ( toUnit )
1138 {
1140 return 1.0;
1142 return 1.0 / KM2_TO_M2;
1144 return 1.0 / FT2_TO_M2;
1146 return 1.0 / YD2_TO_M2;
1148 return 1.0 / MI2_TO_M2;
1150 return 1.0 / HA_TO_M2;
1152 return 1.0 / AC_TO_FT2 / FT2_TO_M2;
1154 return 1.0 / NM2_TO_M2;
1156 return 1.0 / DEG2_TO_M2;
1158 return 1.0 / CM2_TO_M2;
1160 return 1.0 / MM2_TO_M2;
1162 return 1.0 / IN2_TO_M2;
1164 break;
1165 }
1166
1167 break;
1168 }
1170 {
1171 switch ( toUnit )
1172 {
1174 return KM2_TO_M2;
1176 return 1.0;
1178 return KM2_TO_M2 / FT2_TO_M2;
1180 return KM2_TO_M2 / YD2_TO_M2;
1182 return KM2_TO_M2 / MI2_TO_M2;
1184 return KM2_TO_M2 / HA_TO_M2;
1186 return KM2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
1188 return KM2_TO_M2 / NM2_TO_M2;
1190 return KM2_TO_M2 / DEG2_TO_M2;
1192 return KM2_TO_M2 / CM2_TO_M2;
1194 return KM2_TO_M2 / MM2_TO_M2;
1196 return KM2_TO_M2 / IN2_TO_M2;
1198 break;
1199 }
1200
1201 break;
1202 }
1204 {
1205 switch ( toUnit )
1206 {
1208 return FT2_TO_M2;
1210 return FT2_TO_M2 / KM2_TO_M2;
1212 return 1.0;
1214 return FT2_TO_M2 / YD2_TO_M2;
1216 return FT2_TO_M2 / MI2_TO_M2;
1218 return FT2_TO_M2 / HA_TO_M2;
1220 return 1.0 / AC_TO_FT2;
1222 return FT2_TO_M2 / NM2_TO_M2;
1224 return FT2_TO_M2 / DEG2_TO_M2;
1226 return FT2_TO_M2 / CM2_TO_M2;
1228 return FT2_TO_M2 / MM2_TO_M2;
1230 return FT2_TO_M2 / IN2_TO_M2;
1232 break;
1233 }
1234
1235 break;
1236 }
1237
1239 {
1240 switch ( toUnit )
1241 {
1243 return YD2_TO_M2;
1245 return YD2_TO_M2 / KM2_TO_M2;
1247 return YD2_TO_M2 / FT2_TO_M2;
1249 return 1.0;
1251 return YD2_TO_M2 / MI2_TO_M2;
1253 return YD2_TO_M2 / HA_TO_M2;
1255 return YD2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1257 return YD2_TO_M2 / NM2_TO_M2;
1259 return YD2_TO_M2 / DEG2_TO_M2;
1261 return YD2_TO_M2 / CM2_TO_M2;
1263 return YD2_TO_M2 / MM2_TO_M2;
1265 return YD2_TO_M2 / IN2_TO_M2;
1267 break;
1268 }
1269 break;
1270 }
1271
1273 {
1274 switch ( toUnit )
1275 {
1277 return MI2_TO_M2;
1279 return MI2_TO_M2 / KM2_TO_M2;
1281 return MI2_TO_M2 / FT2_TO_M2;
1283 return MI2_TO_M2 / YD2_TO_M2;
1285 return 1.0;
1287 return MI2_TO_M2 / HA_TO_M2;
1289 return MI2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1291 return MI2_TO_M2 / NM2_TO_M2;
1293 return MI2_TO_M2 / DEG2_TO_M2;
1295 return MI2_TO_M2 / CM2_TO_M2;
1297 return MI2_TO_M2 / MM2_TO_M2;
1299 return MI2_TO_M2 / IN2_TO_M2;
1301 break;
1302 }
1303
1304 break;
1305 }
1306
1308 {
1309 switch ( toUnit )
1310 {
1312 return HA_TO_M2;
1314 return HA_TO_M2 / KM2_TO_M2;
1316 return HA_TO_M2 / FT2_TO_M2;
1318 return HA_TO_M2 / YD2_TO_M2;
1320 return HA_TO_M2 / MI2_TO_M2;
1322 return 1.0;
1324 return HA_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1326 return HA_TO_M2 / NM2_TO_M2;
1328 return HA_TO_M2 / DEG2_TO_M2;
1330 return HA_TO_M2 / CM2_TO_M2;
1332 return HA_TO_M2 / MM2_TO_M2;
1334 return HA_TO_M2 / IN2_TO_M2;
1336 break;
1337 }
1338
1339 break;
1340 }
1341
1343 {
1344 switch ( toUnit )
1345 {
1347 return AC_TO_FT2 * FT2_TO_M2;
1349 return AC_TO_FT2 * FT2_TO_M2 / KM2_TO_M2;
1351 return AC_TO_FT2;
1353 return AC_TO_FT2 * FT2_TO_M2 / YD2_TO_M2;
1355 return AC_TO_FT2 * FT2_TO_M2 / MI2_TO_M2;
1357 return AC_TO_FT2 * FT2_TO_M2 / HA_TO_M2;
1359 return 1.0;
1361 return AC_TO_FT2 * FT2_TO_M2 / NM2_TO_M2;
1363 return AC_TO_FT2 * FT2_TO_M2 / DEG2_TO_M2;
1365 return AC_TO_FT2 * FT2_TO_M2 / CM2_TO_M2;
1367 return AC_TO_FT2 * FT2_TO_M2 / MM2_TO_M2;
1369 return AC_TO_FT2 * FT2_TO_M2 / IN2_TO_M2;
1371 break;
1372 }
1373
1374 break;
1375 }
1376
1378 {
1379 switch ( toUnit )
1380 {
1382 return NM2_TO_M2;
1384 return NM2_TO_M2 / KM2_TO_M2;
1386 return NM2_TO_M2 / FT2_TO_M2;
1388 return NM2_TO_M2 / YD2_TO_M2;
1390 return NM2_TO_M2 / MI2_TO_M2;
1392 return NM2_TO_M2 / HA_TO_M2;
1394 return NM2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1396 return 1.0;
1398 return NM2_TO_M2 / DEG2_TO_M2;
1400 return NM2_TO_M2 / CM2_TO_M2;
1402 return NM2_TO_M2 / MM2_TO_M2;
1404 return NM2_TO_M2 / IN2_TO_M2;
1406 break;
1407 }
1408
1409 break;
1410 }
1411
1413 {
1414 switch ( toUnit )
1415 {
1417 return DEG2_TO_M2;
1419 return DEG2_TO_M2 / KM2_TO_M2;
1421 return DEG2_TO_M2 / FT2_TO_M2;
1423 return DEG2_TO_M2 / YD2_TO_M2;
1425 return DEG2_TO_M2 / MI2_TO_M2;
1427 return DEG2_TO_M2 / HA_TO_M2;
1429 return DEG2_TO_M2 / FT2_TO_M2 / AC_TO_FT2;
1431 return DEG2_TO_M2 / NM2_TO_M2;
1433 return 1.0;
1435 return DEG2_TO_M2 / CM2_TO_M2;
1437 return DEG2_TO_M2 / MM2_TO_M2;
1439 return DEG2_TO_M2 / IN2_TO_M2;
1441 break;
1442 }
1443
1444 break;
1445 }
1446
1448 {
1449 switch ( toUnit )
1450 {
1452 return MM2_TO_M2;
1454 return MM2_TO_M2 / KM2_TO_M2;
1456 return MM2_TO_M2 / FT2_TO_M2;
1458 return MM2_TO_M2 / YD2_TO_M2;
1460 return MM2_TO_M2 / MI2_TO_M2;
1462 return MM2_TO_M2 / HA_TO_M2;
1464 return MM2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
1466 return MM2_TO_M2 / NM2_TO_M2;
1468 return MM2_TO_M2 / DEG2_TO_M2;
1470 return MM2_TO_M2 / CM2_TO_M2;
1472 return 1.0;
1474 return MM2_TO_M2 / IN2_TO_M2;
1476 break;
1477 }
1478
1479 break;
1480 }
1482 {
1483 switch ( toUnit )
1484 {
1486 return CM2_TO_M2;
1488 return CM2_TO_M2 / KM2_TO_M2;
1490 return CM2_TO_M2 / FT2_TO_M2;
1492 return CM2_TO_M2 / YD2_TO_M2;
1494 return CM2_TO_M2 / MI2_TO_M2;
1496 return CM2_TO_M2 / HA_TO_M2;
1498 return CM2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
1500 return CM2_TO_M2 / NM2_TO_M2;
1502 return CM2_TO_M2 / DEG2_TO_M2;
1504 return 1.0;
1506 return CM2_TO_M2 / MM2_TO_M2;
1508 return CM2_TO_M2 / IN2_TO_M2;
1510 break;
1511 }
1512
1513 break;
1514 }
1516 {
1517 switch ( toUnit )
1518 {
1520 return IN2_TO_M2;
1522 return IN2_TO_M2 / KM2_TO_M2;
1524 return IN2_TO_M2 / FT2_TO_M2;
1526 return IN2_TO_M2 / YD2_TO_M2;
1528 return IN2_TO_M2 / MI2_TO_M2;
1530 return IN2_TO_M2 / HA_TO_M2;
1532 return IN2_TO_M2 / AC_TO_FT2 / FT2_TO_M2;
1534 return IN2_TO_M2 / NM2_TO_M2;
1536 return IN2_TO_M2 / DEG2_TO_M2;
1538 return IN2_TO_M2 / CM2_TO_M2;
1540 return IN2_TO_M2 / MM2_TO_M2;
1542 return 1;
1544 break;
1545 }
1546
1547 break;
1548 }
1550 break;
1551 }
1552 return 1.0;
1553}
1554
1556{
1557 switch ( distanceUnit )
1558 {
1562
1565
1568
1571
1611
1614
1618
1621
1624
1627
1630 }
1631
1633}
1634
1677
1679{
1680 switch ( unit )
1681 {
1683 return u"s"_s;
1685 return u"ms"_s;
1687 return u"min"_s;
1689 return u"h"_s;
1691 return u"d"_s;
1693 return u"wk"_s;
1695 return u"mon"_s;
1697 return u"y"_s;
1699 return u"dec"_s;
1701 return u"c"_s;
1703 return u"xxx"_s;
1705 return u"<unknown>"_s;
1706 }
1707 return QString();
1708}
1709
1711{
1712 const QString normalized = string.trimmed().toLower();
1713
1714 if ( ok )
1715 *ok = true;
1716
1717 if ( normalized == encodeUnit( Qgis::TemporalUnit::Seconds ) )
1719 if ( normalized == encodeUnit( Qgis::TemporalUnit::Milliseconds ) )
1721 if ( normalized == encodeUnit( Qgis::TemporalUnit::Minutes ) )
1723 if ( normalized == encodeUnit( Qgis::TemporalUnit::Hours ) )
1725 if ( normalized == encodeUnit( Qgis::TemporalUnit::Days ) )
1727 if ( normalized == encodeUnit( Qgis::TemporalUnit::Weeks ) )
1729 if ( normalized == encodeUnit( Qgis::TemporalUnit::Months ) )
1731 if ( normalized == encodeUnit( Qgis::TemporalUnit::Years ) )
1733 if ( normalized == encodeUnit( Qgis::TemporalUnit::Decades ) )
1735 if ( normalized == encodeUnit( Qgis::TemporalUnit::Centuries ) )
1737 if ( normalized == encodeUnit( Qgis::TemporalUnit::IrregularStep ) )
1739 if ( normalized == encodeUnit( Qgis::TemporalUnit::Unknown ) )
1741
1742 if ( ok )
1743 *ok = false;
1744
1746}
1747
1749{
1750 switch ( unit )
1751 {
1753 return QObject::tr( "seconds", "temporal" );
1755 return QObject::tr( "milliseconds", "temporal" );
1757 return QObject::tr( "minutes", "temporal" );
1759 return QObject::tr( "hours", "temporal" );
1761 return QObject::tr( "days", "temporal" );
1763 return QObject::tr( "weeks", "temporal" );
1765 return QObject::tr( "months", "temporal" );
1767 return QObject::tr( "years", "temporal" );
1769 return QObject::tr( "decades", "temporal" );
1771 return QObject::tr( "centuries", "temporal" );
1773 return QObject::tr( "steps", "temporal" );
1775 return QObject::tr( "<unknown>", "temporal" );
1776 }
1777 return QString();
1778}
1779
1781{
1782 switch ( unit )
1783 {
1785 return QObject::tr( "s", "temporal" );
1787 return QObject::tr( "ms", "temporal" );
1789 return QObject::tr( "min", "temporal" );
1791 return QObject::tr( "h", "temporal" );
1793 return QObject::tr( "d", "temporal" );
1795 return QObject::tr( "wk", "temporal" );
1797 return QObject::tr( "mon", "temporal" );
1799 return QObject::tr( "y", "temporal" );
1801 return QObject::tr( "dec", "temporal" );
1803 return QObject::tr( "cen", "temporal" );
1805 return QObject::tr( "steps", "temporal" );
1807 return QObject::tr( "<unknown>", "temporal" );
1808 }
1809 return QString();
1810}
1811
1813{
1814 const QString normalized = string.trimmed().toLower();
1815
1816 if ( ok )
1817 *ok = true;
1818
1819 if ( normalized == toString( Qgis::TemporalUnit::Seconds ) )
1821 if ( normalized == toString( Qgis::TemporalUnit::Milliseconds ) )
1823 if ( normalized == toString( Qgis::TemporalUnit::Minutes ) )
1825 if ( normalized == toString( Qgis::TemporalUnit::Hours ) )
1827 if ( normalized == toString( Qgis::TemporalUnit::Days ) )
1829 if ( normalized == toString( Qgis::TemporalUnit::Weeks ) )
1831 if ( normalized == toString( Qgis::TemporalUnit::Months ) )
1833 if ( normalized == toString( Qgis::TemporalUnit::Years ) )
1835 if ( normalized == toString( Qgis::TemporalUnit::Decades ) )
1837 if ( normalized == toString( Qgis::TemporalUnit::Centuries ) )
1839 if ( normalized == toString( Qgis::TemporalUnit::IrregularStep ) )
1841 if ( normalized == toString( Qgis::TemporalUnit::Unknown ) )
1843
1844 if ( ok )
1845 *ok = false;
1846
1848}
1849
1851{
1852 switch ( fromUnit )
1853 {
1855 {
1856 switch ( toUnit )
1857 {
1859 return 1.0;
1861 return 1000.0;
1863 return 1 / 60.0;
1865 return 1 / 3600.0;
1867 return 1 / 86400.0;
1869 return 1 / 604800.0;
1871 return 1 / 2592000.0;
1873 return 1 / 31557600.0;
1875 return 1 / 315576000.0;
1877 return 1 / 3155760000.0;
1880 return 1.0;
1881 }
1882 break;
1883 }
1885 {
1886 switch ( toUnit )
1887 {
1889 return 1 / 1000.0;
1891 return 1.0;
1893 return 1 / 60000.0;
1895 return 1 / 3600000.0;
1897 return 1 / 86400000.0;
1899 return 1 / 604800000.0;
1901 return 1 / 2592000000.0;
1903 return 1 / 31557600000.0;
1905 return 1 / 315576000000.0;
1907 return 1 / 3155760000000.0;
1910 return 1.0;
1911 }
1912 break;
1913 }
1915 {
1916 switch ( toUnit )
1917 {
1919 return 60.0;
1921 return 60000.0;
1923 return 1;
1925 return 1 / 60.0;
1927 return 1 / 1440.0;
1929 return 1 / 10080.0;
1931 return 1 / 43200.0;
1933 return 1 / 525960.0;
1935 return 1 / 5259600.0;
1937 return 1 / 52596000.0;
1940 return 1.0;
1941 }
1942 break;
1943 }
1945 {
1946 switch ( toUnit )
1947 {
1949 return 3600.0;
1951 return 3600000.0;
1953 return 60;
1955 return 1;
1957 return 1 / 24.0;
1959 return 1 / 168.0;
1961 return 1 / 720.0;
1963 return 1 / 8766.0;
1965 return 1 / 87660.0;
1967 return 1 / 876600.0;
1970 return 1.0;
1971 }
1972 break;
1973 }
1975 {
1976 switch ( toUnit )
1977 {
1979 return 86400.0;
1981 return 86400000.0;
1983 return 1440;
1985 return 24;
1987 return 1;
1989 return 1 / 7.0;
1991 return 1 / 30.0;
1993 return 1 / 365.25;
1995 return 1 / 3652.5;
1997 return 1 / 36525.0;
2000 return 1.0;
2001 }
2002 break;
2003 }
2005 {
2006 switch ( toUnit )
2007 {
2009 return 604800.0;
2011 return 604800000.0;
2013 return 10080;
2015 return 168;
2017 return 7;
2019 return 1;
2021 return 7 / 30.0;
2023 return 7 / 365.25;
2025 return 7 / 3652.5;
2027 return 7 / 36525.0;
2030 return 1.0;
2031 }
2032 break;
2033 }
2035 {
2036 switch ( toUnit )
2037 {
2039 return 2592000.0;
2041 return 2592000000.0;
2043 return 43200;
2045 return 720;
2047 return 30;
2049 return 30 / 7.0;
2051 return 1;
2053 return 30 / 365.25;
2055 return 30 / 3652.5;
2057 return 30 / 36525.0;
2060 return 1.0;
2061 }
2062 break;
2063 }
2065 {
2066 switch ( toUnit )
2067 {
2069 return 31557600.0;
2071 return 31557600000.0;
2073 return 525960.0;
2075 return 8766.0;
2077 return 365.25;
2079 return 365.25 / 7.0;
2081 return 365.25 / 30.0;
2083 return 1;
2085 return 0.1;
2087 return 0.01;
2090 return 1.0;
2091 }
2092 break;
2093 }
2095 {
2096 switch ( toUnit )
2097 {
2099 return 315576000.0;
2101 return 315576000000.0;
2103 return 5259600.0;
2105 return 87660.0;
2107 return 3652.5;
2109 return 3652.5 / 7.0;
2111 return 3652.5 / 30.0;
2113 return 10;
2115 return 1;
2117 return 0.1;
2120 return 1.0;
2121 }
2122 break;
2123 }
2124
2126 {
2127 switch ( toUnit )
2128 {
2130 return 3155760000.0;
2132 return 3155760000000.0;
2134 return 52596000.0;
2136 return 876600.0;
2138 return 36525;
2140 return 36525 / 7.0;
2142 return 36525 / 30.0;
2144 return 100;
2146 return 10;
2148 return 1;
2151 return 1.0;
2152 }
2153 break;
2154 }
2155
2158 {
2159 return 1.0;
2160 }
2161 }
2162 return 1.0;
2163}
2164
2165Qgis::VolumeUnit QgsUnitTypes::decodeVolumeUnit( const QString &string, bool *ok )
2166{
2167 const QString normalized = string.trimmed().toLower();
2168
2169 if ( ok )
2170 *ok = true;
2171
2172 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicMeters ) )
2174 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicFeet ) )
2176 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicYards ) )
2178 if ( normalized == encodeUnit( Qgis::VolumeUnit::Barrel ) )
2180 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicDecimeter ) )
2182 if ( normalized == encodeUnit( Qgis::VolumeUnit::Liters ) )
2184 if ( normalized == encodeUnit( Qgis::VolumeUnit::GallonUS ) )
2186 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicInch ) )
2188 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicCentimeter ) )
2190 if ( normalized == encodeUnit( Qgis::VolumeUnit::CubicDegrees ) )
2192 if ( normalized == encodeUnit( Qgis::VolumeUnit::Unknown ) )
2194
2195 if ( ok )
2196 *ok = false;
2197
2199}
2200
2202{
2203 switch ( unit )
2204 {
2206 return QObject::tr( "cubic meters", "volume" );
2208 return QObject::tr( "cubic feet", "volume" );
2210 return QObject::tr( "cubic yards", "volume" );
2212 return QObject::tr( "barrels", "volume" );
2214 return QObject::tr( "cubic decimeters", "volume" );
2216 return QObject::tr( "liters", "volume" );
2218 return QObject::tr( "gallons", "volume" );
2220 return QObject::tr( "cubic inches", "volume" );
2222 return QObject::tr( "cubic centimeters", "volume" );
2224 return QObject::tr( "cubic degrees", "volume" );
2226 return QObject::tr( "<unknown>", "volume" );
2227 }
2228 return QString();
2229}
2230
2232{
2233 switch ( unit )
2234 {
2236 return QObject::tr( "m³", "volume" );
2238 return QObject::tr( "ft³", "volume" );
2240 return QObject::tr( "yds³", "volume" );
2242 return QObject::tr( "bbl", "volume" );
2244 return QObject::tr( "dm³", "volume" );
2246 return QObject::tr( "l", "volume" );
2248 return QObject::tr( "gal", "volume" );
2250 return QObject::tr( "in³", "volume" );
2252 return QObject::tr( "cm³", "volume" );
2254 return QObject::tr( "deg³", "volume" );
2256 return QObject::tr( "<unknown>", "volume" );
2257 }
2258 return QString();
2259
2260}
2261
2262Qgis::VolumeUnit QgsUnitTypes::stringToVolumeUnit( const QString &string, bool *ok )
2263{
2264 const QString normalized = string.trimmed().toLower();
2265
2266 if ( ok )
2267 *ok = true;
2268
2269 if ( normalized == toString( Qgis::VolumeUnit::CubicMeters ) )
2271 if ( normalized == toString( Qgis::VolumeUnit::CubicFeet ) )
2273 if ( normalized == toString( Qgis::VolumeUnit::CubicYards ) )
2275 if ( normalized == toString( Qgis::VolumeUnit::Barrel ) )
2277 if ( normalized == toString( Qgis::VolumeUnit::CubicDecimeter ) )
2279 if ( normalized == toString( Qgis::VolumeUnit::Liters ) )
2281 if ( normalized == toString( Qgis::VolumeUnit::GallonUS ) )
2283 if ( normalized == toString( Qgis::VolumeUnit::CubicInch ) )
2285 if ( normalized == toString( Qgis::VolumeUnit::CubicCentimeter ) )
2287 if ( normalized == toString( Qgis::VolumeUnit::CubicDegrees ) )
2289 if ( normalized == toString( Qgis::VolumeUnit::Unknown ) )
2291
2292 if ( ok )
2293 *ok = false;
2294
2296}
2297
2298#define DEG2_TO_M3 1379474361572186.2
2300{
2301 // cloned branches are intentional here for improved readability
2302 // NOLINTBEGIN(bugprone-branch-clone)
2303 switch ( fromUnit )
2304 {
2306 {
2307 switch ( toUnit )
2308 {
2310 return 1.0;
2312 return 35.314666572222;
2314 return 1.307950613786;
2316 return 6.2898107438466;
2318 return 1000;
2320 return 1000;
2322 return 264.17205124156;
2324 return 61023.7438368;
2326 return 1000000;
2328 return 1 / DEG2_TO_M3; // basically meaningless!
2330 return 1.0;
2331 }
2332 break;
2333 }
2335 {
2336 switch ( toUnit )
2337 {
2339 return 0.028316846592;
2341 return 1.0;
2343 return 0.037037037;
2345 return 0.178107622;
2347 return 28.31685;
2349 return 28.31685;
2351 return 7.480519954;
2353 return 1728.000629765;
2355 return 28316.85;
2357 return 0.028316846592 / DEG2_TO_M3; // basically meaningless!
2359 return 1.0;
2360 }
2361 break;
2362 }
2364 {
2365 switch ( toUnit )
2366 {
2368 return 0.764554900;
2370 return 26.999998234;
2372 return 1.0;
2374 return 4.808905491;
2376 return 764.5549;
2378 return 764.5549;
2380 return 201.974025549;
2382 return 46656.013952472;
2384 return 764554.9;
2386 return 0.764554900 / DEG2_TO_M3; // basically meaningless!
2388 return 1.0;
2389 }
2390 break;
2391 }
2393 {
2394 switch ( toUnit )
2395 {
2397 return 0.158987300;
2399 return 5.614582837;
2401 return 0.207947526;
2403 return 1.0;
2405 return 158.9873;
2407 return 158.9873;
2409 return 41.999998943;
2411 return 9702.002677722;
2413 return 158987.3;
2415 return 0.158987300 / DEG2_TO_M3; // basically meaningless!
2417 return 1.0;
2418 }
2419 break;
2420 }
2423 {
2424 switch ( toUnit )
2425 {
2427 return 0.001;
2429 return 0.035314662;
2431 return 0.001307951;
2433 return 0.006289811;
2436 return 1.0;
2438 return 0.264172037;
2440 return 61.023758990;
2442 return 1000;
2444 return 0.001 / DEG2_TO_M3; // basically meaningless!
2446 return 1.0;
2447 }
2448 break;
2449 }
2451 {
2452 switch ( toUnit )
2453 {
2455 return 0.003785412;
2457 return 0.133680547;
2459 return 0.004951132;
2461 return 0.023809524;
2464 return 3.785412000;
2466 return 1.0;
2468 return 231.000069567;
2470 return 3785.412;
2472 return 0.003785412 / DEG2_TO_M3; // basically meaningless!
2474 return 1.0;
2475 }
2476 break;
2477 }
2479 {
2480 switch ( toUnit )
2481 {
2483 return 0.000016387;
2485 return 0.000578703;
2487 return 0.000021433;
2489 return 0.000103072;
2492 return 0.016387060;
2494 return 0.004329003;
2496 return 1.0;
2498 return 16.387060000;
2500 return 0.000016387 / DEG2_TO_M3; // basically meaningless!
2502 return 1.0;
2503 }
2504 break;
2505 }
2507 {
2508 switch ( toUnit )
2509 {
2511 return 0.000001;
2513 return 0.000035315;
2515 return 0.000001308;
2517 return 0.000006290;
2520 return 0.001;
2522 return 0.000264172 ;
2524 return 0.061023759;
2526 return 1.0;
2528 return 0.000001 / DEG2_TO_M3; // basically meaningless!
2530 return 1.0;
2531 }
2532 break;
2533 }
2535 if ( toUnit == Qgis::VolumeUnit::Unknown || toUnit == Qgis::VolumeUnit::CubicDegrees )
2536 return 1.0;
2537 else
2539
2541 {
2542 return 1.0;
2543 }
2544 }
2545 // NOLINTEND(bugprone-branch-clone)
2546 return 1.0;
2547}
2548
2550{
2551 // cloned branches are intentional here for improved readability
2552 // NOLINTBEGIN(bugprone-branch-clone)
2553 switch ( distanceUnit )
2554 {
2558
2561
2564
2567
2583
2595
2614
2617
2620
2623
2626 }
2627 // NOLINTEND(bugprone-branch-clone)
2628
2630}
2631
2661
2683
2685{
2686 switch ( unit )
2687 {
2689 return u"m3"_s;
2691 return u"ft3"_s;
2693 return u"yd3"_s;
2695 return u"bbl"_s;
2697 return u"dm3"_s;
2699 return u"l"_s;
2701 return u"gal"_s;
2703 return u"in3"_s;
2705 return u"cm3"_s;
2707 return u"deg3"_s;
2709 return u"<unknown>"_s;
2710 }
2711 return QString();
2712}
2713
2715{
2716 switch ( unit )
2717 {
2719 return u"degrees"_s;
2721 return u"radians"_s;
2723 return u"gon"_s;
2725 return u"moa"_s;
2727 return u"soa"_s;
2729 return u"tr"_s;
2731 return u"milliradians"_s;
2733 return u"mil"_s;
2735 return u"<unknown>"_s;
2736 }
2737 return QString();
2738}
2739
2740Qgis::AngleUnit QgsUnitTypes::decodeAngleUnit( const QString &string, bool *ok )
2741{
2742 const QString normalized = string.trimmed().toLower();
2743
2744 if ( ok )
2745 *ok = true;
2746
2747 if ( normalized == encodeUnit( Qgis::AngleUnit::Degrees ) )
2749 if ( normalized == encodeUnit( Qgis::AngleUnit::Radians ) )
2751 if ( normalized == encodeUnit( Qgis::AngleUnit::Gon ) )
2752 return Qgis::AngleUnit::Gon;
2753 if ( normalized == encodeUnit( Qgis::AngleUnit::MinutesOfArc ) )
2755 if ( normalized == encodeUnit( Qgis::AngleUnit::SecondsOfArc ) )
2757 if ( normalized == encodeUnit( Qgis::AngleUnit::Turn ) )
2758 return Qgis::AngleUnit::Turn;
2759 if ( normalized == encodeUnit( Qgis::AngleUnit::MilliradiansSI ) )
2761 if ( normalized == encodeUnit( Qgis::AngleUnit::MilNATO ) )
2763 if ( normalized == encodeUnit( Qgis::AngleUnit::Unknown ) )
2765 if ( ok )
2766 *ok = false;
2767
2769}
2770
2772{
2773 switch ( unit )
2774 {
2776 return QObject::tr( "degrees", "angle" );
2778 return QObject::tr( "radians", "angle" );
2780 return QObject::tr( "gon", "angle" );
2782 return QObject::tr( "minutes of arc", "angle" );
2784 return QObject::tr( "seconds of arc", "angle" );
2786 return QObject::tr( "turns", "angle" );
2788 return QObject::tr( "milliradians", "angle" );
2790 return QObject::tr( "mil", "angle" );
2792 return QObject::tr( "<unknown>", "angle" );
2793 }
2794 return QString();
2795}
2796
2798{
2799 // Calculate the conversion factor between the specified units
2800 switch ( fromUnit )
2801 {
2803 {
2804 switch ( toUnit )
2805 {
2807 return 1.0;
2809 return M_PI / 180.0;
2811 return 400.0 / 360.0;
2813 return 60;
2815 return 3600;
2817 return 1.0 / 360.0;
2819 return M_PI / 180.0 * 1000;
2821 return 3200.0 / 180;
2823 break;
2824 }
2825 break;
2826 }
2828 {
2829 switch ( toUnit )
2830 {
2832 return 180.0 / M_PI;
2834 return 1.0;
2836 return 200.0 / M_PI;
2838 return 60 * 180.0 / M_PI;
2840 return 3600 * 180.0 / M_PI;
2842 return 0.5 / M_PI;
2844 return 1000;
2846 return 3200.0 / M_PI;
2848 break;
2849 }
2850 break;
2851 }
2853 {
2854 switch ( toUnit )
2855 {
2857 return 360.0 / 400.0;
2859 return M_PI / 200.0;
2861 return 1.0;
2863 return 60 * 360.0 / 400.0;
2865 return 3600 * 360.0 / 400.0;
2867 return 1.0 / 400.0;
2869 return M_PI / 200.0 * 1000;
2871 return 3200.0 / 200.0;
2873 break;
2874 }
2875 break;
2876 }
2878 {
2879 switch ( toUnit )
2880 {
2882 return 1 / 60.0;
2884 return M_PI / 180.0 / 60.0;
2886 return 400.0 / 360.0 / 60.0;
2888 return 1.0;
2890 return 60.0;
2892 return 1.0 / 360.0 / 60.0;
2894 return M_PI / 180.0 / 60.0 * 1000;
2896 return 3200.0 / 180.0 / 60.0;
2898 break;
2899 }
2900 break;
2901 }
2903 {
2904 switch ( toUnit )
2905 {
2907 return 1 / 3600.0;
2909 return M_PI / 180.0 / 3600.0;
2911 return 400.0 / 360.0 / 3600.0;
2913 return 1.0 / 60.0;
2915 return 1.0;
2917 return 1.0 / 360.0 / 3600.0;
2919 return M_PI / 180.0 / 3600.0 * 1000;
2921 return 3200.0 / 180.0 / 3600.0;
2923 break;
2924 }
2925 break;
2926 }
2928 {
2929 switch ( toUnit )
2930 {
2932 return 360.0;
2934 return 2 * M_PI;
2936 return 400.0;
2938 return 360.0 * 60.0;
2940 return 360.0 * 3600.0;
2942 return 1.0;
2944 return 2 * M_PI * 1000;
2946 return 2 * 3200;
2948 break;
2949 }
2950 break;
2951 }
2953 {
2954 switch ( toUnit )
2955 {
2957 return 180.0 / M_PI / 1000;
2959 return 0.001;
2961 return 200.0 / M_PI / 1000;
2963 return 180.0 * 60.0 / M_PI / 1000;
2965 return 180.0 * 3600.0 / M_PI / 1000;
2967 return M_PI / 2 / 1000;
2969 return 1.0;
2971 return 3200.0 / 1000.0 / M_PI;
2973 break;
2974 }
2975 break;
2976 }
2977
2979 {
2980 switch ( toUnit )
2981 {
2983 return 180.0 / 3200;
2985 return M_PI / 3200;
2987 return 200.0 / 3200;
2989 return 60 * 180.0 / 3200;
2991 return 3600.0 * 180 / 3200;
2993 return 1.0 / ( 2 * 32000 );
2995 return 1000.0 * M_PI / 3200.0;
2997 return 1.0;
2999 break;
3000 }
3001 break;
3002 }
3003
3005 break;
3006 }
3007 return 1.0;
3008}
3009
3010QString QgsUnitTypes::formatAngle( double angle, int decimals, Qgis::AngleUnit unit )
3011{
3012 QString unitLabel;
3013 int decimalPlaces = 2;
3014
3015 switch ( unit )
3016 {
3018 unitLabel = QObject::tr( "°", "angle" );
3019 decimalPlaces = 0;
3020 break;
3022 unitLabel = QObject::tr( " rad", "angle" );
3023 decimalPlaces = 2;
3024 break;
3026 unitLabel = QObject::tr( " gon", "angle" );
3027 decimalPlaces = 0;
3028 break;
3030 unitLabel = QObject::tr( "′", "angle minutes" );
3031 decimalPlaces = 0;
3032 break;
3034 unitLabel = QObject::tr( "″", "angle seconds" );
3035 decimalPlaces = 0;
3036 break;
3038 unitLabel = QObject::tr( " tr", "angle turn" );
3039 decimalPlaces = 3;
3040 break;
3042 unitLabel = QObject::tr( " millirad", "angular mil SI" );
3043 decimalPlaces = 0;
3044 break;
3046 unitLabel = QObject::tr( " mil", "angular mil NATO" );
3047 decimalPlaces = 0;
3048 break;
3050 break;
3051 }
3052
3053 if ( decimals >= 0 )
3054 decimalPlaces = decimals;
3055
3056 return u"%L1%2"_s.arg( angle, 0, 'f', decimalPlaces ).arg( unitLabel );
3057}
3058
3059QgsUnitTypes::DistanceValue QgsUnitTypes::scaledDistance( double distance, Qgis::DistanceUnit unit, int decimals, bool keepBaseUnit )
3060{
3061 DistanceValue result;
3062
3063 // cloned branches are intentional here for improved readability
3064 // NOLINTBEGIN(bugprone-branch-clone)
3065 switch ( unit )
3066 {
3068 if ( keepBaseUnit )
3069 {
3070 result.value = qgsRound( distance, decimals );
3072 }
3073 else if ( std::fabs( distance ) > 1000.0 )
3074 {
3075 result.value = qgsRound( distance / 1000, decimals );
3077 }
3078 else if ( std::fabs( distance ) < 0.01 )
3079 {
3080 result.value = qgsRound( distance * 1000, decimals );
3082 }
3083 else if ( std::fabs( distance ) < 0.1 )
3084 {
3085
3086 result.value = qgsRound( distance * 100, decimals );
3088 }
3089 else
3090 {
3091 result.value = qgsRound( distance, decimals );
3093 }
3094 break;
3095
3097 if ( keepBaseUnit || std::fabs( distance ) >= 1.0 )
3098 {
3099 result.value = qgsRound( distance, decimals );
3101 }
3102 else
3103 {
3104 result.value = qgsRound( distance * 1000, decimals );
3106 }
3107 break;
3108
3110 if ( std::fabs( distance ) <= 5280.0 || keepBaseUnit )
3111 {
3112 result.value = qgsRound( distance, decimals );
3114 }
3115 else
3116 {
3117 result.value = qgsRound( distance / 5280.0, decimals );
3119 }
3120 break;
3121
3123 if ( std::fabs( distance ) <= 1760.0 || keepBaseUnit )
3124 {
3125 result.value = qgsRound( distance, decimals );
3127 }
3128 else
3129 {
3130 result.value = qgsRound( distance / 1760.0, decimals );
3132 }
3133 break;
3134
3136 if ( std::fabs( distance ) >= 1.0 || keepBaseUnit )
3137 {
3138 result.value = qgsRound( distance, decimals );
3140 }
3141 else
3142 {
3143 result.value = qgsRound( distance * 5280.0, decimals );
3145 }
3146 break;
3147
3149 result.value = qgsRound( distance, decimals );
3151 break;
3152
3154 result.value = qgsRound( distance, decimals );
3156 break;
3157
3159 result.value = qgsRound( distance, decimals );
3161 break;
3162
3163 default:
3164 result.value = qgsRound( distance, decimals );
3165 result.unit = unit;
3166 break;
3167 }
3168 // NOLINTEND(bugprone-branch-clone)
3169
3170 return result;
3171}
3172
3173QgsUnitTypes::AreaValue QgsUnitTypes::scaledArea( double area, Qgis::AreaUnit unit, int decimals, bool keepBaseUnit )
3174{
3176 result.value = -1.0;
3178
3179 // If we are not forced to keep the base units, switch to meter calculation
3181 {
3182 if ( keepBaseUnit )
3183 {
3184 result.value = qgsRound( area, decimals );
3186 }
3187 else
3188 {
3189 area /= 1000000.0;
3191 }
3192 }
3193 else if ( unit == Qgis::AreaUnit::SquareCentimeters )
3194 {
3195 if ( keepBaseUnit )
3196 {
3197 result.value = qgsRound( area, decimals );
3199 }
3200 else
3201 {
3202 area /= 10000.0;
3204 }
3205 }
3206
3207 // cloned branches are intentional here for improved readability
3208 // NOLINTBEGIN(bugprone-branch-clone)
3209 switch ( unit )
3210 {
3212 // handled in the if above
3213 break;
3215 // handled in the if above
3216 break;
3218 {
3219 if ( keepBaseUnit )
3220 {
3221 result.value = qgsRound( area, decimals );
3223 }
3225 {
3228 }
3230 {
3233 }
3234 else
3235 {
3236 result.value = qgsRound( area, decimals );
3238 }
3239 break;
3240 }
3241
3243 {
3244 result.value = qgsRound( area, decimals );
3246 break;
3247 }
3248
3250 {
3251 result.value = qgsRound( area, decimals );
3253 break;
3254 }
3255
3257 {
3258 if ( keepBaseUnit )
3259 {
3260 result.value = qgsRound( area, decimals );
3262 }
3264 {
3267 }
3268 else
3269 {
3270 result.value = qgsRound( area, decimals );
3272 }
3273 break;
3274 }
3275
3277 {
3278 if ( keepBaseUnit )
3279 {
3280 result.value = qgsRound( area, decimals );
3282 }
3284 {
3287 }
3288 else
3289 {
3290 result.value = qgsRound( area, decimals );
3292 }
3293 break;
3294 }
3295
3297 {
3298 result.value = qgsRound( area, decimals );
3300 break;
3301 }
3302
3304 {
3305 if ( keepBaseUnit )
3306 {
3307 result.value = qgsRound( area, decimals );
3309 }
3311 {
3314 }
3315 else
3316 {
3317 result.value = qgsRound( area, decimals );
3319 }
3320 break;
3321 }
3322
3324 {
3325 if ( keepBaseUnit )
3326 {
3327 result.value = qgsRound( area, decimals );
3328 result.unit = Qgis::AreaUnit::Acres;
3329 }
3331 {
3334 }
3335 else
3336 {
3337 result.value = qgsRound( area, decimals );
3338 result.unit = Qgis::AreaUnit::Acres;
3339 }
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
3358 {
3359 result.value = qgsRound( area, decimals );
3361 break;
3362 }
3363 }
3364 // NOLINTEND(bugprone-branch-clone)
3365 return result;
3366}
3367
3368
3369QString QgsUnitTypes::formatDistance( double distance, int decimals, Qgis::DistanceUnit unit, bool keepBaseUnit )
3370{
3371 const DistanceValue dist = scaledDistance( distance, unit, decimals, keepBaseUnit );
3372
3373 QString unitText;
3374
3375 if ( dist.unit != Qgis::DistanceUnit::Unknown )
3376 unitText = QChar( ' ' ) + QgsUnitTypes::toAbbreviatedString( dist.unit );
3377
3378 if ( qgsDoubleNear( dist.value, 0 ) )
3379 {
3380 unitText = QChar( ' ' ) + QgsUnitTypes::toAbbreviatedString( unit );
3381 return u"%L1%2"_s.arg( distance, 0, 'e', decimals ).arg( unitText );
3382 }
3383 else
3384 {
3385 return u"%L1%2"_s.arg( dist.value, 0, 'f', decimals ).arg( unitText );
3386 }
3387}
3388
3389QString QgsUnitTypes::formatArea( double area, int decimals, Qgis::AreaUnit unit, bool keepBaseUnit )
3390{
3391 const QgsUnitTypes::AreaValue areaValue = scaledArea( area, unit, decimals, keepBaseUnit );
3392
3393 QString unitText;
3394
3395 if ( areaValue.unit != Qgis::AreaUnit::Unknown )
3396 unitText = QChar( ' ' ) + QgsUnitTypes::toAbbreviatedString( areaValue.unit );
3397
3398 if ( qgsDoubleNear( areaValue.value, 0 ) )
3399 {
3400 unitText = QChar( ' ' ) + QgsUnitTypes::toAbbreviatedString( unit );
3401 return u"%L1%2"_s.arg( area, 0, 'e', decimals ).arg( unitText );
3402 }
3403 else
3404 {
3405 return u"%L1%2"_s.arg( areaValue.value, 0, 'f', decimals ).arg( unitText );
3406 }
3407}
3408
3410{
3411 switch ( unit )
3412 {
3414 return u"MM"_s;
3416 return u"RenderMetersInMapUnits"_s;
3418 return u"MapUnit"_s;
3420 return u"Pixel"_s;
3422 return u"Percentage"_s;
3424 return u"Point"_s;
3426 return u"Inch"_s;
3428 return QString();
3429 }
3430 return QString();
3431}
3432
3433Qgis::RenderUnit QgsUnitTypes::decodeRenderUnit( const QString &string, bool *ok )
3434{
3435 const QString normalized = string.trimmed().toLower();
3436
3437 if ( ok )
3438 *ok = true;
3439
3440 if ( normalized == encodeUnit( Qgis::RenderUnit::Millimeters ).toLower() )
3442 if ( normalized == encodeUnit( Qgis::RenderUnit::MetersInMapUnits ).toLower() )
3444 if ( normalized == "meters"_L1 )
3446 if ( normalized == encodeUnit( Qgis::RenderUnit::MapUnits ).toLower() )
3448 if ( normalized == "mapunits"_L1 )
3450 if ( normalized == encodeUnit( Qgis::RenderUnit::Pixels ).toLower() )
3452 if ( normalized == encodeUnit( Qgis::RenderUnit::Percentage ).toLower() )
3454 if ( normalized == "percent"_L1 )
3456 if ( normalized == encodeUnit( Qgis::RenderUnit::Points ).toLower() )
3458 if ( normalized == "points"_L1 )
3460 if ( normalized == encodeUnit( Qgis::RenderUnit::Inches ).toLower() )
3462
3463 if ( ok )
3464 *ok = false;
3465
3466 // millimeters are default
3468}
3469
3471{
3472 switch ( unit )
3473 {
3475 return QObject::tr( "millimeters", "render" );
3476
3478 return QObject::tr( "meters at scale", "render" );
3479
3481 return QObject::tr( "map units", "render" );
3482
3484 return QObject::tr( "pixels", "render" );
3485
3487 return QObject::tr( "percent", "render" );
3488
3490 return QObject::tr( "points", "render" );
3491
3493 return QObject::tr( "inches", "render" );
3494
3496 return QObject::tr( "<unknown>", "render" );
3497
3498 }
3499 return QString();
3500}
3501
3502
3503
3505{
3506 switch ( unit )
3507 {
3509 return u"cm"_s;
3511 return u"m"_s;
3513 return u"in"_s;
3515 return u"ft"_s;
3517 return u"pt"_s;
3519 return u"pi"_s;
3521 return u"px"_s;
3523 return u"mm"_s;
3524 }
3525 return QString();
3526}
3527
3528Qgis::LayoutUnit QgsUnitTypes::decodeLayoutUnit( const QString &string, bool *ok )
3529{
3530 const QString normalized = string.trimmed().toLower();
3531
3532 if ( ok )
3533 *ok = true;
3534
3535 if ( normalized == encodeUnit( Qgis::LayoutUnit::Millimeters ).toLower() )
3537 if ( normalized == encodeUnit( Qgis::LayoutUnit::Centimeters ).toLower() )
3539 if ( normalized == encodeUnit( Qgis::LayoutUnit::Meters ).toLower() )
3541 if ( normalized == encodeUnit( Qgis::LayoutUnit::Inches ).toLower() )
3543 if ( normalized == encodeUnit( Qgis::LayoutUnit::Feet ).toLower() )
3545 if ( normalized == encodeUnit( Qgis::LayoutUnit::Points ).toLower() )
3547 if ( normalized == encodeUnit( Qgis::LayoutUnit::Picas ).toLower() )
3549 if ( normalized == encodeUnit( Qgis::LayoutUnit::Pixels ).toLower() )
3551
3552 if ( ok )
3553 *ok = false;
3554
3555 // millimeters are default
3557}
3558
3578
3580{
3581 switch ( unit )
3582 {
3584 return QObject::tr( "px" );
3586 return QObject::tr( "mm" );
3588 return QObject::tr( "cm" );
3590 return QObject::tr( "m" );
3592 return QObject::tr( "in", "unit inch" );
3594 return QObject::tr( "ft" );
3596 return QObject::tr( "pt" );
3598 return QObject::tr( "pica" );
3599 }
3600 return QString(); // no warnings
3601}
3602
3604{
3605 switch ( unit )
3606 {
3608 return QObject::tr( "pixels" );
3610 return QObject::tr( "millimeters" );
3612 return QObject::tr( "centimeters" );
3614 return QObject::tr( "meters" );
3616 return QObject::tr( "inches" );
3618 return QObject::tr( "feet" );
3620 return QObject::tr( "points" );
3622 return QObject::tr( "picas" );
3623 }
3624 return QString(); // no warnings
3625}
DistanceUnitType
Types of distance units.
Definition qgis.h:5147
@ Geographic
Unit is a geographic (e.g., degree based) unit.
Definition qgis.h:5149
@ Unknown
Unknown unit type.
Definition qgis.h:5150
@ Standard
Unit is a standard measurement unit.
Definition qgis.h:5148
UnitType
Unit types.
Definition qgis.h:5068
@ Distance
Distance unit.
Definition qgis.h:5069
@ Temporal
Temporal unit.
Definition qgis.h:5073
@ Unknown
Unknown unit type.
Definition qgis.h:5072
@ Volume
Volume unit.
Definition qgis.h:5071
@ Area
Area unit.
Definition qgis.h:5070
LayoutUnit
Layout measurement units.
Definition qgis.h:5275
@ Feet
Feet.
Definition qgis.h:5280
@ Centimeters
Centimeters.
Definition qgis.h:5277
@ Millimeters
Millimeters.
Definition qgis.h:5276
@ Points
Typographic points.
Definition qgis.h:5281
@ Meters
Meters.
Definition qgis.h:5278
@ Picas
Typographic picas.
Definition qgis.h:5282
@ Pixels
Pixels.
Definition qgis.h:5283
@ Inches
Inches.
Definition qgis.h:5279
AngleUnit
Units of angles.
Definition qgis.h:5210
@ SecondsOfArc
Seconds of arc.
Definition qgis.h:5215
@ Radians
Square kilometers.
Definition qgis.h:5212
@ Turn
Turn/revolutions.
Definition qgis.h:5216
@ MinutesOfArc
Minutes of arc.
Definition qgis.h:5214
@ Unknown
Unknown angle unit.
Definition qgis.h:5219
@ MilliradiansSI
Angular milliradians (SI definition, 1/1000 of radian).
Definition qgis.h:5217
@ Degrees
Degrees.
Definition qgis.h:5211
@ Gon
Gon/gradian.
Definition qgis.h:5213
@ MilNATO
Angular mil (NATO definition, 6400 mil = 2PI radians).
Definition qgis.h:5218
DistanceUnit
Units of distance.
Definition qgis.h:5085
@ YardsBritishSears1922Truncated
British yards (Sears 1922 truncated).
Definition qgis.h:5125
@ Feet
Imperial feet.
Definition qgis.h:5088
@ MilesUSSurvey
US Survey miles.
Definition qgis.h:5132
@ LinksBritishSears1922
British links (Sears 1922).
Definition qgis.h:5120
@ YardsBritishBenoit1895A
British yards (Benoit 1895 A).
Definition qgis.h:5123
@ LinksBritishBenoit1895A
British links (Benoit 1895 A).
Definition qgis.h:5117
@ Centimeters
Centimeters.
Definition qgis.h:5093
@ YardsIndian1975
Indian yards (1975).
Definition qgis.h:5131
@ FeetUSSurvey
US Survey feet.
Definition qgis.h:5115
@ Millimeters
Millimeters.
Definition qgis.h:5094
@ FeetBritishSears1922
British feet (Sears 1922).
Definition qgis.h:5108
@ YardsClarkes
Clarke's yards.
Definition qgis.h:5127
@ YardsIndian
Indian yards.
Definition qgis.h:5128
@ FeetBritishBenoit1895B
British feet (Benoit 1895 B).
Definition qgis.h:5106
@ Miles
Terrestrial miles.
Definition qgis.h:5091
@ LinksUSSurvey
US Survey links.
Definition qgis.h:5122
@ Meters
Meters.
Definition qgis.h:5086
@ ChainsUSSurvey
US Survey chains.
Definition qgis.h:5102
@ FeetClarkes
Clarke's feet.
Definition qgis.h:5109
@ Unknown
Unknown distance unit.
Definition qgis.h:5135
@ Yards
Imperial yards.
Definition qgis.h:5090
@ FeetBritish1936
British feet (1936).
Definition qgis.h:5104
@ FeetIndian1962
Indian feet (1962).
Definition qgis.h:5113
@ YardsBritishSears1922
British yards (Sears 1922).
Definition qgis.h:5126
@ FeetIndian1937
Indian feet (1937).
Definition qgis.h:5112
@ YardsIndian1937
Indian yards (1937).
Definition qgis.h:5129
@ Degrees
Degrees, for planar geographic CRS distance measurements.
Definition qgis.h:5092
@ ChainsBritishBenoit1895B
British chains (Benoit 1895 B).
Definition qgis.h:5098
@ LinksBritishSears1922Truncated
British links (Sears 1922 truncated).
Definition qgis.h:5119
@ ChainsBritishBenoit1895A
British chains (Benoit 1895 A).
Definition qgis.h:5097
@ YardsBritishBenoit1895B
British yards (Benoit 1895 B).
Definition qgis.h:5124
@ FeetBritish1865
British feet (1865).
Definition qgis.h:5103
@ YardsIndian1962
Indian yards (1962).
Definition qgis.h:5130
@ FeetBritishSears1922Truncated
British feet (Sears 1922 truncated).
Definition qgis.h:5107
@ MetersGermanLegal
German legal meter.
Definition qgis.h:5134
@ LinksBritishBenoit1895B
British links (Benoit 1895 B).
Definition qgis.h:5118
@ ChainsInternational
International chains.
Definition qgis.h:5096
@ Inches
Inches.
Definition qgis.h:5095
@ Fathoms
Fathoms.
Definition qgis.h:5133
@ LinksInternational
International links.
Definition qgis.h:5116
@ ChainsBritishSears1922Truncated
British chains (Sears 1922 truncated).
Definition qgis.h:5099
@ FeetIndian
Indian (geodetic) feet.
Definition qgis.h:5111
@ NauticalMiles
Nautical miles.
Definition qgis.h:5089
@ ChainsClarkes
Clarke's chains.
Definition qgis.h:5101
@ LinksClarkes
Clarke's links.
Definition qgis.h:5121
@ ChainsBritishSears1922
British chains (Sears 1922).
Definition qgis.h:5100
@ Kilometers
Kilometers.
Definition qgis.h:5087
@ FeetIndian1975
Indian feet (1975).
Definition qgis.h:5114
@ FeetGoldCoast
Gold Coast feet.
Definition qgis.h:5110
@ FeetBritishBenoit1895A
British feet (Benoit 1895 A).
Definition qgis.h:5105
AreaUnit
Units of area.
Definition qgis.h:5162
@ Acres
Acres.
Definition qgis.h:5169
@ SquareFeet
Square feet.
Definition qgis.h:5165
@ SquareCentimeters
Square centimeters.
Definition qgis.h:5172
@ SquareInches
Square inches.
Definition qgis.h:5174
@ SquareNauticalMiles
Square nautical miles.
Definition qgis.h:5170
@ SquareMillimeters
Square millimeters.
Definition qgis.h:5173
@ SquareYards
Square yards.
Definition qgis.h:5166
@ Hectares
Hectares.
Definition qgis.h:5168
@ SquareKilometers
Square kilometers.
Definition qgis.h:5164
@ SquareMeters
Square meters.
Definition qgis.h:5163
@ Unknown
Unknown areal unit.
Definition qgis.h:5175
@ SquareDegrees
Square degrees, for planar geographic CRS area measurements.
Definition qgis.h:5171
@ SquareMiles
Square miles.
Definition qgis.h:5167
TemporalUnit
Temporal units.
Definition qgis.h:5231
@ IrregularStep
Special 'irregular step' time unit, used for temporal data which uses irregular, non-real-world unit ...
Definition qgis.h:5242
@ Milliseconds
Milliseconds.
Definition qgis.h:5232
@ Hours
Hours.
Definition qgis.h:5235
@ Unknown
Unknown time unit.
Definition qgis.h:5243
@ Centuries
Centuries.
Definition qgis.h:5241
@ Seconds
Seconds.
Definition qgis.h:5233
@ Weeks
Weeks.
Definition qgis.h:5237
@ Years
Years.
Definition qgis.h:5239
@ Decades
Decades.
Definition qgis.h:5240
@ Months
Months.
Definition qgis.h:5238
@ Minutes
Minutes.
Definition qgis.h:5234
RenderUnit
Rendering size units.
Definition qgis.h:5255
@ Percentage
Percentage of another measurement (e.g., canvas size, feature size).
Definition qgis.h:5259
@ Millimeters
Millimeters.
Definition qgis.h:5256
@ Points
Points (e.g., for font sizes).
Definition qgis.h:5260
@ Unknown
Mixed or unknown units.
Definition qgis.h:5262
@ MapUnits
Map units.
Definition qgis.h:5257
@ Pixels
Pixels.
Definition qgis.h:5258
@ Inches
Inches.
Definition qgis.h:5261
@ MetersInMapUnits
Meters value as Map units.
Definition qgis.h:5263
LayoutUnitType
Types of layout units.
Definition qgis.h:5295
@ PaperUnits
Unit is a paper based measurement unit.
Definition qgis.h:5296
@ ScreenUnits
Unit is a screen based measurement unit.
Definition qgis.h:5297
VolumeUnit
Units of volume.
Definition qgis.h:5187
@ CubicMeters
Cubic meters.
Definition qgis.h:5188
@ Barrel
Barrels.
Definition qgis.h:5191
@ CubicYards
Cubic yards.
Definition qgis.h:5190
@ CubicFeet
Cubic feet.
Definition qgis.h:5189
@ CubicDegrees
Cubic degrees, for planar geographic CRS volume measurements.
Definition qgis.h:5197
@ CubicDecimeter
Cubic decimeters.
Definition qgis.h:5192
@ Unknown
Unknown volume unit.
Definition qgis.h:5198
@ CubicInch
Cubic inches.
Definition qgis.h:5195
@ GallonUS
US Gallons.
Definition qgis.h:5194
@ Liters
Litres.
Definition qgis.h:5193
@ CubicCentimeter
Cubic Centimeters.
Definition qgis.h:5196
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:6941
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference).
Definition qgis.h:6900
#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.