首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery函数返回google地图缩放级别

jQuery函数返回google地图缩放级别
EN

Stack Overflow用户
提问于 2011-08-26 03:40:54
回答 2查看 949关注 0票数 0

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

缩放层0 1:20088000.56607700米

变焦1:10044000.28303850米

变焦二级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 :19617.18805281米

变焦级11 :9808.59402640米

变焦级12 :4909.29701320米

变焦级13 :2452.14850660米

变焦电平14 1:1226.07425330米

变焦级15 :613.03712665米

变焦级别16 :306.51856332米

缩放级别17 1:153.25928166米

变焦级18 :76.62964083米

变焦级19 :38.31482042米

我希望使用这些信息创建如下所示的函数:

代码语言:javascript
运行
复制
function getZoomLevel(meters) {
    //take input in whole meters
    //return best match for zoom level as integer
}

我已经考虑过做嵌套的,如果不是更大/更少的条件,但有没有一个更精简的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-26 04:01:52

变焦级别的每一次下降都意味着表的两倍,所以您不必存储每个单独的值。

你可以试试这个:

代码语言:javascript
运行
复制
function getZoomLevel(m){
    var z=0;
    var i=20088000;
    while(i/2>=m && z<19){
        z++;
        i=i/2;
    }
    return z;
}

当仪表超过当前电平时,它将返回下一个较小的缩放级别。

或更好:

代码语言:javascript
运行
复制
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;
}
票数 3
EN

Stack Overflow用户

发布于 2011-08-26 03:54:41

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

代码语言:javascript
运行
复制
var zoomLevels = [
    20088000.56607700,
    10044000.28303850,
    5022000.14151925,
    2511000.07075963
    // etc. ...
];

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

代码语言:javascript
运行
复制
function getZoomLevel(meters) {
    for (var idx = 0; idx < zoomLevels.length; ++idx) {
        if (zoomLevels[idx] < meters) {
            return idx;
        }
    }
    return zoomLevels.length - 1;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7199790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档