use crate::core::constants::AUTHALIC_AREA_EARTH;
use crate::core::serialization::FIRST_HILBERT_RESOLUTION;
pub fn get_num_cells(resolution: i32) -> u64 {
if resolution < 0 {
return 0;
}
if resolution == 0 {
return 12;
}
if resolution == 28 {
return 1080863910568919000;
}
if resolution == 29 {
return 4323455642275676000;
}
if resolution == 30 {
return 17293822569102705000;
}
60 * (4_u64.pow((resolution - 1) as u32))
}
pub fn get_num_children(parent_resolution: i32, child_resolution: i32) -> usize {
if child_resolution < parent_resolution {
return 0;
}
if child_resolution == parent_resolution {
return 1;
}
if parent_resolution >= FIRST_HILBERT_RESOLUTION {
return 4_usize.pow((child_resolution - parent_resolution) as u32);
}
let parent_count = get_num_cells(parent_resolution);
let parent_count = if parent_count == 0 { 1 } else { parent_count };
let child_count = get_num_cells(child_resolution);
(child_count / parent_count) as usize
}
pub fn cell_area(resolution: i32) -> f64 {
if resolution < 0 {
return AUTHALIC_AREA_EARTH;
}
AUTHALIC_AREA_EARTH / (get_num_cells(resolution) as f64)
}