我正在尝试找出如何获得最接近给定坐标的可能线。
一条线是LatLng类型的坐标数组。 LatLng有两个属性Latitude和Longitude,以及一个计算从当前LatLng到另一个传入值的距离的方法。我的行列表如下所示:
IEnumerable<LatLng[]> lines.
给出LatLng坐标,如何找到最接近坐标的可能线。
我试过了:
lines.OrderBy(line => line.Select(x => x.Distance(coordinate))).First();
我收到错误“至少有一个对象必须实现IComparable。”我知道LatLng并没有实现这一点,但我并不想对此进行比较。我试图按距离排序,然后选择最近的。
答案 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)));