试图获得多边形的中心纬度/长度

时间:2011-03-03 23:13:22

标签: google-maps google-maps-api-3

我试图用一个多边形中心的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)。

2 个答案:

答案 0 :(得分:4)

数学上不规则多边形没有中心。然而,它们具有通常是近似中心的质心(重心)。

以下是计算多边形质心的公式:

centroid equation

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,虽然这个不是多边形的中心,除非它是一个矩形