mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-12-25 07:25:47 +03:00
organizing data/input by city. (I tried organizing everything in data/,
but it's too big a change. small steps.)
This commit is contained in:
parent
bba8ac9941
commit
18779c10ad
25
.gitignore
vendored
25
.gitignore
vendored
@ -1,20 +1,23 @@
|
|||||||
/target/
|
/target/
|
||||||
*.swp
|
*.swp
|
||||||
|
|
||||||
data/input/blockface.bin
|
data/input/seattle/blockface.bin
|
||||||
data/input/google_transit
|
data/input/seattle/google_transit
|
||||||
data/input/neighborhoods
|
data/input/seattle/neighborhoods
|
||||||
data/input/neighborhoods.geojson
|
data/input/seattle/neighborhoods.geojson
|
||||||
data/input/N47W122.hgt
|
data/input/seattle/N47W122.hgt
|
||||||
data/input/offstreet_parking.bin
|
data/input/seattle/offstreet_parking.bin
|
||||||
data/input/osm
|
data/input/seattle/osm
|
||||||
data/input/parcels_urbansim.txt
|
data/input/seattle/parcels_urbansim.txt
|
||||||
data/input/popdat.bin
|
data/input/seattle/popdat.bin
|
||||||
|
data/input/seattle/sidewalks.bin
|
||||||
|
data/input/seattle/trips_2014.csv
|
||||||
|
|
||||||
|
data/input/austin/osm
|
||||||
|
|
||||||
data/input/raw_maps
|
data/input/raw_maps
|
||||||
data/input/screenshots/*/*.png
|
data/input/screenshots/*/*.png
|
||||||
data/input/screenshots/*/combine.sh
|
data/input/screenshots/*/combine.sh
|
||||||
data/input/sidewalks.bin
|
|
||||||
data/input/trips_2014.csv
|
|
||||||
|
|
||||||
data/player
|
data/player
|
||||||
|
|
||||||
|
@ -145,30 +145,31 @@ pub fn path_all_shortcuts() -> String {
|
|||||||
|
|
||||||
// Input data (For developers to build maps, not needed at runtime)
|
// Input data (For developers to build maps, not needed at runtime)
|
||||||
|
|
||||||
pub fn path_fixes(name: &str) -> String {
|
pub fn path_fixes(city: &str, map: &str) -> String {
|
||||||
format!("../data/input/fixes/{}.json", name)
|
format!("../data/input/{}/fixes/{}.json", city, map)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn path_neighborhood(map_name: &str, neighborhood: &str) -> String {
|
pub fn path_neighborhood(city_name: &str, map_name: &str, neighborhood: &str) -> String {
|
||||||
format!(
|
format!(
|
||||||
"../data/input/neighborhoods/{}/{}.json",
|
"../data/input/{}/neighborhoods/{}/{}.json",
|
||||||
map_name, neighborhood
|
city_name, map_name, neighborhood
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
pub fn path_all_neighborhoods(map_name: &str) -> String {
|
pub fn path_all_neighborhoods(city_name: &str, map_name: &str) -> String {
|
||||||
format!("../data/input/neighborhoods/{}", map_name)
|
format!("../data/input/{}/neighborhoods/{}", city_name, map_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn path_pending_screenshots(map_name: &str) -> String {
|
pub fn path_pending_screenshots(map_name: &str) -> String {
|
||||||
format!("../data/input/screenshots/pending_{}", map_name)
|
format!("../data/input/screenshots/pending_{}", map_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn path_polygon(polygon_name: &str) -> String {
|
// TODO Few callers, and importer just manually builds this path anyway
|
||||||
format!("../data/input/polygons/{}.poly", polygon_name)
|
pub fn path_polygon(city: &str, polygon_name: &str) -> String {
|
||||||
|
format!("../data/input/{}/polygons/{}.poly", city, polygon_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn path_popdat() -> String {
|
pub fn path_popdat() -> String {
|
||||||
format!("../data/input/popdat.bin")
|
format!("../data/input/seattle/popdat.bin")
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn path_raw_map(map_name: &str) -> String {
|
pub fn path_raw_map(map_name: &str) -> String {
|
||||||
|
@ -14,7 +14,11 @@ use map_model::raw::{DrivingSide, OriginalBuilding, OriginalRoad, RawMap};
|
|||||||
const DIRECTED_ROAD_THICKNESS: Distance = Distance::const_meters(2.5);
|
const DIRECTED_ROAD_THICKNESS: Distance = Distance::const_meters(2.5);
|
||||||
|
|
||||||
pub struct Options {
|
pub struct Options {
|
||||||
pub osm: String,
|
pub osm_input: String,
|
||||||
|
pub output: String,
|
||||||
|
pub city_name: String,
|
||||||
|
pub name: String,
|
||||||
|
|
||||||
pub parking_shapes: Option<String>,
|
pub parking_shapes: Option<String>,
|
||||||
pub public_offstreet_parking: Option<String>,
|
pub public_offstreet_parking: Option<String>,
|
||||||
pub private_offstreet_parking: PrivateOffstreetParking,
|
pub private_offstreet_parking: PrivateOffstreetParking,
|
||||||
@ -24,7 +28,6 @@ pub struct Options {
|
|||||||
pub elevation: Option<String>,
|
pub elevation: Option<String>,
|
||||||
pub clip: Option<String>,
|
pub clip: Option<String>,
|
||||||
pub drive_on_right: bool,
|
pub drive_on_right: bool,
|
||||||
pub output: String,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If a building doesn't have anything from public_offstreet_parking, how many private spots should
|
// If a building doesn't have anything from public_offstreet_parking, how many private spots should
|
||||||
@ -36,8 +39,16 @@ pub enum PrivateOffstreetParking {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn convert(opts: Options, timer: &mut abstutil::Timer) -> RawMap {
|
pub fn convert(opts: Options, timer: &mut abstutil::Timer) -> RawMap {
|
||||||
let (mut map, amenities) =
|
let (mut map, amenities) = split_ways::split_up_roads(
|
||||||
split_ways::split_up_roads(osm_reader::extract_osm(&opts.osm, &opts.clip, timer), timer);
|
osm_reader::extract_osm(
|
||||||
|
&opts.osm_input,
|
||||||
|
&opts.clip,
|
||||||
|
&opts.city_name,
|
||||||
|
&opts.name,
|
||||||
|
timer,
|
||||||
|
),
|
||||||
|
timer,
|
||||||
|
);
|
||||||
clip::clip_map(&mut map, timer);
|
clip::clip_map(&mut map, timer);
|
||||||
map.driving_side = if opts.drive_on_right {
|
map.driving_side = if opts.drive_on_right {
|
||||||
DrivingSide::Right
|
DrivingSide::Right
|
||||||
@ -72,7 +83,12 @@ pub fn convert(opts: Options, timer: &mut abstutil::Timer) -> RawMap {
|
|||||||
|
|
||||||
if let Some(ref path) = opts.neighborhoods {
|
if let Some(ref path) = opts.neighborhoods {
|
||||||
timer.start("convert neighborhood polygons");
|
timer.start("convert neighborhood polygons");
|
||||||
neighborhoods::convert(path.clone(), map.name.clone(), &map.gps_bounds);
|
neighborhoods::convert(
|
||||||
|
path.clone(),
|
||||||
|
map.city_name.clone(),
|
||||||
|
map.name.clone(),
|
||||||
|
&map.gps_bounds,
|
||||||
|
);
|
||||||
timer.stop("convert neighborhood polygons");
|
timer.stop("convert neighborhood polygons");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ use geojson::{GeoJson, PolygonType, Value};
|
|||||||
use geom::{GPSBounds, LonLat};
|
use geom::{GPSBounds, LonLat};
|
||||||
use map_model::NeighborhoodBuilder;
|
use map_model::NeighborhoodBuilder;
|
||||||
|
|
||||||
pub fn convert(geojson_path: String, map_name: String, gps_bounds: &GPSBounds) {
|
pub fn convert(geojson_path: String, city_name: String, map_name: String, gps_bounds: &GPSBounds) {
|
||||||
println!("Extracting neighborhoods from {}...", geojson_path);
|
println!("Extracting neighborhoods from {}...", geojson_path);
|
||||||
let document: GeoJson = abstutil::read_json(geojson_path, &mut Timer::throwaway());
|
let document: GeoJson = abstutil::read_json(geojson_path, &mut Timer::throwaway());
|
||||||
match document {
|
match document {
|
||||||
@ -12,13 +12,14 @@ pub fn convert(geojson_path: String, map_name: String, gps_bounds: &GPSBounds) {
|
|||||||
let name = f.properties.unwrap()["name"].as_str().unwrap().to_string();
|
let name = f.properties.unwrap()["name"].as_str().unwrap().to_string();
|
||||||
match f.geometry.unwrap().value {
|
match f.geometry.unwrap().value {
|
||||||
Value::Polygon(p) => {
|
Value::Polygon(p) => {
|
||||||
convert_polygon(p, name, map_name.clone(), gps_bounds);
|
convert_polygon(p, name, city_name.clone(), map_name.clone(), gps_bounds);
|
||||||
}
|
}
|
||||||
Value::MultiPolygon(polygons) => {
|
Value::MultiPolygon(polygons) => {
|
||||||
for (idx, p) in polygons.into_iter().enumerate() {
|
for (idx, p) in polygons.into_iter().enumerate() {
|
||||||
convert_polygon(
|
convert_polygon(
|
||||||
p,
|
p,
|
||||||
format!("{} portion #{}", name, idx + 1),
|
format!("{} portion #{}", name, idx + 1),
|
||||||
|
city_name.clone(),
|
||||||
map_name.clone(),
|
map_name.clone(),
|
||||||
gps_bounds,
|
gps_bounds,
|
||||||
);
|
);
|
||||||
@ -32,7 +33,13 @@ pub fn convert(geojson_path: String, map_name: String, gps_bounds: &GPSBounds) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn convert_polygon(input: PolygonType, name: String, map_name: String, gps_bounds: &GPSBounds) {
|
fn convert_polygon(
|
||||||
|
input: PolygonType,
|
||||||
|
name: String,
|
||||||
|
city_name: String,
|
||||||
|
map_name: String,
|
||||||
|
gps_bounds: &GPSBounds,
|
||||||
|
) {
|
||||||
if input.len() > 1 {
|
if input.len() > 1 {
|
||||||
println!("{} has a polygon with an inner ring, skipping", name);
|
println!("{} has a polygon with an inner ring, skipping", name);
|
||||||
return;
|
return;
|
||||||
@ -53,6 +60,7 @@ fn convert_polygon(input: PolygonType, name: String, map_name: String, gps_bound
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
NeighborhoodBuilder {
|
NeighborhoodBuilder {
|
||||||
|
city_name,
|
||||||
map_name,
|
map_name,
|
||||||
name,
|
name,
|
||||||
points,
|
points,
|
||||||
|
@ -10,6 +10,8 @@ use std::io::{BufRead, BufReader};
|
|||||||
pub fn extract_osm(
|
pub fn extract_osm(
|
||||||
osm_path: &str,
|
osm_path: &str,
|
||||||
maybe_clip_path: &Option<String>,
|
maybe_clip_path: &Option<String>,
|
||||||
|
city_name: &str,
|
||||||
|
map_name: &str,
|
||||||
timer: &mut Timer,
|
timer: &mut Timer,
|
||||||
) -> (
|
) -> (
|
||||||
RawMap,
|
RawMap,
|
||||||
@ -35,9 +37,9 @@ pub fn extract_osm(
|
|||||||
done(timer);
|
done(timer);
|
||||||
|
|
||||||
let mut map = if let Some(ref path) = maybe_clip_path {
|
let mut map = if let Some(ref path) = maybe_clip_path {
|
||||||
read_osmosis_polygon(path)
|
read_osmosis_polygon(path, city_name, map_name)
|
||||||
} else {
|
} else {
|
||||||
let mut m = RawMap::blank(abstutil::basename(osm_path));
|
let mut m = RawMap::blank(city_name, map_name);
|
||||||
for node in doc.nodes.values() {
|
for node in doc.nodes.values() {
|
||||||
m.gps_bounds.update(LonLat::new(node.lon, node.lat));
|
m.gps_bounds.update(LonLat::new(node.lon, node.lat));
|
||||||
}
|
}
|
||||||
@ -456,7 +458,7 @@ fn glue_to_boundary(result_pl: PolyLine, boundary: &Ring) -> Option<Polygon> {
|
|||||||
Some(Polygon::new(&trimmed_pts))
|
Some(Polygon::new(&trimmed_pts))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_osmosis_polygon(path: &str) -> RawMap {
|
fn read_osmosis_polygon(path: &str, city_name: &str, map_name: &str) -> RawMap {
|
||||||
let mut pts: Vec<LonLat> = Vec::new();
|
let mut pts: Vec<LonLat> = Vec::new();
|
||||||
let mut gps_bounds = GPSBounds::new();
|
let mut gps_bounds = GPSBounds::new();
|
||||||
for (idx, maybe_line) in BufReader::new(File::open(path).unwrap())
|
for (idx, maybe_line) in BufReader::new(File::open(path).unwrap())
|
||||||
@ -480,7 +482,7 @@ fn read_osmosis_polygon(path: &str) -> RawMap {
|
|||||||
gps_bounds.update(pt);
|
gps_bounds.update(pt);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut map = RawMap::blank(abstutil::basename(path));
|
let mut map = RawMap::blank(city_name, map_name);
|
||||||
map.boundary_polygon = Polygon::new(&gps_bounds.must_convert(&pts));
|
map.boundary_polygon = Polygon::new(&gps_bounds.must_convert(&pts));
|
||||||
map.gps_bounds = gps_bounds;
|
map.gps_bounds = gps_bounds;
|
||||||
map
|
map
|
||||||
|
@ -1,122 +1,136 @@
|
|||||||
68c20b1b71afbd5531aeb6c080cdd69d data/input/fixes/huge_seattle.json
|
68c20b1b71afbd5531aeb6c080cdd69d data/input/seattle/fixes/huge_seattle.json
|
||||||
88d1fd31af1c59ba4ebb2272504b321c data/input/fixes/23rd.json
|
88d1fd31af1c59ba4ebb2272504b321c data/input/seattle/fixes/23rd.json
|
||||||
4cda6f154fc64920765bebf4b72f1c8d data/input/fixes/montlake.json
|
4cda6f154fc64920765bebf4b72f1c8d data/input/seattle/fixes/montlake.json
|
||||||
d4a8e733045b28c0385fb81359d6df03 data/input/trips_2014.csv
|
d4a8e733045b28c0385fb81359d6df03 data/input/seattle/trips_2014.csv
|
||||||
e4546fa3a8778d73d4dbae5bf5e6072d data/input/osm/montlake.osm
|
e4546fa3a8778d73d4dbae5bf5e6072d data/input/seattle/osm/montlake.osm
|
||||||
b5f64e800ea1e70b2326792aee494e9a data/input/osm/huge_seattle.osm
|
b5f64e800ea1e70b2326792aee494e9a data/input/seattle/osm/huge_seattle.osm
|
||||||
a30b0f460a481598e494f16a9d07a822 data/input/osm/downtown_atx.osm
|
c2f29dfce01a727671b9c67772ee3ed5 data/input/seattle/osm/ballard.osm
|
||||||
c2f29dfce01a727671b9c67772ee3ed5 data/input/osm/ballard.osm
|
f36e72469646c1cf25ceb42ae82b2a6f data/input/seattle/osm/23rd.osm
|
||||||
7c8d72cf97072af34cee665006b1e9e6 data/input/osm/Austin.osm
|
79f7686dcb469a6262e13d5e61571303 data/input/seattle/osm/downtown.osm
|
||||||
f36e72469646c1cf25ceb42ae82b2a6f data/input/osm/23rd.osm
|
9315a7df9e878865ff361ea89129970b data/input/seattle/osm/intl_district.osm
|
||||||
fb166029fc8006bd20dc959fbbbde3b6 data/input/osm/huge_austin.osm
|
791b47c83ef94d65c709be027061d13c data/input/seattle/osm/caphill.osm
|
||||||
79f7686dcb469a6262e13d5e61571303 data/input/osm/downtown.osm
|
a04a70a76161c802c6488d5a843ea244 data/input/seattle/osm/lakeslice.osm
|
||||||
9315a7df9e878865ff361ea89129970b data/input/osm/intl_district.osm
|
e2a3187ab5be2bf76369823853d86c14 data/input/seattle/osm/Seattle.osm
|
||||||
791b47c83ef94d65c709be027061d13c data/input/osm/caphill.osm
|
46d8ebc909717b5ddfe921cf487f975d data/input/seattle/neighborhoods/ballard/West Woodland.json
|
||||||
a04a70a76161c802c6488d5a843ea244 data/input/osm/lakeslice.osm
|
ba915a6237156522eac2f380e978bb25 data/input/seattle/neighborhoods/ballard/Adams.json
|
||||||
e2a3187ab5be2bf76369823853d86c14 data/input/osm/Seattle.osm
|
ae6e3c5801460075cebe736e56d98b01 data/input/seattle/neighborhoods/ballard/Phinney Ridge.json
|
||||||
b0294210de30fee57a204f4c7852df9d data/input/neighborhoods/ballard/West Woodland.json
|
886cff1b9508af1917d76d746336c961 data/input/seattle/neighborhoods/ballard/Fremont.json
|
||||||
134c34c99e93e3fdef736e7b9a1a6d90 data/input/neighborhoods/ballard/Adams.json
|
ae8a868fe3eac6c67340f174dc24866a data/input/seattle/neighborhoods/ballard/Lawton Park.json
|
||||||
0273adb18ead495ff542fb7c90b779cc data/input/neighborhoods/ballard/Phinney Ridge.json
|
1e2ff5d0083b0e5aab885d38be992ad7 data/input/seattle/neighborhoods/intl_district/International District.json
|
||||||
13a49dbacf1e40c2a68e756632128b7f data/input/neighborhoods/ballard/Fremont.json
|
721155dd7662b9aaaf68b222aa731560 data/input/seattle/neighborhoods/x1/Harrison - Denny-Blaine.json
|
||||||
af08ef81c9ba3d693854f65180d6c42c data/input/neighborhoods/ballard/Lawton Park.json
|
2e9dbd878640b904307dcadc1fd7334f data/input/seattle/neighborhoods/x1/Madison Park.json
|
||||||
07d2b3da4fe8e71328762bb3a4a26ba0 data/input/neighborhoods/intl_district/International District.json
|
f2b26082d44df01339f30d1cc2eb4178 data/input/seattle/neighborhoods/x1/Portage Bay.json
|
||||||
721155dd7662b9aaaf68b222aa731560 data/input/neighborhoods/x1/Harrison - Denny-Blaine.json
|
197ecdfed33e300e6f64275a896b2905 data/input/seattle/neighborhoods/x1/Eastlake.json
|
||||||
2e9dbd878640b904307dcadc1fd7334f data/input/neighborhoods/x1/Madison Park.json
|
33128005e7f6caaab5d321558965f125 data/input/seattle/neighborhoods/x1/Broadway.json
|
||||||
f2b26082d44df01339f30d1cc2eb4178 data/input/neighborhoods/x1/Portage Bay.json
|
a5dca5dd4a4b78efb17e69c2d557ab1b data/input/seattle/neighborhoods/x1/Stevens.json
|
||||||
197ecdfed33e300e6f64275a896b2905 data/input/neighborhoods/x1/Eastlake.json
|
519cbc4a6c2038fab9df172f2db63085 data/input/seattle/neighborhoods/x1/Montlake.json
|
||||||
33128005e7f6caaab5d321558965f125 data/input/neighborhoods/x1/Broadway.json
|
ae65aaa3a0ddb7bb990972c9832369b6 data/input/seattle/neighborhoods/23rd/Mann.json
|
||||||
a5dca5dd4a4b78efb17e69c2d557ab1b data/input/neighborhoods/x1/Stevens.json
|
d9e0bc911a52aa15f51cb49956d2aef5 data/input/seattle/neighborhoods/lakeslice/Leschi.json
|
||||||
519cbc4a6c2038fab9df172f2db63085 data/input/neighborhoods/x1/Montlake.json
|
1ac65f96b8f4a2b2d365949032966402 data/input/seattle/neighborhoods/lakeslice/Harrison - Denny-Blaine.json
|
||||||
a6860296e9b842be9226fc9fe1fc3cad data/input/neighborhoods/23rd/Mann.json
|
7b5a6df2a313b997e1ac575f6cec03d6 data/input/seattle/neighborhoods/lakeslice/Mann.json
|
||||||
ed7dc58cf6e4fc61afd64dd973770f10 data/input/neighborhoods/lakeslice/Leschi.json
|
eb073e33d652161805fd42c982856703 data/input/seattle/neighborhoods/lakeslice/Madrona.json
|
||||||
f8c72b08495801165046fb91bc4b3138 data/input/neighborhoods/lakeslice/Harrison - Denny-Blaine.json
|
e62769afe799c43dbbe73e164e6bd620 data/input/seattle/neighborhoods/downtown/Pike-Market.json
|
||||||
64e01cf5faf709552168bc4dc30ba4a6 data/input/neighborhoods/lakeslice/Mann.json
|
d02cb65749922832091b18ad45a4400e data/input/seattle/neighborhoods/downtown/First Hill.json
|
||||||
6d8a88b76bdc14690c959f349c30bbf9 data/input/neighborhoods/lakeslice/Madrona.json
|
64073270987303abf1532e6abaaa2676 data/input/seattle/neighborhoods/downtown/Central Business District.json
|
||||||
6da5d27cf9e113afd004667be3381527 data/input/neighborhoods/downtown/Pike-Market.json
|
2374dd1b296f7bffa436e14ff2ddcd36 data/input/seattle/neighborhoods/downtown/Belltown.json
|
||||||
3d8e21ae459dd03b5c357d6a630b31d3 data/input/neighborhoods/downtown/First Hill.json
|
796f5d8eb1a5f1bfe85b2945239e14de data/input/seattle/neighborhoods/huge_seattle/West Woodland.json
|
||||||
732fd9f536d91a81e378ffec5c663f0a data/input/neighborhoods/downtown/Central Business District.json
|
8f586abbc7c18ee104493f7f83d88b20 data/input/seattle/neighborhoods/huge_seattle/Westlake.json
|
||||||
8ea8250a370423ec9520709b7459229c data/input/neighborhoods/downtown/Belltown.json
|
778beb76a0f0f2c4e5f71e56f6a37076 data/input/seattle/neighborhoods/huge_seattle/North College Park.json
|
||||||
f2d7e0a90fae8d31711fd37fcd9718a5 data/input/neighborhoods/huge_seattle/West Woodland.json
|
21376d86306c45e82ddbbc4acd62a3ce data/input/seattle/neighborhoods/huge_seattle/Lower Queen Anne.json
|
||||||
f14cb63a866161af7a79009419f5fd21 data/input/neighborhoods/huge_seattle/Westlake.json
|
90e78679efe05bb5c51c095bd56df8db data/input/seattle/neighborhoods/huge_seattle/Adams.json
|
||||||
580bc3ea6c9b3cc815c38ec5181b0858 data/input/neighborhoods/huge_seattle/North College Park.json
|
7d2570e9728af1313c0af70b35ff7c12 data/input/seattle/neighborhoods/huge_seattle/Leschi.json
|
||||||
8c273924c07f76ade9a5484b06abef5c data/input/neighborhoods/huge_seattle/Lower Queen Anne.json
|
02e25d6d76d0a9b8823e8783d01d499b data/input/seattle/neighborhoods/huge_seattle/University District.json
|
||||||
39029a5d7bc2383b6a3f63739866082e data/input/neighborhoods/huge_seattle/Adams.json
|
4c9c0bbd2c4d30166cc82b6c9291de78 data/input/seattle/neighborhoods/huge_seattle/Pike-Market.json
|
||||||
e08466b80ae3f3d47b557ec102bd7547 data/input/neighborhoods/huge_seattle/Leschi.json
|
2ff1b7b76f126ed69227923d40ecdaa3 data/input/seattle/neighborhoods/huge_seattle/Harrison - Denny-Blaine.json
|
||||||
8fb32f54bf124a27218342d80a880b0b data/input/neighborhoods/huge_seattle/University District.json
|
a65a48ca68f15635fd86e7fdd06ddaea data/input/seattle/neighborhoods/huge_seattle/Roosevelt.json
|
||||||
f83718a053d5ac61352c6abfd352b914 data/input/neighborhoods/huge_seattle/Pike-Market.json
|
57103a4893df8c1667674d8de47bee0b data/input/seattle/neighborhoods/huge_seattle/Whittier Heights.json
|
||||||
7cb58cc9f553e464c56eff802067c879 data/input/neighborhoods/huge_seattle/Harrison - Denny-Blaine.json
|
9cb7a0ef7a3bcdb634681e21d2f6fea3 data/input/seattle/neighborhoods/huge_seattle/Laurelhurst.json
|
||||||
edd4fe2cc274ea4554c5855e79ed5ade data/input/neighborhoods/huge_seattle/Roosevelt.json
|
cb93fd55d3b42979a96dc45e5571f5ac data/input/seattle/neighborhoods/huge_seattle/International District.json
|
||||||
58055de4974d22203f770082722fe9fa data/input/neighborhoods/huge_seattle/Whittier Heights.json
|
9f04e6fa311b2274a42ee4b29f11d4e8 data/input/seattle/neighborhoods/huge_seattle/Maple Leaf.json
|
||||||
2170f688ff57114a89921dc6740e4671 data/input/neighborhoods/huge_seattle/Laurelhurst.json
|
a8d1df39941171daa16195cc98692907 data/input/seattle/neighborhoods/huge_seattle/First Hill.json
|
||||||
c3ac7309ef28ae17e946d40c6b490223 data/input/neighborhoods/huge_seattle/International District.json
|
b7fcb8b06ce4f571849fd33a277d21af data/input/seattle/neighborhoods/huge_seattle/Madison Park.json
|
||||||
875dd4425966161012f4bb3926137ea0 data/input/neighborhoods/huge_seattle/Maple Leaf.json
|
c45186b872050db02e053afcf4a7424e data/input/seattle/neighborhoods/huge_seattle/Portage Bay.json
|
||||||
0383dc9dc26d379572d786c91445cab0 data/input/neighborhoods/huge_seattle/First Hill.json
|
b4f6a4f24dab7eed34347069748ed6ce data/input/seattle/neighborhoods/huge_seattle/Central Business District.json
|
||||||
78911c43d3dc60e7499a9d6453883010 data/input/neighborhoods/huge_seattle/Madison Park.json
|
ffcca5e408c97cb81d1f739816809e01 data/input/seattle/neighborhoods/huge_seattle/South Lake Union.json
|
||||||
af53747bf8d3fae916c889896810929b data/input/neighborhoods/huge_seattle/Portage Bay.json
|
db4b1be3343681f5bcd8115181f95f08 data/input/seattle/neighborhoods/huge_seattle/Greenwood.json
|
||||||
d998627db6f711ada38e9a3bcf5dd04c data/input/neighborhoods/huge_seattle/Central Business District.json
|
6d50b3ae6f11de62b44e6109a435d002 data/input/seattle/neighborhoods/huge_seattle/Eastlake.json
|
||||||
0c3011246788f34e75d09b2fa2a31108 data/input/neighborhoods/huge_seattle/South Lake Union.json
|
b809cb0eb9a77a138c447d92d2a036ad data/input/seattle/neighborhoods/huge_seattle/Sunset Hill.json
|
||||||
7f9ae69b3593fc54b42a64fbc6e38717 data/input/neighborhoods/huge_seattle/Greenwood.json
|
1c27ea07ae9f046e79bdd79a0dbc4863 data/input/seattle/neighborhoods/huge_seattle/Broadway.json
|
||||||
e8178607910bb0e6a74c327132cd1af6 data/input/neighborhoods/huge_seattle/Eastlake.json
|
a205318630171b21d3d8172c44a973d1 data/input/seattle/neighborhoods/huge_seattle/Phinney Ridge.json
|
||||||
6807f0d6baf260b9cc5715be89e164e8 data/input/neighborhoods/huge_seattle/Sunset Hill.json
|
02c097d984b9e039b7b9912f03ddf717 data/input/seattle/neighborhoods/huge_seattle/Ravenna.json
|
||||||
a16f5d5a71f43c80aad599c34f918036 data/input/neighborhoods/huge_seattle/Broadway.json
|
fc6dc3658c5d9cb01d778db3026731c6 data/input/seattle/neighborhoods/huge_seattle/Fremont.json
|
||||||
976097ef7c1bc239ece3745e0681ed68 data/input/neighborhoods/huge_seattle/Phinney Ridge.json
|
14b37651f6259ba8ed8f7dc04a93245b data/input/seattle/neighborhoods/huge_seattle/Yesler Terrace.json
|
||||||
b8b42f5fef978e5158125e22ef715cd4 data/input/neighborhoods/huge_seattle/Ravenna.json
|
a3b74ad210d5ae94c8fb8a23ffd7b521 data/input/seattle/neighborhoods/huge_seattle/Wedgwood.json
|
||||||
ad421fca3b9beaa49d688e9fb8e2c412 data/input/neighborhoods/huge_seattle/Fremont.json
|
f60c9d7699b39ed6d99109ff0a4b7ee9 data/input/seattle/neighborhoods/huge_seattle/Sand Point.json
|
||||||
503cd0ff9ef92ddf5798262470046578 data/input/neighborhoods/huge_seattle/Yesler Terrace.json
|
7957979d53d4a6364b9020a119c1f9e9 data/input/seattle/neighborhoods/huge_seattle/Wallingford.json
|
||||||
7090624f654057f1b5158f516a662ac4 data/input/neighborhoods/huge_seattle/Wedgwood.json
|
c642b472850a444e1d436a3dc8de5c57 data/input/seattle/neighborhoods/huge_seattle/Interbay.json
|
||||||
6961533182eb81d9a352a9954aacd085 data/input/neighborhoods/huge_seattle/Sand Point.json
|
b19598d61c1301e4573edd927fb4ba38 data/input/seattle/neighborhoods/huge_seattle/West Queen Anne.json
|
||||||
a006e06a89f7d58fd25073171dff7873 data/input/neighborhoods/huge_seattle/Wallingford.json
|
331b23ca4b2d94d6e38026dfd7dfc386 data/input/seattle/neighborhoods/huge_seattle/Southeast Magnolia.json
|
||||||
130227b4eec5744d3f747699d0a71642 data/input/neighborhoods/huge_seattle/Interbay.json
|
b89543b001bc1e6f7ec5afda712a9532 data/input/seattle/neighborhoods/huge_seattle/North Beach - Blue Ridge.json
|
||||||
3b78ed2725ca95c22fc4c3e72603bd4c data/input/neighborhoods/huge_seattle/West Queen Anne.json
|
0f8511e1759b3150d77752aa9608ddd5 data/input/seattle/neighborhoods/huge_seattle/Windermere.json
|
||||||
0f6044807c0a27d0a37c6a57455164b9 data/input/neighborhoods/huge_seattle/Southeast Magnolia.json
|
c9fe0cec21b4506b9449f8e286707f62 data/input/seattle/neighborhoods/huge_seattle/Stevens.json
|
||||||
d3b26af786b60a33a632a066aed34ad6 data/input/neighborhoods/huge_seattle/North Beach - Blue Ridge.json
|
8f1b6913ee7ddee6c3ad6762077e1940 data/input/seattle/neighborhoods/huge_seattle/East Queen Anne.json
|
||||||
ab6bbbac5ce8bf4ef643ce46382ad4c4 data/input/neighborhoods/huge_seattle/Windermere.json
|
3f1e1d2473fcd9909ed48885156d8ad9 data/input/seattle/neighborhoods/huge_seattle/Belltown.json
|
||||||
4ba02a037455715f3c77ca7bfe668ee2 data/input/neighborhoods/huge_seattle/Stevens.json
|
7148acd286b453d20db96ad3a8461727 data/input/seattle/neighborhoods/huge_seattle/Loyal Heights.json
|
||||||
b0162a73d9023a0fc10cb0c0e76403b1 data/input/neighborhoods/huge_seattle/East Queen Anne.json
|
14c4caa74a3aab96b3270c9add7c8019 data/input/seattle/neighborhoods/huge_seattle/Mann.json
|
||||||
762609d9a170ff0fcaf7671f06f8ce4e data/input/neighborhoods/huge_seattle/Belltown.json
|
af28f6e4b3ef367fed0d828a47e5208d data/input/seattle/neighborhoods/huge_seattle/View Ridge.json
|
||||||
47971bee1be78a305ecb442dd9ddf059 data/input/neighborhoods/huge_seattle/Loyal Heights.json
|
05ca8b996e144d45ae49961638e37135 data/input/seattle/neighborhoods/huge_seattle/Minor.json
|
||||||
31ea4d515ff983e2625eb8d2cbf61930 data/input/neighborhoods/huge_seattle/Mann.json
|
4b0347aeed2ad2e3cf3b71a07efba3e0 data/input/seattle/neighborhoods/huge_seattle/Madrona.json
|
||||||
22619b004634a46f6d6bf0efbdc5481c data/input/neighborhoods/huge_seattle/View Ridge.json
|
baa4ebb40bc293c6176a3239620e7183 data/input/seattle/neighborhoods/huge_seattle/Lawton Park.json
|
||||||
f14a6803a9b3874edc44e35e71f99ef9 data/input/neighborhoods/huge_seattle/Minor.json
|
78b4d30d5bb4e7e8a40c7728124fd890 data/input/seattle/neighborhoods/huge_seattle/Montlake.json
|
||||||
194bcf33fdde0a73ca9f32b32d152dcc data/input/neighborhoods/huge_seattle/Madrona.json
|
271892c6453b6e0d512f948d9b7de62a data/input/seattle/neighborhoods/huge_seattle/Briarcliff.json
|
||||||
39044e4cfbda0a390717f8e8de53f0d9 data/input/neighborhoods/huge_seattle/Lawton Park.json
|
92d4c74df6478e29cdb0281ba4ff7894 data/input/seattle/neighborhoods/huge_seattle/North Queen Anne.json
|
||||||
7fba527f49fee2dd698f52149fec1b85 data/input/neighborhoods/huge_seattle/Montlake.json
|
9666b4689a2927797fe865becd6f61b7 data/input/seattle/neighborhoods/huge_seattle/Pioneer Square.json
|
||||||
f8f4d600347638cafb5688a096331572 data/input/neighborhoods/huge_seattle/Briarcliff.json
|
18ae58793ddede2c087dbc7f9876266a data/input/seattle/neighborhoods/huge_seattle/Crown Hill.json
|
||||||
26c6998e49233361180262bcd8b58a2a data/input/neighborhoods/huge_seattle/North Queen Anne.json
|
d729d8ef4f797d51dbb53096a4aac233 data/input/seattle/neighborhoods/huge_seattle/Green Lake.json
|
||||||
57b13ac060424106da0e2a8aed2eaf6b data/input/neighborhoods/huge_seattle/Pioneer Square.json
|
4be236f94749a0325f9696d0ed051e85 data/input/seattle/neighborhoods/huge_seattle/Bryant.json
|
||||||
0843ce2be4652f309c926cf635ce4df1 data/input/neighborhoods/huge_seattle/Crown Hill.json
|
1e608dafe6199b70929bb6bae84ead30 data/input/seattle/neighborhoods/caphill/Portage Bay.json
|
||||||
d65838b354287f1605914ce74a188219 data/input/neighborhoods/huge_seattle/Green Lake.json
|
82c31490f1c0b5f7ab2e75766c8a9e04 data/input/seattle/neighborhoods/caphill/Eastlake.json
|
||||||
39b8142bea1595f9b094792cb4df510d data/input/neighborhoods/huge_seattle/Bryant.json
|
790ca481f2ea517acd63c97cc58b4d10 data/input/seattle/neighborhoods/caphill/Broadway.json
|
||||||
0ba8ab46da7c8601c9dc5b9fe5116f2b data/input/neighborhoods/caphill/Portage Bay.json
|
2b5fe53d1566708e1484181f026a77db data/input/seattle/neighborhoods/caphill/Stevens.json
|
||||||
f479ca9324e63569b5c129170afbf5ac data/input/neighborhoods/caphill/Eastlake.json
|
96794d4b0d55abbacc48ff2df9941230 data/input/seattle/neighborhoods/caphill/Montlake.json
|
||||||
d14c96851d6289b867e008432f54320d data/input/neighborhoods/caphill/Broadway.json
|
19e8073a9f6c807b4492681b2c7570de data/input/seattle/blockface.bin
|
||||||
5475db4ee8aa2a1c610670efca8eb830 data/input/neighborhoods/caphill/Stevens.json
|
db63d7d606e8702d12f9399e87e6a00f data/input/seattle/parcels_urbansim.txt
|
||||||
955835e85d15a2fb6c4a8586b8e5cb73 data/input/neighborhoods/caphill/Montlake.json
|
2bc84e4d194d7cea6007ae3b93f3b11b data/input/seattle/neighborhoods.geojson
|
||||||
19e8073a9f6c807b4492681b2c7570de data/input/blockface.bin
|
025fc890c650c22f9fc35271dfeb8019 data/input/seattle/popdat.bin
|
||||||
db63d7d606e8702d12f9399e87e6a00f data/input/parcels_urbansim.txt
|
428bc2e92ea02089cedbb614ce1d8f25 data/input/seattle/polygons/caphill.poly
|
||||||
70c91146f4ea2c83f17f3d6b99f3b89d data/input/raw_maps/huge_seattle.bin
|
4f291bbe84ac32a98d7d100be79ddc4b data/input/seattle/polygons/huge_seattle.poly
|
||||||
82bb6b459eb2a6b4f0daf277348f5e6c data/input/raw_maps/ballard.bin
|
6b221b5e68a38f16f34e46a208c7ca15 data/input/seattle/polygons/lakeslice.poly
|
||||||
93553e321c5efac4b700ab9c2569eacb data/input/raw_maps/downtown.bin
|
418bcd5b335d12a1aa8ef556367e0bad data/input/seattle/polygons/montlake.poly
|
||||||
6f15b586cb9a610f95b815fd12442dd7 data/input/raw_maps/caphill.bin
|
502f3bf285833fc061099a52f2f70819 data/input/seattle/polygons/intl_district.poly
|
||||||
534b0bbf56981aee23d83338365dde7a data/input/raw_maps/lakeslice.bin
|
5d48031ff3b288ecb22bd2a96809a0ab data/input/seattle/polygons/ballard.poly
|
||||||
1e264a737cd4c4eed887c057a7b4eccf data/input/raw_maps/huge_austin.bin
|
0304847f270859fcfc19c8ca122ed793 data/input/seattle/polygons/23rd.poly
|
||||||
4ff7768c4ad52eeb2d02f425d8294847 data/input/raw_maps/downtown_atx.bin
|
54f5f16e5ec925cb29b4d1405a89ef94 data/input/seattle/polygons/downtown.poly
|
||||||
01cee37af1e49b295448933a89de9192 data/input/raw_maps/montlake.bin
|
58485a3bdff2aea9769fffd207e3cf30 data/input/seattle/offstreet_parking.bin
|
||||||
0452d8d5998d782474256a083c6d8be3 data/input/raw_maps/intl_district.bin
|
129b460f56f5eb41cab3bfd70fb5fde9 data/input/seattle/sidewalks.bin
|
||||||
558c575a44a072909e3ee1d9a50386bb data/input/raw_maps/23rd.bin
|
0db4e23e51f7680538b0bbbc72208e07 data/input/seattle/N47W122.hgt
|
||||||
2bc84e4d194d7cea6007ae3b93f3b11b data/input/neighborhoods.geojson
|
51dbf7a263fe5f0ea24e43c3aad3fec2 data/input/seattle/google_transit/stop_times.txt
|
||||||
025fc890c650c22f9fc35271dfeb8019 data/input/popdat.bin
|
308c4e4ab385b7e8c1a1f75c4dc96e3f data/input/seattle/google_transit/routes.txt
|
||||||
428bc2e92ea02089cedbb614ce1d8f25 data/input/polygons/caphill.poly
|
9d3deb093076d7eaf748114829802292 data/input/seattle/google_transit/calendar_dates.txt
|
||||||
4f291bbe84ac32a98d7d100be79ddc4b data/input/polygons/huge_seattle.poly
|
1800e4da804a8d9809d8b636742b9d00 data/input/seattle/google_transit/fare_rules.txt
|
||||||
6b221b5e68a38f16f34e46a208c7ca15 data/input/polygons/lakeslice.poly
|
9502d1a6e03a21c7e6987c036d5aea6f data/input/seattle/google_transit/block_trip.txt
|
||||||
418bcd5b335d12a1aa8ef556367e0bad data/input/polygons/montlake.poly
|
b66cb4c0a24b2d038427aa6e1aa1954a data/input/seattle/google_transit/block.txt
|
||||||
8c6570b3bad2a362e0e6f4bb6f4a8fda data/input/polygons/huge_austin.poly
|
7211c370ecf3d8839ea0eb6651ed18e9 data/input/seattle/google_transit/calendar.txt
|
||||||
502f3bf285833fc061099a52f2f70819 data/input/polygons/intl_district.poly
|
33f4f1264b3c982f0d6922ce7fb45e73 data/input/seattle/google_transit/shapes.txt
|
||||||
5d48031ff3b288ecb22bd2a96809a0ab data/input/polygons/ballard.poly
|
8a4fbb3846249777afae319d64e6241e data/input/seattle/google_transit/trips.txt
|
||||||
dc9a8a05f8f2e508af7a9841866f8cd3 data/input/polygons/downtown_atx.poly
|
ca5a7569e1af41e0046fe5e8865cf733 data/input/seattle/google_transit/fare_attributes.txt
|
||||||
0304847f270859fcfc19c8ca122ed793 data/input/polygons/23rd.poly
|
8610cdc491d036eee88c9b7ae24d692d data/input/seattle/google_transit/stops.txt
|
||||||
54f5f16e5ec925cb29b4d1405a89ef94 data/input/polygons/downtown.poly
|
75f564fcc06b1950b7b33acf9d61f696 data/input/seattle/google_transit/agency.txt
|
||||||
58485a3bdff2aea9769fffd207e3cf30 data/input/offstreet_parking.bin
|
9902835baa19d6b2b3e64f87f24e50d8 data/input/raw_maps/huge_seattle.bin
|
||||||
|
7883d9cd9c5120d475d7880cc14b4e20 data/input/raw_maps/ballard.bin
|
||||||
|
f802aff8d8c1d5d8ec1caa295ccf8040 data/input/raw_maps/downtown.bin
|
||||||
|
f1a4f5663df3c6a488f1b0663ab8f61f data/input/raw_maps/caphill.bin
|
||||||
|
f0a8fff1790d96384482805d134c4ee5 data/input/raw_maps/lakeslice.bin
|
||||||
|
b50223a417508afb924252ae3ecd24ad data/input/raw_maps/huge_austin.bin
|
||||||
|
d4f6ece8ef35c594c794928d651c5916 data/input/raw_maps/downtown_atx.bin
|
||||||
|
c7a0ec6f43daff30af58cd223d9771b8 data/input/raw_maps/montlake.bin
|
||||||
|
27e559028ac7e2339ff7969ad6d5e37d data/input/raw_maps/intl_district.bin
|
||||||
|
22fbf319194f1ad011b53794640ef156 data/input/raw_maps/23rd.bin
|
||||||
|
a30b0f460a481598e494f16a9d07a822 data/input/austin/osm/downtown_atx.osm
|
||||||
|
7c8d72cf97072af34cee665006b1e9e6 data/input/austin/osm/Austin.osm
|
||||||
|
fb166029fc8006bd20dc959fbbbde3b6 data/input/austin/osm/huge_austin.osm
|
||||||
|
8c6570b3bad2a362e0e6f4bb6f4a8fda data/input/austin/polygons/huge_austin.poly
|
||||||
|
dc9a8a05f8f2e508af7a9841866f8cd3 data/input/austin/polygons/downtown_atx.poly
|
||||||
7dbf9830b6a37f6e58d3effc54363de7 data/input/screenshots/montlake/02x05_i124.png
|
7dbf9830b6a37f6e58d3effc54363de7 data/input/screenshots/montlake/02x05_i124.png
|
||||||
244fe61defcf394590775582ef438f17 data/input/screenshots/montlake/01x06_i26.png
|
244fe61defcf394590775582ef438f17 data/input/screenshots/montlake/01x06_i26.png
|
||||||
e6e912d845568358261fd74576b57f87 data/input/screenshots/montlake/01x01_i19.png
|
e6e912d845568358261fd74576b57f87 data/input/screenshots/montlake/01x01_i19.png
|
||||||
@ -136,20 +150,6 @@ ce30a66567ab09cb1c36d731c15cd5e1 data/input/screenshots/montlake/01x02_i20.png
|
|||||||
9eb0005ac206fba788042e655cfbe300 data/input/screenshots/montlake/03x05_i2.png
|
9eb0005ac206fba788042e655cfbe300 data/input/screenshots/montlake/03x05_i2.png
|
||||||
d12a9d72fcbf32cb75d2820a78fa5e22 data/input/screenshots/montlake/02x06_i85.png
|
d12a9d72fcbf32cb75d2820a78fa5e22 data/input/screenshots/montlake/02x06_i85.png
|
||||||
a7fec0718264a554de0fc282f9737ea0 data/input/screenshots/montlake/01x05_i40.png
|
a7fec0718264a554de0fc282f9737ea0 data/input/screenshots/montlake/01x05_i40.png
|
||||||
129b460f56f5eb41cab3bfd70fb5fde9 data/input/sidewalks.bin
|
|
||||||
0db4e23e51f7680538b0bbbc72208e07 data/input/N47W122.hgt
|
|
||||||
51dbf7a263fe5f0ea24e43c3aad3fec2 data/input/google_transit/stop_times.txt
|
|
||||||
308c4e4ab385b7e8c1a1f75c4dc96e3f data/input/google_transit/routes.txt
|
|
||||||
9d3deb093076d7eaf748114829802292 data/input/google_transit/calendar_dates.txt
|
|
||||||
1800e4da804a8d9809d8b636742b9d00 data/input/google_transit/fare_rules.txt
|
|
||||||
9502d1a6e03a21c7e6987c036d5aea6f data/input/google_transit/block_trip.txt
|
|
||||||
b66cb4c0a24b2d038427aa6e1aa1954a data/input/google_transit/block.txt
|
|
||||||
7211c370ecf3d8839ea0eb6651ed18e9 data/input/google_transit/calendar.txt
|
|
||||||
33f4f1264b3c982f0d6922ce7fb45e73 data/input/google_transit/shapes.txt
|
|
||||||
8a4fbb3846249777afae319d64e6241e data/input/google_transit/trips.txt
|
|
||||||
ca5a7569e1af41e0046fe5e8865cf733 data/input/google_transit/fare_attributes.txt
|
|
||||||
8610cdc491d036eee88c9b7ae24d692d data/input/google_transit/stops.txt
|
|
||||||
75f564fcc06b1950b7b33acf9d61f696 data/input/google_transit/agency.txt
|
|
||||||
e4d10fa4a66453b7097d906e4616e26b data/system/assets/meters/car.svg
|
e4d10fa4a66453b7097d906e4616e26b data/system/assets/meters/car.svg
|
||||||
9d747979fdc362ac6df0af3c3bbffd15 data/system/assets/meters/bus.svg
|
9d747979fdc362ac6df0af3c3bbffd15 data/system/assets/meters/bus.svg
|
||||||
f7facfb678770c416e5529b2b2d066e5 data/system/assets/meters/pedestrian.svg
|
f7facfb678770c416e5529b2b2d066e5 data/system/assets/meters/pedestrian.svg
|
||||||
@ -223,16 +223,16 @@ d02d0d103f7b00672a5f1145c5169d8c data/system/fonts/Overpass-Bold.ttf
|
|||||||
2a13391023ce8787887331530cac35a7 data/system/fonts/BungeeInline-Regular.ttf
|
2a13391023ce8787887331530cac35a7 data/system/fonts/BungeeInline-Regular.ttf
|
||||||
17a1468e62195d0688a6f3bd12da2e92 data/system/fonts/Overpass-SemiBold.ttf
|
17a1468e62195d0688a6f3bd12da2e92 data/system/fonts/Overpass-SemiBold.ttf
|
||||||
259d4afad7edca07e727ef80f5bbce07 data/system/fonts/Bungee-Regular.ttf
|
259d4afad7edca07e727ef80f5bbce07 data/system/fonts/Bungee-Regular.ttf
|
||||||
42362e4328a20462a755ac10a5d97fa1 data/system/maps/huge_seattle.bin
|
e4ef975bd5ca2a761f2af6aa79ddbfa7 data/system/maps/huge_seattle.bin
|
||||||
949a22e70d06e03bdee666e5784cdf19 data/system/maps/ballard.bin
|
2ce839572159c8819b17ca87502fd063 data/system/maps/ballard.bin
|
||||||
8b31c23a7f0b985894a39683159c7918 data/system/maps/downtown.bin
|
20c561149888a0732a3c2d5ccad41f5f data/system/maps/downtown.bin
|
||||||
1727e93afe6d1ddc07b5f6ed008658be data/system/maps/caphill.bin
|
a088ac86bd2fbbde9d0be53535f44670 data/system/maps/caphill.bin
|
||||||
35e398d0dce3e4ade875c91245f88423 data/system/maps/lakeslice.bin
|
1851f79a44f0ccde301a3f16edfaa852 data/system/maps/lakeslice.bin
|
||||||
f258d23f81e16c5d884972853fcbb376 data/system/maps/huge_austin.bin
|
4961886805fc8a5576a37cffc6adc9be data/system/maps/huge_austin.bin
|
||||||
38ef21a636e63ce54ba319834191c8fd data/system/maps/downtown_atx.bin
|
94d44bfd4c5e2431c7f8555943e70709 data/system/maps/downtown_atx.bin
|
||||||
f37497dbcca236b261b7205d8dd01aa4 data/system/maps/montlake.bin
|
29eca63f2c687160f78f7f8dbb85981f data/system/maps/montlake.bin
|
||||||
6aec1579e6e6125c559212ee17c1d79f data/system/maps/intl_district.bin
|
973a782a7d4dd1de4dc0cc7521ee9e1a data/system/maps/intl_district.bin
|
||||||
608b5d2eaaa094ef6a0f1de2f97b28ac data/system/maps/23rd.bin
|
b8c50322ebcbd970c9eb40d7b177b477 data/system/maps/23rd.bin
|
||||||
cc45f42cb24cad1cfdbf5ed7a0cb86d4 data/system/synthetic_maps/signal_double.json
|
cc45f42cb24cad1cfdbf5ed7a0cb86d4 data/system/synthetic_maps/signal_double.json
|
||||||
8b949cc34d9a27ace0bd8ecde55a9520 data/system/synthetic_maps/signal_single.json
|
8b949cc34d9a27ace0bd8ecde55a9520 data/system/synthetic_maps/signal_single.json
|
||||||
1cd7be125e1d992613ed3a41e8b25b6a data/system/synthetic_maps/signal_fan_in.json
|
1cd7be125e1d992613ed3a41e8b25b6a data/system/synthetic_maps/signal_fan_in.json
|
||||||
|
22
docs/dev.md
22
docs/dev.md
@ -119,17 +119,17 @@ code. This is a nice, hefty starter project to understand how everything works.
|
|||||||
For now, this is just an initial list of considerations -- I haven't designed or
|
For now, this is just an initial list of considerations -- I haven't designed or
|
||||||
implemented this yet.
|
implemented this yet.
|
||||||
|
|
||||||
Poking around the .osm extracts in `data/input/osm/`, you'll see a promising
|
Poking around the .osm extracts in `data/input/seattle/osm/`, you'll see a
|
||||||
relation with `route = light_rail`. The relation points to individual points
|
promising relation with `route = light_rail`. The relation points to individual
|
||||||
(nodes) as stops, and segments of the track (ways). These need to be represented
|
points (nodes) as stops, and segments of the track (ways). These need to be
|
||||||
in the initial version of the map, `RawMap`, and the final version, `Map`.
|
represented in the initial version of the map, `RawMap`, and the final version,
|
||||||
Stations probably coincide with existing buildings, and tracks could probably be
|
`Map`. Stations probably coincide with existing buildings, and tracks could
|
||||||
modeled as a special type of road. To remember the order of stations and group
|
probably be modeled as a special type of road. To remember the order of stations
|
||||||
everything, there's already a notion of bus route from the `gtfs` crate that
|
and group everything, there's already a notion of bus route from the `gtfs`
|
||||||
probably works. The `convert_osm` crate is the place to extract this new data
|
crate that probably works. The `convert_osm` crate is the place to extract this
|
||||||
from OSM. It might be worth thinking about how the light rail line gets clipped,
|
new data from OSM. It might be worth thinking about how the light rail line gets
|
||||||
since most maps won't include all of the stations -- should those maps just
|
clipped, since most maps won't include all of the stations -- should those maps
|
||||||
terminate trains at the stations, or should trains go to and from the map
|
just terminate trains at the stations, or should trains go to and from the map
|
||||||
border?
|
border?
|
||||||
|
|
||||||
Then there are some rendering questions. How should special buildings that act
|
Then there are some rendering questions. How should special buildings that act
|
||||||
|
@ -205,6 +205,7 @@ fn pick_neighborhood(map: &Map, mut wizard: WrappedWizard) -> Option<Neighborhoo
|
|||||||
} else {
|
} else {
|
||||||
let name = wizard.input_string("Name the neighborhood")?;
|
let name = wizard.input_string("Name the neighborhood")?;
|
||||||
Some(NeighborhoodBuilder {
|
Some(NeighborhoodBuilder {
|
||||||
|
city_name: map.get_city_name().to_string(),
|
||||||
name,
|
name,
|
||||||
map_name: map.get_name().to_string(),
|
map_name: map.get_name().to_string(),
|
||||||
points: Vec::new(),
|
points: Vec::new(),
|
||||||
@ -220,7 +221,7 @@ fn load_neighborhood_builder(
|
|||||||
wizard
|
wizard
|
||||||
.choose(query, || {
|
.choose(query, || {
|
||||||
Choice::from(abstutil::load_all_objects(
|
Choice::from(abstutil::load_all_objects(
|
||||||
abstutil::path_all_neighborhoods(&map.get_name()),
|
abstutil::path_all_neighborhoods(map.get_city_name(), map.get_name()),
|
||||||
))
|
))
|
||||||
})
|
})
|
||||||
.map(|(_, n)| n)
|
.map(|(_, n)| n)
|
||||||
|
@ -2,7 +2,7 @@ use crate::utils::{download, osmconvert, rm};
|
|||||||
|
|
||||||
fn input() {
|
fn input() {
|
||||||
download(
|
download(
|
||||||
"../data/input/osm/Austin.osm",
|
"../data/input/austin/osm/Austin.osm",
|
||||||
"https://download.bbbike.org/osm/bbbike/Austin/Austin.osm.gz",
|
"https://download.bbbike.org/osm/bbbike/Austin/Austin.osm.gz",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -10,18 +10,21 @@ fn input() {
|
|||||||
pub fn osm_to_raw(name: &str) {
|
pub fn osm_to_raw(name: &str) {
|
||||||
input();
|
input();
|
||||||
osmconvert(
|
osmconvert(
|
||||||
"../data/input/osm/Austin.osm",
|
"../data/input/austin/osm/Austin.osm",
|
||||||
format!("../data/input/polygons/{}.poly", name),
|
format!("../data/input/austin/polygons/{}.poly", name),
|
||||||
format!("../data/input/osm/{}.osm", name),
|
format!("../data/input/austin/osm/{}.osm", name),
|
||||||
);
|
);
|
||||||
rm(format!("../data/input/neighborhoods/{}", name));
|
|
||||||
rm(format!("../data/system/maps/{}.bin", name));
|
rm(format!("../data/system/maps/{}.bin", name));
|
||||||
|
|
||||||
println!("- Running convert_osm");
|
println!("- Running convert_osm");
|
||||||
let output = format!("../data/input/raw_maps/{}.bin", name);
|
let output = format!("../data/input/raw_maps/{}.bin", name);
|
||||||
let map = convert_osm::convert(
|
let map = convert_osm::convert(
|
||||||
convert_osm::Options {
|
convert_osm::Options {
|
||||||
osm: format!("../data/input/osm/{}.osm", name),
|
osm_input: format!("../data/input/austin/osm/{}.osm", name),
|
||||||
|
output: output.clone(),
|
||||||
|
city_name: "austin".to_string(),
|
||||||
|
name: name.to_string(),
|
||||||
|
|
||||||
parking_shapes: None,
|
parking_shapes: None,
|
||||||
public_offstreet_parking: None,
|
public_offstreet_parking: None,
|
||||||
private_offstreet_parking: convert_osm::PrivateOffstreetParking::OnePerBldg,
|
private_offstreet_parking: convert_osm::PrivateOffstreetParking::OnePerBldg,
|
||||||
@ -29,9 +32,8 @@ pub fn osm_to_raw(name: &str) {
|
|||||||
gtfs: None,
|
gtfs: None,
|
||||||
neighborhoods: None,
|
neighborhoods: None,
|
||||||
elevation: None,
|
elevation: None,
|
||||||
clip: Some(format!("../data/input/polygons/{}.poly", name)),
|
clip: Some(format!("../data/input/austin/polygons/{}.poly", name)),
|
||||||
drive_on_right: true,
|
drive_on_right: true,
|
||||||
output: output.clone(),
|
|
||||||
},
|
},
|
||||||
&mut abstutil::Timer::throwaway(),
|
&mut abstutil::Timer::throwaway(),
|
||||||
);
|
);
|
||||||
|
@ -30,7 +30,7 @@ fn main() {
|
|||||||
// By default, use geometry fixes from map_editor.
|
// By default, use geometry fixes from map_editor.
|
||||||
use_fixes: !args.enabled("--nofixes"),
|
use_fixes: !args.enabled("--nofixes"),
|
||||||
// Only process one map. If not specified, process all maps defined by clipping polygons in
|
// Only process one map. If not specified, process all maps defined by clipping polygons in
|
||||||
// data/input/polygons/.
|
// data/input/$city/polygons/.
|
||||||
only_map: args.optional_free(),
|
only_map: args.optional_free(),
|
||||||
};
|
};
|
||||||
args.done();
|
args.done();
|
||||||
@ -46,7 +46,7 @@ fn main() {
|
|||||||
vec![n]
|
vec![n]
|
||||||
} else {
|
} else {
|
||||||
println!("- Working on all {} maps", job.city);
|
println!("- Working on all {} maps", job.city);
|
||||||
abstutil::list_all_objects("../data/input/polygons".to_string())
|
abstutil::list_all_objects(format!("../data/input/{}/polygons", job.city))
|
||||||
};
|
};
|
||||||
|
|
||||||
for name in names {
|
for name in names {
|
||||||
|
@ -2,65 +2,70 @@ use crate::utils::{download, osmconvert, rm};
|
|||||||
|
|
||||||
fn input() {
|
fn input() {
|
||||||
download(
|
download(
|
||||||
"../data/input/google_transit/",
|
"../data/input/seattle/google_transit/",
|
||||||
"https://metro.kingcounty.gov/GTFS/google_transit.zip",
|
"https://metro.kingcounty.gov/GTFS/google_transit.zip",
|
||||||
);
|
);
|
||||||
// Like https://data.seattle.gov/dataset/Neighborhoods/2mbt-aqqx, but in GeoJSON, not SHP
|
// Like https://data.seattle.gov/dataset/Neighborhoods/2mbt-aqqx, but in GeoJSON, not SHP
|
||||||
download("../data/input/neighborhoods.geojson", "https://github.com/seattleio/seattle-boundaries-data/raw/master/data/neighborhoods.geojson");
|
download("../data/input/seattle/neighborhoods.geojson", "https://github.com/seattleio/seattle-boundaries-data/raw/master/data/neighborhoods.geojson");
|
||||||
download(
|
download(
|
||||||
"../data/input/N47W122.hgt",
|
"../data/input/seattle/N47W122.hgt",
|
||||||
"https://dds.cr.usgs.gov/srtm/version2_1/SRTM1/Region_01/N47W122.hgt.zip",
|
"https://dds.cr.usgs.gov/srtm/version2_1/SRTM1/Region_01/N47W122.hgt.zip",
|
||||||
);
|
);
|
||||||
download(
|
download(
|
||||||
"../data/input/osm/Seattle.osm",
|
"../data/input/seattle/osm/Seattle.osm",
|
||||||
"http://download.bbbike.org/osm/bbbike/Seattle/Seattle.osm.gz",
|
"http://download.bbbike.org/osm/bbbike/Seattle/Seattle.osm.gz",
|
||||||
);
|
);
|
||||||
// Soundcast data comes from https://github.com/psrc/soundcast/releases
|
// Soundcast data comes from https://github.com/psrc/soundcast/releases
|
||||||
download(
|
download(
|
||||||
"../data/input/parcels_urbansim.txt",
|
"../data/input/seattle/parcels_urbansim.txt",
|
||||||
"https://www.dropbox.com/s/t9oug9lwhdwfc04/psrc_2014.zip?dl=0",
|
"https://www.dropbox.com/s/t9oug9lwhdwfc04/psrc_2014.zip?dl=0",
|
||||||
);
|
);
|
||||||
|
|
||||||
// From http://data-seattlecitygis.opendata.arcgis.com/datasets/blockface
|
// From http://data-seattlecitygis.opendata.arcgis.com/datasets/blockface
|
||||||
download(
|
download(
|
||||||
"../data/input/blockface.bin",
|
"../data/input/seattle/blockface.bin",
|
||||||
"https://opendata.arcgis.com/datasets/a1458ad1abca41869b81f7c0db0cd777_0.kml",
|
"https://opendata.arcgis.com/datasets/a1458ad1abca41869b81f7c0db0cd777_0.kml",
|
||||||
);
|
);
|
||||||
// From https://data-seattlecitygis.opendata.arcgis.com/datasets/sidewalks
|
// From https://data-seattlecitygis.opendata.arcgis.com/datasets/sidewalks
|
||||||
download(
|
download(
|
||||||
"../data/input/sidewalks.bin",
|
"../data/input/seattle/sidewalks.bin",
|
||||||
"https://opendata.arcgis.com/datasets/ee6d0642d2a04e35892d0eab77d971d6_2.kml",
|
"https://opendata.arcgis.com/datasets/ee6d0642d2a04e35892d0eab77d971d6_2.kml",
|
||||||
);
|
);
|
||||||
// From https://data.seattle.gov/Transportation/Public-Garages-or-Parking-Lots/xefx-khzm
|
// From https://data.seattle.gov/Transportation/Public-Garages-or-Parking-Lots/xefx-khzm
|
||||||
download("../data/input/offstreet_parking.bin", "http://data-seattlecitygis.opendata.arcgis.com/datasets/8e52dfde6d5d45948f7a90654c8d50cd_0.kml");
|
download("../data/input/seattle/offstreet_parking.bin", "http://data-seattlecitygis.opendata.arcgis.com/datasets/8e52dfde6d5d45948f7a90654c8d50cd_0.kml");
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn osm_to_raw(name: &str) {
|
pub fn osm_to_raw(name: &str) {
|
||||||
input();
|
input();
|
||||||
osmconvert(
|
osmconvert(
|
||||||
"../data/input/osm/Seattle.osm",
|
"../data/input/seattle/osm/Seattle.osm",
|
||||||
format!("../data/input/polygons/{}.poly", name),
|
format!("../data/input/seattle/polygons/{}.poly", name),
|
||||||
format!("../data/input/osm/{}.osm", name),
|
format!("../data/input/seattle/osm/{}.osm", name),
|
||||||
);
|
);
|
||||||
rm(format!("../data/input/neighborhoods/{}", name));
|
rm(format!("../data/input/seattle/neighborhoods/{}", name));
|
||||||
rm(format!("../data/system/maps/{}.bin", name));
|
rm(format!("../data/system/maps/{}.bin", name));
|
||||||
|
|
||||||
println!("- Running convert_osm");
|
println!("- Running convert_osm");
|
||||||
let output = format!("../data/input/raw_maps/{}.bin", name);
|
let output = format!("../data/input/raw_maps/{}.bin", name);
|
||||||
let map = convert_osm::convert(
|
let map = convert_osm::convert(
|
||||||
convert_osm::Options {
|
convert_osm::Options {
|
||||||
osm: format!("../data/input/osm/{}.osm", name),
|
osm_input: format!("../data/input/seattle/osm/{}.osm", name),
|
||||||
parking_shapes: Some("../data/input/blockface.bin".to_string()),
|
output: output.clone(),
|
||||||
public_offstreet_parking: Some("../data/input/offstreet_parking.bin".to_string()),
|
city_name: "seattle".to_string(),
|
||||||
|
name: name.to_string(),
|
||||||
|
|
||||||
|
parking_shapes: Some("../data/input/seattle/blockface.bin".to_string()),
|
||||||
|
public_offstreet_parking: Some(
|
||||||
|
"../data/input/seattle/offstreet_parking.bin".to_string(),
|
||||||
|
),
|
||||||
private_offstreet_parking: convert_osm::PrivateOffstreetParking::OnePerBldg,
|
private_offstreet_parking: convert_osm::PrivateOffstreetParking::OnePerBldg,
|
||||||
// TODO These're buggy.
|
// TODO These're buggy.
|
||||||
sidewalks: None,
|
sidewalks: None,
|
||||||
gtfs: Some("../data/input/google_transit".to_string()),
|
gtfs: Some("../data/input/seattle/google_transit".to_string()),
|
||||||
neighborhoods: Some("../data/input/neighborhoods.geojson".to_string()),
|
neighborhoods: Some("../data/input/seattle/neighborhoods.geojson".to_string()),
|
||||||
elevation: Some("../data/input/N47W122.hgt".to_string()),
|
elevation: Some("../data/input/seattle/N47W122.hgt".to_string()),
|
||||||
clip: Some(format!("../data/input/polygons/{}.poly", name)),
|
clip: Some(format!("../data/input/seattle/polygons/{}.poly", name)),
|
||||||
drive_on_right: true,
|
drive_on_right: true,
|
||||||
output: output.clone(),
|
|
||||||
},
|
},
|
||||||
&mut abstutil::Timer::throwaway(),
|
&mut abstutil::Timer::throwaway(),
|
||||||
);
|
);
|
||||||
|
@ -17,8 +17,8 @@ pub struct PopDat {
|
|||||||
pub fn import_data() {
|
pub fn import_data() {
|
||||||
let mut timer = abstutil::Timer::new("creating popdat");
|
let mut timer = abstutil::Timer::new("creating popdat");
|
||||||
let (trips, parcels) = import_trips(
|
let (trips, parcels) = import_trips(
|
||||||
"../data/input/parcels_urbansim.txt",
|
"../data/input/seattle/parcels_urbansim.txt",
|
||||||
"../data/input/trips_2014.csv",
|
"../data/input/seattle/trips_2014.csv",
|
||||||
&mut timer,
|
&mut timer,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
@ -130,7 +130,7 @@ impl Model {
|
|||||||
|
|
||||||
pub fn save_fixes(&mut self) {
|
pub fn save_fixes(&mut self) {
|
||||||
abstutil::write_json(
|
abstutil::write_json(
|
||||||
abstutil::path_fixes(&self.map.name),
|
abstutil::path_fixes(&self.map.city, &self.map.name),
|
||||||
&self
|
&self
|
||||||
.map
|
.map
|
||||||
.generate_fixes(&mut Timer::new("calculate MapFixes")),
|
.generate_fixes(&mut Timer::new("calculate MapFixes")),
|
||||||
|
@ -12,7 +12,6 @@ pub struct InitialMap {
|
|||||||
pub roads: BTreeMap<OriginalRoad, Road>,
|
pub roads: BTreeMap<OriginalRoad, Road>,
|
||||||
pub intersections: BTreeMap<OriginalIntersection, Intersection>,
|
pub intersections: BTreeMap<OriginalIntersection, Intersection>,
|
||||||
|
|
||||||
pub name: String,
|
|
||||||
pub bounds: Bounds,
|
pub bounds: Bounds,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,11 +69,10 @@ pub struct Intersection {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl InitialMap {
|
impl InitialMap {
|
||||||
pub fn new(name: String, raw: &RawMap, bounds: &Bounds, timer: &mut Timer) -> InitialMap {
|
pub fn new(raw: &RawMap, bounds: &Bounds, timer: &mut Timer) -> InitialMap {
|
||||||
let mut m = InitialMap {
|
let mut m = InitialMap {
|
||||||
roads: BTreeMap::new(),
|
roads: BTreeMap::new(),
|
||||||
intersections: BTreeMap::new(),
|
intersections: BTreeMap::new(),
|
||||||
name,
|
|
||||||
bounds: bounds.clone(),
|
bounds: bounds.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -45,6 +45,7 @@ pub struct Map {
|
|||||||
pathfinder: Option<Pathfinder>,
|
pathfinder: Option<Pathfinder>,
|
||||||
pathfinder_dirty: bool,
|
pathfinder_dirty: bool,
|
||||||
|
|
||||||
|
city_name: String,
|
||||||
name: String,
|
name: String,
|
||||||
edits: MapEdits,
|
edits: MapEdits,
|
||||||
}
|
}
|
||||||
@ -103,6 +104,7 @@ impl Map {
|
|||||||
turn_lookup: Vec::new(),
|
turn_lookup: Vec::new(),
|
||||||
pathfinder: None,
|
pathfinder: None,
|
||||||
pathfinder_dirty: false,
|
pathfinder_dirty: false,
|
||||||
|
city_name: "blank city".to_string(),
|
||||||
name: "blank".to_string(),
|
name: "blank".to_string(),
|
||||||
edits: MapEdits::new("blank"),
|
edits: MapEdits::new("blank"),
|
||||||
}
|
}
|
||||||
@ -112,7 +114,7 @@ impl Map {
|
|||||||
timer.start("raw_map to InitialMap");
|
timer.start("raw_map to InitialMap");
|
||||||
let gps_bounds = raw.gps_bounds.clone();
|
let gps_bounds = raw.gps_bounds.clone();
|
||||||
let bounds = gps_bounds.to_bounds();
|
let bounds = gps_bounds.to_bounds();
|
||||||
let initial_map = make::initial::InitialMap::new(raw.name.clone(), &raw, &bounds, timer);
|
let initial_map = make::initial::InitialMap::new(&raw, &bounds, timer);
|
||||||
timer.stop("raw_map to InitialMap");
|
timer.stop("raw_map to InitialMap");
|
||||||
|
|
||||||
timer.start("InitialMap to half of Map");
|
timer.start("InitialMap to half of Map");
|
||||||
@ -431,6 +433,10 @@ impl Map {
|
|||||||
&self.bounds
|
&self.bounds
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_city_name(&self) -> &String {
|
||||||
|
&self.city_name
|
||||||
|
}
|
||||||
|
|
||||||
pub fn get_name(&self) -> &String {
|
pub fn get_name(&self) -> &String {
|
||||||
&self.name
|
&self.name
|
||||||
}
|
}
|
||||||
@ -830,6 +836,7 @@ fn make_half_map(
|
|||||||
turn_lookup: Vec::new(),
|
turn_lookup: Vec::new(),
|
||||||
pathfinder: None,
|
pathfinder: None,
|
||||||
pathfinder_dirty: false,
|
pathfinder_dirty: false,
|
||||||
|
city_name: raw.city_name.clone(),
|
||||||
name: raw.name.clone(),
|
name: raw.name.clone(),
|
||||||
edits: MapEdits::new(&raw.name),
|
edits: MapEdits::new(&raw.name),
|
||||||
};
|
};
|
||||||
|
@ -10,6 +10,7 @@ use std::io::{Error, Write};
|
|||||||
// more compatible with slight changes to the bounding box of a map over time.
|
// more compatible with slight changes to the bounding box of a map over time.
|
||||||
#[derive(Clone, Serialize, Deserialize, Debug)]
|
#[derive(Clone, Serialize, Deserialize, Debug)]
|
||||||
pub struct NeighborhoodBuilder {
|
pub struct NeighborhoodBuilder {
|
||||||
|
pub city_name: String,
|
||||||
pub map_name: String,
|
pub map_name: String,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub points: Vec<LonLat>,
|
pub points: Vec<LonLat>,
|
||||||
@ -19,6 +20,7 @@ impl NeighborhoodBuilder {
|
|||||||
pub fn finalize(&self, gps_bounds: &GPSBounds) -> Neighborhood {
|
pub fn finalize(&self, gps_bounds: &GPSBounds) -> Neighborhood {
|
||||||
assert!(self.points.len() >= 3);
|
assert!(self.points.len() >= 3);
|
||||||
Neighborhood {
|
Neighborhood {
|
||||||
|
city_name: self.city_name.clone(),
|
||||||
map_name: self.map_name.clone(),
|
map_name: self.map_name.clone(),
|
||||||
name: self.name.clone(),
|
name: self.name.clone(),
|
||||||
polygon: Polygon::new(
|
polygon: Polygon::new(
|
||||||
@ -36,14 +38,14 @@ impl NeighborhoodBuilder {
|
|||||||
|
|
||||||
pub fn save(&self) {
|
pub fn save(&self) {
|
||||||
abstutil::write_json(
|
abstutil::write_json(
|
||||||
abstutil::path_neighborhood(&self.map_name, &self.name),
|
abstutil::path_neighborhood(&self.city_name, &self.map_name, &self.name),
|
||||||
self,
|
self,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://wiki.openstreetmap.org/wiki/Osmosis/Polygon_Filter_File_Format
|
// https://wiki.openstreetmap.org/wiki/Osmosis/Polygon_Filter_File_Format
|
||||||
pub fn save_as_osmosis(&self) -> Result<(), Error> {
|
pub fn save_as_osmosis(&self) -> Result<(), Error> {
|
||||||
let path = abstutil::path_polygon(&self.name);
|
let path = abstutil::path_polygon(&self.city_name, &self.name);
|
||||||
let mut f = File::create(&path)?;
|
let mut f = File::create(&path)?;
|
||||||
|
|
||||||
writeln!(f, "{}", self.name)?;
|
writeln!(f, "{}", self.name)?;
|
||||||
@ -65,15 +67,20 @@ impl NeighborhoodBuilder {
|
|||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Neighborhood {
|
pub struct Neighborhood {
|
||||||
|
pub city_name: String,
|
||||||
pub map_name: String,
|
pub map_name: String,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub polygon: Polygon,
|
pub polygon: Polygon,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Neighborhood {
|
impl Neighborhood {
|
||||||
pub fn load_all(map_name: &str, gps_bounds: &GPSBounds) -> Vec<(String, Neighborhood)> {
|
pub fn load_all(
|
||||||
|
city_name: &str,
|
||||||
|
map_name: &str,
|
||||||
|
gps_bounds: &GPSBounds,
|
||||||
|
) -> Vec<(String, Neighborhood)> {
|
||||||
abstutil::load_all_objects::<NeighborhoodBuilder>(abstutil::path_all_neighborhoods(
|
abstutil::load_all_objects::<NeighborhoodBuilder>(abstutil::path_all_neighborhoods(
|
||||||
map_name,
|
city_name, map_name,
|
||||||
))
|
))
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(name, builder)| (name, builder.finalize(gps_bounds)))
|
.map(|(name, builder)| (name, builder.finalize(gps_bounds)))
|
||||||
@ -82,6 +89,7 @@ impl Neighborhood {
|
|||||||
|
|
||||||
fn make_everywhere(map: &Map) -> Neighborhood {
|
fn make_everywhere(map: &Map) -> Neighborhood {
|
||||||
Neighborhood {
|
Neighborhood {
|
||||||
|
city_name: map.get_city_name().to_string(),
|
||||||
map_name: map.get_name().to_string(),
|
map_name: map.get_name().to_string(),
|
||||||
name: "_everywhere_".to_string(),
|
name: "_everywhere_".to_string(),
|
||||||
polygon: map.get_bounds().get_rectangle(),
|
polygon: map.get_bounds().get_rectangle(),
|
||||||
@ -97,7 +105,8 @@ pub struct FullNeighborhoodInfo {
|
|||||||
|
|
||||||
impl FullNeighborhoodInfo {
|
impl FullNeighborhoodInfo {
|
||||||
pub fn load_all(map: &Map) -> HashMap<String, FullNeighborhoodInfo> {
|
pub fn load_all(map: &Map) -> HashMap<String, FullNeighborhoodInfo> {
|
||||||
let mut neighborhoods = Neighborhood::load_all(map.get_name(), map.get_gps_bounds());
|
let mut neighborhoods =
|
||||||
|
Neighborhood::load_all(map.get_city_name(), map.get_name(), map.get_gps_bounds());
|
||||||
neighborhoods.push((
|
neighborhoods.push((
|
||||||
"_everywhere_".to_string(),
|
"_everywhere_".to_string(),
|
||||||
Neighborhood::make_everywhere(map),
|
Neighborhood::make_everywhere(map),
|
||||||
|
@ -9,6 +9,7 @@ use std::fmt;
|
|||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
pub struct RawMap {
|
pub struct RawMap {
|
||||||
|
pub city_name: String,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
#[serde(
|
#[serde(
|
||||||
serialize_with = "serialize_btreemap",
|
serialize_with = "serialize_btreemap",
|
||||||
@ -87,9 +88,10 @@ impl fmt::Display for OriginalBuilding {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl RawMap {
|
impl RawMap {
|
||||||
pub fn blank(name: String) -> RawMap {
|
pub fn blank(city_name: &str, name: &str) -> RawMap {
|
||||||
RawMap {
|
RawMap {
|
||||||
name,
|
city_name: city_name.to_string(),
|
||||||
|
name: name.to_string(),
|
||||||
roads: BTreeMap::new(),
|
roads: BTreeMap::new(),
|
||||||
intersections: BTreeMap::new(),
|
intersections: BTreeMap::new(),
|
||||||
buildings: BTreeMap::new(),
|
buildings: BTreeMap::new(),
|
||||||
@ -103,17 +105,24 @@ impl RawMap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn apply_all_fixes(&mut self, timer: &mut Timer) {
|
pub fn apply_all_fixes(&mut self, timer: &mut Timer) {
|
||||||
|
// TODO Seattle-specific right now
|
||||||
|
if self.city_name != "seattle" {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if self.name == "huge_seattle" {
|
if self.name == "huge_seattle" {
|
||||||
let master_fixes: MapFixes =
|
let master_fixes: MapFixes = abstutil::maybe_read_json(
|
||||||
abstutil::maybe_read_json(abstutil::path_fixes("huge_seattle"), timer)
|
abstutil::path_fixes(&self.city_name, "huge_seattle"),
|
||||||
|
timer,
|
||||||
|
)
|
||||||
.unwrap_or_else(|_| MapFixes::new(self.gps_bounds.clone()));
|
.unwrap_or_else(|_| MapFixes::new(self.gps_bounds.clone()));
|
||||||
self.apply_fixes("huge_seattle", &master_fixes, timer);
|
self.apply_fixes("huge_seattle", &master_fixes, timer);
|
||||||
} else {
|
} else {
|
||||||
let mut master_fixes: MapFixes =
|
let mut master_fixes: MapFixes =
|
||||||
abstutil::read_json(abstutil::path_fixes("huge_seattle"), timer);
|
abstutil::read_json(abstutil::path_fixes(&self.city_name, "huge_seattle"), timer);
|
||||||
master_fixes.remap_pts(&self.gps_bounds);
|
master_fixes.remap_pts(&self.gps_bounds);
|
||||||
let local_fixes: MapFixes =
|
let local_fixes: MapFixes =
|
||||||
abstutil::maybe_read_json(abstutil::path_fixes(&self.name), timer)
|
abstutil::maybe_read_json(abstutil::path_fixes(&self.city_name, &self.name), timer)
|
||||||
.unwrap_or_else(|_| MapFixes::new(self.gps_bounds.clone()));
|
.unwrap_or_else(|_| MapFixes::new(self.gps_bounds.clone()));
|
||||||
self.apply_fixes("huge_seattle", &master_fixes, timer);
|
self.apply_fixes("huge_seattle", &master_fixes, timer);
|
||||||
self.apply_fixes(&self.name.clone(), &local_fixes, timer);
|
self.apply_fixes(&self.name.clone(), &local_fixes, timer);
|
||||||
@ -189,6 +198,8 @@ impl RawMap {
|
|||||||
|
|
||||||
// TODO Ignores buildings right now.
|
// TODO Ignores buildings right now.
|
||||||
pub fn generate_fixes(&self, timer: &mut Timer) -> MapFixes {
|
pub fn generate_fixes(&self, timer: &mut Timer) -> MapFixes {
|
||||||
|
// TODO Need to generalize this a bit
|
||||||
|
assert_eq!(self.city_name, "seattle");
|
||||||
let orig: RawMap = abstutil::read_binary(abstutil::path_raw_map(&self.name), timer);
|
let orig: RawMap = abstutil::read_binary(abstutil::path_raw_map(&self.name), timer);
|
||||||
|
|
||||||
let mut fixes = MapFixes::new(self.gps_bounds.clone());
|
let mut fixes = MapFixes::new(self.gps_bounds.clone());
|
||||||
@ -229,7 +240,7 @@ impl RawMap {
|
|||||||
if self.name != "huge_seattle" {
|
if self.name != "huge_seattle" {
|
||||||
// Filter out things that we just inherited from the master fixes.
|
// Filter out things that we just inherited from the master fixes.
|
||||||
let mut master_fixes: MapFixes =
|
let mut master_fixes: MapFixes =
|
||||||
abstutil::read_json(abstutil::path_fixes("huge_seattle"), timer);
|
abstutil::read_json(abstutil::path_fixes(&self.city_name, "huge_seattle"), timer);
|
||||||
master_fixes.remap_pts(&self.gps_bounds);
|
master_fixes.remap_pts(&self.gps_bounds);
|
||||||
|
|
||||||
fixes.delete_roads = fixes
|
fixes.delete_roads = fixes
|
||||||
|
Loading…
Reference in New Issue
Block a user