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