我目前正在开发一个响应式网站,其中包含一个包含谷歌地图的页面范围的 div 框。随着显示宽度(和高度)的变化,我需要在宽度 320 处设置不同的缩放级别,就像在 1200+ 处所做的那样。调整大小不是问题,也不是居中问题。
我想要实现的是随着视口的变化调整缩放级别,或者通过设置与某些屏幕分辨率相对应的不同缩放级别,或者从最小缩放到最大缩放。
我认为Stackoverflow 上的这篇文章几乎是关于同样的问题,但没有解决方案。任何想法都非常感谢!
我目前正在开发一个响应式网站,其中包含一个包含谷歌地图的页面范围的 div 框。随着显示宽度(和高度)的变化,我需要在宽度 320 处设置不同的缩放级别,就像在 1200+ 处所做的那样。调整大小不是问题,也不是居中问题。
我想要实现的是随着视口的变化调整缩放级别,或者通过设置与某些屏幕分辨率相对应的不同缩放级别,或者从最小缩放到最大缩放。
我认为Stackoverflow 上的这篇文章几乎是关于同样的问题,但没有解决方案。任何想法都非常感谢!
您需要边界框,即窗口的角落。然后您可以使用墨卡托投影来计算 x 和 y 比率:将 lat/lon 转换为像素坐标?. 然后您可以将比率乘以缩放级别并检查最小值和最大值。
确实是棘手的问题。最好在调整大小事件处理程序中设置一个计时器,因为该事件可以触发很多。
var zoomLevelSizes = [
{triggerWidth: 10000, zoomLevel: 9 },
{triggerWidth: 720, zoomLevel: 8 },
{triggerWidth: 320, zoomLevel: 7 }
];
var resizeTimeout = -1;
function handleResizeEvent() {
resizeTimeout = -1;
var width = window.innerWidth;
for(var i = zoomLevelSizes.length - 1; i >= 0; i--) {
if(width < zoomLevelSizes[i].triggerWidth) {
if(map.getZoom() > zoomLevelSizes[i].zoomLevel) {
map.setZoom(zoomLevelSizes[i].zoomLevel);
console.log('changed to zoom level ' + zoomLevelSizes[i].zoomLevel);
break;
}
}
}
}
handleResizeEvent()
//Can't do anything resource intensive here as this can get triggered a lot
google.maps.event.addDomListener(window, 'resize', function() {
if(resizeTimeout !== -1) {
clearTimeout(resizeTimeout);
}
resizeTimeout = setTimeout(handleResizeEvent, 500);
});