如何在谷歌地图v3中获取多边形的中心?

它不需要100%正确,它可以是边界矩形的中心。

algorithm:

遍历多边形中的所有点。 对于所有的点发现;

  • x1 ,最低的x坐标
  • y1 ,最低的y坐标
  • x2 ,最高的x坐标
  • y2 ,最高的y坐标

你现在有了边界矩形,可以使用下面的方法计算出中心:

 center.x = x1 + ((x2 - x1) / 2); center.y = y1 + ((y2 - y1) / 2); 

马修的答案是一个很好的解决scheme。 但是,使用Google Maps API v3时,可能需要通过extend()方法将多边形的每个点传递给LatLngBounds对象,最后调用LatLngBounds对象上的getCenter()方法。 考虑下面的例子:

 var bounds = new google.maps.LatLngBounds(); var i; // The Bermuda Triangle var polygonCoords = [ new google.maps.LatLng(25.774252, -80.190262), new google.maps.LatLng(18.466465, -66.118292), new google.maps.LatLng(32.321384, -64.757370), new google.maps.LatLng(25.774252, -80.190262) ]; for (i = 0; i < polygonCoords.length; i++) { bounds.extend(polygonCoords[i]); } // The Center of the Bermuda Triangle - (25.3939245, -72.473816) console.log(bounds.getCenter()); 

你可以使用你自己的缺失函数来扩展Polygon类,我们称之为my_getBounds():

 google.maps.Polygon.prototype.my_getBounds=function(){ var bounds = new google.maps.LatLngBounds() this.getPath().forEach(function(element,index){bounds.extend(element)}) return bounds } 

而不是在代码中使用它:

 myPolygon.my_getBounds().getCenter() 

…等等,它应该相当于V2的行为

@Matthew Scharley的回答是我的algorithm。 这可能是坏的。 要温柔。 我写了它,因为V3 API中的getCenter()函数仅适用于矩形和圆形,而不适用于多边形。

 function polygonCenter(poly) { var lowx, highx, lowy, highy, lats = [], lngs = [], vertices = poly.getPath(); for(var i=0; i<vertices.length; i++) { lngs.push(vertices.getAt(i).lng()); lats.push(vertices.getAt(i).lat()); } lats.sort(); lngs.sort(); lowx = lats[0]; highx = lats[vertices.length - 1]; lowy = lngs[0]; highy = lngs[vertices.length - 1]; center_x = lowx + ((highx-lowx) / 2); center_y = lowy + ((highy - lowy) / 2); return (new google.maps.LatLng(center_x, center_y)); } 

请注意,在凹多边形的情况下,边界矩形的中心可能完全位于多边形之外。 如果你的多边形可能是凹的,我build议使用最大的内切圆的中心作为多边形的“中心”。 你可以在这里看到一个简单的algorithm(第4页) 。 如果你的任务是在多边形上放置一个标签,这也将给出最美观的结果(在这种情况下,即使你的多边形不是凹的,我build议使用这种方法)。