如果你缩放谷歌地图,世界将开始水平重复。使用.getBounds()似乎返回显示的地图图像边缘的经度。但我希望获得当前现实世界观的最小和最大经度。
例如,在此图像中,.getBounds()表示经度介于116和37度之间(宽度为-79度!)。我正在寻找的范围是-244到+37。 (甚至-180到+37,因为这是世界上可以在地图中心看到的极端情况。)
另一个例子。在这里,我正在寻找-180到+180 ......
你可以在这里尝试一下...... http://jsfiddle.net/spiderplant0/EBNYT/
(如果之前已经回答道歉 - 我确实找到了一些旧的类似问题,但似乎没有一个问题得到满意答案。)
答案 0 :(得分:2)
我今天遇到了同样的问题,但我想我终于明白了。
在上面的第一个场景中,只要地图没有环绕,就可以使用map.getBounds()。toSpan()来获取经度.....的宽度。
对于地图环绕的第二种情况,我扩展了google.maps.OverlayView()
以获取google.maps.MapCanvasProjection
对象。从那里你可以调用函数getWorldWidth()
。
它将以像素为单位给出世界宽度,然后您可以将其与地图容器的宽度进行比较。如果您的容器更大,那么您的地图已经四处乱转。
不知道该功能是否适用于此功能,但它有效。
答案 1 :(得分:1)
user1292293提出的答案对我有用(Google map api V3)
google.maps.OverlayView()
的扩展function MyMapOverlay() {}
MyMapOverlay.prototype = new google.maps.OverlayView();
MyMapOverlay.prototype.onAdd = function() {};
MyMapOverlay.prototype.draw = function() {};
MyMapOverlay.prototype.onRemove = function() {};
向地图添加叠加层
var map = new google.maps.Map(domContainer, {...});
var overlay = new MyMapOverlay();
overlay.setMap(map);
检查地图是否包裹:
var proj = overlay.getProjection();
var wwidth = 0;
if (proj) wwidth = proj.getWorldWidth();
var mapsWrapsAround=false;
if (__wwidth > 0 && __wwidth < domContainer.width()) mapsWrapsAround = true;
答案 2 :(得分:0)
我使用了rebpp的答案,通过设置getWorldWidth来阻止地图包装。这是我创建的MapWrappingPrevent。
要使用此功能,请致电
var wrapPreventer = new MapWrappingPrevent(_map);
/* This class prevents wrapping of a map by adjusting the max-width */
function MapWrappingPrevent(map) {
var self = this;
this.setMap(map);
map.addListener('zoom_changed', function () {
self.onZoomChanged();
});
}
MapWrappingPrevent.prototype = new google.maps.OverlayView();
MapWrappingPrevent.prototype.onAdd = function () { this.onZoomChanged(); };
MapWrappingPrevent.prototype.draw = function () { };
MapWrappingPrevent.prototype.onRemove = function () { };
MapWrappingPrevent.prototype.onZoomChanged = function () {
var proj = this.getProjection();
if (proj) {
var wrappingWidth = proj.getWorldWidth();
$(this.getMap().getDiv()).css({'max-width': wrappingWidth + 'px'})
}
};