c#按坐标距离排序

时间:2018-05-23 10:07:45

标签: c# linq coordinates

我正在尝试找出如何获得最接近给定坐标的可能线。

一条线是LatLng类型的坐标数组。 LatLng有两个属性Latitude和Longitude,以及一个计算从当前LatLng到另一个传入值的距离的方法。我的行列表如下所示:

IEnumerable<LatLng[]> lines.

给出LatLng坐标,如何找到最接近坐标的可能线。

我试过了:

lines.OrderBy(line => line.Select(x => x.Distance(coordinate))).First();

我收到错误“至少有一个对象必须实现IComparable。”我知道LatLng并没有实现这一点,但我并不想对此进行比较。我试图按距离排序,然后选择最近的。

1 个答案:

答案 0 :(得分:2)

由于你的LatLng类的嵌套可枚举,你需要从lambda的内部返回一个数值,因为它似乎是你试图命令外部列表按内部列表中最近项的距离,这应该完成工作:

var orderedList = lines.OrderBy(line => 
    line.Select(x => 
        x.Distance(coordinate))
        .Min());

事实上,您可以通过删除Select并将lambda放在Min中来简化此操作:

var orderedList = lines.OrderBy(line => 
    line.Min(x => x.Distance(coordinate)));