我正在尝试将Google地图的滚动限制为在所有方向上的一个世界实例。然而,我发现我的地图中心从来没有包含在我的严格范围内,从我所读到的是一个“世界”的界限。有人知道为什么我的地图中心永远不会包含在我的地图中吗?
编辑:我希望地图的中心在strictBounds中的任何地方都有效...即世界的单个实例(即你不能向左或向下滚动以向左或向下滚动两次以查看北美洲)我的gut告诉我,如果它不包含在我的坐标内,那么坐标是错误的,但是this堆栈溢出帖告诉我。
// Bounds for world
var strictBounds = new google.maps.LatLngBounds(
new google.maps.LatLng(85, -180), // top left corner of map
new google.maps.LatLng(-85, 180) // bottom right corner
);
var lastValidCenter = map.getCenter();
// Listen for the dragend event
google.maps.event.addListener(map, 'dragend', function() {
console.log("dragend");
if (strictBounds.contains(map.getCenter())) return;
// We're out of bounds - Move the map back within the bounds
var c = map.getCenter(),
x = c.lng(),
y = c.lat(),
maxX = strictBounds.getNorthEast().lng(),
maxY = strictBounds.getNorthEast().lat(),
minX = strictBounds.getSouthWest().lng(),
minY = strictBounds.getSouthWest().lat();
if (x < minX) x = minX;
if (x > maxX) x = maxX;
if (y < minY) y = minY;
if (y > maxY) y = maxY;
console.log(x,y);
// not valid anymore => return to last valid position
map.panTo(lastValidCenter);
});
答案 0 :(得分:1)
我看到需要进行以下更改:
- 您的maxY和minY值混淆了:
醇>
maxX = strictBounds.getNorthEast().lng(),
minY = strictBounds.getNorthEast().lat(),
minX = strictBounds.getSouthWest().lng(),
maxY = strictBounds.getSouthWest().lat();
- 如果任何当前坐标超出严格绑定坐标,那么我们想要平移到最后一个有效中心:
醇>
if (x < minX || x > maxX || y < minY || y > maxY)
map.panTo(lastValidCenter);
- 根据您需要的功能类型,更新
的值 醇>lastValidCenter
:
if (x < minX || x > maxX || y < minY || y > maxY)
map.panTo(lastValidCenter);
else
lastValidCenter = map.getCenter();
- 仅仅是我的观点,但我会使用不同的事件,而不是
醇>dragend
可能更直接的事情,如center_changed
。但这又取决于您所需的功能。