1use crate::MAXZOOMLEVEL;
3use std::f64::consts::PI;
4
5pub struct GlobalMercator {
6 pub tile_size: usize,
7}
8
9impl GlobalMercator {
10 pub fn new(tile_size: usize) -> Self {
11 GlobalMercator { tile_size }
12 }
13
14 pub fn resolution(&self, zoom: &u32) -> f64 {
15 let initial_resolution = 2.0 * PI * 6378137.0 / (self.tile_size as f64);
16 initial_resolution / (2u32.pow(*zoom) as f64)
17 }
18
19 pub fn zoom_for_pixel_size(&self, pixel_size: &f64) -> u32 {
20 let mut zoom: u32 = 0;
21 for i in 0..MAXZOOMLEVEL {
22 if pixel_size > &self.resolution(&i) {
23 zoom = i - 1;
24 break;
25 };
26 }
27 zoom
28 }
29}
30
31impl Default for GlobalMercator {
32 fn default() -> Self {
33 Self::new(256)
34 }
35}