1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
use point::Error;
use Result;
#[derive(Clone, Copy, Debug, PartialEq)]
#[allow(missing_docs)]
pub enum Classification {
CreatedNeverClassified,
Unclassified,
Ground,
LowVegetation,
MediumVegetation,
HighVegetation,
Building,
LowPoint,
ModelKeyPoint,
Water,
Rail,
RoadSurface,
WireGuard,
WireConductor,
TransmissionTower,
WireStructureConnector,
BridgeDeck,
HighNoise,
Reserved(u8),
UserDefinable(u8),
}
impl Classification {
pub fn new(n: u8) -> Result<Classification> {
Ok(match n {
0 => Classification::CreatedNeverClassified,
1 => Classification::Unclassified,
2 => Classification::Ground,
3 => Classification::LowVegetation,
4 => Classification::MediumVegetation,
5 => Classification::HighVegetation,
6 => Classification::Building,
7 => Classification::LowPoint,
8 => Classification::ModelKeyPoint,
9 => Classification::Water,
10 => Classification::Rail,
11 => Classification::RoadSurface,
12 => return Err(Error::OverlapClassification.into()),
13 => Classification::WireGuard,
14 => Classification::WireConductor,
15 => Classification::TransmissionTower,
16 => Classification::WireStructureConnector,
17 => Classification::BridgeDeck,
18 => Classification::HighNoise,
19..=63 => Classification::Reserved(n),
64..=255 => Classification::UserDefinable(n),
})
}
}
impl From<Classification> for u8 {
fn from(classification: Classification) -> u8 {
match classification {
Classification::CreatedNeverClassified => 0,
Classification::Unclassified => 1,
Classification::Ground => 2,
Classification::LowVegetation => 3,
Classification::MediumVegetation => 4,
Classification::HighVegetation => 5,
Classification::Building => 6,
Classification::LowPoint => 7,
Classification::ModelKeyPoint => 8,
Classification::Water => 9,
Classification::Rail => 10,
Classification::RoadSurface => 11,
Classification::WireGuard => 13,
Classification::WireConductor => 14,
Classification::TransmissionTower => 15,
Classification::WireStructureConnector => 16,
Classification::BridgeDeck => 17,
Classification::HighNoise => 18,
Classification::Reserved(n) | Classification::UserDefinable(n) => n,
}
}
}
impl Default for Classification {
fn default() -> Classification {
Classification::CreatedNeverClassified
}
}