Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回谷歌地图缩放级别的jQuery函数_Javascript_Jquery_Google Maps_Zooming - Fatal编程技术网

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

Javascript 返回谷歌地图缩放级别的jQuery函数,javascript,jquery,google-maps,zooming,Javascript,Jquery,Google Maps,Zooming,如中所述,我知道谷歌地图缩放级别的比例(以米为单位): 缩放级别0 1:20088000.56607700米 缩放级别1:10044000.28303850米 缩放级别2 1:5022000.14151925米 缩放级别3 1:2511000.075963米 缩放级别4 1:1255500.03537981米 变焦级别5 1:627750.01768991米 缩放级别6 1:313875.00884495米 缩放级别7 1:156937.5044248米 缩放级别8 1:78468.752211

如中所述,我知道谷歌地图缩放级别的比例(以米为单位):

缩放级别0 1:20088000.56607700米

缩放级别1:10044000.28303850米

缩放级别2 1:5022000.14151925米

缩放级别3 1:2511000.075963米

缩放级别4 1:1255500.03537981米

变焦级别5 1:627750.01768991米

缩放级别6 1:313875.00884495米

缩放级别7 1:156937.5044248米

缩放级别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大于/小于条件,但没有更精简的方法吗?

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

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

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

函数getZoomLevel(米){
对于(变量idx=0;idx
如果在数组中存储缩放级别,例如

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

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

函数getZoomLevel(米){
对于(变量idx=0;idx
缩放级别的每一次降低都意味着米的倍增,因此您不必存储每个单独的值

你可以试试这个:

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

如果(z缩放级别的每次降低都意味着倍增米数,因此您不必存储每个单独的值

你可以试试这个:

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

如果(z“因为已知缩放级别数组正在减少”意味着您将找到正确的答案,那么它是O(n),因为它是一个线性搜索。但这只是吹毛求疵。有道理。所以第一次缩放级别小于米时,它会触发一个返回,对吗?要尝试用jQuery each()重写它吗函数为kicks.function getZoomLevel(meters){$。每个(ZoomLevel,function(index,value){if(valuemeters
除以twoOk我现在明白了……直到我仔细观察后才注意到缩放数据中的模式。添加了另一种没有循环的方式:)什么是“/2”比特在做什么?我不确定我是否明白。while循环的每一次迭代,缩放级别都会增加,并且
除以2。我现在明白了…直到我仔细观察后才注意到缩放数据中的模式。添加了另一种没有循环的方式:)