Find centerpoint of polygon in JavaScript

后端 未结 5 1190
余生分开走
余生分开走 2020-12-15 08:39

I have a \"place\" object from Google Maps which has a set of coordinates that represent a bounding box for a given location, say London. Each set of coordinates has a latit

5条回答
  •  眼角桃花
    2020-12-15 09:39

    This will get the centerpoint of any shape as an array [centerX, centerY]:

    var center = function (arr)
    {
        var minX, maxX, minY, maxY;
        for (var i = 0; i < arr.length; i++)
        {
            minX = (arr[i][0] < minX || minX == null) ? arr[i][0] : minX;
            maxX = (arr[i][0] > maxX || maxX == null) ? arr[i][0] : maxX;
            minY = (arr[i][1] < minY || minY == null) ? arr[i][1] : minY;
            maxY = (arr[i][1] > maxY || maxY == null) ? arr[i][1] : maxY;
        }
        return [(minX + maxX) / 2, (minY + maxY) / 2];
    }
    

    Another way:

    var center = function (arr)
    {
        var x = arr.map (function (a){ return a[0] });
        var y = arr.map (function (a){ return a[1] });
        var minX = Math.min.apply (null, x);
        var maxX = Math.max.apply (null, x);
        var minY = Math.min.apply (null, y);
        var maxY = Math.max.apply (null, y);
        return [(minX + maxX) / 2, (minY + maxY) / 2];
    }
    getCenter (coords);
    

    Alternatively if your browser supports ECMAScript 6, then you can use Arrow functions and Spread syntax as follows:

    var center = function (arr)
    {
        var x = arr.map (xy => xy[0]);
        var y = arr.map (xy => xy[1]);
        var cx = (Math.min (...x) + Math.max (...x)) / 2;
        var cy = (Math.min (...y) + Math.max (...y)) / 2;
        return [cx, cy];
    }
    

    jsfiddle

提交回复
热议问题