从lat / long对列表中,我试图找到最近的lat / long对w.r.t到给定的Lat / Long。对于{42_-72,42,-75,43,-76}的前列表和给定点42,-71
点42,-72最接近42,-71,因此输出=> 42,-72
答案 0 :(得分:0)
我首先要创建一个可以获得两点之间距离的方法。如果我们在任何直角三角形中考虑a^2 + b^2 = c^2
,以及从点P1
到点P2
的距离是c
,那么我们可以使用此公式来获得它们之间的距离因为我们知道他们的X
和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;
}