update to zoom zone

This commit is contained in:
2025-11-26 15:22:54 +01:00
parent 696d058fed
commit 0d73796900
2 changed files with 121 additions and 57 deletions

View File

@@ -222,7 +222,20 @@ async fn fetch_cached(url: &str) -> Option<String> {
}
fn get_visible_tiles(camera: &Camera) -> Vec<(i32, i32, i32)> {
let z = 10; // Fixed zoom level for data
// Select zoom level based on camera zoom
// Zoom 6: World/Country view
// Zoom 9: Region view
// Zoom 12: City view
// Zoom 14: Street view
let z = if camera.zoom < 500.0 {
6
} else if camera.zoom < 2000.0 {
9
} else if camera.zoom < 8000.0 {
12
} else {
14
};
let n = 2.0f64.powi(z);
let half_width = 1.0 * camera.aspect / camera.zoom;
@@ -360,8 +373,8 @@ pub async fn run() {
if let Some(btn) = btn_zoom_in {
let closure = wasm_bindgen::closure::Closure::<dyn FnMut()>::new(move || {
let mut cam = camera_clone.lock().unwrap();
cam.zoom *= 1.2;
cam.zoom = cam.zoom.max(100.0).min(50000.0);
cam.zoom *= 1.5;
cam.zoom = cam.zoom.max(20.0).min(50000.0);
window_clone.request_redraw();
});
btn.set_onclick(Some(closure.as_ref().unchecked_ref()));
@@ -376,8 +389,8 @@ pub async fn run() {
if let Some(btn) = btn_zoom_out {
let closure = wasm_bindgen::closure::Closure::<dyn FnMut()>::new(move || {
let mut cam = camera_clone.lock().unwrap();
cam.zoom /= 1.2;
cam.zoom = cam.zoom.max(100.0).min(50000.0);
cam.zoom /= 1.5;
cam.zoom = cam.zoom.max(20.0).min(50000.0);
window_clone.request_redraw();
});
btn.set_onclick(Some(closure.as_ref().unchecked_ref()));
@@ -505,7 +518,7 @@ pub async fn run() {
};
let mut cam = camera.lock().unwrap();
let zoom_factor = 1.1f32;
let zoom_factor = 1.5f32;
if scroll_y > 0.0 {
cam.zoom *= zoom_factor;
} else if scroll_y < 0.0 {
@@ -513,7 +526,7 @@ pub async fn run() {
}
// Clamp zoom
cam.zoom = cam.zoom.max(100.0).min(50000.0);
cam.zoom = cam.zoom.max(20.0).min(50000.0);
window.request_redraw();
}
@@ -713,7 +726,7 @@ pub async fn run() {
contents: bytemuck::cast_slice(&landuse_vertex_data),
usage: wgpu::BufferUsages::VERTEX,
});
web_sys::console::log_1(&format!("Created landuse buffer with {} vertices", landuse_vertex_data.len()).into());
let water_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
label: Some("Tile Water Buffer"),
@@ -826,23 +839,17 @@ pub async fn run() {
}
if let Some(landuse) = landuse_data {
if !landuse.is_empty() {
web_sys::console::log_1(&format!("Fetched {} landuse items for tile {}/{}/{}", landuse.len(), z, x, y).into());
}
guard.landuse.insert((z, x, y), landuse);
}
if let Some(water) = water_data {
if !water.is_empty() {
web_sys::console::log_1(&format!("Fetched {} water items for tile {}/{}/{}", water.len(), z, x, y).into());
}
guard.water.insert((z, x, y), water);
}
if let Some(railways) = railways_data {
if !railways.is_empty() {
web_sys::console::log_1(&format!("Fetched {} railway items for tile {}/{}/{}", railways.len(), z, x, y).into());
}
guard.railways.insert((z, x, y), railways);
}