[英]jQuery function to return google map zoom level
如http://laudontech.com/GISBlog/?p=28所引用,我知道Google地圖縮放級別的比例尺(以米為單位):
縮放級別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
}
我曾考慮過要進行嵌套(如果有更多/更少的條件),但是沒有更簡化的方法嗎?
縮放級別的每次降低都意味着米的加倍,因此您不必存儲每個單獨的值。
您可以嘗試以下方法:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.