如何按距离(以英里为单位)从 C# 中的给定纬度/经度对纬度/经度列表进行排序?
Posted
技术标签:
【中文标题】如何按距离(以英里为单位)从 C# 中的给定纬度/经度对纬度/经度列表进行排序?【英文标题】:How to sort a list of lat/long by distance (in miles) from a given lat/long in C#? 【发布时间】:2019-12-14 06:01:21 【问题描述】:我需要根据与用户当前纬度/经度的距离对经度/经度值列表进行排序。我还需要以英里为单位显示每个条目的距离。
我发现 this answer 很接近,但返回最近的纬度/经度条目而不是列表。另外,我不明白过去可以转换为英里的距离单位。
简而言之,我需要一个方法...
-
您提供当前的经纬度对和经纬度对列表
返回以英里为单位的经纬度对的排序列表
class Location
double Lat get; set;
double Long get; set;
double Distance get; set;
public List<Location> SortLocations(Location current, List<Location> locations)
// ???
【问题讨论】:
你能说说 lat , long 对,你想得到两个 lat long 之间的距离还是一个 lat 和 long 之间的距离? 【参考方案1】:您也许可以使用GeoCoordinate
,如此处所述:Calculating the distance between 2 points in c#
一旦你可以计算出距离,那么你就可以这样做:
public List<Location> SortLocations(Location current, List<Location> locations)
foreach (var location in locations)
location.Distance = CalculateDistance(current, location);
// Return the list sorted by distance
return locations.OrderBy(loc => loc.Distance);
如果您不想在locations
集合上设置Distance
属性,可以使用Select
:
return locationsWithDistance = locations.Select(
location => new Location
Lat = location.Lat,
Long = location.Long,
Distance = CalculateDistance(current, location)
).OrderBy(location => location.Distance);
【讨论】:
非常感谢!我从未听说过 GeoCoordinate,它很棒,因为它简化了代码并以米为单位返回距离(易于转换为英里)。然后按距离排序列表是完美的,我忽略了现在明显的方法(首先是距离,然后是距离排序)。我在我的代码中实现了这一切,效果很好。以上是关于如何按距离(以英里为单位)从 C# 中的给定纬度/经度对纬度/经度列表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章