Add --center-lat, --center-lon, --zoom CLI arguments

Allow overriding the map centre and OSM zoom level from the command
line, keeping the existing values as defaults.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Schuwi
2026-03-07 11:10:55 +01:00
parent 71d6588dc3
commit c7c08ebead
2 changed files with 30 additions and 15 deletions

View File

@@ -34,6 +34,18 @@ struct Args {
/// Disable OpenStreetMap base layer (use flat green background)
#[arg(long)]
no_basemap: bool,
/// Map centre latitude in degrees (default: 52.56)
#[arg(long, value_name = "LAT", default_value_t = render::DEFAULT_CENTER_LAT)]
center_lat: f64,
/// Map centre longitude in degrees (default: 13.08)
#[arg(long, value_name = "LON", default_value_t = render::DEFAULT_CENTER_LON)]
center_lon: f64,
/// OSM tile zoom level (default: 10)
#[arg(long, value_name = "ZOOM", default_value_t = render::DEFAULT_OSM_ZOOM)]
zoom: u8,
}
fn main() -> Result<()> {
@@ -134,12 +146,12 @@ fn main() -> Result<()> {
let basemap = if args.no_basemap {
None
} else {
let proj = render::make_projection();
let proj = render::make_projection(args.center_lat, args.center_lon, args.zoom);
let tile_cache = tiles::fetch_tiles(
&proj,
render::MAP_W,
render::MAP_H,
render::OSM_ZOOM,
args.zoom,
&PathBuf::from(CACHE_DIR),
)?;
Some(tiles::rasterize_basemap(
@@ -153,12 +165,12 @@ fn main() -> Result<()> {
let labels = if args.no_basemap {
None
} else {
let proj = render::make_projection();
let proj = render::make_projection(args.center_lat, args.center_lon, args.zoom);
let label_cache = tiles::fetch_label_tiles(
&proj,
render::MAP_W,
render::MAP_H,
render::OSM_ZOOM,
args.zoom,
&PathBuf::from(CACHE_DIR),
)?;
Some(tiles::rasterize_labels(
@@ -200,7 +212,7 @@ fn main() -> Result<()> {
let out_name = format!("clct_{:06}.png", step + 1);
let out_path = cache_dir.join(&out_name);
render::render_frame(&out_path, &lats, &lons, &cloud, &title, basemap.as_deref(), labels.as_deref())
render::render_frame(&out_path, &lats, &lons, &cloud, &title, basemap.as_deref(), labels.as_deref(), args.center_lat, args.center_lon, args.zoom)
.with_context(|| format!("Rendering frame {}", step))?;
eprintln!(" [{:02}/{:02}] {}", step + 1, args.prediction_hours, out_name);