我有带有纬度和经度坐标的点列表,我想从中输入一个点说 X。我需要帮助提出一种算法来确定最接近该点 x 的 3 个列表成员。
问问题
1835 次
1 回答
1
您基本上可以将其视为 3D 最近点问题。(我现在手头没有 Lat / Lon 到笛卡尔(x,y,z)的计算,但您可以使用 google 轻松找到它)。
public class LatLonPoint
{
public double Latitude { get; set; }
public double Longitude { get; set; }
public double X
{
get
{
.......
}
}
public double Y ....
public double Z .....
public double DistanceTo(LatLonPoint point)
{
double dX = point.X - X;
double dY = point.Y - Y;
double dZ = point.Z - Z;
return Math.Sqrt(dX * dX + dY * dY + dZ * dZ);
}
}
您的课程代码:
// Your list of points
private List<LatLonPoint> _points = new List<LatLonPoint>();
public LatLonPoint FindClosestPoint(LatLonPoint x)
{
var closestPoint = null;
double closestDistance = double.MaxValue;
foreach (var point in latLonList)
{
double distanceToPoint = point.DistanceTo(x);
if (distanceToPoint < closestDistance)
{
closestPoint = point;
closestDistance = distanceToPoint;
}
}
return closestPoint;
}
于 2012-07-06T07:31:10.310 回答