一尘不染

Google Maps缩放级别计算如何工作?

algorithm

我知道输入和输出是什么,但是我不确定它如何或为什么起作用。

在给定包含一组点的最小和最大经度/纬度(一个正方形)的情况下,使用此代码确定Google地图上仍将显示所有这些点的最大缩放级别。原始作者不见了,所以我不确定这些数字中的某些数字是多少(即6371和8)。认为这是一个难题=
D

int mapdisplay = 322; //min of height and width of element which contains the map
double dist = (6371 * Math.acos(Math.sin(min_lat / 57.2958) * Math.sin(max_lat / 57.2958) + 
            (Math.cos(min_lat / 57.2958) * Math.cos(max_lat / 57.2958) * Math.cos((max_lon / 57.2958) - (min_lon / 57.2958)))));

double zoom = Math.floor(8 - Math.log(1.6446 * dist / Math.sqrt(2 * (mapdisplay * mapdisplay))) / Math.log (2));

if(numPoints == 1 || ((min_lat == max_lat)&&(min_lon == max_lon))){
    zoom = 11;
}

阅读 231

收藏
2020-07-28

共1个答案

一尘不染

一些数字很容易解释

再一次,缩放级别将每一步的大小加倍,即,将缩放级别增加到屏幕大小的一半。

zoom = 8 - log(factor * dist) / log(2) = 8 - log_2(factor * dist)
=> dist = 2^(8-zoom) / factor

从数字中我们发现八级缩放对应于276.89公里的距离。

2020-07-28