Derive OSM viewport from zoom level instead of the other way around

Replace the heuristic choose_zoom() back-computation with a fixed
OSM_ZOOM constant (zoom 10). The orthographic projection half-extents
are now derived so that one tile pixel maps exactly to one output pixel,
eliminating bilinear interpolation artefacts on the OSM base layer.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Schuwi
2026-03-07 11:04:26 +01:00
parent ff69c1d2db
commit 71d6588dc3
3 changed files with 29 additions and 35 deletions

View File

@@ -134,16 +134,12 @@ fn main() -> Result<()> {
let basemap = if args.no_basemap {
None
} else {
let proj = projection::OrthoProjection::new(
render::CENTER_LAT,
render::CENTER_LON,
render::HALF_W_DEG,
render::HALF_H_DEG,
);
let proj = render::make_projection();
let tile_cache = tiles::fetch_tiles(
&proj,
render::MAP_W,
render::MAP_H,
render::OSM_ZOOM,
&PathBuf::from(CACHE_DIR),
)?;
Some(tiles::rasterize_basemap(
@@ -157,16 +153,12 @@ fn main() -> Result<()> {
let labels = if args.no_basemap {
None
} else {
let proj = projection::OrthoProjection::new(
render::CENTER_LAT,
render::CENTER_LON,
render::HALF_W_DEG,
render::HALF_H_DEG,
);
let proj = render::make_projection();
let label_cache = tiles::fetch_label_tiles(
&proj,
render::MAP_W,
render::MAP_H,
render::OSM_ZOOM,
&PathBuf::from(CACHE_DIR),
)?;
Some(tiles::rasterize_labels(