给定一个纬度/经度,从 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
坐标。距离a
是P2.X
和P1.X
的差,距离b
是P2.Y
和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));
然后我们可以创建一个方法,接收一个目标点和一个候选点列表,并返回距离目标最近的候选点:
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# 中的经度/经度列表中找到最近的经度/经度对的主要内容,如果未能解决你的问题,请参考以下文章