diff options
author | Daniel Schadt <kingdread@gmx.de> | 2023-03-11 19:38:16 +0100 |
---|---|---|
committer | Daniel Schadt <kingdread@gmx.de> | 2023-03-11 19:38:16 +0100 |
commit | 4e8ce5bbaf5aa71f7e00e7a131fc6b25e623c992 (patch) | |
tree | 5fc46f69c5ddc78d974f3b93e83af0eacf1b59d1 /src/main.rs | |
parent | 718d4fbf8b6e85ab808b11143b0657e75096ef73 (diff) | |
download | hittekaart-4e8ce5bbaf5aa71f7e00e7a131fc6b25e623c992.tar.gz hittekaart-4e8ce5bbaf5aa71f7e00e7a131fc6b25e623c992.tar.bz2 hittekaart-4e8ce5bbaf5aa71f7e00e7a131fc6b25e623c992.zip |
abstract away tile rendering logic
This is in prepration for the tilehunt mode, where we want to render
tiles differently.
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/main.rs b/src/main.rs index e5b835e..6c110e2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,13 @@ use std::{io, path::PathBuf}; -use clap::Parser; +use clap::{Parser, ValueEnum}; use color_eyre::{ eyre::{bail, eyre, Result}, Report, }; use hittekaart::{ gpx::{self, Compression}, - renderer, + renderer::{self, heatmap, Renderer}, storage::{Folder, Sqlite, Storage}, }; use indicatif::{MultiProgress, ProgressBar, ProgressDrawTarget, ProgressStyle}; @@ -17,6 +17,13 @@ use rayon::{ ThreadPoolBuilder, }; +/// Tile generation mode. +#[derive(ValueEnum, Debug, Clone, Copy, PartialEq, Eq, Hash)] +enum Mode { + Heatmap, + Tilehunt, +} + #[derive(Parser, Debug, Clone)] #[command(author, version, about)] struct Args { @@ -45,6 +52,10 @@ struct Args { /// filename. #[arg(long)] sqlite: bool, + + /// Generation mode. + #[arg(value_enum, long, short, default_value_t = Mode::Heatmap)] + mode: Mode, } fn main() -> Result<()> { @@ -60,6 +71,10 @@ fn main() -> Result<()> { .num_threads(args.threads) .build_global()?; + run::<heatmap::Renderer>(args) +} + +fn run<R: Renderer>(args: Args) -> Result<()> { let progress_style = ProgressStyle::with_template("[{elapsed}] {prefix:.cyan} {wide_bar} {pos:.green}/{len}")?; let zoom_style = @@ -112,18 +127,19 @@ fn main() -> Result<()> { let bar = make_bar(tracks.len().try_into().unwrap()).with_style(progress_style.clone()); multibar.insert_from_back(1, bar.clone()); bar.set_prefix("Rendering heat zones"); - let counter = - renderer::render_heatcounter(zoom, &tracks, |x| bar.inc(x.try_into().unwrap())); + let counter = renderer::prepare::<R, _>(zoom, &tracks, || { + bar.inc(1); + Ok(()) + })?; bar.finish(); multibar.remove(&bar); storage.prepare_zoom(zoom)?; - let bar = - make_bar(counter.tile_count().try_into().unwrap()).with_style(progress_style.clone()); + let bar = make_bar(R::tile_count(&counter)?).with_style(progress_style.clone()); multibar.insert_from_back(1, bar.clone()); bar.set_prefix("Saving heat tiles"); - renderer::lazy_colorization(counter, |rendered_tile| { + renderer::colorize::<R, _>(counter, |rendered_tile| { storage.store(zoom, rendered_tile.x, rendered_tile.y, &rendered_tile.data)?; bar.inc(1); Ok(()) |