我试图用一个多边形中心的latlon填充var“polyCenter”,它让我疯狂......
var paths = MapToolbar.features["shapeTab"]["shape_1"].getPath();
var i;
for (i = 0; i < paths.length; i++) {
bounds.extend(paths[i]);
}
polyCenter = bounds.getCenter();
alert(polyCenter);
由于某种原因它会一直返回(0,-180)。
答案 0 :(得分:4)
数学上不规则多边形没有中心。然而,它们具有通常是近似中心的质心(重心)。
以下是计算多边形质心的公式:
JavaScript中的等式:
function GetCentroid(paths){
var f;
var x = 0;
var y = 0;
var nPts = paths.length;
var j = nPts-1;
var area = 0;
for (var i = 0; i < nPts; j=i++) {
var pt1 = paths[i];
var pt2 = paths[j];
f = pt1.lat() * pt2.lng() - pt2.lat() * pt1.lng();
x += (pt1.lat() + pt2.lat()) * f;
y += (pt1.lng() + pt2.lng()) * f;
area += pt1.lat() * pt2.lng();
area -= pt1.lng() * pt2.lat();
}
area /= 2;
f = area * 6;
return new google.maps.LatLng(x/f, y/f);
}
这是基于@Argiropoulos答案的updated fiddle。
答案 1 :(得分:0)
看一下example,虽然这个不是多边形的中心,除非它是一个矩形