如何让Google地图显示整个多边形?

Sim*_*mon 19 google-maps gpolygon

我有一组GPolygon对象,它们附加到我的域模型中的对象,并添加到我的页面上的地图中.域对象显示在同一页面上的列表中,当用户单击其中一个时,我想显示关联的多边形.

我想要显示整个多边形,理想情况下我希望地图以多边形中心为中心.

我希望有一个map API调用......

myMap.makeSureYouCanSeeAllThisPolygon(aPolygon);
Run Code Online (Sandbox Code Playgroud)

但我找不到一个.

如果我必须手动执行此操作,那么我可以很容易地找出中心,但我如何找出缩放?

小智 75

Google Maps v3 API本身不支持getBounds()google.maps.Polygon类的方法.这看起来很奇怪,因为google.maps.Map类有一个fitBounds()方法,这正是你正在寻找的..如果你使用任何频率的谷歌地图API,那么这应该在你的技巧包里::

getBounds() google.maps.Polygon类的方法

google.maps.Polygon.prototype.getBounds = function() {
    var bounds = new google.maps.LatLngBounds();
    var paths = this.getPaths();
    var path;        
    for (var i = 0; i < paths.getLength(); i++) {
        path = paths.getAt(i);
        for (var ii = 0; ii < path.getLength(); ii++) {
            bounds.extend(path.getAt(ii));
        }
    }
    return bounds;
}
Run Code Online (Sandbox Code Playgroud)

手头有这种方法使得在地图上居中和拟合多边形变得非常简单.

注意:如果你不熟悉getAt()并且getLength()这很好,那么它们是google.maps.MVCArray类独有的方法.当你调用getPaths()多边形的方法时,它会将你的LatLng数组作为LatLng的可变MVCArray返回..你可以在这里准备MVCArrays - Google Maps v3 API MVCArray类.

继续.这是框架,你必须在下一段代码之前的某个地方实现prototyped方法.

var map = new google.maps.Map(container, opts); // I'll spare the details on this

var coords = [
    new google.maps.LatLng(25.774252, -80.190262)
    ,new google.maps.LatLng(18.466465, -66.118292)
    ,new google.maps.LatLng(32.321384, -64.75737)
    ,new google.maps.LatLng(25.774252, -80.190262)
];

var myPolygon = new google.maps.Polygon({
    paths: coords
    ,strokeColor: "#A80000"
    ,strokeOpacity: 0.8
    ,strokeWeight: 1
    ,fillColor: "#0b2a32"
    ,fillOpacity: 0.12
});
Run Code Online (Sandbox Code Playgroud)

使用舞台设置,您需要做的就是使这个(或任何)多边形居中和缩放是::

map.fitBounds(myPolygon.getBounds());
Run Code Online (Sandbox Code Playgroud)

简短又甜蜜.希望有所帮助.

- 凯文詹姆斯

  • 这非常有效.我建议你在getBounds()polyfill周围添加一个条件,以防Google选择在将来本地添加它.类似的东西:if(!google.maps.Polygon.prototype.getBounds) (2认同)

Dou*_*oug 5

我编写了一个函数来添加到 Kevin James 解决方案中。它需要一个多边形数组并获取地图上可能拥有的所有多边形的边界。你只需要把它们推到一个数组上,然后你就可以调用我的函数来自动缩放地图。

function getArrayBounds(polyArray){
    var bounds = new google.maps.LatLngBounds();
    var path, paths; 
    for(var polys = 0; polys < polyArray.length; polys++) {
        paths = polyArray[polys].getPaths();       
        for (var i = 0; i < paths.getLength(); i++) {
            path = paths.getAt(i);
            for (var ii = 0; ii < path.getLength(); ii++) {
                bounds.extend(path.getAt(ii));
            }
        }
    }
    return bounds;
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*win 2

aPolygon.getBounds().getCenter();您可以通过使用然后使用GLatLng该方法返回的值来获取多边形的中心点myMap.setCenter()

要获取缩放级别,您可以使用myMap.getBoundsZoomLevel(aPolygon.getBounds());then use this withmyMap.setZoom()方法。

  • 这不再是真的!Maps v3 已放弃 getBounds() 方法。 (12认同)
  • 检查此链接以扩展多边形以获得边界(Google Map V3),http://tutorialspots.com/google-maps-javascript-api-v3-method-polygon-getbounds-515.html (2认同)