How to get the center of a polygon in google maps v3?
It doesn't need to be 100% correct, it can be the center of the bounding rectangle.
Solution 1:
Matthew's answer is a good solution. However, when using the Google Maps API v3, you might want to pass each point of the polygon to a LatLngBounds
object through the extend()
method, and then finally call the getCenter()
method on the LatLngBounds
object. Consider the following example:
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());
Solution 2:
Algorithm:
Run through all the points in the polygon. For all the points find;
-
x1
, the lowestx
coordinate -
y1
, the lowesty
coordinate -
x2
, the highestx
coordinate -
y2
, the highesty
coordinate
You now have the bounding rectangle, and can work out the center using:
center.x = x1 + ((x2 - x1) / 2);
center.y = y1 + ((y2 - y1) / 2);
Solution 3:
you can extend the Polygon class with your own version of the missing function, let's call it 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
}
and than use it in code like this :
myPolygon.my_getBounds().getCenter()
... etc, it should be equivalent to the v2 behavior