给定纬度/经度,从C#中的纬度/经度列表中找到最接近的纬度/经度对 [英] Given a lat/long, find the nearest lat/long pair from a list of lat/long in c#

查看:117
本文介绍了给定纬度/经度,从C#中的纬度/经度列表中找到最接近的纬度/经度对的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从经纬度对的列表中找到与给定纬度/经度最接近的经纬度对.对于{42_-72,42,-75,43,-76}和给定点42-71

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

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

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

推荐答案

我首先创建一个可以获取两点之间距离的方法.如果我们认为在任何直角三角形a^2 + b^2 = c^2中,并且从点P1到点P2的距离为c,则可以使用此公式获取两点之间的距离,因为我们知道它们的Y坐标.距离aP2.XP1.X之间的差,距离bP2.YP1.Y之间的差:

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

这篇关于给定纬度/经度,从C#中的纬度/经度列表中找到最接近的纬度/经度对的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆