在Google Maps API V3中获取非包装地图边界

时间:2012-03-08 20:52:49

标签: google-maps google-maps-api-3

如果你缩放谷歌地图,世界将开始水平重复。使用.getBounds()似乎返回显示的地图图像边缘的经度。但我希望获得当前现实世界观的最小和最大经度。

例如,在此图像中,.getBounds()表示经度介于116和37度之间(宽度为-79度!)。我正在寻找的范围是-244到+37。 (甚至-180到+37,因为这是世界上可以在地图中心看到的极端情况。)

google-map-bounds1

另一个例子。在这里,我正在寻找-180到+180 ...... google-map-bounds2

你可以在这里尝试一下...... http://jsfiddle.net/spiderplant0/EBNYT/

(如果之前已经回答道歉 - 我确实找到了一些旧的类似问题,但似乎没有一个问题得到满意答案。)

3 个答案:

答案 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'})
            }
        };