这个问题的答案
是解决我的问题的好主意。
现在,问题是:我如何计算"加倍"缩放级别?
编辑
的意义:
地图上看的是一个正方形2x2 km,我想缩小看一个4x4 km正方形。
做newZoom=oldZoom*2
不工作:-((
缩放级别每增加一倍,比例就增加一倍。要缩小倍数为2,请在缩放级别上加1。
newZoom=oldZoom-1;
从文档:
世界坐标反映给定投影上的绝对位置,但我们需要将其转换为像素坐标以确定"像素"。给定缩放级别上的偏移量。这些像素坐标使用以下公式计算:
pixelCoordinate = worldCoordinate * 2 zoomLevel
从上面的等式中,注意每增加一个缩放级别在x和y方向上都是原来的两倍大。因此,每个更高的缩放级别所包含的分辨率是前一个级别的四倍。例如,在缩放级别1下,地图由4个256x256像素块组成,从而产生512x512的像素空间。在缩放级别19时,地图上的每个x和y像素都可以使用0到256 * 219之间的值来引用
使用SetZoom()
方法:
map.setZoom(oldZoom * 2);
也使用GetZoom():
map.setZoom(map.GetZoom() * 2);
最大缩放级别一般为19。0被放大得最大
值得注意的是,并不总是可以在地图的每个部分缩放到19,这里是关于它的更多信息:https://developers.google.com/maps/documentation/javascript/maxzoom
以及可以进一步放大的部分:http://www.wolfpil.de/v3/deep-zoom.html
虽然我还不确定你想要实现什么,但我做了这个。这似乎有点傻,但我真的不知道还能是什么。
代码片段:
google.maps.event.addDomListener(zoomInButton, 'click', function () {
if (newZoom <= 19) {
oldZoom = newZoom;
newZoom = oldZoom * 2; //maptOptions.zoom is the initial oldZoom
alert("New zoom is: " + newZoom);
alert("Old zoom is: " + oldZoom);
map.setZoom(newZoom);
} else {
alert("you have reached the maximum");
}
});
// Setup the click event listener - zoomOut
google.maps.event.addDomListener(zoomOutButton, 'click', function () {
if (newZoom > 1) {
oldZoom = newZoom;
newZoom = parseInt(oldZoom / 2);
alert("New zoom is: " + newZoom);
alert("Old zoom is: " + oldZoom);
map.setZoom(newZoom);
} else {
alert("you have reached the minimum");
}
});
小提琴URL: http://jsfiddle.net/eugensunic/jptLfhc8/121/