它不需要100%正确,它可以是边界矩形的中心。
答案 0 :(得分:188)
Matthew's answer是一个很好的解决方案。但是,在使用Google Maps API v3时,您可能希望通过extend()
方法将多边形的每个点传递给LatLngBounds
对象,然后最后调用getCenter()
方法。 LatLngBounds
对象。请考虑以下示例:
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());
答案 1 :(得分:59)
算法:
遍历多边形中的所有点。找到所有要点;
x1
,最低x
坐标y1
,最低y
坐标x2
,最高x
坐标y2
,最高y
坐标您现在拥有了边界矩形,可以使用以下方法计算出中心:
center.x = x1 + ((x2 - x1) / 2);
center.y = y1 + ((y2 - y1) / 2);
答案 2 :(得分:47)
你可以使用自己版本的缺失函数扩展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行为
答案 3 :(得分:7)
这是我写的自定义函数。随意使用它。
function polygonCenter(poly) {
var latitudes = [];
var longitudes = [];
var vertices = poly.getPath();
// put all latitudes and longitudes in arrays
for (var i = 0; i < vertices.length; i++) {
longitudes.push(vertices.getAt(i).lng());
latitudes.push(vertices.getAt(i).lat());
}
// sort the arrays low to high
latitudes.sort();
longitudes.sort();
// get the min and max of each
var lowX = latitudes[0];
var highX = latitudes[latitudes.length - 1];
var lowy = longitudes[0];
var highy = longitudes[latitudes.length - 1];
// center of the polygon is the starting point plus the midpoint
var centerX = lowX + ((highX - lowX) / 2);
var centerY = lowy + ((highy - lowy) / 2);
return (new google.maps.LatLng(centerX, centerY));
}
答案 4 :(得分:2)
请注意,在凹多边形的情况下,边界矩形的中心可能完全在多边形之外。如果您的多边形可能凹陷,我建议使用最大内切圆的中心作为&#34;中心&#34;多边形您可以看到一个足够简单的算法here (p. 4)。如果你的任务是在多边形上放置一个标签,这也会给出最美观的结果(在这种情况下,我建议使用这种方法,即使你的多边形可能不是凹的)。
答案 5 :(得分:1)
用喷粉刺/颤振寻找汤姆的答案 您可以使用以下代码实现相同的目的。
calculateCenter(List<LatLng> points) {
var longitudes = points.map((i) => i.longitude).toList();
var latitudes = points.map((i) => i.latitude).toList();
latitudes.sort();
longitudes.sort();
var lowX = latitudes.first;
var highX = latitudes.last;
var lowy = longitudes.first;
var highy = longitudes.last;
var centerX = lowX + ((highX - lowX) / 2);
var centerY = lowy + ((highy - lowy) / 2);
return LatLng(centerX, centerY);
}
答案 6 :(得分:0)
获取多边形中心的kotlin版本。 mPoints
是latitude
和longitude
的数组。
val bounds = LatLngBounds.Builder()
for(i in 0 until mPoints.size) {
val point = LatLng(mPoints[i].latitude, mPoints[i].longitude)
bounds.include(point)
}
mMap.moveCamera(CameraUpdateFactory.newLatLng(bounds.build().center))