extern crate num_cpus;
use osmptparser::Parser;
use structopt::StructOpt;
#[derive(StructOpt, Debug)]
struct Cli {
#[structopt(parse(from_os_str))]
filename: std::path::PathBuf,
#[structopt(short = "f", long = "filter", default_value = "")]
filter: String,
#[structopt(short = "p", long = "filter-ptv2")]
filter_ptv2: bool,
#[structopt(short = "c", long = "cpus", default_value = "0")]
cpus: usize,
#[structopt(short = "g", long = "gap", default_value = "150.0")]
gap: f64,
}
fn main() {
let args = Cli::from_args();
let cpus = if args.cpus == 0 {
num_cpus::get()
} else {
args.cpus
};
let input_filename = &args.filename.into_os_string().into_string().unwrap();
if args.filter_ptv2 {
let parser = Parser::new_ptv2(input_filename, cpus);
println!("[");
let mut first = true;
for pt in parser.get_public_transports(args.gap) {
if !first {
println!(",");
} else {
first = false;
}
print!(" {}", pt.to_geojson());
}
print!("]");
} else {
let parser = Parser::new(input_filename, cpus, args.filter);
println!("[");
let mut first = true;
for area in parser.get_areas(args.gap) {
if area.parse_status.code != 0 {
continue;
}
if area.geometry.is_empty() {
continue;
}
if !first {
println!(",");
} else {
first = false;
}
print!(" {}", area.to_geojson());
}
println!();
println!("]");
}
}