Given a lat/long, find the nearest lat/long pair from a list of lat/long in c#

橙三吉。 提交于 2019-12-24 23:43:47

问题


From a List of lat/long pairs, I am trying to find nearest lat/long pair w.r.t to a given Lat/Long . For ex- List of {42_-72,42,-75,43,-76} and a given point 42,-71

The Point 42,-72 is the nearest to 42,-71, hence output => 42,-72.


回答1:


I would start by creating a method that can get the distance between two points. If we consider that in any right triangle, a^2 + b^2 = c^2, and the distance from point P1 to point P2 is c, then we can use this formula to get the distance between two points since we know their X and Y coordinates. The distance a is the difference between P2.X and P1.X, and the distance b is the difference between P2.Y and P1.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));
}

Then we can create a method that takes in a target point and a list of candidate points and returns the candidate which is the shortest distance from the target:

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;
}


来源:https://stackoverflow.com/questions/47341040/given-a-lat-long-find-the-nearest-lat-long-pair-from-a-list-of-lat-long-in-c-sh

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!