获取Google Maps API V3中不换行的地图边界

5
如果您将谷歌地图放大,世界将开始水平重复。使用.getBounds()似乎返回显示的地图图像边缘的经度。但是我想要获取当前实际世界视图的最小和最大经度。
例如,在这张图片中,.getBounds()表示经度范围在116到37度之间(宽度为-79度!)。我正在寻找的范围是-244到+37。 (甚至是-180到+37,因为这是围绕地图中心可见的世界极端。)

google-map-bounds1

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

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

(如果此前已经有人回答过这个问题,请见谅 - 我找到了一些旧的类似问题,但没有一个令人满意的答案)。


请参考此链接:http://stackoverflow.com/questions/8032258/google-maps-bounds-on-minimal-zoom。这是同样的问题,但我不会将你的标记为重复,因为你的提问更加清晰,并且有图片帮助。 - Cheeso
3个回答

2

今天我遇到了同样的问题,但我想我终于弄清楚了。

在上面的第一种情况中,您可以使用map.getBounds().toSpan()来获取经度的宽度......只要地图没有环绕。

对于地图环绕的第二种情况,我扩展了google.maps.OverlayView()以获得google.maps.MapCanvasProjection对象。从那里你可以调用函数getWorldWidth()

它将给您像素的世界宽度,然后您可以将其与地图容器的宽度进行比较。如果您的容器更大,则地图已经环绕。

不知道这个函数是否用于此目的,但它确实有效。


1

用户user1292293提出的答案对我有用(Google地图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;

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接