给定lat / long,从c#中的lat / long列表中找到最近的lat / long对

时间:2017-11-16 23:45:04

标签: c# geolocation

从lat / long对列表中,我试图找到最近的lat / long对w.r.t到给定的Lat / Long。对于{42_-72,42,-75,43,-76}的前列表和给定点42,-71

点42,-72最接近42,-71,因此输出=> 42,-72

1 个答案:

答案 0 :(得分:0)

我首先要创建一个可以获得两点之间距离的方法。如果我们在任何直角三角形中考虑a^2 + b^2 = c^2,以及从点P1到点P2的距离是c,那么我们可以使用此公式来获得它们之间的距离因为我们知道他们的XY坐标,所以有两点。距离aP2.XP1.X之间的差异,距离bP2.YP1.Y之间的差异:

private static double GetDistance(Point a, Point b)
{
    return Math.Sqrt(Math.Pow(b.X - a.X, 2) + Math.Pow(b.Y - a.Y, 2));
}

然后我们可以创建一个方法,该方法接收目标点和候选点列表,并返回距离目标最短距离的候选者:

private static Point GetClosestPoint(Point target, List<Point> candidates)
{
    if (candidates == null) throw new ArgumentNullException(nameof(candidates));
    if (!candidates.Any()) throw new ArgumentException("The candidates list is empty.");

    var minDistance = double.MaxValue;
    var closestPoint = new Point();

    foreach (var candidate in candidates)
    {
        var distance = GetDistance(target, candidate);
        if (distance > minDistance) continue;
        minDistance = distance;
        closestPoint = candidate;
    }

    return closestPoint;
}