jQuery函数返回谷歌地图缩放级别
问题描述:
截至http://laudontech.com/GISBlog/?p=28参考,我知道在谷歌地图的缩放级别米的规模:jQuery函数返回谷歌地图缩放级别
缩放等级为0 1:20088000.56607700米
缩放级别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 else/less然后条件,但没有更简化的方法?
答
缩放级别的每次下降意味着双倍的米,所以你不必存储每个单独的值。
你可以试试这个:
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;
}
答
如果将缩放级别存储在数组中,例如
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;
}
什么是“/ 2”位?不知道我明白了。 – Inator
while循环的每次迭代缩放级别都会增加,“米数”除以2 – stewe
好吧,我现在得到它......没有注意到缩放数据中的图案,直到我仔细观察。 – Inator