Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google maps 如何让谷歌地图显示整个多边形?_Google Maps_Gpolygon - Fatal编程技术网

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

Google maps 如何让谷歌地图显示整个多边形?,google-maps,gpolygon,Google Maps,Gpolygon,我有一组GPolygon对象,它们附加到我的域模型中的对象,并添加到我页面上的地图中。域对象显示在同一页面的列表中,当用户单击其中一个对象时,我希望显示关联的多边形 我希望显示整个多边形,理想情况下,我希望地图以多边形中心为中心 我希望会有一个maps API调用,沿着 myMap.makeSureYouCanSeeAllThisPolygon(aPolygon); 但我还没找到 如果我必须手动执行此操作,那么我显然可以轻松计算出居中,但如何计算缩放 可以使用aPolygon.getBound

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

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

我希望会有一个maps API调用,沿着

myMap.makeSureYouCanSeeAllThisPolygon(aPolygon);
但我还没找到


如果我必须手动执行此操作,那么我显然可以轻松计算出居中,但如何计算缩放

可以使用aPolygon.getBounds().getCenter()获得多边形的中心点myMap.setCenter()方法返回的
GLatLng


要获得缩放级别,可以使用
myMap.getBoundsZoomLevel(aPolygon.getBounds())
然后将其与
myMap.setZoom()
方法一起使用。

Google Maps v3 API本机不支持Google.Maps.Polygon类的
getBounds()
方法。这似乎很奇怪,因为google.maps.Map类有一个
fitBounds()
方法,这正是您要寻找的。。如果您以任何频率使用Google Maps API,那么这应该是您的诀窍:

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

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;
}
使用stage set,您只需在该多边形(或任何多边形)上居中并缩放即可:

map.fitBounds(myPolygon.getBounds());
又短又甜。希望有帮助


-凯文·詹姆斯(Kevin James)

此解决方案适用于我已成功添加到地图中的多边形。为google.maps.Polygon类添加getBounds()方法,然后使用map.fitbunds(myPolygon.getBounds())

想想他:

map.fitBounds(myPolygon.my_getBounds());

很有用。

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

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;
}
函数getArrayBounds(polyArray){ var bounds=new google.maps.LatLngBounds(); var路径,路径; 对于(var polys=0;polys这对我不起作用。控制台显示“p”未定义。我注意到谷歌随机更改了它的变量名,这是怎么回事吗?@Derek
path=path.getAt(p)应该是
path=path.getAt(i)。这非常有效。我建议您在getBounds()polyfill周围添加一个条件,以防Google将来选择以本机方式添加它。类似于:if(!google.maps.Polygon.prototype.getBounds)这是一个很好的解决方案,谢谢!我在回答另一个问题的时候也加上了强尼的病情。这不再是真的了!Maps v3放弃了getBounds()方法。检查此链接可扩展多边形以获得边界(Google Map v3),这正是我所需要的。但是,所有的
for
循环和这些东西都可以在一行中完成:
polygonsArray.forEach(polygon=>polygon.getpath().forEach(path=>path.forEach(latLng=>bounds.extend(latLng))
您只需要第一行(
let bounds=new google.maps…
),然后是上面的代码,最后是
返回边界行:)
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;
}