首页 > 解决方案 > 我有一个用户输入坐标的列表,我如何计算尽可能接近所有坐标的点?

问题描述

我之前使用下面的代码来计算质心,但是当有很多点彼此靠近时,质心会被拉到那个方向,从而使从坐标到计算点的距离不太相等。如何计算与所有坐标的中点距离最短的坐标?

$.each( routeStart, function(i, routeCoords){
      centroidx += parseFloat(routeCoords[0]);
      centroidy += parseFloat(routeCoords[1]);
    });
    endpoint = ol.proj.fromLonLat([(centroidx / routeStart.length), (centroidy / routeStart.length)])

标签: javascriptmathgeometrycoordinates

解决方案


您正在找到给定分数的平均值。相反,我认为您正在寻找的是所有绝对最大值和最小值的平均值。

例如:

var points = [
    { x: 6, y: 1},
    { x: 3, y: 4},
    { x: 7, y: 8},
    { x: -4, y:-10},
    { x: -5, y:-11},
    { x: -5, y:-10}
  ]; 
var maxX, minX, maxY, minY;
points.forEach(point => {
    if(maxX === undefined || maxX < point.x) {
        maxX = point.x
    }
    if(minX === undefined || minX > point.x) {
        minX = point.x
    }
    if(maxY === undefined || maxY < point.y) {
        maxY = point.y
    }
    if(minY === undefined || minY > point.y) {
        minY = point.y
    }
});
var centerPoint = { 
    x: ((maxX + minX) / 2),
    y: ((maxY + minY) / 2)
};
console.log("Center point: ", centerPoint);

要对此进行测试,您可以运行上面的代码,然后将以下内容添加到点列表中。这不应该改变中心点。

{ x: -5, y:-10},
{ x: -5, y:-10},
{ x: -5, y:-10},

推荐阅读