aboutsummaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorDaniel Schadt <kingdread@gmx.de>2023-03-11 19:38:16 +0100
committerDaniel Schadt <kingdread@gmx.de>2023-03-11 19:38:16 +0100
commit4e8ce5bbaf5aa71f7e00e7a131fc6b25e623c992 (patch)
tree5fc46f69c5ddc78d974f3b93e83af0eacf1b59d1 /src/main.rs
parent718d4fbf8b6e85ab808b11143b0657e75096ef73 (diff)
downloadhittekaart-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.rs30
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(())