jQuery函数返回谷歌地图缩放级别

时间:2011-08-26 03:40:55

标签: javascript jquery google-maps zoom

http://laudontech.com/GISBlog/?p=28引用,我知道谷歌地图缩放级别的米尺度:

  

缩放级别0 1:20088000.56607700米

     

缩放级别1 1:10044000.28303850米

     

放大等级2 1:5022000.14151925米

     

放大等级3 1:2511000.07075963米

     

放大等级4 1:1255500.03537981米

     

放大等级5 1:627750.01768991米

     

放大等级6 1:313875.00884495米

     

放大等级7 1:156937.50442248米

     

放大等级8 1:78468.75221124米

     

放大等级9 1:39234.37610562米

     

放大等级10 1:19617.18805281米

     

放大等级11 1:9808.59402640米

     

放大等级12 1:4909.29701320米

     

放大等级13 1:2452.14850660米

     

放大等级14 1:1226.07425330米

     

放大等级15 1:613.03712665米

     

放大等级16 1:306.51856332米

     

放大等级17 1:153.25928166米

     

放大等级18 1:76.62964083米

     

缩放级别19 1:38.31482042米

我想使用这些信息创建一个类似的函数:

function getZoomLevel(meters) {
    //take input in whole meters
    //return best match for zoom level as integer
}

我已经考虑过嵌套if else更多/更少条件,但是不是有更简化的方法吗?

2 个答案:

答案 0 :(得分:3)

缩放级别的每次降低都意味着将仪表加倍,因此您不必存储每个单独的值。

你可以试试这个:

function getZoomLevel(m){
    var z=0;
    var i=20088000;
    while(i/2>=m && z<19){
        z++;
        i=i/2;
    }
    return z;
}

只要米超过当前水平,它就会返回下一个较小的缩放级别。

或更好:

function getZoomLevel(m){
    var z=Math.floor((Math.log(20088000/m))/Math.log(2));
    if (z>19) z=19;
    if (z<0) z=0;
    return z;
}

答案 1 :(得分:1)

如果您将缩放级别存储在数组中,例如

var zoomLevels = [
    20088000.56607700,
    10044000.28303850,
    5022000.14151925,
    2511000.07075963
    // etc. ...
];

然后迭代以获得最佳效果。因为已知缩放级别数组正在减少,所以搜索将为O(n)

function getZoomLevel(meters) {
    for (var idx = 0; idx < zoomLevels.length; ++idx) {
        if (zoomLevels[idx] < meters) {
            return idx;
        }
    }
    return zoomLevels.length - 1;
}
相关问题