mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-11-28 12:12:00 +03:00
lifted unshifted pts to road
This commit is contained in:
parent
4bf72b36c8
commit
549aa75d9c
@ -5,8 +5,10 @@
|
|||||||
- trim buidings and parcels that're nowhere near roads (aka, the bbox is kinda wrong)
|
- trim buidings and parcels that're nowhere near roads (aka, the bbox is kinda wrong)
|
||||||
|
|
||||||
- road with many lanes
|
- road with many lanes
|
||||||
- make/turns can use this especially. intersections should refer to different things.
|
- make road know about children in each direction
|
||||||
- this will clean up other_side and siblings
|
- make intersection know about roads, not lanes
|
||||||
|
- make/turns can use this especially. intersections should refer to different things.
|
||||||
|
- clean up all state in lane
|
||||||
|
|
||||||
|
|
||||||
- maybe also the time to split into different lane types? what's similar/not between them?
|
- maybe also the time to split into different lane types? what's similar/not between them?
|
||||||
|
@ -40,7 +40,8 @@ impl DrawLane {
|
|||||||
let mut markings: Vec<Marking> = Vec::new();
|
let mut markings: Vec<Marking> = Vec::new();
|
||||||
if lane.use_yellow_center_lines {
|
if lane.use_yellow_center_lines {
|
||||||
markings.push(Marking {
|
markings.push(Marking {
|
||||||
lines: lane.unshifted_pts
|
lines: map.get_r(lane.parent)
|
||||||
|
.center_pts
|
||||||
.points()
|
.points()
|
||||||
.windows(2)
|
.windows(2)
|
||||||
.map(|pair| [pair[0].x(), pair[0].y(), pair[1].x(), pair[1].y()])
|
.map(|pair| [pair[0].x(), pair[0].y(), pair[1].x(), pair[1].y()])
|
||||||
|
@ -43,7 +43,6 @@ pub struct Lane {
|
|||||||
pub probably_broken: bool,
|
pub probably_broken: bool,
|
||||||
|
|
||||||
// TODO i think everything else should be moved to road, honestly.
|
// TODO i think everything else should be moved to road, honestly.
|
||||||
|
|
||||||
pub src_i: IntersectionID,
|
pub src_i: IntersectionID,
|
||||||
pub dst_i: IntersectionID,
|
pub dst_i: IntersectionID,
|
||||||
|
|
||||||
@ -59,10 +58,6 @@ pub struct Lane {
|
|||||||
pub other_side: Option<LaneID>,
|
pub other_side: Option<LaneID>,
|
||||||
// TODO alright, we might need a Road-vs-Lanes distinction
|
// TODO alright, we might need a Road-vs-Lanes distinction
|
||||||
pub siblings: Vec<LaneID>,
|
pub siblings: Vec<LaneID>,
|
||||||
|
|
||||||
// Unshifted center points. consider computing these twice or otherwise not storing them
|
|
||||||
// Order implies road orientation.
|
|
||||||
pub unshifted_pts: PolyLine,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PartialEq for Lane {
|
impl PartialEq for Lane {
|
||||||
@ -120,10 +115,6 @@ impl Lane {
|
|||||||
"\nlet lane_center_r{}_pts = {}",
|
"\nlet lane_center_r{}_pts = {}",
|
||||||
self.id.0, self.lane_center_pts
|
self.id.0, self.lane_center_pts
|
||||||
);
|
);
|
||||||
println!(
|
|
||||||
"\nlet unshifted_r{}_pts = {}",
|
|
||||||
self.id.0, self.unshifted_pts
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO different types for each lane type might be reasonable
|
// TODO different types for each lane type might be reasonable
|
||||||
|
@ -62,10 +62,18 @@ impl Map {
|
|||||||
let mut counter = 0;
|
let mut counter = 0;
|
||||||
for (idx, r) in data.roads.iter().enumerate() {
|
for (idx, r) in data.roads.iter().enumerate() {
|
||||||
let road_id = RoadID(idx);
|
let road_id = RoadID(idx);
|
||||||
|
let road_center_pts = PolyLine::new(
|
||||||
|
r.points
|
||||||
|
.iter()
|
||||||
|
.map(|coord| Pt2D::from_gps(coord, &bounds))
|
||||||
|
.collect(),
|
||||||
|
);
|
||||||
|
|
||||||
m.roads.push(Road {
|
m.roads.push(Road {
|
||||||
id: road_id,
|
id: road_id,
|
||||||
osm_tags: r.osm_tags.clone(),
|
osm_tags: r.osm_tags.clone(),
|
||||||
osm_way_id: r.osm_way_id,
|
osm_way_id: r.osm_way_id,
|
||||||
|
center_pts: road_center_pts.clone(),
|
||||||
});
|
});
|
||||||
|
|
||||||
// TODO move this to make/lanes.rs too
|
// TODO move this to make/lanes.rs too
|
||||||
@ -79,12 +87,7 @@ impl Map {
|
|||||||
.map(|offset| LaneID(((id.0 as isize) + offset) as usize))
|
.map(|offset| LaneID(((id.0 as isize) + offset) as usize))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let mut unshifted_pts = PolyLine::new(
|
let mut unshifted_pts = road_center_pts.clone();
|
||||||
r.points
|
|
||||||
.iter()
|
|
||||||
.map(|coord| Pt2D::from_gps(coord, &bounds))
|
|
||||||
.collect(),
|
|
||||||
);
|
|
||||||
if lane.reverse_pts {
|
if lane.reverse_pts {
|
||||||
unshifted_pts = unshifted_pts.reversed();
|
unshifted_pts = unshifted_pts.reversed();
|
||||||
}
|
}
|
||||||
@ -118,7 +121,6 @@ impl Map {
|
|||||||
use_yellow_center_lines,
|
use_yellow_center_lines,
|
||||||
lane_center_pts,
|
lane_center_pts,
|
||||||
probably_broken,
|
probably_broken,
|
||||||
unshifted_pts,
|
|
||||||
offset: lane.offset,
|
offset: lane.offset,
|
||||||
src_i: i1,
|
src_i: i1,
|
||||||
dst_i: i2,
|
dst_i: i2,
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
use geom::PolyLine;
|
||||||
use std::collections::BTreeMap;
|
use std::collections::BTreeMap;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
@ -17,4 +18,7 @@ pub struct Road {
|
|||||||
pub id: RoadID,
|
pub id: RoadID,
|
||||||
pub osm_tags: BTreeMap<String, String>,
|
pub osm_tags: BTreeMap<String, String>,
|
||||||
pub osm_way_id: i64,
|
pub osm_way_id: i64,
|
||||||
|
|
||||||
|
// Unshifted center points. Order implies road orientation.
|
||||||
|
pub center_pts: PolyLine,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user