폴리곤의 중심좌표값을 받을 방법이 있을까요?

[FAQ] 지도/로컬 API 문의 전 꼭 읽어 주세요.
https://devtalk.kakao.com/t/faq-api/125610

poly
한개의 폴리곤 혹은 여러개의 폴리곤을 지도위에 표시할때 지도위 폴리곤(들)의 중심값을 받을 방법이 있는지 궁금합니다.

각각의 폴리곤은

[{“x”:126.9721263348244,“y”:35.935101710622604},{“x”:126.97267213841596,“y”:35.9350387490647},{“x”:126.97313761756446,“y”:35.934917186247176},{“x”:126.97370828158462,“y”:35.93507052398666},{“x”:126.97466679501618,“y”:35.93528252231057},{“x”:126.97516818575461,“y”:35.935489913071414},{“x”:126.97561963285402,“y”:35.93594963975575},{“x”:126.97584121769086,“y”:35.93612993323027},{“x”:126.9758896621395,“y”:35.93625949670302},{“x”:126.97589930864368,“y”:35.93642510210371},{“x”:126.97573847707697,“y”:35.9368892100025},{“x”:126.9755859802065,“y”:35.93727220745726},{“x”:126.97469393528723,“y”:35.937053471244084},{“x”:126.97381297813781,“y”:35.93683247770612},{“x”:126.97361901917559,“y”:35.936898901928664},{“x”:126.9733806769945,“y”:35.9371275397846},{“x”:126.97331828804076,“y”:35.9372818638327},{“x”:126.97325314120052,“y”:35.93739788439511},{“x”:126.97312131459061,“y”:35.937552896938584},{“x”:126.97306156171112,“y”:35.9375907639207},{“x”:126.97287831298324,“y”:35.93772506421379},{“x”:126.97273903732325,“y”:35.937885566595604},{“x”:126.97236899653333,“y”:35.93837553290734},{“x”:126.97163213399858,“y”:35.93806217907843},{“x”:126.97186798850188,“y”:35.937057348472976},{“x”:126.97165205413661,“y”:35.93658865118121},{“x”:126.97171869946737,“y”:35.93615944976684},{“x”:126.97176310965465,“y”:35.935928516606076}]

이러한 형태로 저장되어 있으며 위와 같은 형태의 폴리곤들을 배열형태로 받아서 지도위에 그려주고 있습니다.

폴리곤 한개 및 다수의 폴리곤 덩어리 에서 가운데를 찾아주는 카카오지도API 상의 함수가 존재하는지
혹은 별도의 처리를 통해서 가운데를 찾아주어야 될지 감이 잡히지 않습니다.

카카오지도API 에서 폴리곤의 중앙좌표를 반환하는 함수는 제공하지 않을것이라 생각되긴 합니다만…
이러한 경우에 보통 다른분들은 어떻게 중심좌표를 찾아내는지 아이디어 부탁 드립니다. ( _ _ )

해당 기능은 제공하지 않아 별도로 폴리곤 중심점을 구하는 알고리즘을 이용해서 값을 구해야 합니다.
아래 코드는 centeriod 알고리즘 중 하나로 참고해주시고
원하는 결과가 아니라면 다른 알고리즘을 찾아서 중심점을 구해주세요.

//points는 지도 좌표를 화면 좌표로 변경한 Point 배열입니다.
//point 좌표 변경은 아래 문서 참고해주세요. 
//https://apis.map.kakao.com/web/documentation/#MapProjection_containerPointFromCoords
function findCentroid (points) {
    let i, j, len, p1, p2, f, area, x, y;
    area = x = y = 0;

    for (i = 0, len = points.length, j = len - 1; i < len; j = i++) {
        p1 = points[i];
        p2 = points[j];

        f = p1.y * p2.x - p2.y * p1.x;
        x += (p1.x + p2.x) * f;
        y += (p1.y + p2.y) * f;
        area += f * 3;
    }

    return [x / area, y / area];
}
1개의 좋아요