给定一个纬度/经度,从 c# 中的经度/经度列表中找到最近的经度/经度对

Posted

技术标签:

【中文标题】给定一个纬度/经度,从 c# 中的经度/经度列表中找到最近的经度/经度对【英文标题】:Given a lat/long, find the nearest lat/long pair from a list of lat/long in c# 【发布时间】:2017-11-16 23:45:04 【问题描述】:

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

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

【问题讨论】:

您好!到目前为止你有什么代码,你有什么问题? 在平局的情况下要优先考虑纬度还是经度?还是你想同时退货? 在我看来,您可以将它们当作图上的点并计算从目标点到每个候选点的距离,然后返回距离最短的点。 你的List是什么类型的?它只是一个List<int> 还是某种对象? (如List<Point> 它是一个对象列表,依次保存纬度/经度值 【参考方案1】:

我将首先创建一个可以获取两点之间距离的方法。如果我们考虑在任何直角三角形中a^2 + b^2 = c^2,并且从点P1 到点P2 的距离是c,那么我们可以使用这个公式来获得两点之间的距离,因为我们知道它们的@987654325 @ 和 Y 坐标。距离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;

【讨论】:

以上是关于给定一个纬度/经度,从 c# 中的经度/经度列表中找到最近的经度/经度对的主要内容,如果未能解决你的问题,请参考以下文章

使用经度和纬度查找给定距离内的所有附近客户

如何从java中的列表中获取最近的纬度经度[重复]

从给定点和半径计算纬度和经度

C#查找一英里内的所有纬度和经度

如何找到给定纬度/经度以北 x 公里的纬度/经度?

如何从C#中的地址获取纬度和经度