@@ -60,23 +60,38 @@ bool is_number(std::string_view s) {
60
60
utl::all_of (s, [](char const c) { return std::isdigit (c); });
61
61
}
62
62
63
- bool is_big_street (tags const & t) {
63
+ std:: uint8_t get_importance (tags const & t) {
64
64
switch (cista::hash (t.highway_ )) {
65
- case cista::hash (" motorway" ):
66
- case cista::hash (" motorway_link" ):
67
- case cista::hash (" trunk" ):
68
- case cista::hash (" trunk_link" ):
69
- case cista::hash (" primary" ):
70
- case cista::hash (" primary_link" ):
65
+ case cista::hash (" pedestrian" ):
66
+ case cista::hash (" busway" ):
67
+ case cista::hash (" footway" ):
68
+ case cista::hash (" cycleway" ):
69
+ case cista::hash (" bridleway" ):
70
+ case cista::hash (" steps" ):
71
+ case cista::hash (" corridor" ):
72
+ case cista::hash (" path" ): return 0 ;
73
+ case cista::hash (" track" ): return 1 ;
74
+ case cista::hash (" living_street" ):
75
+ case cista::hash (" service" ): return 2 ;
76
+ case cista::hash (" residential" ): return 3 ;
77
+ case cista::hash (" road" ): return 4 ;
78
+ case cista::hash (" unclassified" ):
79
+ case cista::hash (" tertiary" ):
80
+ case cista::hash (" tertiary_link" ): return 5 ;
71
81
case cista::hash (" secondary" ):
72
82
case cista::hash (" secondary_link" ):
73
- case cista::hash (" tertiary" ):
74
- case cista::hash (" tertiary_link" ):
75
- case cista::hash (" unclassified" ): return true ;
76
- default : return false ;
83
+ case cista::hash (" primary" ):
84
+ case cista::hash (" primary_link" ): return 6 ;
85
+ case cista::hash (" trunk" ):
86
+ case cista::hash (" trunk_link" ):
87
+ case cista::hash (" motorway" ):
88
+ case cista::hash (" motorway_link" ): return 7 ;
89
+ default : return 4 ;
77
90
}
78
91
}
79
92
93
+ bool is_big_street (std::uint8_t const importance) { return importance > 4 ; }
94
+
80
95
speed_limit get_speed_limit (tags const & t) {
81
96
if (is_number (t.max_speed_ ) /* TODO: support units (kmh/mph) */ ) {
82
97
return get_speed_limit (
@@ -140,7 +155,8 @@ way_properties get_way_properties(tags const& t) {
140
155
p.motor_vehicle_no_ =
141
156
(t.motor_vehicle_ == " no" sv) || (t.vehicle_ == override ::kBlacklist );
142
157
p.has_toll_ = t.toll_ ;
143
- p.is_big_street_ = is_big_street (t);
158
+ p.importance_ = get_importance (t);
159
+ p.is_big_street_ = is_big_street (p.importance_ );
144
160
return p;
145
161
}
146
162
@@ -157,6 +173,7 @@ std::pair<node_properties, level_bits_t> get_node_properties(tags const& t) {
157
173
p.is_multi_level_ = is_multi;
158
174
p.is_parking_ = t.is_parking_ ;
159
175
p.to_level_ = to_idx (to);
176
+ p.importance_ = 0 ;
160
177
return {p, t.level_bits_ };
161
178
}
162
179
@@ -581,7 +598,6 @@ void extract(bool const with_platforms,
581
598
w.sync ();
582
599
583
600
w.connect_ways ();
584
- w.build_components ();
585
601
586
602
auto r = std::vector<resolved_restriction>{};
587
603
{
@@ -600,6 +616,7 @@ void extract(bool const with_platforms,
600
616
pt->update (pt->in_high_ );
601
617
}
602
618
619
+ w.build_components_and_importance ();
603
620
w.add_restriction (r);
604
621
605
622
utl::sort (w.r_ ->multi_level_elevators_ );
0 commit comments