пытаясь получить цент широту / долготу многоугольника - PullRequest
1 голос
/ 04 марта 2011

Я пытаюсь заполнить переменную "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 ]

4 голосов
/ 12 апреля 2012

Математически неправильный многоугольник не имеет центра.Однако у них есть центроид (центр тяжести), который обычно является приблизительным центром.

Вот уравнение для расчета центроида многоугольника:

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.

0 голосов
/ 04 марта 2011

Взгляните на пример , хотя этот не является центром многоугольника, кроме случаев, когда это прямоугольник

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...