mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-12-25 23:43:25 +03:00
dont conflict between synthetic OSM IDs created by map_editor and by map clipping
This commit is contained in:
parent
1edb3cf81b
commit
9d237f314b
@ -50,7 +50,8 @@ pub fn clip_map(map: &mut RawMap, timer: &mut Timer) {
|
||||
> 1
|
||||
{
|
||||
let mut copy = map.intersections[&move_i].clone();
|
||||
copy.orig_id.osm_node_id = map.new_osm_node_id();
|
||||
// Start low, so we don't conflict with IDs generated by map_editor.
|
||||
copy.orig_id.osm_node_id = map.new_osm_node_id(-1);
|
||||
|
||||
// Nothing deletes intersections yet, so this is safe.
|
||||
move_i = StableIntersectionID(map.intersections.len());
|
||||
|
@ -235,7 +235,7 @@ impl Model {
|
||||
intersection_type: IntersectionType::StopSign,
|
||||
label: None,
|
||||
orig_id: OriginalIntersection {
|
||||
osm_node_id: self.map.new_osm_node_id(),
|
||||
osm_node_id: self.map.new_osm_node_id(time_to_id()),
|
||||
},
|
||||
synthetic: true,
|
||||
})
|
||||
@ -350,7 +350,7 @@ impl Model {
|
||||
return;
|
||||
}
|
||||
|
||||
let osm_way_id = self.map.new_osm_way_id();
|
||||
let osm_way_id = self.map.new_osm_way_id(time_to_id());
|
||||
let mut osm_tags = BTreeMap::new();
|
||||
osm_tags.insert(osm::SYNTHETIC.to_string(), "true".to_string());
|
||||
osm_tags.insert(
|
||||
@ -762,7 +762,7 @@ impl Model {
|
||||
.create_building(RawBuilding {
|
||||
polygon: Polygon::rectangle(center, BUILDING_LENGTH, BUILDING_LENGTH),
|
||||
osm_tags: BTreeMap::new(),
|
||||
osm_way_id: self.map.new_osm_way_id(),
|
||||
osm_way_id: self.map.new_osm_way_id(time_to_id()),
|
||||
parking: None,
|
||||
})
|
||||
.unwrap();
|
||||
@ -831,3 +831,11 @@ impl ObjectID for ID {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Don't conflict with the synthetic IDs generated by map clipping.
|
||||
fn time_to_id() -> i64 {
|
||||
-1 * (std::time::SystemTime::now()
|
||||
.duration_since(std::time::UNIX_EPOCH)
|
||||
.unwrap()
|
||||
.as_secs() as i64)
|
||||
}
|
||||
|
@ -186,10 +186,9 @@ impl RawMap {
|
||||
results
|
||||
}
|
||||
|
||||
pub fn new_osm_node_id(&self) -> i64 {
|
||||
pub fn new_osm_node_id(&self, start: i64) -> i64 {
|
||||
// Slow, but deterministic.
|
||||
// TODO Argh, these will conflict between different maps! Is that a problem?
|
||||
let mut osm_node_id = -1;
|
||||
let mut osm_node_id = start;
|
||||
loop {
|
||||
if self
|
||||
.intersections
|
||||
@ -203,10 +202,9 @@ impl RawMap {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn new_osm_way_id(&self) -> i64 {
|
||||
pub fn new_osm_way_id(&self, start: i64) -> i64 {
|
||||
// Slow, but deterministic.
|
||||
// TODO Argh, these will conflict between different maps! Is that a problem?
|
||||
let mut osm_way_id = -1;
|
||||
let mut osm_way_id = start;
|
||||
loop {
|
||||
if self
|
||||
.roads
|
||||
|
Loading…
Reference in New Issue
Block a user