给定纬度/经度,从C#中的纬度/经度列表中找到最接近的纬度/经度对 [英] Given a lat/long, find the nearest lat/long pair from a list of lat/long in 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
坐标.距离a
是P2.X
和P1.X
之间的差,距离b
是P2.Y
和P1.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屋!