"""Some utilities for bokeh ui."""from__future__importannotationsfromcmathimportpiimportnumpyasnpscale_factor=2init_res=40211.5*scale_factor*(2/(100*pi))min_zoom=0max_zoom=10resolutions=[init_res/2**levforlevinrange(min_zoom,max_zoom+1)]
[docs]defget_level_by_extent(extent:tuple[float,float,float,float])->int:"""Replicate the Bokeh tile renderer `get_level_by_extent` function."""x_rs=(extent[2]-extent[0])/1700y_rs=(extent[3]-extent[1])/1000resolution=np.maximum(x_rs,y_rs)i=0forrinresolutions:ifresolution>r:ifi==0:return0returni-1i+=1# Otherwise return the highest available resolutionreturni-1